Séquence de démarrage
Séquence de démarrage MicroPython
Le démarrage de la plateforme MicroPython fait intervenir deux fichiers qui sont :
-
boot.py : fichier de démarrage, configuration de la plateforme MicroPython.
-
main.py : script principal (le programme utilisateur).
Mais avant de rentrer plus avant dans les explications, il est important de rappeler quelques notions sur le système de fichiers MicroPython.
En effet, comme précédemment expliqué, le système de fichiers MicroPython utilise un répertoire racine / qui permet d’accéder à tous les espaces de stockage comme la carte microSD, la mémoire flash ou autres systèmes de fichiers montés sur la racine.
Système de fichiers MicroPython
Lorsque la carte est branchée en USB, un seul système de fichiers est exposé sur l’interface USB avec la priorité à la carte microSD si elle est présente, sinon c’est le système de fichiers contenu en mémoire flash qui sera exposé.
Sur la Pyboard-D, seule la mémoire flash est disponible au boot de la plateforme.
Ce qui met en avant la notion de système de fichiers par défaut avec carte microSD en priorité, puis mémoire flash interne s’il n’y a pas de carte microSD.
1. Séquence de démarrage - Pyboard originale
Système de fichiers MicroPython...
Fichier boot.py
Le fichier boot.py est le premier fichier chargé et traité au démarrage d’une plateforme MicroPython.
Celui-ci est exécuté lors du redémarrage matériel (mise sous tension) et du redémarrage logiciel (dit Soft Reboot) obtenu par la combinaison [Ctrl] D dans une session REPL.
Bien que le fichier boot.py soit capable d’exécuter n’importe quel code MicroPython, celui-ci n’est pas destiné à recevoir le script utilisateur (voir plutôt main.py), mais des instructions permettant d’initialiser la configuration matérielle de la plateforme (ex. : connexion WiFi, mode de l’interface USB, etc.).
L’exécution de boot.py doit être aussi brève que possible.
Un fichier boot.py qui n’achève pas son exécution suspend l’usage de fonctionnalités comme REPL ou RShell (qui utilise REPL). En cas de fichier boot.py bloquant le démarrage de la carte, il faut démarrer la carte en mode sans échec (Safe Mode) pour suspendre l’exécution de boot.py et main.py (cf. Annexe - Safe Mode et Reset Factory).
Le fichier boot.py est donc l’emplacement idéal pour :
-
établir une connexion réseau (WiFi ou Ethernet),
-
définir le mode de fonctionnement de l’interface USB (MSC pour le stockage, HID pour clavier/souris, VCP pour liaison USB-série),
-
monter le système de fichiers avec os.mount(),
-
dupliquer le terminal REPL avec os.dupterm() sur une interface série,
-
activer WebREPL (pour les cartes avec interface WiFi comme la Pyboard-D ou l’ESP8266/ESP32),
-
fixer le nom du script à exécuter après boot.py avec la fonction pyb.main(). Sans modification, c’est le fichier main.py qui sera exécuté.
1. Mode de l’interface USB
Dans son fonctionnement par défaut, l’interface USB de la carte Pyboard est configurée pour exposer un port série virtuel (VCP = Virtual Communication Port) et le service de stockage (MSC = Mass Storage Class) permettant d’accéder au système de fichiers MicroPython.
Il est cependant possible de reconfigurer l’interface USB pour exposer un port série virtuel + un périphérique de type clavier/souris (HID = Human Interface Device), point qui sera exploité...
Fichier main.py
Le fichier main.py contient le script utilisateur que la plateforme MicroPython doit exécuter, ce qui correspond au « programme principal » du projet.
Il est important de savoir que, contrairement aux plateformes Arduino, le fichier main.py est exécuté une et une seule fois !
Par conséquent, lorsque l’exécution de main.py est terminée, le traitement de celui-ci ne reprendra que lorsque la plateforme sera redémarrée (cycle d’alimentation, reset utilisateur ou soft reboot).
Le script principal doit donc organiser une boucle infinie while True ou exploiter AsyncIO (traitement asynchrone, routines en exécution concurrentes) pour exécuter toutes les tâches requises.
La fin d’exécution de main.py ne signifie pas pour autant qu’il n’y aura plus rien à exécuter. En effet, il est possible d’associer une fonction de rappel à un événement ou un timer. De fait, du code sera exécuté lorsque l’événement se produira (ou de façon régulière dans le cas d’un timer).
Séquence de démarrage en lumière
Sur la Pyboard originale, la procédure de chargement des fichiers boot.py et main.py se fait uniquement sur le périphérique par défaut (microSD ou flash) avec cet exercice pratique.Il sera ainsi possible de constater que seul le périphérique par défaut est considéré pour le chargement des fichiers boot.pyetmain.py. Par conséquent, si le fichier main.py ou boot.py est manquant sur la carte microSD, alors celui-ci ne sera pas chargé depuis la mémoire flash.
Sur la Pyboard-D, seule la mémoire flash est exploitée par la séquence de démarrage.
L’exercice mettra en lumière ce procédé de chargement en allumant une LED pour chacun des fichiers boot.py/main.py exécutés sur la carte microSD et/ou la mémoire flash.
Avant d’écrire les scripts, des LED rouges sont raccordées sur les broches X1 à X4 par l’intermédiaire d’une résistance de 1 kOhm (brun, noir, rouge) pour limiter le courant traversant la LED.
Brancher 4 LEDs sur les broches X1 à X4
Le pilotage de LED sur une Pyboard a fait l’objet d’un développement complet dans la section relative à la programmation des entrées/sorties (Cf. Programmer - Entrées/sorties). Le montage est facile à réaliser et peut être...
Safe Mode de la Pyboard
Bien que décrit plus en détail dans les annexes (cf. Annexes - Safe Mode et Reset Factory), ce chapitre est le bon endroit pour expliquer comment démarrer la carte en mode sans échec (Safe Mode).
Dans ce mode, la carte MicroPython démarre sans exécuter les fichiers boot.py et main.py. La carte Pyboard démarre donc avec son paramétrage par défaut, l’interface USB expose l’interface USB-série (VCP) et le service de stockage (MSC).
Procédez comme suit pour activer le mode sans échec sur une carte Pyboard déjà sous tension.
1. Presser et maintenir le bouton USR enfoncé.
2. Presser et relâcher le bouton Reset pour réinitialiser la carte alors que le bouton USR est toujours maintenu enfoncé.
3. Les LED vont cycler de vert à orange puis vert + orange et répéter cette séquence jusqu’à ce que le bouton USR soit relâché.
4. Maintenir le bouton USR enfoncé jusqu’à ce que la LED orange soit la seule allumée et relâcher le bouton USR.
5. La LED orange clignotera rapidement quatre fois puis elle s’éteindra, preuve que la carte a bien démarré en mode sans échec (Safe Mode).
Le mode sans échec n’est que temporaire et ne modifie pas la configuration de la carte. Le mode sans échec...
Séquence de démarrage et Pyboard-D
Il y a quelques précisions à apporter concernant la séquence de démarrage de la Pyboard-D. En effet, celle-ci utilise une LED RGB et non les quatre LED de couleur comme sur la carte Pyboard originale.
La LED RGB est également un indicateur de l’état du firmware MicroPython au démarrage de la Pyboard-D :
-
rouge : opération normale.
-
vert : mode sans échec (Safe Mode). Le fichier boot.py n’est pas exécuté.
-
bleu : initialise le système de fichiers MicroPython.
-
blanc : MBoot (voir ci-dessous).
À propos de MBoot
La mise à jour du firmware MicroPython sur la Pyboard originale passe par le mode DFU (Device Firmware Upgrade - mise à jour du firmware). DFU est un bootloader matériel gravé au sein du microcontrôleur qui facilite grandement la mise à jour (cf. Annexes - Mise à jour du firmware).
Le mode DFU peut uniquement accéder à la mémoire flash interne du microcontrôleur. Ce qui est problématique sur une Pyboard-D, puisque la mémoire flash utilisée par MicroPython est externe au microcontrôleur.
L’activation de MicroPython MBoot sur le STM32F7 de la Pyboard-D permet de contourner cette limitation matérielle grâce au firmware MBoot spécialement développé par MicroPython.org...