Solution de ribt pour I2CyouToo

hardware bus de communication

29 novembre 2023

Table des matières

Découverte

Avant de commencer, un peu de lecture sur le sujet (car je n’y connais absolument rien) :

Il semblerait que l’Arduino discute avec la mémoire EEPROM en utilisant le protocole I²C. Ce protocole nécessite deux signaux : l’un contient les données et l’autre sert d’horloge. Ça tombe bien, le fichier VCD comporte l’enregistrement de deux signaux. On ouvre le fichier dans GTKWave pour vérifier :

screen

On voit effectivement un signal d’horloge et des données. On remarque au passage qu’il y a un grand vide au début et à la fin. L’enregistrement est très long par rapport au moment qui contient les données.

Résolution

En lisant la doc de sigrok-cli on voit qu’il sait lire les fichier VCD et qu’il sait décoder le protocole I²C. Premier essai :

$ sigrok-cli -i format.vcd -P i2c
sr: input/trace32_ad: Don't know how to handle this file with record size 32.
i2c-1: Start
i2c-1: 0
i2c-1: 0
i2c-1: 0
i2c-1: 0
i2c-1: 1
i2c-1: 0
i2c-1: 1
i2c-1: 1
i2c-1: Write
i2c-1: Address write: 68
i2c-1: ACK
i2c-1: 0
i2c-1: 0
i2c-1: 0
i2c-1: 0
i2c-1: 0
i2c-1: 0
i2c-1: 0
i2c-1: 0
i2c-1: Data write: 00
i2c-1: ACK
i2c-1: 0
i2c-1: 1
i2c-1: 1
i2c-1: 0
i2c-1: 0
i2c-1: 0
i2c-1: 1
i2c-1: 0
i2c-1: Data write: 46
i2c-1: ACK
i2c-1: Stop
i2c-1: Start
i2c-1: 0
i2c-1: 0
i2c-1: 0
i2c-1: 0
i2c-1: 1
i2c-1: 0
i2c-1: 1
i2c-1: 1
i2c-1: Write
i2c-1: Address write: 68
i2c-1: ACK
i2c-1: 1
i2c-1: 0
[...]

Ça a l’air de bien fonctionner. L’adresse vaut toujours 68 puis on écrit un chiffre compteur qui incrémente à chaque fois suivi d’un deuxième chiffre qui ressemble bien à un caractère ASCII encodé en hexadécimal.

Reste plus qu’à me la péter un peu avec ma maîtrise du shell :

$ sigrok-cli -i format.vcd -P i2c | grep "Data write" | awk 'NR%2 == 0 { print $4 }' | xxd -r -ps
sr: input/trace32_ad: Don't know how to handle this file with record size 32.
FCSC{MY-PRECIOUS-PLEASE-STAY-SECRET!}

Merci aux orgas pour ce challenge donné clé en main avec l’occasion d’apprendre de nouvelles choses !