Tarjeta de concepto I2C

1. Introducción

El bus I2C (circuito inter-integrado) admite la comunicación a corta distancia entre dispositivos. Requiere dos líneas de señal para completar el intercambio de información (una SDA, línea de datos en serie; una SCL, línea de reloj en serie). I2C fue desarrollado y diseñado por primera vez por Philips en 1982 y utilizado en su propio chip. Al principio, solo se permitían direcciones estándar de 7 bits a 100 kHz. En 1992, se emitió la primera especificación pública de I2C, agregando un modo rápido de 400 kHz y una dirección extendida de 10 bits. Sobre la base de I2C, Intel propuso "System Management Bus" (SMBus) en 1995 para la comunicación de dispositivos de baja velocidad. SMBus limita la frecuencia de reloj a 10kHz 100kHz, pero I2C puede admitir dispositivos 0kHz 5MHz: modo normal (100kHz es 100kbps ), Modo rápido (400kHz), modo rápido + (1MHz), modo de alta velocidad.

Dos, acuerdo I2c

1. Condiciones de inicio

Para marcar el inicio oficial de la transmisión, el dispositivo maestro establecerá SCL alto (cuando el bus está inactivo, SDA y SCL están en un estado alto), y luego tira SDA bajo, para que todos los dispositivos esclavos sepan que la transmisión está a punto de comenzar . Si ambos dispositivos maestros quieren tomar posesión del bus al mismo tiempo, entonces quienquiera que baje el SDA ganará el control del bus. Durante todo el período de comunicación, puede haber un inicio múltiple para comenzar cada nueva secuencia de comunicación.

2. Marco de dirección

Usado por el maestro para indicar a qué esclavo se envía el mensaje.

El marco de dirección siempre aparece al comienzo de una comunicación. Se envía una dirección de 7 bits desde el bit más alto (MSB). Esta dirección será seguida por un operador de 1 bit, con 1 para operaciones de lectura y 0 para operaciones de escritura.

El siguiente bit es NACK / ACK. Después de que se envían los primeros 8 bits en esta trama, el dispositivo receptor obtiene el control SDA. En este momento, el dispositivo receptor debe responder un ACK (tirar SDA bajo) antes del pulso del noveno reloj. Indica que la recepción es normal. Si el dispositivo receptor no baja el SDA, es posible que el dispositivo receptor no haya recibido datos (como que el dispositivo direccionado no existe o el dispositivo está ocupado) o el mensaje recibido no se puede analizar. Si es así, el maestro vendrá Decide qué hacer (detener o condición de inicio repetido).

3. Marco de datos

Datos enviados de maestro a esclavo (o esclavo a maestro), cada trama son datos de 8 bits.

Después de enviar el marco de dirección, puede comenzar la transmisión de datos. El maestro continúa generando pulsos de reloj, y el maestro (operación de escritura) o esclavo (operación de lectura) coloca los datos en el SDA. Cada cuadro de datos es de 8 bits, y el número de cuadros de datos puede ser arbitrario hasta que se genere una condición de detención. Después de cada trama de transmisión de datos (es decir, cada 8 bits), el receptor debe responder con un ACK o NACK (el esclavo envía ACK cuando escribe datos y el maestro envía ACK cuando lee datos. Cuando el maestro sabe que ha terminado de leer el último byte de datos Tiempo, puede enviar NACK y luego detener la condición).

4. Detener la condición

Cuando se envían todos los datos, el maestro generará una condición de detención. La condición de parada se define como: cuando SDA se coloca bajo, SCL se eleva y se mantiene alto, y luego SDA se eleva.

Nota: Durante la transmisión normal de datos, cuando SCL está en un nivel alto, el valor en SDA no debe cambiar para evitar una condición de parada inesperada.

5. Condiciones de inicio repetidas

SDA es elevado cuando SCL es bajo, y luego SCL es elevado. Entonces el maestro puede generar una condición de inicio para continuar la transmisión del nuevo mensaje.

6. Estiramiento de reloj, sincronización de reloj, arbitraje de bus

Tres, proceso de lectura y escritura I2C

1. Proceso estándar para escribir registros
  • El maestro inicia START
  • El maestro envía I2C addr (7 bits) y w operación 0 (1 bit), esperando ACK
  • El esclavo envía ACK
  • El maestro envía reg addr (8 bits), esperando ACK
  • El esclavo envía ACK
  • El maestro envía datos (8 bits), es decir, los datos que se escribirán en el registro, a la espera de ACK
  • El esclavo envía ACK
  • Los pasos 6 y 7 se pueden repetir varias veces, es decir, escribir múltiples registros en secuencia
  • El maestro inicia STOP
2. Proceso estándar para leer registros
  • El maestro envía I2C addr (7 bits) y w operación 1 (1 bit), esperando ACK
  • El esclavo envía ACK
  • El maestro envía reg addr (8 bits), esperando ACK
  • El esclavo envía ACK
  • El maestro inicia START
  • El maestro envía I2C addr (7 bits) y r operación 1 (1 bit), esperando ACK
  • El esclavo envía ACK
  • El esclavo envía datos (8 bits), el valor en el registro
  • El maestro envía ACK
  • Los pasos 8 y 9 se pueden repetir varias veces, es decir, leer varios registros en secuencia
Publicado 81 artículos originales · 21 elogios · 30,000+ visitas

Supongo que te gusta

Origin blog.csdn.net/qq_33575901/article/details/105222375
Recomendado
Clasificación