Enregistrement de données sur la mémoire flash de la carte

Par défaut, la carte fonctionne comme un lecteur ou une clé USB lorsqu'elle est connectée à un ordinateur, c'est à dire que l'on a un accès en écriture sur la mémoire flash de la carte en passant par le port USB.

Pour effectuer des enregistrements de données (par exemple des valeurs d'accélération), c'est le microprocesseur nRF52840 de la carte qui a besoin d'un accès en écriture sur la mémoire de la carte. Le problème est que permettre l'accès en écriture à la fois au microprocesseur et par le port USB risque de causer des conflits et doit absolument être proscrit. 

C'est la raison pour laquelle il faut configurer la carte pour permettre au processeur d'écrire dans la mémoire pendant l'exécution du programme. Le port numérique D2 a été configuré pour permettre cela : il suffit de le configurer comme une entrée avec tirage vers le haut (PULL UP) et de le relier à la masse de la carte. Cette configuration est effectuée dans un fichier nommé boot.py qui est exécuté une fois à chaque mise sous tension de la carte. Cela permet de ne pas resté "coincé" en mode écriture par le processeur. Dans ce cas vous n'auriez plus la possibilité d'écrire dans la mémoire via USB et donc pas de possibilité de changer le code dans la carte. Cela m'est arrivé avec une carte et il est très compliqué de la "débloquer".

Fichier boot.py :
import board
import digitalio
import storage 

# Création d'un objet "switch" correspondant au port numérique D2 :
switch = digitalio.DigitalInOut(board.D2)

# Configuration du port D2 en tant qu'entrée :
switch.direction = digitalio.Direction.INPUT

# Configuration du port D2 en PULL UP (tirage vers le haut) :
switch.pull = digitalio.Pull.UP 

# Si le port D2 est connecté à la masse (GND), CircuitPython peut écrire dans la mémoire : 
storage.remount("/", switch.value)
En résumé

une fois le fichier boot.py enregistré sur la carte, il suffit de relier le port D2 à la masse avec un fil avant de la mettre sous tension et au démarrage la carte sera configurée avec l'accès en écriture donné au processeur (donc au programme) :
Pour revenir en mode USB, il suffit d'enlever le fil et redémarrer la carte.
 


Recherche