7 votos

¿Qué es el ACK I2C, y ¿cómo detectar?

Estoy escribiendo un FPGA conductor en Verilog para un sensor de temperatura (hoja de datos disponible aquí). El protocolo de comunicación es SMBus, un primo cercano de I2C. Ahora la lectura de la hoja de datos, entiendo que la CONFIRMACIÓN de la señal se compone de dos partes (vea la página 10, figura 5):

  1. En primer lugar, SDA es impulsado por la baja en el 9º ciclo de reloj
  2. Entonces, SDA es "punta" (impulsada por alto, inmediatamente después, impulsado por la baja) entre el 9 y el 1 de ciclos de reloj

Esto parece contradecir a este tutorial donde se afirma que un ACK se hace simplemente mediante la conducción de la SDA baja (no "pico" que se menciona).

Es este "pico" de hecho se incluye en la CONFIRMACIÓN de la señal? Si es así, ¿cómo puedo detectar el "pico"?

enter image description here

15voto

lillq Puntos 4161

La especificación dice que el kit se compone de un nivel bajo después de las 8 de reloj de pulso, como se muestra en este diagrama:

enter image description here

El maestro de bus generará un 9 de reloj de pulso para leer el nivel. La especificación no hablar de la pulsación de ACK, y el amo no tomar nota de ello. Siga las especificaciones y cuidar de los datos de configuración y los tiempos de espera (250ns y 5\$\mu\$s resp. para el modo estándar) para asegurarse de que el nivel es correctamente detectado.

Lo que se ve como un pico en el ACK no es parte de la ACK, pero un autobús de liberación entre el ACK y un bajo nivel de la primera reserva de bits de datos de la siguiente palabra. El autobús versión viene después de SCL baja de nuevo, tanto en su y mi esquema. De acuerdo con el diagrama de arriba, esta versión es necesario; tenga en cuenta que el bajo nivel de la SDA después de ACK se interrumpe, lo que indica que la SDA deben ir de la alta.

Nota: el autobús de la liberación no se muestra en el diagrama de temporización, la figura 38, ni es el tiempo dado en la CA características. No pude encontrar ninguna referencia a ella en la especificación del texto. Además no hay SCL actividad durante este SDA alta. Esto sugiere que el autobús de la liberación no es realmente necesario. En ese caso, el diagrama contiene un error, al parecer, copiadas por otros, como en el TMP175 hoja de datos.

editar
Madmanguruman comentarios que el ACK llega desde el esclavo, mientras que en la próxima reserva de bits de datos proviene de la maestra. A menudo este es el caso, y él tiene un punto. La próxima reserva de bits de datos, vendrá también de la de los esclavos, sin embargo, si se trata de la respuesta del esclavo a un comando de lectura. Entonces se podría hacer perfectamente el sentido de que el esclavo no libera el bus.

2voto

jason Puntos 147

Yo estaba tratando de obtener un I2C de trabajo del CAD el otro día y tuve esta misma pregunta. El maestro de bus / host envía un byte a un dispositivo y una vez que el dispositivo correctamente recibido, se tira de la línea de datos (SDA) baja para indicar al maestro de bus el byte fue recibido. El CAD de la hoja de datos del mencionado un dispositivo de prueba de conectividad buscando la CONFIRMACIÓN del dispositivo. Tener acceso sólo a un osciloscopio analógico rápidamente me di cuenta de que el CAD fue muy probablemente no envío de ACK, debido a que el marco en el bus serie fue sólo el tiempo suficiente para que un solo byte, mientras que yo esperaría de tres bytes consecutivos. En la parte superior de que yo no era capaz de encontrar una convincente ACK en la señal (una baja de bits). Pensé que el maestro de bus / host podría ser lo suficientemente inteligentes para no enviar el segundo byte, si no recibe un ACK del receptor, la DAC. Eso explicaría por qué vi demasiado corto de los mensajes que pasan el bus I2C. Con el DAC de ser bastante simple dispositivo, la única opción que yo podía pensar era en el uso de un dispositivo equivocado de dirección. Así que comencé a tratar de abordar el DAC con direcciones diferentes y muy rápidamente me percaté de un marco en el bus de serie que era mucho más largo que los demás.

Ahora, para responder a tu pregunta: una Vez que yo era capaz de correctamente la dirección de la DAC me di cuenta de un efecto interesante. Con mi ámbito de aplicación de la sonda conectada cerca de la DAC, la CONFIRMACIÓN de pulso era claramente visible en el ámbito de aplicación analógica. Donde todos los bits enviados desde el host había un cierto mínimo nivel de tensión, la CONFIRMACIÓN de impulsos tirado mucho mejor a 0V. Así, por ejemplo, 0-bits enviados desde el host mediría alrededor de 0,2 V, la CONFIRMACIÓN medir 0.1 V. Los valores de este ejemplo se acaba de hacer para ilustrar mi punto. Esto hizo que el ACK pulsos distinguen claramente del resto de la secuencia de datos.

1voto

Alex Andronov Puntos 178

I2C transacción en curso se dará por terminado si SDA cambios, mientras que SCK es alta. Cualquier dispositivo I2C que se quiere hacer valer o de liberación de la SDA debe hacerlo en un momento en el que puede estar seguro de que SCK no va a subir. Hay dos maneras en que un dispositivo puede estar seguro de SCK no va a subir: (1) se puede afirmar SCK sí mismo, o (2) si se ve un flanco de bajada en SCK, se puede saber que SCK permanecerá de baja por un importe determinado de tiempo (dependiendo de la velocidad del bus). Debido a que la mayoría de I2C esclavo dispositivos nunca afirmar SCK sí mismos, el único momento en que puede cambiar de manera segura lo que está saliendo en SDA es inmediatamente después de un flanco de bajada de SCK.

I2C maestro, sin embargo, está libre de cambiar el estado en SDA en cualquier momento que se está afirmando SCK. Para leer el estado de un dispositivo remoto del ACK poco, el maestro debe de liberación de la SDA antes de la subida del borde de reloj siguiente a la confirmación, y debe salir en libertad hasta el siguiente flanco de bajada de SCK. Incluso si el transmitida por primera vez poco después de que el "ack" debe ser "0", el maestro debe retraso entre la afirmación de SCK y la afirmación de la SDA. El hecho de que los esclavos que reaccionar de inmediato a un flanco de bajada en SCK, mientras que los maestros deben añadir un retardo entre la conducción de SCK y SDA, significa que en un "hand-off" de control del esclavo al maestro, con frecuencia, habrá un breve momento, cuando ni el dispositivo se considere apropiado, para hacer valer SDA (técnicamente, el mínimo requerido de retardo entre el maestro de la afirmación de SCK y su afirmación de la SDA es menor que el máximo requerido entre el maestro de la afirmación de SCK y el esclavo de la liberación de la SDA, pero la mayoría de los maestros de la demora más que eso).

Por cierto, si no esclavos uso del reloj de estiramiento, uno puede decir fácilmente en un ámbito de la parcela que SDA cambios son causados por el maestro y que son causadas por el esclavo. Si SDA cambios al mismo tiempo como SCK cambia de alto a bajo, el cambio es causado por el esclavo. Si SDA cambios en cualquier otro momento, el cambio es causado por el maestro.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X