Tengo dudas relacionadas con el modo I2C de 10 bits para varias transacciones con inicio repetido:
Me gustaría saber cómo debe diseñarse un maestro / esclavo i2c para que admita el direccionamiento de 10 bits para múltiples transacciones con inicio repetido (por ejemplo, para cambiar la dirección de la transferencia) entre transacciones.
A continuación se presenta el escenario:
inicio + lectura desde un esclavo de diez bits + inicio repetido + escritura en un esclavo de diez bits + detención
Según el protocolo I2C,
-
El transmisor maestro transmite al receptor esclavo con un esclavo de 10 bits. dirección. Cuando una dirección de 10 bits sigue una condición de INICIO, cada esclavo Compara los primeros siete bits del primer byte del esclavo. Dirección (1111 0XX) con su propia dirección y prueba si el octavo bit (bit de dirección R / W) es 0. Es posible que más de una El dispositivo encontrará una coincidencia y generará un reconocimiento (A1). Todos los esclavos que encontraron una coincidencia compararán los ocho bits de la segundo byte de la dirección del esclavo (XXXXXXXX) con su propia direcciones, pero solo un esclavo encontrará una coincidencia y generará un reconocimiento (A2). El esclavo correspondiente permanecerá dirigido por El maestro hasta que reciba una condición de parada (P) o una repetida Condición de inicio (Sr) seguida de una dirección de esclavo diferente.
-
El receptor maestro lee el transmisor esclavo con una dirección de esclavo de 10 bits. La dirección de transferencia se cambia después del segundo bit R / W. Hasta y
Incluyendo el bit de confirmación A2, el procedimiento es el Igual a la descrita para un transmisor maestro que trata una esclavo-receptor. Después de la repetida condición de INICIO (Sr), una coincidencia El esclavo recuerda que fue abordado antes. Este esclavo comprueba si los primeros siete bits del primer byte de la dirección del esclavo los siguientes Sr son los mismos que eran después de la condición de INICIO (S), y prueba si el octavo bit (R / W) es 1. Si hay una coincidencia, el El esclavo considera que ha sido abordado como un transmisor y genera reconocimiento A3. El esclavo-transmisor permanece dirigido hasta que reciba una condición de PARADA (P) o hasta que reciba otra Condición repetida de ARRANQUE (Sr) seguida de una dirección de esclavo diferente. Después de una condición de ARRANQUE repetida (Sr), todos los demás dispositivos esclavos También comparará los primeros siete bits del primer byte del esclavo. Dirección (1111 0XX) con sus propias direcciones y prueba la octava (R / W) poco. Sin embargo, ninguno de ellos se abordará porque R / W = 1 (para Dispositivos de 10 bits) , o la dirección del esclavo 1111 0XX (para dispositivos de 7 bits) no coincide.
Desde el escenario que mencioné anteriormente, la primera transacción (lectura) se puede implementar como se menciona en la especificación. Una vez que haya un inicio repetido en el bus para la segunda transacción, el maestro debe poner (11110xx0) para la segunda transacción, es decir, la escritura maestra. Pero puede haber muchos dispositivos en el bus con los mismos 2 bits MSB que lo reconocen. ¿Cómo se puede manejar este escenario?
También quería saber cómo realizar una escritura seguida de una transacción de lectura con el inicio repetido para el mismo esclavo de diez bits ?? (después del inicio repetido (que viene después de la primera transacción), se supone que debemos enviar los 3 bytes de dirección o solo el byte de dirección 11110xx1 es suficiente).
Gracias de antemano.