problema de tierra I2C SCL

1

Estoy trabajando en la interconexión de 2 placas de desarrollo. Tengo control sobre la 1ª junta de desarrollo. La 2ª placa de desarrollo es de un proveedor externo. Mi tablero (tablero 1) tiene un pull up de 3.9K y el tablero del tercero proveedor (2do tablero) tiene un pullup de 1K.

El problema al que me enfrento es que cuando estas dos tarjetas se encienden por separado, se inician y se comportan correctamente, pero la placa 2 no se inicia cuando el bus está conectado. Tengo acceso a un analizador de protocolo I2C. Tanto el tablero 1 como el tablero 2 tienen tablas hijas acompañantes. Con el tablero x < = > hija x, los mensajes I2C y los niveles de voltaje están bien.

Cuando intenté conectar la placa 1 < = > tablero 2, tablero 2 no arranca. Me he asegurado de que el reloj esclavo esté deshabilitado en el tablero 1. El requisito es que el tablero 1 debe ser esclavo y el tablero 2 debe ser maestro.

Lo que he intentado hasta ahora: Con el I2C desconectado, encendí la placa 1 y verifiqué los niveles de SDA, SCL. Están a 3.3V. Tan pronto como conecto el conector I2C a la placa 2 (aún está apagado), SCL y SDA se bajan.

Ahora encendí la placa 2 utilizando la misma fuente de alimentación para garantizar una conexión a tierra común. La línea SDA pasa a nivel alto de inmediato, pero SCL permanece bajo y no hay actividad. La placa 2 no arranca en absoluto.

Tengo que atenerme a este orden de encendido, ya que la placa 2 envía un mensaje I2C solo una vez unos segundos después del encendido (confirmado usando la placa 2 < = > daughter 2 con analizador de protocolo).

No estoy seguro de cómo proceder aquí.

Cualquier ayuda es muy apreciada. ¡Gracias!

    
pregunta fastforward

1 respuesta

3

Problema:

  

Encendí la placa 1 [...] Tan pronto como conecto el conector I2C a la placa 2 (aún está apagado), SCL y SDA se bajan.

Este es un comportamiento completamente esperado. No puede conectar dispositivos con y sin energía al mismo bus I 2 , sin precauciones adicionales (o, a menos que se indique explícitamente que está respaldado por esa I 2 dispositivo C). En su caso, board 2 también puede comportarse mal ya que es probable que exceda la tensión máxima permitida conectada a un pin MCU sin alimentación en board 2 .

Esto se debe a que está efectivamente intentando encender la MCU en (% sin alimentación) board 2 a través de sus pines de bus I 2 , que reciben energía a través del impulso -up resistencias en (accionado) board 1 .

Solución:

Utilice uno de los varios métodos existentes de aislamiento de bus I 2 C entre board 1 y board 2 .

Ya que dice que su configuración le permite conectar el Gnd entre las dos placas, no veo un requisito para los métodos de aislamiento galvánico más costosos y complejos.

En su lugar, el simple circuito basado en MOSFET, a menudo se utiliza como un I 2 C de la palanca de cambio de nivel del antiguo Philips (ahora NXP) AppNote AN97055 . Usando el circuito simple en la sección 2.3 de la hoja de datos, conecte board 2 al lado V DD 1 del circuito:

[Aunquenosemuestraeneldiagramadelcircuitoanterior,Gnd(0V)tambiéndebeconectarseentrelosladosVDD1yVDD2.]

Usandoelcircuitoanterior,cuandoelladoVDD1(board2)notienealimentación,tampocorecibealimentaciónatravésdelasseñalesdelbusC2,inclusocuandoelotroladoVDD2(board1)delcircuitoestáalimentado.Porlotanto,detieneelproblemaexplicadoanteriormente,comosedescribeenesteextractodelanotadeaplicacióndePhilips:

Varios proveedores venden PCB con modificador de nivel I 2 con este simple circuito que usa MOSFET adecuados, si no los tiene usted mismo. Sin embargo, tenga en cuenta que tales PCB a menudo tienen resistencias pull-up instaladas. Como ya tiene instalados los pull-ups, debe eliminar cualquier resistencia de pull-up duplicada de donde sea más fácil (probablemente eliminándolos de la PCB adicional).     
respondido por el SamGibson

Lea otras preguntas en las etiquetas