Comment tout a commencé
Quand j’ai déménagé en France, j’ai dû reconstruire mon bureau à domicile. Pour mon bureau, j’ai opté pour une marque locale : kqueo. Je me suis dit qu’au mieux c’était un produit local, et au pire une simple remarque générique pour laquelle ils pourraient fournir des pièces au besoin. J’ai choisi ce modèle : deux moteurs, un boîtier de commande central et un panneau avec 3 boutons pour la position mémoire, monter, descendre et M (pour enregistrer les positions), plus un afficheur à 3 chiffres.
Il y a quelques mois, j’ai remarqué que le panneau, éteint la plupart du temps sauf lorsqu’on le réveille, ne se réveillait plus et ne faisait plus bouger le bureau. Le support technique m’a tout de suite envoyé un remplacement avec seulement mon numéro de série, c’était chouette, et c’est là que le plaisir commence.
En branchant le nouveau panneau, il a immédiatement affiché la position réelle du bureau et semblait se souvenir de mes hauteurs mémorisées. Cela signifie que l’essentiel de la logique se trouve dans le boîtier et que, par conséquent, je pourrais construire une unité de commande alternative pilotée à la voix.
Un peu de médecine légale sur le panneau cassé
Vu de l’extérieur, le panneau ressemble à peu près à n’importe quel autre panneau du marché.

KQUEO control panel
De l’intérieur, c’est assez différent

KQUEO control panel board front

KQUEO control panel board back
Les composants pertinents ici sont :
- MC96F8208s, un microcontrôleur CMOS 8 bits mono-puce avec convertisseur A/N 12 bits
- 74HC595D, un registre à décalage 8 bits à entrée série et sortie série ou parallèle avec verrous de sortie
- Un afficheur 3 chiffres à 7 segments et 11 broches, entièrement générique ; le brochage de tous ceux en vente semble être le même.
La principale différence avec tous les autres modèles pour lesquels des gens ont fait un certain travail de rétro-ingénierie, c’est que celui-ci n’a que 4 fils.
- VCC (5v)
- GND
- Tx
- Rx
Un peu de médecine légale sur celui qui fonctionne.
À l’époque, je ne savais pas vraiment ce qu’étaient TX et RX. J’ai demandé à un ami qui se trouve être ingénieur en électronique et expert dans le domaine (il fait du conseil, n’hésitez pas à l’embaucher :p). Il m’a orienté vers un appareil que je pouvais utiliser pour intercepter ce que le panneau échangeait avec le boîtier de commande, ainsi que le logiciel approprié.

Logic Analyzer

Breadboard wiring for logic analyzer

Breadboard wiring for logic analyzer

Breadboard wiring for logic analyzer
J’ai passé un moment à faire monter et descendre le bureau pendant que mes chiens me regardaient, plutôt perplexes, tout en capturant les échanges avec Saleae Logic 2
Je n’avais aucune idée du protocole exact utilisé par cette connexion, alors j’ai tout simplement deviné en me basant sur le fait que les deux broches de données du câble sont reliées aux broches 6 et 7 du MCU, à savoir respectivement TXD(SCL)/RXD(SDA).
Saleae permet de faire passer le signal capturé par divers analyseurs intégrés ; le bon s’est avéré être UART à 57600 Bits/s, série asynchrone 8 bits.
Donner un sens aux données capturées.
J’ai capturé un gros bloc de données :
Maintenant, pour donner un sens à ces données, il me fallait savoir ce que fait la carte.
Quelques faits :
- L’afficheur 3 chiffres est un modèle à cathode commune ; les broches 12, 9 et 8 doivent être mises à la masse pour allumer respectivement les chiffres 1, 2 et 3
- Les broches 12, 9 et 8 sont reliées à AN10, AN8 et AN9 du MCU respectivement via une diode.
- Le registre à décalage est commandé directement par le MCU ; il reçoit 8 bits en série, puis un reset de clk, et il envoie les données (je crois)
- Les lettres utilisées pour le brochage de l’écran LCD sont les habituelles
A-Get.pour représenter les segments d’un chiffre, comme illustré dans ce graphique de wikipedia

LCD Pinout
À suivre
En supposant que j’aie correctement cartographié le circuit et bien compris le protocole, la seule pièce manquante est de faire correspondre les messages du gist aux bits envoyés à l’écran LCD.
J’essaie actuellement de faire correspondre la dernière ligne du gist :
0xE4,0xF7,0x00,0x00,0x00,0x00,0x55,0x10,0x98,0x00,0x00,0x01,0x53,0x61
Pour produire d’une manière ou d’une autre :
0x22,0x22,CB à envoyer au registre à décalage