Ada sur une cible embarquée (FRDM-K22F)

Posté le 24 mai 2020 dans Software

Le but premier de mon apprentissage du langage Ada, c'est de l'utiliser avec des micro-contrôleurs.

La société Adacore propose une solution open source pour programmer en Ada, que ce soit sur PC/MAC ou sur cible embarquée. Les outils constituant cette solution sont téléchargeables ici.

Pour une cible embarquée, 2 packages sont nécessaires :
  • Le package gnat-community-xxx-yyyyy-zzz installe GPS, un IDE dédié à la programmation en Ada et programmé lui-même en Ada. Le compilateur gnat pour PC/MAC est également installé.
  • Le package gnat-community-xxx-yyy-arm-elf-zzz est dédié à Ada sur des cibles ARM et RISC-V. Le compilateur gnat dédié est installé. Il faut lui associer le projet embedded-runtimes d'Adacore qui permet de créer des run-time Ada pour plusieurs micro-contrôleurs et cartes du marché.

Pour mon apprentissage, j'ai choisi un micro-contrôleur (NXP Kinetis MK22F512VLH12) et une carte d'éval (NXP FRDM-K22F) que je connais bien. Ce micro-contrôleur et cette carte ne sont pas gérés par le projet embedded-runtimes. Ce choix est à la fois un handicap et une force. Si je choisis un couple micro/carte déjà gérés, je démarre plus rapidement la programmation mais je dois apprendre à connaître le micro-contrôleur et la carte, ce qui n'est pas le but. En choisissant un couple micro/carte que je connais, je me concentre sur le soft et je plonge directement dans les entrailles d'Ada et de son écosystème. C'est plus compliqué, plus long, mais ô combien plus formateur.


FRDM-K22F board

La carte FRDM-K22F et son micro-contrôleur MK22F512VLH12
(la plus grosse puce vers le centre de la carte).


L'IDE GPS d'Adacore permet d'exécuter le programme en cours d'écriture directement sur la cible à condition de respecter quelques points.

Vérifier que le firmware du port SDA est à jour :

Tout d'abord, le firmware du chip gérant le port "SDA" (port USB en haut de l'image) doit être à jour.
Pour cela, il faut aller sur le site dédié de NXP.

Le tableau suivant montre les différentes versions du firmware et leurs fonctionnalités.
OpenSDA comparison

Il nous faut la dernière version du firmware, la V2.2.

Sélectionner la bonne carte.

OpenSDA select board

Comme ceci.

OpenSDA FRDM-K22F

Cliquer sur "Check which Bootloader version". L'image suivante doit s'afficher.

OpenSDA version check

Vérifier si le firmware est à jour avec les instructions contenues dans l'image. Peut-être que lorsque vous ferez le test, les instructions auront changé. Si c'est le cas, suivez les nouvelles instructions.

Si le firmware n'est pas à jour, dommage... Dommage parce que mettre le firmware à jour n'est pas une partie de plaisir. Le plus simple est d'utiliser une sonde de programmation. Il est également possible d'utiliser deux cartes FRDM-K22F. L'une servant à programmer l'autre. Je ne donnerais pas de détails ici. Le but de cet article est ailleurs.

Configurer GPS :

Pour pouvoir exécuter les programmes écrits dans GPS sur la cible embarquée, il faut faire un peu de configuration.

La première chose à faire est de choisir un runtime. Il faut cliquer sur le menu Edit/Project properties... puis choisir l'onglet Build/Toolchain. Comme ceci.

GPS toolchain

Vérifier que arm-eabi est sélectionné dans Toolchains.
Dans Runtimes, sélectionner le couple profil/micro-contrôlleur que vous voulez utiliser. Ici, il s'agit d'un runtime que j'ai créé moi-même.

Ensuite, il faut configurer le protocole de communication avec la cible. Comme ceci.

GPS Embedded PyOCD config

Et voilà !
Vous êtes prêt(e) à exécuter du code Ada sur une cible embarquée en cliquant sur l'icône Debug on Board.
GPS debug

Mais attention. GPS est assez instable lors des sessions de debug. Il faut bien laisser le temps à l'interface de réagir aux commandes. Il faut bien stoper une session de debug avant de basculer sur la perspective par défaut. Il ne faut pas mettre la session de debug en pause deux fois...

De plus, l'interface OpenSDA n'a pas les mêmes capacités qu'une sonde de debug. Une telle sonde est très utile lors de la mise au point d'un runtime. Elle permet de capturer les fault trap et autres jouyeusetés qui ne le seraient pas forcément avec l'interface OpenSDA.

Dans un autre billet, j'expliquerai comment utiliser une sonde P&E Micro avec la carte FRDM-K22F et GPS.