¿Qué dirección I2C debo elegir?

15

Ahora sé que para tener una dirección I2C reservada para ti, tienes que pagar algo de dinero a la gente de I2C. Pero no quiero hacer esto.

Estoy pidiendo consejo sobre qué dirección debo elegir para mi MCU esclava y maestra en mi proyecto. También habrá una EEPROM en el tablero. Así que 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 bloques de direcciones de los que debo mantenerme alejado? Estaba pensando en usar solo 0x00 para el maestro y 0x01 para el esclavo, porque parece que rara vez se usan.

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

    
pregunta Thomas O

4 respuestas

11

Primero, no uses 0x00 y 0x01, ¡están reservados! La tabla 3 de Especificación de bus I2C enumera las direcciones reservadas (y los motivos) por qué):

Slave addr  R/W   Description
0000 000    0     General call address[1]
0000 000    1     START byte[2]
0000 001    X     CBUS address[3]
0000 010    X     Reserved for different bus format[4]
0000 011    X     Reserved for future purposes
0000 1XX    X     Hs-mode master code
1111 1XX    X     Reserved for future purposes
1111 0XX    X     10-bit slave addressing

También deberías alejarte de 0x00 porque no tiene transiciones de borde, y podría ser una condición de error (y es difícil de depurar).

Aparte de eso, diría "Solo configúralo". Si desea poder conectar una amplia variedad de sensores, entonces puede pagar NXP por una dirección o asignarle 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 su dirección seleccionada (soldar puentes en pines digitales) es barata y fácil, o una red de resistencias de escalera con puentes conectados a un pin A / D podría darle un control completo del hardware.

    
respondido por el Kevin Vermeer
16

Elija un dispositivo que no vaya a usar 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).

    
respondido por el stevenvh
10

Aquí hay una lista de direcciones asignadas desde 1999: enlace

No publican una lista completa con este razonamiento:

  

P: ¿Es posible recibir una lista de   todas las direcciones I²C-slave usadas hasta la fecha?

     

A: No. Los semiconductores NXP no emiten   Esta lista de todos los previamente asignados.   Direcciones de esclavos, ya que esta es la única   De esta manera podemos garantizar que la lista se mantiene arriba.   hasta la fecha y cada dirección asignada es   único. Si esta lista fuera hecha   disponible, I²C-bus licenciados haría   empezar a seleccionar direcciones de esclavos   ellos mismos y la lista central lo haría   Pronto quedará incompleto, lo que podría   conducir a abordar los conflictos. los   principio establecido, probado para trabajar   Bueno, es que cada licenciatario envía un   solicitud de dirección de esclavo a un solo   contacto dentro de NXP Semiconductors, quien   A continuación, asigna la dirección de esclavo basada   en una sola lista maestra.

Desde enlace

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

    
respondido por el Kellenjb
1

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

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

La lista está aquí

Mezclar direcciones 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.

    
respondido por el Mark

Lea otras preguntas en las etiquetas