congelación I2C / TWI con SDA bloqueada en BAJO

0

En mi proyecto, he conectado varias placas de ruptura de sensores a un Arduino-Pro-Mini que funciona a 3.3V y 8Mhz como sigue en una pcb fabricada

Así es como se ve el proto-pcb:

Verá que todos los componentes están en una PCB, excepto el acelerómetro, que es una placa de conexión conectada a la PCB principal a través de un cable de 1 pie

Estoy usando GPIOs para alimentar las placas de ruptura individuales y extraer las líneas SDA SCL, porque antes de diseñar las PCB, pensé que esto me ayudaría a ahorrar energía permitiéndome apagar los sensores individuales cuando no estaban en uso al alternar los pines GPIO. Después de saber que alternar los pines GPIO podría dañar mis líneas i2c de una discusión here Decidí mantener todos los GPIOs permanentemente altos y usar los modos de apagado interno de todos los desgloses individuales para ahorrar energía. Pude haber modificado mis diseños y hacer funcionar todos los tableros con Vcc, pero como todo funcionaba bien y, lo que es más importante, 30 de mis pcbs ya habían llegado de la casa de la fábrica y el cliente estaba buscando mi vida para el proyecto piloto. Decidí seguir adelante con ello.

Pero luego de una semana de instalar 15 de estos pcbs en un gabinete IP65 en un ambiente altamente húmedo, 10 de los 15 pcbs dejaron de transmitir datos. Tras la inspección, descubrí que había signos de depósitos de humedad dentro de todas las cajas y en 4 de las PCB, las líneas i2c estaban bloqueadas.

Al analizar la señal en un osciloscopio, parecía que la línea SDA y SCL estaban bien al principio, pero tan pronto como el maestro intenta escribir en la línea: 1) SDA va de ALTO a BAJO y se congela posteriormente 2) SCL se inicia y luego continúa

Así es como SDA (rojo, canal 1) y SCL (amarillo, canal 2) miran una base de tiempo de 1us: LacapturaDSOrealparaestosepuedever aquí

Donde, así es como deben verse normalmente: lacapturaDSOrealparaestoesno.1enloscomentariosacontinuación...

Acercándonosunpocoaunabasedetiempode10us,(sda-sclen10usenunpcbdañado) lacapturaDSOrealparaestoesno.2enloscomentariosacontinuación...

whereas,(seesperaquesda-sclen10usenunpcbenfuncionamiento) la captura DSO real para esto es no. 3 en los comentarios a continuación ...

6 de los 10 pcbs que tenían depósitos de humedad en el interior y habían dejado de transmitir datos no tuvieron problemas y parecían funcionar bien cuando intenté depurarlos. Supongo que estaban en un área de baja señal y, por lo tanto, no pudieron registrarse en la red porque la antena no es muy efectiva de todos modos.

De los otros 4 pcbs que tenían bloqueadas sus líneas i2c, 2 de los pcbs empezaron a funcionar normalmente tan pronto como desoldé la placa de ruptura RTC y conecté todas las tablillas de ruptura restantes y las extensiones sda / scl directamente a la Línea Vcc en lugar de las GPIOs. No hubo problemas con los desgloses de RTC o el voltaje en los pines GPIO.

En uno de los PCB, el pin SCL del acelerómetro parecía estar frito, ya que estaba tirando de toda la línea hacia abajo. No fue un cortocircuito ni nada, pero había algunos depósitos blancos en los pines del IC principal.

Estaría agradecido si alguien pudiera arrojar algo de luz sobre lo que podría estar bloqueando la línea i2c - SDA y por qué el desoldar el RTC y la migración de GPIO a Vcc solucionó este problema. ¿Se resolvió el problema o solo es temporal?

¿Es posible que debido a la forma en que se han utilizado los GPIO para alimentar las placas de separación, las clavijas SDA / SCL de una de las placas de separación podrían haberse dañado?

    
pregunta designDemon

1 respuesta

0

Está bien, a juzgar por sus tomas de alcance:

  • Lo que solía tener era el pullup débil estándar entre SDA / SCL y 3.3V.
  • Lo que tienes ahora es un corto en SDA a 2V, y un pullup muy, muy fuerte en SCL a 2V.

Yo diría que los RTC SDA y SCL IOs se acortaron al suministro. El suministro fue arrastrado a ~ 2V por el corto. (Supongo que el GPIO que estaba usando para el funcionamiento normal de Vin se recuperó después de haber eliminado el RTC).

En cuanto a si se repetirá, no puedo decir. La humedad en una tabla nunca es algo bueno. Podría terminar cortocircuitando cualquier cosa y darle una variedad de resultados extraños.

Discúlpeme mientras recuerdo un momento ... cuando era un niño inocente recién salido de la universidad, tomé varias semanas de datos, solo para encontrar que todo era inútil porque mi junta directiva se había enfriado. Todo funcionó hasta el punto en que no noté nada hasta que estuve analizando los datos. Mi hora de subida, de caída y de jitter se habían ido al infierno.

    
respondido por el Annie

Lea otras preguntas en las etiquetas