[Bus I2C] Protocolo


  • 1) Bit de Inicio o START: {SCL = 1}, {SDA = , flanco de bajada}
    • Generado por el master.
    • Un flanco de bajada en SDA mientras SCL esta a 1 determina la condición de Inicio o Start. Medio periodo de reloj del master mas tarde SCL pasa a 0 y comienza una secuencia en SCL de 9 impulsos: Ver 2) y 3).
    • El Bus I2C se considera ocupado después de la condición de Inicio.
  • 2) Primer byte: Dirección + Bit R/W
    • También llamado byte de START, aunque puede dar lugar a confusión.
    • Dir SLAVE son los 7 bits de la dirección del esclavo con el que se quiere establecer comunicación. Recordar que primero se envía el bit de mayor peso.
    • R/W# determina la dirección del mensaje, definiendo si el esclavo es transmisor o receptor.
      • 0: Escritura/Transmisión. El Master escribirá información en el esclavo.
      • 1: Lectura/Solicitud de datos. El Master leerá información del esclavo.
    • Cuando un Master envía un byte tras la condición de Inicio, cada dispositivo comprueba los 7 primeros bits con su propia dirección. El que coincida se considera direccionado por el Master siendo un esclavo receptor o emisor según R/W.
  • 3) Bit ACK Reconocimiento
    • Precede al primer byte de datos. Lo provoca en SDA el receptor de datos, indicando su aceptación del byte precedente.
    • El pulso de reloj correspondiente a este bit es generado por el Master.
    • El transmisor desbloquea la línea SDA (1) durante el pulso de reconocimiento.
    • El receptor debe poner a 0 la línea SDA durante el pulso ACK de modo que siga siendo 0 durante el tiempo que el master genera el pulso 1 de SCL. Se trata pues, de un nivel 0 en SDA, que es liberada provisionalmente por el emisor durante el pulso 9 de SCL.
  • 4) Byte mensaje + Bit ACK
    • Mensaje dividido en octetos: 8 bits. El byte de datos se transfiere empezando por el bit de mayor peso o bit 7.
    • Tras el byte de datos se produce otro bit de ACK.
    • El nº de bytes que se envíen no tiene restricción, siempre seguidos por un ACK.
    • En memorias I2C es normal que se envíen 2 bytes: Primero el de la dirección a la que acceder y luego el de la información que se grabe en dicha dirección (p.e.).
  • 5) Bit Parada o STOP: {SCL = 1}, {SDA = , flanco de subida}
    • Generado por el master, que cambia SDA de 0 a 1 mientras mantiene un 1 en SCL: Es un flanco de subida en SDA mientras SCL está a 1.
    • El Bus se considera libre de nuevo después de un cierto tiempo tras el Stop.
    • Sin embargo si un master todavía desea comunicarse con el bus, puede generar repetidamente condiciones de Start y direccionar a otro esclavo sin generar primero la condición de stop.
  • doc/tec/lab/bus_i2c/0_protocolo/inicio.txt
  • Última modificación: 2026/03/28 18:35
  • por fepg