Bus IC2 básico integrado
Número de estudiante 20009101910? Academia Zhuyuan No. 3
Introducción a Incrustar Niubi, una comunicación en serie
Incrustar texto de Niu No.
1. Introducción
I2C (circuito interintegrado, circuito integrado) es un bus de comunicación en serie que se utiliza para conectar microcontroladores y sus periféricos para lograr la comunicación entre el controlador maestro y los dispositivos esclavos. La comunicación bidireccional es una comunicación semidúplex síncrona (la frecuencia de reloj de ambos extremos es la misma y la comunicación bidireccional es posible, pero no se pueden enviar y recibir datos al mismo tiempo).
2. Principio
La comunicación I2C es un tipo de comunicación en serie con dos líneas de señal en serie: línea de datos (SDA) y línea de reloj (SCL). Como se muestra en la figura siguiente, el controlador maestro y el dispositivo esclavo (uno o más) están conectados a través de dos líneas de señal. En estas dos líneas de señal, tanto el dispositivo maestro como el dispositivo esclavo pueden desempeñar el papel de transmisor y receptor. Para garantizar la precisión del proceso de transmisión dirigida, cada dispositivo recibido en el bus I2C tiene una dirección única (código de dirección específico del dispositivo esclavo de 7 bits), que puede realizar el desarrollo de la transmisión dirigida y la transmisión grupal desde el dispositivo esclavo. .
2.1 Tipo de señal
Al mismo tiempo, para garantizar la estabilidad de la transmisión, todos los dispositivos conectados al mismo bus I2C **** utilizan un único reloj. Durante el proceso de transmisión de datos, existen las siguientes señales en el bus I2C****:
(1) Señal de inicio/señal de finalización
Cuando SCL tiene un nivel alto, SDA Salta del nivel alto al nivel bajo para comenzar a transmitir datos. Cuando SCL es alto, SDA salta del nivel alto al nivel bajo y comienza a transmitir datos.
Cuando SCL es alto, SDA salta de bajo a alto para finalizar la transmisión de datos.
(2) Señal de confirmación/no confirmación
El protocolo de bus IIC estipula que después de que se transmite cada byte de datos (8 bits), debe haber una señal de confirmación para determinar si la otra parte ha recibido la transferencia de datos. Es decir, durante el noveno reloj después de transmitir 8 relojes de un byte, el receptor debe devolver una señal de respuesta ACK al transmisor para poder transmitir los datos.
La señal de respuesta la genera el dispositivo receptor. Mientras SCL está alto, el dispositivo receptor baja el SDA para indicar que la transmisión de datos es correcta y genera un reconocimiento (ACK), baja el SDA para indicar que la transmisión de datos falla y genera un bit de no reconocimiento (NACK);
(3) Estado inactivo/estado ocupado
Después de que el host envía la señal de inicio y durante el período en el que no se envía la señal de terminación, el bus está en el estado ocupado.
Después de enviar la señal de terminación, el bus está en estado inactivo y SCL y SDA están altos al mismo tiempo.
2.2 Proceso de lectura/escritura del bus
Cuando el bus I2C transmite datos, los datos en la línea de datos SDA deben permanecer estables mientras la señal del reloj SCL esté en estado alto o bajo. Solo se permite cambiar mientras la señal de la línea del reloj es baja. Cuando se transmite un byte en el orden de bits de datos de mayor a menor, el dispositivo esclavo inmediatamente bajará la línea SDA y enviará un bit de respuesta ACK al dispositivo maestro. En este momento, se considera que se ha enviado un byte. transmitido si dentro de un cierto tiempo Si no se recibe señal de respuesta del dispositivo esclavo, automáticamente se considerará que el dispositivo esclavo ha recibido los datos correctamente.
Proceso de comunicación de escritura del bus I2c:
El host detecta el estado inactivo del bus y primero envía una señal de INICIO para hacerse cargo del bus
Envía; una palabra de dirección (8 bits), de los cuales los bits 0-6 son la dirección del esclavo, y el esclavo se almacena en la dirección única. El bit 7 es el bit de lectura/escritura (R/W), 0 significa escribir maestro->esclavo; ->, 1 significa leer maestro->esclavo->.
>Esclavo, 1 significa leer esclavo->maestro;
Cuando el maestro envía la dirección, cada esclavo en el bus comparará la dirección de 7 bits con su propia dirección. Si son iguales, coincidirán. tiene éxito y envía una señal de respuesta (ACK) para determinar el remitente y el receptor;
Después de recibir el ACK, el host comienza a enviar el primer byte (comando) Comando, que corresponde al registro que se va a registrar. escrito por el esclavo;
Después de recibir el comando, la estación esclava envía ACK
Después de que el host recibe el ACK, comienza a enviar el primer byte de datos:
El host recibe el ACK Después de eso, comienza a enviar el primer byte de datos: bit0-7 (datos de 8 bits, de mayor a menor), el esclavo envía una respuesta ACK después de recibir los datos;
El host continúa enviando datos, n cuadros;
Después de que el host envía todos los datos, envía el bit de parada STOP para finalizar toda la comunicación y liberar el bus;
Proceso de comunicación de lectura del bus I2c:
El host genera una señal de INICIO y luego envía la dirección del esclavo (7 bits) + 0 (escritura);
* La dirección aún está escribiendo, esperando la respuesta ACK del esclavo, el emparejamiento es exitoso;
Desde La máquina envía una respuesta ACK y el emparejamiento es exitoso. Se recibió una respuesta ACK del dispositivo esclavo, el emparejamiento fue exitoso.
Después de recibir el ACK, el host envía una dirección de memoria de 8 bits (el comando corresponde a la dirección de registro correspondiente del esclavo). Después de recibirlo, el esclavo direcciona internamente y extrae los datos, y luego. devuelve ACK;
Después de que el host recibe el ACK, regenera la señal de INICIO y envía la dirección de memoria del esclavo (7 bits) + 1 (lectura) nuevamente.
Después de que el host recibe el ACK, regenera la señal de INICIO y envía la dirección de memoria del esclavo (7 bits) + 1 (lectura) nuevamente, y el esclavo devuelve ACK después de recibirlo.
*La dirección; está configurado en "lectura" y el host está configurado en modo de recepción.
El host recibe ACK y está listo para recibir información del esclavo. Ahora puede recibir datos de 1 bit.
* El host no envía una señal de respuesta al esclavo e inicia directamente la señal de terminación después de recibirla.
Después de que el host recibe todos los datos, envía una señal de PARADA para finalizar la comunicación y el bus queda inactivo.