Aziz Bench

Direcciones I²C y comprobación de conflictos

Añade los chips y módulos de tu bus: el mapa muestra qué direcciones usan, señala los que chocan y te dice cómo mover uno. Debajo, las resistencias de pull-up para tu velocidad y tu cableado.

Conflictos de dirección
1
en 0x68
Dispositivos
4
Direcciones usadas
3
Direcciones libres
109
Mapa de direcciones usada conflicto reservada
0123456789ABCDEF
00000102030405060708090A0B0C0D0E0F
10101112131415161718191A1B1C1D1E1F
20202122232425262728292A2B2C2D2E2F
30303132333435363738393A3B3C3D3E3F
40404142434445464748494A4B4C4D4E4F
50505152535455565758595A5B5C5D5E5F
60606162636465666768696A6B6C6D6E6F
70707172737475767778797A7B7C7D7E7F
Dispositivos en tu bus
    Resistencias de pull-up
    Tensión del bus
    Velocidad
    pF

    Suma la capacidad de cada pin de los chips del bus (como máximo 10 pF cada uno, según la especificación I²C) y la de los cables.

    Ω

    Muchos módulos llevan las suyas, a menudo de 4,7 kΩ o 10 kΩ. Escríbelas, por ejemplo 10k, 10k, 4k7: se suman en paralelo.

    Conflictos y cómo resolverlos

    Resistencias de pull-up

    Cómo fijar cada dirección

    Cómo funcionan las direcciones I²C

    Cada dispositivo de un bus I²C responde a una dirección de 7 bits, de 0x08 a 0x77. Muchos chips permiten elegir entre dos, cuatro u ocho direcciones conectando pines a masa o a la alimentación; otros tienen una sola dirección fija. Dos dispositivos en la misma dirección responden a la vez, y las lecturas de ambos no sirven.

    Algunas hojas de datos dan valores de 8 bits, es decir, la dirección desplazada a la izquierda con el bit de lectura/escritura añadido: el VL53L0X aparece como 0x52/0x53, el BMP180 como 0xEE/0xEF. Desplazando un bit a la derecha obtienes la dirección de 7 bits que usan las bibliotecas y los escáneres: 0x29 y 0x77.

    Direcciones reservadas

    Dirección
    0x00Llamada general (escritura) o byte de START (lectura)
    0x01Dirección CBUS
    0x02Reservada para otro formato de bus
    0x03Reservada para usos futuros
    0x04–0x07Código de controlador en modo Hs
    0x78–0x7BDireccionamiento de 10 bits
    0x7C–0x7FDevice ID

    Según la especificación del bus I²C de NXP (UM10204). Usa para tus dispositivos solo las direcciones de 0x08 a 0x77.

    Cuando dos dispositivos chocan

    Busca primero un pin de dirección: mover un dispositivo es la solución más limpia. Si los dos tienen dirección fija, como un reloj DS3231 y un DS1307, o necesitas dos sensores iguales sin pin de dirección, usa un multiplexor TCA9548A, que da ocho ramas separadas detrás de una sola dirección, o pon el segundo dispositivo en otro bus I²C. El ESP32, el ESP32-S3 y el RP2040 tienen dos controladores I²C; el ESP32-C3 tiene uno.

    Ver qué hay en el bus

    En ESPHome, el componente i2c escanea el bus al arrancar y escribe en el log las direcciones que encuentra. En Arduino, el sketch I2C scanner hace lo mismo en el monitor serie. Si un dispositivo no aparece, revisa la alimentación, SDA y SCL, las pull-ups y su pin de dirección.

    Resistencias de pull-up

    Las líneas I²C son de drenador abierto: los chips solo las bajan y las resistencias las vuelven a subir. Con una pull-up demasiado fuerte los chips no pueden bajar lo suficiente la línea; con una demasiado débil la línea sube demasiado despacio para la velocidad elegida. La especificación da los dos límites.

    Rmin = (VDD − 0,4 V) ÷ 3 mA        (VDD > 2 V; 20 mA a 1 MHz)
    Rmax = tr ÷ (0,8473 × Cbus)
    tr = 1000 ns a 100 kHz, 300 ns a 400 kHz, 120 ns a 1 MHz

    Todos los dispositivos de la lista

    Dirección
    QMC5883Lmagnetómetro de 3 ejes0x0Ddirección fija
    VEML6075sensor de luz UVA/UVB0x10dirección fija
    LIS2DH12acelerómetro de 3 ejes0x18, 0x19SA0: GND → 0x18 · VDD → 0x19
    MCP9808sensor de temperatura digital0x18–0x1FA2 A1 A0 → 0x18–0x1F
    MMA8451Qacelerómetro de 3 ejes0x1C, 0x1DSA0: GND → 0x1C · VDD → 0x1D
    ADXL345acelerómetro de 3 ejes0x1D, 0x53ALT ADDRESS: GND → 0x53 · VDD → 0x1D
    MCP23008expansor de E/S de 8 bits0x20–0x27A2 A1 A0 → 0x20–0x27
    MCP23017expansor de E/S de 16 bits0x20–0x27A2 A1 A0 → 0x20–0x27
    PCF8574expansor de E/S de 8 bits (módulos I²C para LCD)0x20–0x27A2 A1 A0 → 0x20–0x27
    PCF8575expansor de E/S de 16 bits0x20–0x27A2 A1 A0 → 0x20–0x27
    TCA9555expansor de E/S de 16 bits con interrupción0x20–0x27A2 A1 A0 → 0x20–0x27
    PN532controlador NFC/RFID (modo I²C)0x24dirección fija
    BNO055sensor de orientación absoluta de 9 ejes con fusión de sensores integrada0x28, 0x29COM3: GND → 0x28 · VDD → 0x29
    TCS34725sensor de color RGB0x29dirección fija
    VL53L0Xsensor de distancia de tiempo de vuelo (ToF)0x29
    MLX90640cámara térmica 32×240x33
    AXP192circuito de gestión de la alimentación (PMIC)0x34dirección fija
    AXP2101circuito de gestión de la alimentación (PMIC)0x34dirección fija
    PCF8574Aexpansor de E/S de 8 bits, direcciones alternativas0x38–0x3FA2 A1 A0 → 0x38–0x3F
    VEML6070sensor de luz UV0x38dirección fija
    APDS-9960sensor de gestos, proximidad, luz ambiental y color0x39dirección fija
    SH1106controlador de pantallas OLED 132×640x3C, 0x3DSA0: GND → 0x3C · VDD → 0x3D
    SSD1306controlador de pantallas OLED 128×64 / 128×320x3C, 0x3DSA0 (D/C#): GND → 0x3C · VDD → 0x3D
    SX1509expansor de E/S de 16 canales con driver de LED y controlador de teclado0x3E, 0x3F, 0x70, 0x71ADDR1 ADDR0: 00 → 0x3E · 01 → 0x3F · 10 → 0x70 · 11 → 0x71
    HDC1080sensor de temperatura y humedad0x40dirección fija
    INA219monitor de corriente, tensión y potencia0x40–0x4FA1, A0: GND · VS · SDA · SCL → 0x40–0x4F
    INA226monitor de corriente, tensión y potencia0x40–0x4FA1, A0: GND · VS · SDA · SCL → 0x40–0x4F
    INA260monitor de corriente, tensión y potencia con shunt integrado0x40–0x4FA1, A0: GND · VS · SDA · SCL → 0x40–0x4F
    INA3221monitor de corriente y tensión de 3 canales0x40, 0x41, 0x42, 0x43A0: GND → 0x40 · VS → 0x41 · SDA → 0x42 · SCL → 0x43
    PCA9685controlador PWM / servos de 16 canales, 12 bits0x40–0x77A5…A0 → 0x40–0x77 (0x70 = All Call)
    Si7021sensor de temperatura y humedad0x40dirección fija
    OPT3001sensor de luz ambiental0x44, 0x45, 0x46, 0x47ADDR: GND → 0x44 · VDD → 0x45 · SDA → 0x46 · SCL → 0x47
    SHT30 / SHT31 / SHT35sensor de temperatura y humedad0x44, 0x45ADDR: GND → 0x44 · VDD → 0x45
    SHT40 / SHT41 / SHT43 / SHT45 (SHT4x)sensor de temperatura y humedad0x44, 0x45, 0x46
    ADS1015ADC de 12 bits y 4 canales0x48, 0x49, 0x4A, 0x4BADDR: GND → 0x48 · VDD → 0x49 · SDA → 0x4A · SCL → 0x4B
    ADS1115ADC de 16 bits y 4 canales0x48, 0x49, 0x4A, 0x4BADDR: GND → 0x48 · VDD → 0x49 · SDA → 0x4A · SCL → 0x4B
    ADS7830ADC de 8 bits y 8 canales0x48, 0x49, 0x4A, 0x4BA1 A0 → 0x48–0x4B
    LM75Bsensor de temperatura digital / termostato0x48–0x4FA2 A1 A0 → 0x48–0x4F
    PCF8591ADC de 8 bits y 4 canales + 1 DAC0x48–0x4FA2 A1 A0 → 0x48–0x4F
    TMP102sensor de temperatura digital0x48, 0x49, 0x4A, 0x4BADD0: GND → 0x48 · V+ → 0x49 · SDA → 0x4A · SCL → 0x4B
    TMP117sensor de temperatura digital de alta precisión0x48, 0x49, 0x4A, 0x4BADD0: GND → 0x48 · V+ → 0x49 · SDA → 0x4A · SCL → 0x4B
    24LC256 / 24AA256 / 24FC256EEPROM I²C de 256 Kbit0x50–0x57A2 A1 A0 → 0x50–0x57
    AT24C32EEPROM I²C de 32 Kbit0x50–0x57A2 A1 A0 → 0x50–0x57
    PCF85063Areloj en tiempo real (RTC)0x51dirección fija
    ENS160sensor de calidad del aire de óxido metálico (TVOC/eCO₂/AQI)0x52, 0x53ADDR: GND → 0x52 · VDD → 0x53
    BQ27441-G1indicador de carga para una celda Li-ion0x55dirección fija
    MAX30100pulsioxímetro y sensor de pulso0x57dirección fija
    SGP30sensor de gas VOC y eCO₂0x58dirección fija
    SGP40sensor de gas, índice VOC0x59dirección fija
    SGP41sensor de gas, índices VOC y NOx0x59dirección fija
    CCS811sensor de gas eCO₂ / TVOC0x5A, 0x5BADDR: GND → 0x5A · VDD → 0x5B
    MLX90614termómetro de infrarrojos sin contacto0x5A
    MPR121controlador táctil capacitivo de 12 canales0x5A, 0x5B, 0x5C, 0x5DADDR: GND → 0x5A · VDD → 0x5B · SDA → 0x5C · SCL → 0x5D
    LPS22HBsensor de presión barométrica0x5C, 0x5DSA0: GND → 0x5C · VDD → 0x5D
    GT911controlador de pantalla táctil capacitiva de 5 puntos0x5D, 0x14
    MCP4725DAC de 12 bits con EEPROM0x60–0x67A0 → 0x60/0x61 (MCP4725A0)
    MCP4728DAC de 12 bits y 4 canales con EEPROM0x60–0x67
    SCD30módulo de CO₂ NDIR, temperatura y humedad0x61dirección fija
    SCD40 / SCD41sensor de CO₂ fotoacústico, temperatura y humedad0x62dirección fija
    BMI270IMU de 6 ejes0x68, 0x69SDO: GND → 0x68 · VDDIO → 0x69
    DS1307reloj en tiempo real (RTC)0x68dirección fija
    DS3231reloj en tiempo real compensado en temperatura0x68dirección fija
    MPU-6050acelerómetro + giroscopio de 6 ejes0x68, 0x69AD0: GND → 0x68 · VDD → 0x69
    MPU-6886IMU de 6 ejes0x68, 0x69SA0: GND → 0x68 · VDD → 0x69
    MPU-9250IMU de 9 ejes (acelerómetro, giroscopio, magnetómetro AK8963)0x68, 0x69AD0: GND → 0x68 · VDD → 0x69
    SEN50 / SEN54 / SEN55módulo de partículas en suspensión, VOC/NOx, temperatura y humedad0x69dirección fija
    SHTC3sensor de temperatura y humedad0x70dirección fija
    TCA9548Amultiplexor I²C de 8 canales0x70–0x77A2 A1 A0 → 0x70–0x77
    IP5306SoC para power bank (cargador + elevador), versión I²C0x75dirección fija
    BME280sensor de temperatura, humedad y presión0x76, 0x77SDO: GND → 0x76 · VDDIO → 0x77
    BME680sensor de gas (VOC), temperatura, humedad y presión0x76, 0x77SDO: GND → 0x76 · VDDIO → 0x77
    BME688sensor de gas con IA, temperatura, humedad y presión0x76, 0x77SDO: GND → 0x76 · VDDIO → 0x77
    BMP280sensor de presión y temperatura0x76, 0x77SDO: GND → 0x76 · VDDIO → 0x77
    BMP388sensor de presión y temperatura0x76, 0x77SDO: GND → 0x76 · VDDIO → 0x77
    MS5611-01BAsensor de presión barométrica (altímetro)0x76, 0x77CSB: VDD → 0x76 · GND → 0x77
    BMP180sensor de presión y temperatura0x77dirección fija

    Preguntas frecuentes

    ¿Por qué la hoja de datos dice 0x52 y el escáner encuentra 0x29?

    La hoja de datos da la dirección de escritura de 8 bits, que es la de 7 bits desplazada un bit a la izquierda. 0x52 ÷ 2 = 0x29. Las bibliotecas y los escáneres usan la forma de 7 bits.

    ¿Pueden dos sensores iguales compartir el bus?

    Sí, si el sensor tiene un pin de dirección: configúralo distinto en cada uno. Si no lo tiene, usa un multiplexor TCA9548A o un segundo bus I²C.

    Mi LCD I²C está en 0x3F y no en 0x27: ¿por qué?

    El módulo lleva un PCF8574AT en lugar de un PCF8574T. La versión A usa 0x38–0x3F en lugar de 0x20–0x27: con todos los pines de dirección en alto queda en 0x3F en vez de 0x27.

    ¿Necesito pull-ups si mis módulos ya las llevan?

    Normalmente no: basta con un juego por bus. Con muchos módulos sus pull-ups se suman en paralelo y pueden quedar demasiado fuertes; la calculadora de arriba lo comprueba.