Fundamentos de la comunicación | Hardware I2C, transferencia de Datos, configuración

en este artículo, aprenderemos sobre qué es el protocolo de comunicación I2C, su hardware, cómo se transfieren los datos y las diferentes configuraciones en las que opera.

Esquema

Introducción a la Comunicación I2C

comunicación I2C es la forma corta para inter-circuitos integrados., Es un protocolo de comunicación desarrollado por Philips Semiconductors para la transferencia de datos entre un procesador central y múltiples circuitos integrados en la misma placa de circuito utilizando solo dos cables comunes.

Debido a su simplicidad, es ampliamente adoptado para la comunicación entre los microcontroladores y matrices de sensores, pantallas, dispositivos IoT, memorias eeprom, etc.

Este es un tipo de protocolo de comunicación serial síncrono. Significa que los bits de datos se transfieren uno por uno a intervalos regulares de tiempo establecidos por una línea de reloj de referencia.,

características

las siguientes son algunas de las características importantes del Protocolo de comunicación I2C:

  • solo se requieren dos líneas de bus comunes (cables) para controlar cualquier dispositivo/IC en la red I2C
  • Sin necesidad de un acuerdo previo sobre la velocidad de transferencia de datos como en la comunicación UART. Por lo tanto, la velocidad de transferencia de datos se puede ajustar siempre que sea necesario
  • mecanismo Simple para la validación de los datos transferidos
  • Utiliza un sistema de direccionamiento de 7 bits para apuntar a un dispositivo específico/IC en el bus I2C
  • Las redes I2C son fáciles de escalar., Los nuevos dispositivos simplemente se pueden conectar a las dos líneas de bus I2C comunes

Hardware

el bus I2C físico

El Bus I2C (cables de interfaz) consta de solo dos cables y se denominan línea de Reloj Serie (SCL) y línea de datos Serie (SDA). Los datos a transferir se envían a través del cable SDA y se sincronizan con la señal de reloj de SCL. Todos los dispositivos / ICs en la red I2C están conectados a las mismas líneas SCL y SDA como se muestra a continuación:

ambas líneas de bus I2C (SDA, SCL) funcionan como controladores de drenaje abiertos., Significa que cualquier dispositivo / IC en la red I2C puede conducir SDA y SCL bajo, pero no pueden conducirlos alto. Por lo tanto, se utiliza una resistencia pull up para cada línea de bus, para mantenerlos altos (a voltaje positivo) por defecto.

la razón para usar un sistema de drenaje abierto es que no habrá posibilidades de cortocircuito, lo que podría ocurrir cuando un dispositivo intenta tirar de la línea alta y algún otro dispositivo intenta tirar de la línea baja.

dispositivos maestro y esclavo

los dispositivos conectados al bus I2C se clasifican como maestros o esclavos., En cualquier momento, solo un único maestro permanece activo en el bus I2C. Controla la línea de reloj SCL y decide qué operación se debe hacer en la línea de datos SDA.

Todos los dispositivos que responden a las instrucciones de este dispositivo maestro son esclavos. Para diferenciar entre varios dispositivos esclavos conectados al mismo bus I2C, a cada dispositivo esclavo se le asigna físicamente una dirección permanente de 7 bits.

Cuando un dispositivo maestro desea transferir datos hacia o desde un dispositivo esclavo, especifica esta dirección de dispositivo esclavo en particular en la línea SDA y luego procede con la transferencia., Así que la comunicación efectiva se lleva a cabo entre el dispositivo maestro y un dispositivo esclavo en particular.

Todos los demás dispositivos esclavos no responden a menos que su dirección sea especificada por el dispositivo maestro en la línea SDA.

Protocolo de transferencia de datos

el siguiente protocolo (conjunto de reglas) es seguido por los dispositivos maestro y esclavo para la transferencia de datos entre ellos.

Los datos se transfieren entre el dispositivo maestro y los dispositivos esclavos a través de una sola línea de datos SDA, a través de secuencias de patrones de 0 y 1 (bits)., Cada secuencia de 0 y 1 se denomina como una transacción y los datos en cada transacción se estructuran de la siguiente manera:

condición de inicio

cada vez que un dispositivo maestro/IC decide iniciar una transacción, cambia la línea SDA de nivel de alto voltaje a un nivel de bajo voltaje antes de que la línea SCL cambie de alto a bajo.

una vez que el dispositivo maestro envía una condición de Inicio, Todos los dispositivos esclavos se activan incluso si están en modo de suspensión, y esperan los bits de dirección.,

bloque de direcciones

se compone de 7 bits y se rellena con la dirección del dispositivo esclavo a/desde el cual el dispositivo maestro necesita enviar/recibir datos. Todos los dispositivos esclavos en el bus I2C comparan estos bits de dirección con su dirección.

Bit de lectura / escritura

Este bit especifica la dirección de transferencia de datos. Si el dispositivo maestro / IC necesita enviar datos a un dispositivo esclavo, este bit se establece en ‘0’. Si el IC maestro necesita recibir datos del dispositivo esclavo, se establece en ‘1’.,

ACK/NACK Bits

Es sinónimo de Reconocido/No-Reconoció bits. Si la dirección física de cualquier dispositivo esclavo coincide con la dirección transmitida por el dispositivo maestro, el valor de este bit se establece en ‘0’ por el dispositivo esclavo. De lo contrario, permanece en la lógica ‘1’ (por defecto).

bloque de datos

se compone de 8 bits y son establecidos por el remitente, con los bits de datos que necesita transferir al receptor., Este bloque es seguido por un bit ACK/NACK y se establece en ‘ 0 ‘ por el receptor Si recibe datos con éxito. De lo contrario se queda en la lógica ‘1’.

esta combinación de bloque de datos seguido por el bit ACK/NACK se repite hasta que los datos se transfieren completamente.

condición de parada

después de que los bloques de datos requeridos se transfieran a través de la línea SDA, el dispositivo maestro cambia la línea SDA del nivel de bajo voltaje al nivel de alto voltaje antes de que la línea SCL cambie de alto a bajo.,

nota: la lógica ‘ 0 ‘o establecer un bit a’ 0 ‘ equivale a aplicar baja tensión en la línea SDA y viceversa.

¿cómo funciona prácticamente la comunicación I2C?

un dispositivo maestro inicia una comunicación/transacción I2C para enviar datos a un dispositivo esclavo o para recibir datos de él. Aprendamos sobre el trabajo de ambos escenarios en detalle.,

enviar datos a un dispositivo esclavo

la siguiente secuencia de operaciones tiene lugar cuando un dispositivo maestro intenta enviar datos a un dispositivo esclavo en particular a través del bus I2C:

  • El dispositivo maestro envía la condición de inicio
  • El dispositivo maestro envía los 7 bits de dirección que corresponden al dispositivo esclavo a ser dirigido
  • El dispositivo maestro establece el bit de lectura/escritura en ‘0’, Lo que significa una escritura
  • Ahora dos escenarios son posible:
    • Si ningún dispositivo esclavo coincide con la dirección enviada por el dispositivo maestro, el siguiente bit ACK/Nack permanece en ‘1’ (predeterminado)., Esto indica al dispositivo maestro que la identificación del dispositivo esclavo no tiene éxito. El reloj maestro terminará la transacción actual enviando una condición de parada o una nueva condición de inicio
    • si existe un dispositivo esclavo con la misma dirección que la especificada por el dispositivo maestro, el dispositivo esclavo establece el bit ACK/NACK en ‘0’, Lo que indica al dispositivo maestro que un dispositivo esclavo está dirigido correctamente
  • Si un dispositivo esclavo está dirigido correctamente, el dispositivo maestro ahora envía 8 bits de datos que solo son considerados y recibidos por el dispositivo esclavo objetivo., el dispositivo que controla cada uno de ellos:

    lectura de datos de un dispositivo esclavo

    la secuencia de operaciones sigue siendo la misma que en el escenario anterior, excepto por lo siguiente:

    • El dispositivo maestro establece el bit de lectura/escritura en ‘1’ en lugar de ‘0’, Lo que indica al dispositivo esclavo objetivo que el dispositivo maestro espera datos de él
    • Los 8 bits correspondientes al bloque de datos son enviados por el dispositivo esclavo y el bit ACK/Nack es establecido por el dispositivo maestro
    • Una vez que los datos requeridos son recibidos por el dispositivo maestro, envía un bit Nack., A continuación, el dispositivo esclavo deja de enviar datos y libera la línea SDA

    si el dispositivo maestro para leer datos de la ubicación interna específica de un dispositivo esclavo, primero envía los datos de ubicación al dispositivo esclavo utilizando los pasos en el escenario anterior. A continuación, inicia el proceso de lectura de datos con una condición de inicio repetida.,

    la siguiente figura representa los bits de Datos generales enviados en la línea SDA y el dispositivo que controla cada uno de ellos:

    concepto de estiramiento de reloj

    digamos que el dispositivo maestro inició una transacción y envió bits de dirección de un dispositivo esclavo particular seguido de un bit de lectura de ‘1’. El dispositivo esclavo específico necesita enviar un bit ACK, inmediatamente seguido de datos.

    pero si el dispositivo esclavo necesita algún tiempo para obtener y enviar datos al dispositivo maestro, durante este espacio, el dispositivo maestro pensará que el dispositivo esclavo está enviando algunos datos.,

    para evitar esto, el dispositivo esclavo mantiene la línea de reloj SCL baja hasta que esté listo para transferir bits de datos. Al hacer esto, el dispositivo esclavo indica al dispositivo maestro que espere bits de datos hasta que se libere la línea de reloj.

    Eso es todo para este artículo. Eche un vistazo a los siguientes proyectos para hacerse una idea de cómo se implementa prácticamente la comunicación I2C, entre microcontroladores/Arduinos y diferentes sensores:

    Sistema de estacionamiento basado en RFID

    interfaz Arduino con una unidad de procesador de movimiento

    interfaz Arduino con reloj en tiempo Real

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *