El bus de comunicaciones I2C utiliza 7 bits o de 10 bits de direccionamiento para la dirección de los dispositivos esclavos. Tomando la más común de 7-bits de direcciones, cada paquete enviado en el autobús por el maestro comienza con un 7-bits de dirección seguida por una de 1 bit de lectura o escritura indicador (\$\text{R}/\overline{\text{W}}\$).
La mayoría de las hojas de datos de sólo dar la dirección I2C para su dispositivo o bien en notación binaria o como bits en los diagramas de temporización (con notas para configurables de los bits de la dirección), que son clara que cualquiera de las pantallas de siete u ocho bits de modo que usted puede saber si el \$\text{R}/\overline{\text{W}}\$ poco está incluido. Este parece seguir el oficial de NXP I2C especificaciones.
El problema viene cuando se intenta escribir la dirección en hexadecimal. Diferentes fuentes de convertir la dirección de diferentes maneras:
- Convertir los 7 bits de dirección a un valor hexadecimal en el rango
0x00
a0x7F
-
0b101 0011
hace0x53
- Ejemplos Robot Electrónica I2C tutorial, Linux i2cdetect herramienta, STM32 CPAL biblioteca, Arduino Alambre de la biblioteca
-
- Incluir el \$\text{R}/\overline{\text{W}}\$ poco como el LSB y dar dos direcciones, uno para leer y otro para escribir en el rango
0x00
a0xFF
-
0b101 0011
hace0xA6
para la escritura y0xA7
de la lectura - A veces, sólo la escritura de dirección (por ejemplo
0xA6
) se da - Ejemplos: 8051 Proyecto tutorial, STM32 HAL biblioteca (ejemplo de la confusión), PIC de Microchip ejemplos de código (CE119), Saleae Lógica analizador de protocolo
-
Estas dos opciones no siempre son distinguibles.
Claramente el uso de notación binaria es mejor ya que te da una clara dirección, sin embargo esto no es siempre posible. Un caso notable es en C/C++, donde no hay no una particular forma estándar de la escritura de los números binarios. Esto lleva a que el problema que estoy teniendo, donde la especificación de las constantes para los dispositivos en el circuito es ambiguo.
Así, en la elección de un estándar para nuestros esquemas, documentación y código (en C++) tenemos que escoger una u otra manera. Que lleva a mi pregunta:
Hay una posición dominante en la forma de mostrar un I2C dirección en notación hexadecimal, o son utilizados comúnmente?