Ingénierie inverse sur le clavier de contrôle d'un spa

Salut à tous !

Je suis un débutant complet à la fois avec l’Arduino et l’électronique en général, j’arrive directement du monde de la programmation. La seule partie avec laquelle je me sens à l’aise est le codage des sketches ;).

Voilà pour qui je suis, puisque c’est mon premier post dans ce forum :). J’espère que je choisirai mes mots correctement, du moins j’essaierai de le faire.

Maintenant, mon projet. Je recherche un moyen d’ajouter une télécommande à distance à mon spa. Cela semble assez simple (avec les connaissances appropriées :)) car le clavier communique avec la carte mère interne à l’aide d’un câble à 4 broches (VDD, RX, TX, GND).
Mon hypothèse de débutant est que je devrais pouvoir utiliser l’Arduino Uno que je possède en tant que “proxy” pour pouvoir effectuer à la fois des opérations de lecture et d’écriture sur le signal.

Est-ce que quelqu’un sait comment je pourrais traduire le signal multiplexé provenant de la carte mère du spa et générer également les signaux appropriés pour augmenter / diminuer la température, ou activer / désactiver la pompe ou les bulles ?

J’ai déjà vérifié que la broche VDD fournissait un courant 5V+, et j’ai pu lire un signal analogique en utilisant les broches RX / TX de l’Arduino Uno.

Je joins quelques photos du circuit imprimé du contrôleur. La puce au milieu est étiquetée PIC16F723A.

Quelqu’un peut-il m’aider, j’ai hâte d’en savoir plus sur ce nouveau monde :).

PCB_front.jpg

comme tu le discernes bien, il y a deux problèmes plutôt bien séparés :
1 - connaitre le protocole électrique. Avec du +5V comme alim, il est probable que ce soit du TTL...
2 - connaitre le protocole applicatif :

  • comment identifier le début d'une trame (une commande)
  • comment analyser le contenu de la commande pour y trouver les instructions.
  • comment répondre (éventuellement)

le clavier communique avec la carte mère interne à l'aide d'un câble à 4 broches (VDD, RX, TX, GND).

J'ai déjà vérifié que la broche VDD fournissait un courant 5V+

Le clavier est-il alimenté? ou reçoit-il son 5v de la part du SPA ? avez vous pu vérifier que Rx et Tx sont en 0V ou 5V ?

Si le courant vient du SPA, et que tout est en 0 ou 5V, alors en prenant un peu de risques, vous pouvez brancher votre arduino à la place du SPA en connectant la pin VDD sur la sortie 5V, la pin GND sur GND et la pin marquée Rx sur la pin 2 et la pin marquée Tx sur la pin 3 de l'arduino

ensuite il ne reste plus qu'à écrire un petit bout de code avec SoftwareSerial sur les pins 2 et 3 (attention à l'ordre) qui écoute ce qui vient du clavier et l'afficher sur Serial dans la console. il faudra tester sans doute plusieurs vitesses, commencez à 9600 bauds.
ça vous donnera une idée de ce que le clavier balance comme info. comme il y a un afficheur, le SPA doit aussi lui balancer de l'info...

faudrait en pratique intercepter le dialogue avec une sonde pour essayer de deviner le protocole


vos images

FRONT
PCB_front.jpg

BACK

Bonjour

faudrait en pratique intercepter le dialogue avec une sonde pour essayer de deviner le protocole

OUI !!! Pour quelques Euros on trouve des 'analyseurs Logiques 8 bits' compatibles avec le logiciel gratuit du fabricant d'analyseurs logiques Saleae et compatibles avec le logiciel Open Source Sigrok/Pulseview

Exemple : SALEAE – analyseur logique 24M 8CH, 24M, 8 canaux Arm, microcontrôleur professionnel, débogage FPGA avec tampon | AliExpress

C'est un outil indispensable pour l'ingénierie inverse !! ( série, I2c, SPI, télécommandes....)
Il en est question de temps à autres sur ce forum, içi par exemple : Arduino Forum
I me semble même qu'un tutoriel a été rédigé

Capturer des trames , les décoder pour les décortiquer ensuite devient facile...... il est même possible de poster içi des trames pour un décorticage participatif..... :slight_smile:

Merci à tous pour vos réponses rapides !

J-M-L:
Le clavier est-il alimenté? ou reçoit-il son 5v de la part du SPA ? avez vous pu vérifier que Rx et Tx sont en 0V ou 5V ?

Si le courant vient du SPA, et que tout est en 0 ou 5V, alors en prenant un peu de risques, vous pouvez brancher votre arduino à la place du SPA en connectant la pin VDD sur la sortie 5V, la pin GND sur GND et la pin marquée Rx sur la pin 2 et la pin marquée Tx sur la pin 3 de l'arduino

Je confirme que le clavier reçoit son alimentation du port VDD en 5v, et j'ai bien pu lire un signal avec la commande Serial.read. Maintenant il faut en effet que j'arrive à décoder le protocole utilisé.

Je viens de me commander l'analyseur logique, je vais regarder quelques tutos et espérer que le protocole soit simple à décoder :slight_smile:

Je reviendrai très certainement vers vous avec de nouvelles questions dès que je le recevrai ^^.

Bonne exploration!

Si l'attente de la livraison est trop longue il est possible de faire un analyseur logique sommaire avec :

Le logiciel OLS : L'Xtreme - OLS client

Vu le coût et la disponibilité du matériel 'compatible Saleae' + 'compatible Sigrok/Pulseview') le développement de la solution précédente est arrêté.... fonctionnement non garanti !

orty_42:
Merci à tous pour vos réponses rapides !

Je confirme que le clavier reçoit son alimentation du port VDD en 5v, et j'ai bien pu lire un signal avec la commande Serial.read. Maintenant il faut en effet que j'arrive à décoder le protocole utilisé.

Je viens de me commander l'analyseur logique, je vais regarder quelques tutos et espérer que le protocole soit simple à décoder :slight_smile:

Je reviendrai très certainement vers vous avec de nouvelles questions dès que je le recevrai ^^.

bonjour
En attendant de recevoir le "salae", ce nest pas trés compliqué de faire qq essais de vitesses "standard" pour determiner la bonne vitesse de dialogue et de faire un log de ce qui "sort" en fonction de l'appui sur les touches

Hello à tous,

J’ai reçu mon analyseur ce matin :slight_smile: Voici ma première acquisition. J’ai essayé d’analyser avec un décodeur UART mais j’ai un peu de mal a interpréter ce que je vois.

A première vue, on dirait que je ne reçois que des valeurs 0, d’après les tutos que j’ai vu sur le net ce n’est pas très concluant, mais comme je débute peut-être que ça parlera plus à l’un de vous :wink:


Edit : après avoir changé la vitesse de transmission à 9600 baud ça va mieux :), j’ai posté trop vite…

Edit 2: voici la fiche technique du microcontrôleur du boitier de commande. Sur le papier je vois bien que j’avance parce que je récupère beaucoup d’infos, mais je nage complètement quant à la façon de les interpréter.

sample.zip (1.51 KB)

Bonsoir

l'enregistrement joint est pour Sigrok/Pulseview (fichier .sr)

Je vois(à 9600 bauds) 5 trames A5 07 0C B8 comme celle-ci :

et une trame A5 06 2C D7

Extrapoler à partir de deux seules trames., c'est fragile , mais ....

A5+07+0C = B8
A5+06+2C = D7

-Le 4eme octet de la trame semble être (sur ce petit échantillon de trames) une somme de contôle tout ce qu'il y a de plus basique

-A5 est peut être le marqueur de début de trame (à valider sur un grand nombre de rames variées)

-Les deux octets intermédiaires sont peut être les seuls porteurs d'info
06 et 07 ne diffèrent que de l'état d'un bit, idem pour 0C et 2C.... c'est peut être en binaire qu'il faut chercher une logique

ci joint 'export en .txt des données issues du décodeur 'UART'

La fiche technique du microcontroller PIC ne peut pas aider à décrypter le protocole , le comportement de ce microcontrolleur dépend du programme (firmware) qui y a été flashé

Proposition : récolter diverses trame en notant à chaque fois le réglages qui ont engendré ces trames, pour tenter de découvrir la logique.

export.txt (2.53 KB)

al1fch:
Bonsoir

Proposition : récolter diverses trame en notant à chaque fois le réglages qui ont engendré ces trames, pour tenter de découvrir la logique.

bonjour
AMHA l'ideal serait de faire un log des lignes TX/RX : le pcb comportant relativement peu "de choses"
un MCU(PIC), un afficheur 3X7 segments, 6 push button, 1 buzzer
et de noter les changements entre trames , je ne serais pas trop surpris de facilement detecter/corréler des trames concernant les appuis sur les touches et des trames concernant la gestion de l'afficheur/buzzer selon le sens du dialogue