Descripción de I2C
I2C es un bus serie síncrono de dos hilos: SDA (datos) y SCL (reloj). Usa direcciones de 7 bits (común) o 10 bits, con un maestro que inicia las transacciones y uno o varios esclavos que responden. Las líneas son open-drain/open-collector, por lo que requieren resistencias pull-up.
Características clave (prácticas para la medición):
- Topología: maestro-esclavo; el maestro arbitra el bus e inicia
START
, dirección + R/W ySTOP
. - Ack/Nack: cada byte enviado recibe ACK si el receptor lo acepta.
- Frecuencias típicas:
100 kHz
(Standard Mode),400 kHz
(Fast Mode). - Pull-ups: típicamente 4.7 kΩ hacia 3.3 V; valores entre 2.2 kΩ y 10 kΩ según la longitud/capacitancia del bus.
- Latencia: depende del tiempo de servicio del esclavo, del clock stretching (si lo usa), de la frecuencia SCL y del tamaño de la trama.
Pines habituales por plataforma (referencia):
- Arduino Nano (ATmega328P):
SDA = A4
,SCL = A5
(5 V). - ESP32 (Wire por defecto):
SDA = GPIO21
,SCL = GPIO22
(3.3 V, puede reconfigurarse). - XIAO RP2040: I2C0 típico en
SDA/SCL
de la placa (consultar pinmap de tu board, p. ej., D4/D5).
Formato de prueba sugerido:
- Payload: entero pequeño (ASCII
"0001"
o binario 2-bytes). - Protocolo de eco: el maestro escribe el valor; el esclavo calcula valor+1 y lo devuelve en una lectura inmediata del mismo maestro (write→read).
- Medición: el maestro toma
T₀
antes delwrite
yT₁
al terminar elread
(dato recibido). Reportar Δt.
Con esto se garantiza comparabilidad con la sección de UART y se facilita la tabla de Latencia y resultados (I2C).