Estoy experimentando algunos problemas al sondear un bus I2C problemático en el osciloscopio.
Queremos interconectar varios TLV493D-A1B6, con un STM32L4 (estamos trabajando también en STM32F4 y tenemos los mismos problemas).
El STM32L4 tiene 4 buses I2C FM+ (1Mbit/s). Queremos utilizar los 4 de ellos con el fin de comunicarse con un total de 12-16 sensores, por lo tanto 3-4 sensores por bus.
Conseguimos 4 sensores en el mismo bus así como tener 1 sensor en cada uno de los 4 buses.
Sin embargo, no podemos interconectar más sensores (es decir, 4 sensores en 4 bus o incluso 1 sensor en 3 bus y 2 sensores en el 4º bus). Algunos buses arrancan y siguen funcionando, otros no arrancan, algunos arrancan y se paran después de un par de segundos, siendo estos comportamientos aleatorios.
Mientras sondeaba el bus en el osciloscopio noté lo que parece un fuerte zumbido cuando SCL (o SDA) pasa de ALTO a BAJO y me pregunto si puede ser la fuente del problema. Aquí se puede ver este timbre en la línea SCL :
Como puedes notar, el timbre parece ser menos importante en la segunda foto. Ha sido tomada al día siguiente de la primera, en una habitación separada (toma diferente para el osciloscopio) y mientras que la primera foto muestra la señal con un sensor en el bus, la segunda muestra la señal con 3 sensores en el bus.
Información sobre el bus I2C:
-
Frecuencia : 1 Mbit/s
-
Capacitancia : se ha determinado la capacitancia del bus midiendo el tiempo de subida de las señales. Se ha determinado que un bus tiene una capacitancia que oscila entre 50 pF para un sensor y 100 pF para 3 sensores.
-
Resistencias de pull-up : 1,2 kOhms (se han probado otros valores, desde 600 Ohms hasta 2,2 kOhms. Bajar el valor parece mejorar un poco pero se ha comprobado la sincronización y 1,2k parece correcto).
-
Terminación : Se han utilizado resistencias en serie de 33 Ohm en cada línea.
-
Fuente de alimentación: se han probado varios esquemas de alimentación para los sensores, incluida una fuente de alimentación de banco aislada o la misma fuente de alimentación que la MCU.
-
Las líneas I2C discurren a través de cables relativamente cortos y de la placa de pan. Se ha comprobado la capacitancia y aparentemente no es el origen de nuestro problema.
No soy el responsable del firmware pero sé que estamos usando DMA en el MCU para tener 4 I2C FM+ funcionando al mismo tiempo.
Algunas ideas que teníamos pero no podemos aclarar :
- El creciente número de sensores es responsable de un uso excesivo de la fuente de alimentación.
- El timbre se debe a un mal sondeo y no se produce cuando no se sondean las señales. Se ha observado que sondear la señal suele dar peores resultados.
¿Alguien ha experimentado ya un comportamiento similar con I2C y/o tiene alguna idea para mejorar nuestra configuración?
De nuevo, lo que me suena extraño es que la configuración funciona con 4 sensores en 1 bus, funciona igual de bien con 4 sensores en 4 buses diferentes pero nos quedamos atascados cuando intentamos ir más allá, siendo el objetivo 12-16 sensores en los 4 buses.
PS : No puedo publicar un esquema de nuestra configuración en este momento, pero voy a editar mi post tan pronto como pueda.