¿Es mejor hacer varias solicitudes pequeñas de i2c o una más grande?

1

Tengo cuatro registros en mi esclavo (un arduino)

0x00 - device id
0x01 - button state (four buttons)
0x02 - led state (four buttons)
0x03 - led mode (how the leds react to button presses if at all)

Actualmente, para obtener un valor fuera del esclavo, emito una escritura con una dirección. Esta dirección se almacena en un puntero en el esclavo y luego, cuando llega la próxima lectura, devuelvo los datos en el registro en esa dirección de puntero.

Básicamente, en la dirección 0x48

W 0x48 0x01
R 0x48        ; button state at 0x01
W 0x48 0x02
R 0x48        ; led state at 0x02

Y hago esto una y otra vez para verificar los cambios de estado. No estoy realmente seguro de por qué lo hice de esta manera, algunas hojas de datos o publicaciones del blog me guían en esta dirección, pero ahora lo estoy cuestionando. Ahora estoy pensando que debería saltarme las escrituras y devolver todos los valores de registro en cada lectura. Así que una lectura devolvería cuatro bytes en este ejemplo en lugar de uno.

¿Esto es mejor? Parece menos propenso a errores, pero no estoy seguro de qué costos están asociados con la devolución de múltiples bytes, etc.

    
pregunta Ryan Detzel

1 respuesta

2

Si cuenta los bytes que van y vienen:

  

W 0x48 0x01, R 0x48 (estado del botón + atrás): 4 bytes

     

W 0x48 0x02, R 0x48 (+ estado de led en 0x02): otros 4 bytes

... para obtener 2 bytes el bus usa 8 bytes. Entonces, para obtener 4 bytes, el bus utilizará 16. Definitivamente, una sola lectura - 5 bytes - ¡es una mejor opción!

    
respondido por el linuxfan

Lea otras preguntas en las etiquetas