lundi 6 décembre 2021

Microcontroller debugging ou comment déboguer son micro-contrôleur ?

Voilà j'élargie un peu le sujet du débogage, j'étais braqué sur arduino et les interfaces de débogue ISP, SPI, JTAG, JTAGICE, debugWIRE mais en fait, je vais tenter de répondre à une question plus large ; comment déboguer mon microcontrôleur ? Quelque soit son type, sachant que la solution dépendra certainement du type (Harvard vs Princeton). Et je verrais bien ce que je peux utiliser avec Arduino ou autre.

Microcontrolleur ATmega 2560
Comment déboguer mon microcontrôleur Atmel AVR

Le débogue de microcontrôleurs est toujours une affaire de protocole entre l'IDE qui gère la chaîne de développement avec ses outils de compilation, de linkage et de débogue. Pour avoir une idée rapide de ce que peut-être un protocole de débogage, je vous propose de visiter rapidement la page : The debugWire protocol

Je dirais peut-être trop rapidement que debugWire est lié à l'AVR (structure du cœur du microcontrôleur). Ce que je ne souhaite pas c'est un protocole Liaison Série LS qui prenne la place du débogage à l'aide de TRACEs qui elles aussi passe par la LS car dans ce cas il est stipulé que vous devez retirer de votre code ce qui dialogue sur la LS.

Déboguer son microcontrôleur consiste à pouvoir le stopper dans un état stable où peut avoir accès aux mémoires et aux registres. On dit que l'on met un point d'arrêt à l'aide de l'IDE en face d'une ligne de code source et l'on peut alors visualiser le contenu des variables et des registres internes du microcontrôleur pour corriger une éventuelle erreur d'exécution.

BMP - General debugging methods
Article distrayant sur les différentes méthodes pour déboguer son microcontrôleur. On y apprend quelques abréviations fortes utiles :
ICE : In Circuit Emulator : il s'agit de remplacer la puce par une puce permettant d'accéder aux opérations internes du processeur (c'est cher).
ICD : In Circuit Debug : le chip propose en interne une partie et une liaison vers l'IDE permettant de le déboguer.

Le site vous présente d'autres techniques amusantes comme déboguer avec la Liaison Série, des Leds un LCD, pourquoi pas. Personnellement, sans système de déboguing je crois beaucoup dans les systèmes de TRACE.

Concernant les IDEs qui dialoguent "protocole de débogage" avec des microcontrôleurs, ce n'est pas difficile à priori, il n'y en a qu'un pour les "petits microcontrôleurs" et c'est microship :

MPLAB X IDE

Il vous faudra installer "en dessous" une chaîne de compilation qui correspond au microcontrôleur que vous souhaitez déboguer :

Toolchains for AVR (MCUs)

Attention cette page pourrait vous faire penser que vous ne pourrez déboguer que sur ARM-32bits mais il n'en est rien, il faut aller tout en bas de la page pour découvrir des Toolchain (cross-platform) pour d'autres plateformes : Windows, Linux mais également Darwin ou Mac OS X.

Et tout en bas de la page de la documentation : microship - onlinedocs

A expérimenter. 

Ce monde du débogue de microcontrôleur n'est pas "si ouvert" que cela finalement, mettre un point d'arrêt en face d'un ligne de code source et pouvoir s'y arrêter pour visualiser le contenu des variables de la mémoire et des registres de votre microcontrôleur ce n'est pas encore pour M. Jourdain.

Autres lectures :

github - ElTangas/jtag2updi
Micrologiciel à télécharger sur un ATmega MCU AVR qui lui permet de s'interfacer avec avrdude en utilisant le protocole jtagice Mk2 via une interface série. Ce mircologiciel fournit un pont pour programmer la nouvelle famille de MCU attiny817, qui utilisent l'interface UPDI :avrdude -> Interface série matérielle -> MCU programmeur (par exemple Mega328P) -> Série SW sur PD6 -> MCU cible (par exemple tiny817)