SDA y SCL para I2C siempre son bajos

Diseñé una placa PCB con algunos sensores ( giroscopios , acelerómetros , etc.) usando el protocolo I2C para comunicarse. Sin embargo, cuando uso un Arduino UNO como maestro, no puedo ver la forma de onda tanto del bus SDA como del bus SCL. Permanecen estáticos a ~400 mV cuando se miden con un osciloscopio. Cuando uso una placa diferente (como esta ) con el mismo equipo de prueba, puedo ver claramente la forma de onda que producen SDA y SCL.

Por lo general, significa que algo está en cortocircuito, pero no vi ningún problema cuando usé un multímetro para verificar la continuidad de todas las vías para SCL, SDA, VDD y GND. La resistencia entre SCL/SDA y GND es ~1M Ohm.

También podría ser que falten las resistencias pull-up en el bus I2C, pero usé una resistencia pull-up de 4.7kOhm para cada bus I2C. También traté de bajar la resistencia conectando un potenciómetro en paralelo. El voltaje de SCL/SDA aumenta a medida que disminuye la resistencia, pero no hay ninguna forma de onda.

En realidad, hay 3 líneas I2C en la placa para evitar conflictos de direcciones I2C, y ninguna de ellas funciona. La línea más simple solo contiene un giroscopio y una brújula electrónica. Los esquemas están a continuación:giroscopio eBrújula

Puede encontrar los esquemas completos de EAGLE y los archivos de la placa aquí .

Parece que NO tienes resistencias pull-up. Mida la resistencia entre SDA y SCL y VDD. Luego, asegúrese de que VDD esté encendido, cuando el circuito esté ENCENDIDO. Deberían ir alto.
Es más probable que sea un problema de software.
Si conectó 4.7k Ohm, la resistencia entre SCL/SDA a GND probablemente sea inferior a 1 Mega Ohm. Probablemente, también necesite medir la resistencia entre SCL/SDA y VCC.
La resistencia entre SCL/SDA y VDD es de hecho 4,7 kOhm como se esperaba (medida con un multímetro). VDD definitivamente está alimentado: utilicé un LED en la placa para verificarlo. Tampoco creo que sea un problema de software. Ya probé diferentes programas básicos para establecer la comunicación I2C. Ninguno de ellos funcionó en mi tablero, pero funcionan en otros tableros.
Publique los esquemas para que podamos ver si el problema está ahí, y tal vez una imagen de la PCB terminada con componentes (como el chip montado en la orientación incorrecta).
Si es posible, desconecte los esclavos y vea si las líneas aumentan. Como alternativa, verifique el encendido de los esclavos. ¿Esquemático? ¿Dispositivo esclavo? ¿Hojas de datos? Mida la resistencia entre SCL y SDA.
El esquema que ha agregado no muestra resistencias pull-up y no está completo. Publique el esquema completo de sus conexiones de bus I2C.
¡Gracias por todos los comentarios! He agregado los esquemas de los dos dispositivos en una línea I2C y los archivos EAGLE. Además, la resistencia entre SCL y SDA es de 9.4kOhm, ¿es normal? El tablero solo contiene esclavos. Todos los sensores están alimentados. Para desconectar esclavos, tendría que desconectar toda la placa
Realmente no hay ninguna resistencia "normal" para las resistencias pull-up I2C. Los valores de resistencia pull-up apropiados dependen de la capacitancia del bus, es decir, los pull-ups no deben ser tan fuertes que el maestro no pueda reducir el bus, ni demasiado débiles para que el bus I2C no tenga tiempo de subir. antes del siguiente pulso. Consulte esta nota de la aplicación para saber cómo calcular una resistencia pull-up correcta: e2e.ti.com/cfs-file/__key/…
su resistencia entre SDA y SCL es correcta: 4,7 k de SCL a VDD, otros 4,7 k de VDD a SDA, hacen exactamente 9,4 k. Como se recomienda aquí, desconecte todos los esclavos y vea si las líneas aumentan. Esto realmente parece un problema de software, como pines MCU mal configurados (no 100% seguro, por supuesto)
¿Dónde hiciste la placa? Hay muchos espacios reducidos en su PCB, por ejemplo. los rastros se acercan a 5 milésimas de pulgada de las vías, etc. Esto está fuera de la tolerancia de la mayoría de las fábricas de PCB baratas.
El esquema es difícil de verificar (sería mucho más claro usar el tipo de etiquetas de red en caja con la esquina puntiaguda tocando el cable)
La PCB también es difícil de verificar porque es muy densa en una esquina y todas las etiquetas de las partes se superponen. Pero una inspección superficial arrojó muchos problemas potenciales de autorización.
Y tiene 5 V en el pin VREF del ADC128D818 que excede su voltaje de suministro de 3,3 V.

Respuestas (1)

Hay varios problemas con su diseño.

Esquemático:

  • Los pines VDD_IO del LSM303 están conectados a tierra
  • Pin Vref de ADC128D818 conectado a 5V que excede el voltaje de suministro
  • posiblemente más, no he hecho una comprobación exhaustiva.

El primero de estos es probablemente suficiente para causar el problema.

TARJETA DE CIRCUITO IMPRESO:

  • Espacios libres muy ajustados de 5 mil en todas partes y rastros que se acercan mucho a las vías. Si bien podría funcionar si lo hace un buen fabricante, esto está buscando problemas y un cortocircuito accidental en alguna parte. Ni siquiera necesita espacios libres tan estrechos para esta placa, así que hágalo fácil para los fabulosos :)

  • Los rastros también son muy delgados; esto está bien para la señal, pero asegúrese de que sus rastros de energía, incluidos los de las tapas de desacoplamiento, sean un poco más gruesos. Los rastros de energía cortos pueden ser de 10 mil, trate de usar más para los largos.

Sugeriría primero ordenar su esquema. Utilice los símbolos de la fuente de alimentación (p. ej., +3V3, +5V, etc.) en lugar de las etiquetas de red para mayor claridad. Use el tipo de etiquetas de red encuadradas y puntiagudas en todo el texto (casilla de verificación "Xref" en el cuadro de diálogo de propiedades) y asegúrese de que sea obvio a qué cable están conectadas (no tenga la etiqueta desplazada del cable).

Una vez hecho esto, verifique todo en busca de posibles errores. Revise cada hoja de datos, abra la sección "configuración y función de los pines" y verifique el esquema pin por pin, verificando también los voltajes permitidos. Luego rehaga su PCB con espacios un poco más generosos y asegúrese de que no haya violaciones de DRC.

¡Muchas gracias! Ese error VDD_IO es enorme. Definitivamente revisaré dos veces los esquemas y rediseñaré el tablero. rediseñar el tablero. Por cierto, usé OSH-Park para la placa PCB. No estoy seguro si son buenos o no jaja
@ user295069 OSHpark está bien, por lo que probablemente la PCB salió bien, pero aún así es una buena idea diseñar su PCB con espacios libres más grandes. ¿Usaste el enrutador automático? Esta es una causa clásica de que las trazas se acerquen mucho a las vías cuando en realidad no es necesario.
Además, tenga cuidado con el editor de esquemas de Eagle: solo la punta de los pines crea una conexión. Entonces, por ejemplo, no está claro si el pin 18 de U4 realmente se conecta a C2 y si C2 realmente se conecta a tierra. Lo mejor es eliminar la ambigüedad espaciando los símbolos para que siempre haya al menos una unidad de cable verde entre los pines y las conexiones. Una buena manera de probar esto es mover la pieza; si los cables no se mueven con él, en realidad no estaban conectados, aunque se hayan superpuesto. Me atrapó un par de veces.
Acabo de comprobar y C2 no se conecta al pin 18: intente mover C2 y observe. Solo funciona porque etiquetó manualmente el cable en el pin 18 para que sea la misma red.
Demostración: imgur.com/a/w3L7K8B
¡Gracias por señalarlo! Definitivamente es ambiguo en los esquemas. Pero en realidad, dado que pin18 y pin15 se conectan a 3V3PDM_9, también se conectan a C2. Creo que mi próximo paso será desoldar el chip LSM303 en la línea I2C3 y luego ver si puedo obtener una forma de onda. ¿Qué opinas?
@ user295069, es posible que incluso pueda cortar el rastro antes de que llegue a la vía a tierra, retire la máscara de soldadura y suelde un cable a 3V3. Busque "pcb bodge";)
Por supuesto, es posible que los chips ya estén dañados, pero es posible que pueda obtener más información de este prototipo. También corte el rastro de 5V al Vref del ADC si puede.
¡Desoldé el LSM303 y el resto de los sensores funcionan! Muchas gracias