I2C - Ciertos esclavos no tiran de las líneas por completo

0

Tengo una gran cantidad de placas desplegadas con un microcontrolador TI CC3200 y una variedad de sensores para una aplicación de monitoreo industrial. He estado teniendo un problema desde hace algún tiempo, en algunas de las placas, donde no se puede leer un sensor de temperatura infrarrojo, el TMP007 de TI. Esto incluye cualquier registro de ID de fabricante / dispositivo. Se comunican a través de I2C, y hay 10k pullups en ambas líneas.

He estado observando las líneas en un alcance, y descubrí que cuando se comunica con el TMP007, los voltajes solo se reducen aproximadamente a la mitad que cuando se comunican con algunos de los otros sensores I2C que funcionan. Sin embargo, parece que aún cumple con la especificación I2C, y el TMP007 parece ACK cuando escribo su registro de ID de fabricante.

Mi pregunta en concreto es si alguien ha tenido problemas similares antes en los que los diferentes dispositivos son llevados a diferentes niveles y las posibles causas que esto podría tener. Por ejemplo, ¿podría ser un problema con el hardware o podría ser que otro dispositivo I2C esté tratando de controlar las líneas al mismo tiempo?

Edit: Creo que Ali Chen ha señalado acertadamente un problema de falta de alimentación, apagar algunos de los otros sensores I2C cuando se lee desde el TMP007 parece haber resuelto el problema.

    
pregunta jramsay42

2 respuestas

0

Una opción fácil sería sustituir resistores de valor más alto (tal vez 22k). Si a uno de los dispositivos le resulta difícil tirar de la línea a un nivel bajo, podría hacerlo más fácil si la línea no estuviera tan fuertemente tirada por los pullups.

    
respondido por el Max Robinson
0

I2C tiene una idea muy relajada de lo que se puede recibir como una señal baja. Si un transmisor trata de explotar esto y no baja a los 0.5v que es fácilmente posible con cualquier controlador normal, podría equivocarse.

Este 'sloppy low' se explota en dispositivos que están opto-aislados. Se utiliza para evitar colgar el autobús. Si el dispositivo ve la línea baja, ¿se debe a que el bus se está agotando, por lo que debe repetirse en el dispositivo, o el dispositivo está bajando, en cuyo caso no debe conducir el bus? Esto no se puede hacer desde una máquina de estado en el dispositivo, ya que el bus podría bajar en cualquier momento. La solución que adoptan muchos dispositivos es esperar que el bus sea conducido a una baja tensión decente, pero que solo conduzca el bus a una baja descuidada, y perciba la diferencia con cuidado.

Obviamente, este enfoque reduce los márgenes de ruido y puede que no funcione con otros dispositivos que sean técnicamente compatibles, pero que no tengan un diseño excesivo generoso.

No he puesto ningún voltaje específico aquí porque, si vas a tratar de entender o usar esta técnica, necesitas obtener la especificación oficial y leerla hasta la última nota al pie.

    
respondido por el Neil_UK

Lea otras preguntas en las etiquetas