Direccionamiento esclavo I2C con 7, 8 y 10 bits
A menudo hay mucha incertidumbre sobre qué direcciones esclavas deben utilizarse para comunicarse con un dispositivo esclavo I2C. Por desgracia, gran parte de esta confusión se debe a que los distintos proveedores siguen convenciones de direccionamiento esclavo diferentes.
El objetivo de este artículo es aclarar la norma de dirección esclava que utilizan todos los productos Total Phase y ayudar a los desarrolladores a determinar qué dirección esclava deben utilizar.
La especificación I2C de NXP (antes Philips) se especifica para varios esquemas de direccionamiento esclavo. El modo por defecto del bus I2C utiliza un direccionamiento de 7 bits. El direccionamiento de 10 bits se añadió posteriormente como ampliación del modo estándar.
direccionamiento de 7 bits
Con el direccionamiento de 7 bits, la dirección del esclavo se transmite en el primer byte tras la condición de inicio. Los primeros siete bits del byte incluyen la dirección del esclavo. El octavo bit es la bandera de lectura / escritura, donde 0 indica una escritura y 1 una lectura.
Direcciones reservadas
La especificación I2C ha reservado dos conjuntos de direcciones de 8 bits, 1111XXX y 0000XXX. Estas direcciones se utilizan para fines especiales. La siguiente tabla está tomada de las Especificaciones I2C (2000).
Dirección esclavo | Bit de lectura/escritura | Bit Descripción |
---|---|---|
000 0000 | 0 | Dirección de consulta general |
000 0000 | 1 | Byte de inicio (*1) |
000 0001 | X | Dirección CBUS (*2) |
000 0010 | X | Reservado para otro formato de bus(*3) |
000 0011 | X | Reservado para uso futuro |
000 01XX | X | Modo Hs Código maestro |
111 10XX | X | direccionamiento esclavo de 10 bits |
111 11XX | X | Reservado para uso futuro |
(*1) Ningún dispositivo puede acusar recibo al recibir el byte de INICIO.
(*2) La dirección CBUS se ha reservado para permitir la mezcla de dispositivos compatibles con CBUS y compatibles con el bus I2C en el mismo sistema. Los dispositivos compatibles con el bus I2C pueden no responder al recibir esta dirección.
(*3) La dirección reservada para otro formato de bus se incluye para mezclar I2C y otros protocolos. Sólo los dispositivos compatibles con el bus I2C que puedan trabajar con dichos formatos y protocolos pueden responder a esta dirección.
direcciones de 8 bits
Algunos proveedores proporcionan incorrectamente direcciones de 8 bits, que contienen el bit de lectura/escritura. Puedes saber si éste es el caso si se proporciona una dirección para escribir en la unidad esclava y otra para leer de la esclava. En este caso, utiliza sólo los siete bits superiores de la dirección.
Algunos proveedores ofrecen dos direcciones esclavas incorrectas de 8 bits para su unidad, una para escribir en la unidad y otra para leer de la unidad. Sin embargo, este número de 8 bits codifica la dirección esclava de 7 bits y el bit de lectura/escritura. Como los productos Total Phase utilizan un direccionamiento de 7 bits, es importante utilizar sólo los 7 bits superiores de la dirección como dirección esclava.
Otra forma de determinar si un fabricante utiliza direcciones de 8 bits en lugar de 7 bits es ver si la dirección del esclavo está dentro del intervalo correcto. Todas las direcciones de 7 bits deben ser mayores que 0x07 y menores que 0x78 (120). Si tu dirección esclava queda fuera de este rango, probablemente el vendedor ha especificado una dirección de 8 bits.
Rango de direcciones esclavas de 7 bits válidas. El rango de direcciones esclavas válidas de 7 bits está delimitado por dos bloques de direcciones reservadas en cada extremo del rango. Las direcciones esclavas válidas son mayores que 0x07 y menores que 0x78.
direccionamiento de 10 bits
Una de las razones por las que Total Phase decidió utilizar el direccionamiento de 7 bits en todos sus productos fue para garantizar que el direccionamiento de 10 bits pudiera manejarse correctamente. El direccionamiento de 10 bits se diseñó para ser compatible con el de 7 bits, lo que permite a los desarrolladores combinar dos tipos de dispositivos en un solo bus. Cuando se comunica con un dispositivo direccionado a 10 bits, se utiliza la dirección especialmente reservada para indicar si se está utilizando el direccionamiento a 10 bits.
direccionamiento de 10 bits. Con el direccionamiento de 10 bits, la dirección del esclavo se envía en los dos primeros bytes. El primer byte comienza con la dirección especial reservada 1111 0XX, que indica que se utiliza el direccionamiento de 10 bits. Los 10 bits de la dirección se codifican en los 2 últimos bits del primer byte y en los 8 bits completos del segundo byte. El 8º bit del primer byte contiene la bandera de lectura/escritura como en el direccionamiento de 7 bits.
Si se especifica una dirección de 10 bits al utilizar el adaptador host I2C / SPI Aardvark, el software se asegurará de que se envían los bits correctos. El programador no necesita tomar ninguna medida especial para enviar los datos de dirección correctos. El analizador de protocolos Beagle I2C / SPI detecta automáticamente las direcciones esclavas de 10 bits en los datos capturados y muestra la información correctamente