Pour déboguer un programme simple pour microcontrôleur, vous n'avez généralement besoin que d'un port série, d'une LED, de quelques instructions printf et d'un peu de matière grise. Cependant, pour des programmes plus massifs et complexes, avoir sous la main un bon outil de débogage simplifiera considérablement la démarche.

 
black magic probe v2.1
La Black Magic Probe (à gauche) connectée à une carte 1Bitsy STM32F415.

JTAG et SWD

Avec l'avènement de la norme JTAG, le débogage n'est plus vraiment un problème, mais tous les microcontrôleurs ne disposent pas d'interfaces de ce type. Dans sa version complète, la connexion nécessite au moins cinq broches de contrôleur (le connecteur JTAG complet possède vingt broches !), et les constructeurs de microcontrôleurs préfèrent parfois utiliser une interface de débogage simplifiée ou personnalisée pour réduire les ressources nécessaires. Les processeurs dotés de cœurs ARM plus modestes, par exemple, sont plus souvent équipés d'un port SWD (Serial Wire Debug) qui ne nécessite que deux broches.

Au-delà du choix du bon outil, la mise en place d'un environnement de débogage n'est pas chose facile. Si vous y mettez le prix, la situation sera évidemment radicalement différente, mais si vous optez pour le GNU Debugger et l’environnement OpenOCD, l’approche sera déjà moins confortable.

La Black Magic Probe accepte à la fois les interfaces JTAG et SWD

La Black Magic Probe (BMP) de 1BitSquared, objet de ce banc d’essai, est un outil de débogage destiné à résoudre ces problèmes. Non seulement l'outil accepte à la fois les protocoles JTAG et SWD, mais il dispose en outre d'un serveur GNU Debugger (GDB) intégré destiné à simplifier l'installation de la chaîne d'outils, et fonctionne sous Windows, Linux et macOS.

Avant d’entrer avec enthousiasme dans le vif du sujet, notez que la BMP concerne spécifiquement les microcontrôleurs ARM Cortex-M et Cortex-A, mais qu’ils sont nombreux sur le marché (STM32, SAM, LPC, nRF5, entre autres).

Ce que vous pouvez faire avec la Black Magic Probe

  • Charger votre application dans la mémoire flash ou RAM cible.
  • Faire fonctionner votre programme pas-à-pas.
  • Exécuter votre programme en temps réel et l'arrêter à la demande.
  • Examiner et modifier les registres de l'unité centrale et la mémoire.
  • Obtenir l’historique de la pile d’appel.
  • Disposer de six points d'arrêt max. assistés par le matériel.
  • Définir jusqu'à quatre points d’observation (lecture, écriture, accès) assistés par le matériel.
  • Bénéficier d’un nombre illimité de points d'arrêt logiciels si vous exécutez l'application à partir de la mémoire RAM.