¿Qué dirección I2C debo elegir?

16

Ahora sé que para tener una dirección de I2C reservada para usted, debe pagar algo de dinero a las personas de I2C. Pero no quiero hacer esto.

Estoy pidiendo consejo sobre qué dirección debo elegir para mis MCU esclavas y maestras en mi proyecto. También habrá una EEPROM en el tablero. Así evitaré usar la dirección de la EEPROM. Planeo que el maestro se conecte a una amplia gama de sensores, incluidos giroscopios y acelerómetros, y quizás dispositivos de memoria adicionales. ¿Hay algún bloque de direcciones que deba evitar? Estaba pensando en usar 0x00 para el maestro y 0x01 para el esclavo, porque parece que rara vez se usan.

Otra pregunta: ¿sería una mala idea mezclar dispositivos de 10 bits y dispositivos de 7 bits en el mismo bus? Estaba considerando la posibilidad de que mis MCU se comuniquen con direccionamiento de 10 bits, pero solo usando direcciones de 7 bits para sensores.

Thomas O
fuente
1
@ W5VO. Sí, justo al lado de la tarjeta SD, las personas solo quieren $ 3,000.
Thomas O
1
@ThomasO, no necesita pagarles para obtener una dirección reservada, como un identificador, no tiene que pagar esto para hacer un dispositivo, están vendiendo un servicio. SDcard están haciendo cumplir su propiedad intelectual, pueden decirle que lo haga o elegir una tecnología diferente.
Kortuk
1
@ThomasO, estaba señalando que hay algo por lo que está pagando en este caso. Además, dos mil no es mucho en un producto real.
Kortuk
1
@Thomas O $ 3,000 es realmente muy razonable para los productos. Esta es una gota en el cubo para cualquier empresa que fabrica productos.
Kellenjb
2
@reemrevnivek, pero el titular de la patente decidió que preferiría exigir eso y hacer que el hardware abierto no permita su uso, y exija el pago de esta tarifa. como titular de la patente, tienen ese derecho. Hasta que las leyes cambien, me aseguraré de que esto esté claro. Me gustaría una revisión de patentes y derechos de autor, pero hasta que lo sean, así es como los ingenieros que tienen buenas ideas están protegidos y recompensados.
Kortuk

Respuestas:

13

Primero, no use 0x00 y 0x01, ¡están reservados! La Tabla 3 de la Especificación del bus I2C enumera las direcciones reservadas (y los motivos):

Slave addr R / W Descripción
 0000 000 0 Dirección de llamada general
 0000 000 1 byte de INICIO
 0000 001 X dirección CBUS
 0000 010 X Reservado para diferentes formatos de bus
 0000 011 X Reservado para propósitos futuros
 0000 1XX X código maestro en modo Hs
 1111 1XX 1 ID del dispositivo
 1111 0XX X direccionamiento esclavo de 10 bits

También debe mantenerse alejado de 0x00 porque eso no tiene transiciones de borde y podría ser una condición de error (y es difícil de depurar).

Aparte de eso, yo diría "Solo hazlo configurable". Si desea poder conectar una amplia variedad de sensores, puede pagar a NXP por una dirección o darle direcciones ajustables. Las modificaciones de software deberían ser obvias si desea distribuir el código fuente. Una opción de hardware para alternar uno o dos bits de la dirección seleccionada (puentes de soldadura en pines digitales) es barata y fácil, o una red en escalera de resistencias con puentes conectados a un pin A / D podría darle un control completo en el hardware.

Kevin Vermeer
fuente
1
+1 para dirección configurable. He visto esto en esclavos que tendrán varias de las mismas cosas en el mismo autobús.
Kellenjb
Sí, estaba pensando en direcciones configurables. Podría actualizarse cambiando la configuración desde el sistema de menús. Una cosa importante es que se deben agregar salvaguardas para evitar que alguien cambie la dirección y que la MCU maestra pierda la comunicación con el esclavo, por lo que es necesario establecer algún tipo de protocolo que restablezca las direcciones (por ejemplo, después de 5 segundos no hay comunicación, restablezca la dirección .)
Thomas O
16

Elija un dispositivo que no utilizará en su diseño y use su dirección I2C. Por ejemplo, si no necesitará un RTC, puede usar 0xA2 y 0xA3, que son utilizados por el NXP PCF8563 (y probablemente otros RTC).

stevenvh
fuente
Me gusta esto, muy inteligente.
NickHalden
Desafortunadamente, algunos dispositivos todavía chocan, por ejemplo, ST STCN75 y TI DAC8571 o Microchip 24AA025E48 y TI ADC121C027 .
Xcodo
10

Aquí hay una lista de direcciones asignadas a partir de 1999: http://www.nxp.com/acrobat_download2/selectionguides/SELGUIDE.PDF

No publican una lista completa con este razonamiento:

P: ¿Es posible recibir una lista de todas las direcciones esclavas I²C utilizadas hasta la fecha?

R: No. NXP Semiconductors no emite esta lista de todas las direcciones esclavas asignadas previamente, ya que esta es la única forma en que podemos garantizar que la lista se mantenga actualizada y que cada dirección asignada sea única. Si esta lista estuviera disponible, los licenciatarios del bus I²C comenzarían a seleccionar las direcciones de esclavos ellos mismos y la lista central pronto quedaría incompleta, lo que podría conducir a conflictos de direcciones. El principio establecido, comprobado que funciona bien, es que cada licenciatario envía una solicitud de dirección esclava a un solo contacto dentro de NXP Semiconductors, que luego asigna la dirección esclava en base a una sola lista maestra.

De http://www.nxp.com/products/interface_control/i2c/faq/

Ahora, si todo va a ser interno a su proyecto, no hay razón para que no pueda seleccionar cualquier dirección que desee, siempre que no entre en conflicto con nada que planee conectarse.

Kellenjb
fuente
Razonamiento extraño: al no tener una lista se aseguran de mantenerla actualizada ...: - /
Federico Russo
Razonamiento simple: quieren asegurarse de que cualquier persona que asigne ID tenga una lista verdaderamente actualizada; tener copias desactualizadas de la lista flotando socavaría ese objetivo.
supercat
1
@Federico Tienen una lista, simplemente no la publican, por lo que las personas se ven obligadas a revisarla para asegurarse de que la lista esté actualizada. Si se publicara la lista, habría toneladas de personas que elegirían la dirección no utilizada, entonces, ¿qué sucede cuando alguien reserva correctamente esa dirección?
Kellenjb
FWIW: SELGUIDE.PDF está en el enlace del
HiTechHiTouch
1

Como dice Kellenjb, no obtendrá una lista completa de direcciones de dispositivos esclavos.

Sin embargo, hay varias direcciones reservadas que no puede usar (0x00, por ejemplo, es la dirección de llamada general).

La lista esta aqui

La combinación de direccionamiento de 10 y 7 bits está bien siempre que los esclavos de 7 bits obedezcan el estándar I2C e ignoren las direcciones de 10 bits.

marca
fuente