En una red I2C, estoy usando un microcontrolador AVR (AtMega328p) como maestro y lo conecté a varios sensores como esclavos, como el TMP102, SI1145, MPU9250, entre otros. Todos estos sensores tienen pines para indicar interrupciones al microcontrolador.
Suponiendo que estas interrupciones nunca se produzcan a la vez, ¿tendría sentido la siguiente configuración de HW? :
- (asumiendo todos los sensores producidos en el borde descendente de las señales)
- ate los pines de interrupción directamente a la línea SCL
- configure una rutina de servicio de interrupción que reaccione ante el borde descendente de la SCL, habilítelo
- esperar un borde negativo en el SCL. En este punto, un sensor ha disparado un umbral
- deshabilita el ISR, se produce el sondeo I2C normal del sensor
El objetivo sería ahorrar espacio en el diseño de PCB y utilizar las pistas existentes.
Por supuesto, uno tendría que sondear todos los sensores para saber quién interrumpió tirando de SCL bajo.
Mi ejemplo usa SCL, pero ¿es la diferencia entre SCL y SDA en este caso? La comunicación I2C podría restablecerse / agotarse cuando la unidad uC reinicia la comunicación con los sensores.