Accueil / Interfaces filaires

I2C

Bus série à deux fils reliant les composants d'une même carte — capteurs, EEPROM, extenseurs d'E/S.

Complet #i2c#bus#eeprom

Description

I2C (Inter-Integrated Circuit) est un protocole faible distance utilisé pour la communication entre équipements souvent situés sur la même carte. Il a été inventé par Philips.

L’architecture se compose de deux fils partagés par tous les composants du bus :

SDA

SDA (Serial Data) transporte les données, dans les deux sens (half-duplex). La ligne est à drain ouvert et nécessite une résistance de pull-up vers VCC.

SCL

SCL (Serial Clock) porte l’horloge générée par le contrôleur. Également à drain ouvert avec pull-up.

Adressage

Chaque périphérique possède une adresse (7 bits le plus souvent, parfois 10). Le contrôleur commence une transaction par un bit de start, l’adresse cible, puis un bit lecture/écriture. Plusieurs périphériques peuvent coexister sur le même bus tant que leurs adresses diffèrent. Certaines puces (comme les EEPROM 24LCxx) laissent régler une partie de l’adresse via des broches A0/A1/A2.

Identification

  • Repérer deux lignes accompagnées de résistances de pull-up : bon indice d’un bus I2C.
  • À l’analyseur logique, le décodeur i2c de sigrok reconstruit les conditions de start/stop, les adresses et les octets.
  • Depuis un contrôleur Linux (Raspberry Pi, Bus Pirate en mode I2C), scanner le bus :
# Lister les bus I2C
i2cdetect -l

# Scanner les adresses présentes sur le bus 1
i2cdetect -y 1

Chaque adresse qui répond correspond à un composant : capteur, EEPROM, extenseur d’E/S, écran…

Attacking

Lecture / écriture directe

Une fois l’adresse connue, on lit et on écrit les registres :

# Lire un octet au registre 0x00 du composant 0x50
i2cget -y 1 0x50 0x00

# Écrire une valeur dans un registre
i2cset -y 1 0x50 0x01 0xff

Dump d’une EEPROM I2C

De nombreuses EEPROM sont sur bus I2C et stockent configuration, calibrations, voire secrets. Elles se dumpent facilement — voir le cas pratique complet : Dump d’une EEPROM 24LC256.

Interception (MITM)

Le bus étant partagé, un attaquant physiquement présent peut écouter le trafic (sniff) ou, plus intrusif, rejouer/injecter des commandes pour manipuler un capteur ou une configuration.

Protections

  • Ne pas stocker de secrets en clair dans les EEPROM I2C.
  • Contrôler l’intégrité des données lues (le firmware ne doit pas faire aveuglément confiance au bus).
  • Restreindre l’accès physique à la carte.

Example devices

  • Capteurs (température, accéléromètres), horloges temps réel (RTC), EEPROM de configuration, écrans OLED, extenseurs GPIO.

Ressources