línea de datos I2C que no tiene niveles de voltaje correctos

0

He estado trabajando en un proyecto con una placa de desarrollo EFM8UB1 y un periférico ATECC508 I2C. Todo funciona bien, pero tengo problemas con I2C cuando me mudo a un PCB.

Aquí hay un rastro del reloj

Aquíhayunrastrodedatos

Mialcancenoesmuybueno,peroobservequelosnivelesdevoltajeparalosdatossonincorrectos.Noescompletamentelalógicadeconducción0baja.

Aquíhayunextractodemiesquema:

Noestoysegurodequéhaceroquépodríaestarcausandoelproblema.¿Alguiensabedealgoquepodríaestarcausandoelproblema?

Hoja de datos del microcontrolador

I2C Peripherial Summary

** Actualización

Resulta que el problema se debía a que etiqueté incorrectamente los pines en una huella de PCB al principio del proyecto. Gracias por los comentarios y sugerencias.

    
pregunta Conor Patrick

3 respuestas

0

Tanto SCL como SDA funcionan como salidas de colector abierto (drenaje abierto). Dependiendo de la velocidad y del bus, las resistencias deben ser de 10k o menos (generalmente 4.7k, 2.2k funcionan bien).

El SDA de drenaje abierto permite utilizar algunas de las funciones más destacadas de I2C. Aparte de lo obvio, como el envío de datos de manera bidireccional, también hay un acuse de recibo de datos (cada octeto de los datos es confirmado por el lado receptor), la detección de esclavos (acuse de recibo de la dirección de esclavos) y el arbitraje de bus (cuando varios maestros intentan acceder a diferentes dispositivos esclavos, el dispositivo esclavo con la dirección más baja va primero).

Pero, ¿por qué hacer que el reloj también sea un coleccionista abierto? Bueno, una de las características menos conocidas (y menos utilizadas) es el estiramiento del reloj. Un dispositivo esclavo puede pausar una transmisión manteniendo baja la línea SCL. Eso detiene el reloj, pero no rompe la transmisión. El esclavo tiene tiempo para preparar una respuesta y libera el reloj cuando está listo. Lo curioso es que el estándar no define el límite de este atraco, por lo que, en teoría, el esclavo puede detener la transmisión indefinidamente.

    
respondido por el user68591
2

Las líneas I2C deben ser llevadas a Vcc con resistencias externas 2k2. El estado normal (cuando no hay comunicación) de SDA y SCL es alto (voltaje cerca del nivel de Vcc). Los puertos I2C en todos los dispositivos funcionan como drenajes abiertos (OD): el menú desplegable maestro desmonta y libera la línea SCL para enviar la señal de reloj, los esclavos y el dispositivo maestro SDA extraíble para enviar un '0' lógico, y su liberación para enviar un '1' lógico. Tu circuito debería verse así:

    
respondido por el Jakub Rakus
0

Resulta que el problema era que etiqueté incorrectamente los pines en una huella de PCB al principio del proyecto. SCL en el microcontrolador se conectó a un pin N / C y SDA se conectó a VCC. Esto explica por qué el pin SDA no pudo conducir completamente a GND mientras SCL era correcto.

Debería asegurarme de volver a verificar las huellas y las hojas de datos al hacer la transición de una placa de desarrollo a una PCB.

Es bueno considerar otras respuestas para la depuración de problemas de I2C.

    
respondido por el Conor Patrick

Lea otras preguntas en las etiquetas