Cómo mostrar la dirección I2C en hexadecimal

7

El bus de comunicaciones I2C utiliza direccionamiento de 7 bits o 10 bits para direccionar dispositivos esclavos. Al tomar las direcciones de 7 bits más comunes, cada paquete enviado en el bus por el maestro comienza con una dirección de 7 bits seguida de un indicador de lectura o escritura de 1 bit (\ $ \ text {R} / \ overline {\ text { W}} \ $).

LamayoríadelashojasdedatossoloproporcionanladirecciónI2Cparasudispositivoennotaciónbinariaocomobitsenlosdiagramasdetiempo(connotasparalosbitsdedirecciónconfigurables),quesoninequívocas,yaquemuestransieteuochobitsparaquepuedasabersi\$\text{R}/\overline{\text{W}}\$bitestáincluido.Estopareceseguirla especificación NXP I2C oficial .

El problema surge cuando se intenta escribir la dirección en hexadecimal. Diferentes fuentes convierten la dirección de diferentes maneras:

  1. Convierta la dirección de 7 bits a un valor hexadecimal en el rango 0x00 a 0x7F
  2. Incluya el bit \ $ \ text {R} / \ overline {\ text {W}} \ $ como el LSB y proporcione dos direcciones, una para leer y otra para escribir en el rango 0x00 a 0xFF

Estas dos opciones no siempre son distinguibles.

Claramente, usar la notación binaria es mejor, ya que te da una dirección inequívoca, sin embargo, esto no siempre es posible. Un caso notable es en C / C ++ donde hay no una forma particularmente estándar de escribir números binarios . Esto me lleva al problema que tengo donde la especificación de constantes para dispositivos en el circuito es ambigua.

Por lo tanto, al elegir un estándar para nuestros esquemas, documentación y código (C ++), tenemos que elegir de una manera u otra. Eso lleva a mi pregunta:

¿Existe una forma dominante de mostrar una dirección I2C en notación hexadecimal, o ambas se usan comúnmente?

    
pregunta Xcodo

2 respuestas

3

Sé lo que quieres decir. He visto estas ambigüedades en la documentación también. Sin embargo, eso no lo hace correcto.

Personalmente, solo comunico la dirección como un valor de 7 bits, ya sea en binario (0-1111111), hex (0-7F), decimal (0-127) o algún otro esquema. El bit R / W NO es parte de la dirección. Esas y la dirección son dos campos separados que están agrupados en el mismo byte.

Desafortunadamente, a pesar de que la interpretación de la dirección de 7 bits es correcta y parece ser la más común, existe una gran cantidad de documentación errónea. Esto significa que no puede contar con la siguiente hoja de datos que lea para hacerlo de una manera u otra. Al leer la documentación, este es un problema que debe conocer y tener mucho cuidado para ver cómo se presenta exactamente la dirección. Hasta ahora no he encontrado una hoja de datos en la que esto no pueda resolverse finalmente.

Al escribir su propia documentación, haga un favor al resto del mundo y exprese la "dirección" como un valor de 7 bits. Si desea mostrarlo con el bit R / W, llámelo "byte de dirección" o algo para aclararlo.

    
respondido por el Olin Lathrop
0

En mi experiencia, la forma más común de expresar una dirección I2C es usar la forma de 7 bits en hexadecimal.

Para garantizar que no haya ambigüedad, sea coherente:

  • En tu código I2C, asegúrate de que cada función I2C tome la dirección de 7 bits como un argumento y no la dirección de 8 bits.

  • En su documentación, siempre refiérase a la dirección como la dirección de 7 bits.

Nota: Me preguntaba qué quería decir con binario por ser menos ambiguo y me di cuenta de que con binario puede optar por rellenar con ceros para dar un número de 7 u 8 dígitos, y así distinguir entre ellos. ¡Inteligente! Sin embargo, me pregunto si las personas notarán un dígito menos, así que probablemente lo mejor sea ser explícito.

    
respondido por el geometrikal

Lea otras preguntas en las etiquetas