escritura ficticia I2C

1

Si desea leer desde el bus I 2 C, debe:

  1. Enviar condición de inicio
  2. Enviar dirección de esclavo de 7 bits con R / W siendo un '0' que indica una escritura
  3. Envía el número de registro desde donde deseas leer
  4. enviar de nuevo la condición de inicio
  5. Enviar la dirección del esclavo de 7 bits con R / W siendo un '1' que indica una lectura
  6. El esclavo envía datos al maestro y el maestro enviará un ACK después de cada byte
  7. Cuando haya terminado, el maestro envía una condición de detención

¿Por qué no se hace así?

  1. Enviar condición de inicio
  2. Enviar la dirección del esclavo de 7 bits con R / W siendo un '1' que indica una lectura
  3. Envía el número de registro desde donde deseas leer
  4. El esclavo envía datos al maestro y el maestro enviará un ACK después de cada byte
  5. Cuando haya terminado, el maestro envía una condición de detención

¿No sería esto más eficiente?

    
pregunta gilianzz

2 respuestas

4

Michael te dio la respuesta formal, que es cómo se define I2C. El problema práctico con su enfoque es que arregla la dirección de registro en 8 bytes. ¿Qué pasa si un esclavo

  • tiene un solo registro? Enviar 8 bits de dirección sería una pérdida de tiempo y una pérdida de circuitos en el esclavo.
  • ¿Tiene más de 255 registros?

Si abordas estos problemas, terminas con un protocolo que depende del tipo de esclavo. Eso complicaría las cosas considerablemente.

    
respondido por el Wouter van Ooijen
2

No se hace como usted propone porque una vez que se envía el byte de dirección del esclavo con R / W = 1 para READ, el bus está en modo de lectura para los datos del esclavo al maestro. Tratar de inyectar un byte de salida adicional en la secuencia con la dirección de registro no es una transferencia de modo de lectura, por lo que el protocolo de modo de bus está roto.

    
respondido por el Michael Karas

Lea otras preguntas en las etiquetas