I2C - ¿Dónde está el ACK?

2

Estoy trabajando en el controlador maestro I2C para conectar un periférico en particular. El problema que tengo es que cuando llega el noveno reloj, el dispositivo esclavo no baja la línea SDA.

Revisé las señales con un alcance, y todo parece estar bien. la direccion esta bien No estoy usando resistores de pull-up externos, estoy usando la capacidad de pullup interno de mi MCU (EFM32GG).

No soy un ingeniero eléctrico, y mi experiencia es desde el punto de vista del software, por lo que esta pregunta puede ser tonta, pero existe la posibilidad de que el dispositivo no pueda bajar la línea porque la unidad de extracción es demasiado alta. ?

¿Puede haber otra explicación para este problema (a excepción de la obvia, que el chip esclavo está muerto)?

    
pregunta Mellowcandle

3 respuestas

3

Con el alcance, debería ver algún efecto en la línea de datos, incluso si la línea se está levantando con demasiada fuerza. Puede caer solo medio voltio o algo, no lo suficiente como para ser leído como un cero.

También existe la posibilidad de que la dirección del esclavo sea incorrecta. A veces, la dirección se especifica como de 7 bits y otras como de 8 bits. Este último será 2x el primero. Consejo gratuito: escriba un bucle para probar todas las direcciones y deténgase si encuentra una que responda.

    
respondido por el gbarry
1

Supongo que lo que quiere decir con "unidad de tracción demasiado alta" en este caso sería que la resistencia de tracción interna sería demasiado pequeña. Esto es muy poco probable. Puede asegurarse de esto activando el pull-up y haciendo que el pin sea una entrada. Luego, simplemente coloque una resistencia desde el pin al suelo, puede calcular la resistencia de recuperación interna con la ecuación del divisor de voltaje . Recuerde 'resistencia de pull-up grande' = 'pull-up débil'.

El problema más probable es un problema de cableado, como el intercambio de SDA / SCL al conectar el periférico o no tener una conexión a tierra común.

Lo más probable es que sea el momento. Verifique el diagrama de tiempo I2C de su dispositivo esclavo (debe estar en la hoja de datos) y asegúrese de que se cumpla midiendo con el alcance.

Finalmente, si no es ninguna de estas otras cosas, es posible que tengas un chip esclavo muerto. ¿Puedes probar otro?

    
respondido por el Samuel
1

Hay dos componentes principales para hacer que esto funcione: la interfaz eléctrica física y los datos lógicos que se envían.

En el lado eléctrico, el maestro por sí solo parece estar funcionando correctamente si ve que las señales son buenas. Ya que no ha proporcionado parcelas, no podemos decir si son realmente buenas o si tiene una idea errónea de lo que es bueno. En el lado del esclavo, sí, las flexiones deben ser lo suficientemente débiles para permitir que el esclavo tire de la línea SDA hacia abajo. Si recuerdo bien, la especificación de IIC dice que el esclavo solo necesita hundir 3 mA para que la línea se encuentre por debajo del nivel lógico máximo bajo. Por ejemplo, si está utilizando la lógica de 5 V, esto significa que la recuperación no puede ser inferior a 5 V / 3 mA = 1,7 kΩ, por lo que una resistencia de 2 kΩ sería una opción razonable. Observe las especificaciones para el pullup interno que está utilizando y asegúrese de que no pueda generar más de 3 mA. Si puede, ellos no pueden usarlo y tienen que usar un pullup externo.

En el lado lógico, tienes que asegurarte de que el esclavo se está dirigiendo correctamente. La secuencia IIC debe comenzar con ambas líneas altas, luego una condición de inicio, que es SDA baja antes de que SCL baja. Después de eso, para cada bit SDA debería cambiar al nuevo valor, luego SCL irá alto, luego SCL bajará nuevamente. Los primeros 7 bits son la dirección, luego el bit de lectura / escritura. Para el noveno bit, el maestro deja a SDA flotando y el esclavo debería bajar de nivel poco después de que SCL se agote.

En mi experiencia, la causa más común de no obtener una respuesta del esclavo es la dirección incorrecta.

    
respondido por el Olin Lathrop

Lea otras preguntas en las etiquetas