9 votos

Cómo mostrar I2C dirección en hexadecimal

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}}\$).
7-bit communication from the I2C Bus Specification

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:

  1. Convertir los 7 bits de dirección a un valor hexadecimal en el rango 0x00 a 0x7F
  2. 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 a 0xFF

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?

3voto

RelaXNow Puntos 1164

Yo sé lo que quieres decir. He visto estas ambigüedades en la documentación. Eso no lo hace correcto, aunque.

Yo personalmente sólo pueden comunicarse a la dirección de 7 bits valor, ya sea en binario (0-1111111), hex (0-7F), decimal (0 a 127) o algún otro esquema. El R/W bits NO es parte de la dirección. Y la dirección son dos campos distintos que pasan a ser metidos en el mismo byte.

Por desgracia, aunque los 7 bits de la dirección de interpretación es la correcta y no parecen ser las más comunes, hay un montón de malas documentación por ahí. Esto significa que usted no puede contar en la próxima hoja de datos de leer a hacerlo de una manera o de la otra. Cuando la lectura de la documentación, esto es un problema que sólo tienes que ser consciente y ser muy cuidadoso para ver cómo exactamente la dirección que está siendo presentado. Hasta el momento no he venido a través de una hoja de datos donde esto no podría, eventualmente, ser descubierto.

Cuando la escritura de su propia documentación, por favor haga el resto del mundo un favor y expresar la "dirección" como una de las 7 bits de valor. Si desea mostrar con el R/W bits, llamada la "dirección de byte" o algo para hacer esto en claro.

0voto

meds Puntos 271

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

Para asegurar que no hay ambigüedad, ser coherente:

  • En su I2C código, asegúrese de que cada I2C función toma los 7 bits de dirección como un argumento y no el de 8 bits de dirección.

  • En la documentación se refieren siempre a la dirección como a los 7 bits de dirección.

Nota: yo me estaba preguntando lo que usted entiende por binario ser menos ambiguos y me di cuenta que era porque con el binario puede elegir para rellenar con ceros a dar un número con 7 u 8 dígitos, y así distinguir entre ellos. Inteligente! Me pregunto si la gente va a notar incluso con uno menos dígitos, aunque, por lo que probablemente la mejor manera de ser explícito.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X