sincronización I2C multihilo

0

Estoy utilizando una placa ESP32 para comunicarme con un LCD y un expansor de E / S utilizando un bus I2C. Estoy ejecutando un código basado en FreeRTOS.

Estoy usando 2 subprocesos separados para la pantalla LCD y el expansor de E / S para acceder simultáneamente a ellos. Estoy tratando de usar un mutex para implementar I2C seguro para subprocesos. ¿Necesito instalar y eliminar los controladores I2C (básicamente, establecer la dirección de esclavo) dentro de cada exclusión mutua, cada vez que ingreso un hilo, ya que son 2 direcciones de esclavo diferentes?

¿Hay una mejor manera de realizar una comunicación i2c concurrente?

Gracias

    
pregunta Rohit Garg

1 respuesta

5

La mejor manera sería implementar un subproceso de trabajo I²C que tenga un fifo con varias transacciones. Cada transacción es una matriz de varias transferencias, cada una con una dirección de dispositivo (incluida R / W), el número de bytes para escribir / leer y un puntero a un búfer de datos. El hilo lee dicha transacción y emite condiciones de inicio (y de inicio repetido) para cada transferencia, realiza la transferencia, la (s) siguiente (s) transferencia (es), finalmente detiene la condición. Esto se puede implementar en aproximadamente 50 líneas cortas de código C, incluidas las definiciones de tipo.

    
respondido por el Janka

Lea otras preguntas en las etiquetas