Objectifs

Sur le kit AT91SAM9x5, être capable :

Le kit AT91SAM9x5 dispose d’une mémoire ROM interne (64 KOctets) contenant un programme d’amorçage (bootstrap) permettant de lancer un démarrage (boot) sur au choix : la NAND Flash, la SDCard ou la DataFlash.

Ici, on dispose de 256 MOctets de NAND Flash (29F2G08 : 2Gb / 8 = 256 MO (Micron TechnologyMT29F2G(08,16)AAD,ABD.pdf)

Remarque :

La mémoire flash est une mémoire de masse à semi-conducteurs ré-inscriptible, c’est-à-dire une mémoire possédant les caractéristiques d’une mémoire vive mais dont les données ne disparaissent pas lors d’une mise hors tension. Ainsi, la mémoire flash stocke les bits de données dans des cellules de mémoire, mais les données sont conservées en mémoire lorsque l’alimentation électrique est coupée. La technique flash se décline sous deux principales formes : flash NOR et NAND, selon le type de porte logique utilisée pour chaque cellule de stockage. Sa durée de vie est limitée par le nombre de cycles d’écriture (ici 100,000 PROGRAM/ERASE cycles).

La NAND flash est plus rapide à l’effacement et à l’écriture, offre une plus grande densité et un coût moins important par bit qu’une flash NOR. Toutefois son interface d’entrée / sortie n’autorise que l’accès séquentiel. Cela tend à limiter au niveau du système sa vitesse effective de lecture, et à compliquer le démarrage direct à partir d’une mémoire NAND. De ce fait elle est moins bien adaptée que la NOR pour exécuter du code machine. Du fait de son prix moins élevé, elle est présente dans de nombreux systèmes embarqués (assistants et téléphones portables) en utilisant par blocs la mémoire RAM en mode page comme support d’exécution. Elle est donc utilisée pour le stockage d’informations. Quasiment toutes les mémoires de masse externes (carte MMC, carte SD et carte MS) utilisent cette technologie.

On va s’intéresser à l’accès à la NAND Flash pour y installer un système à exécuter au démarrage. Atmel fournit le logiciel SAM-BA pour contrôler les mémoires internes du kit (SRAM, DDRAM, NAND Flash, DATA Flash).

SAM-BA

Le logiciel SAM-BA d’Atmel fournit un ensemble d’outils pour la programmation de microcontrôleurs ARM (SAMA5, SAM3, SAM4, SAM7 et SAM9).

$ sudo apt-get install tcl8.4 tclx8.4 tk8.4

$ cd /opt/

$ unzip sam-ba_2.15.zip 

$ rm -f sam-ba_2.15.zip

$ ls
sam-ba_cdc_linux  

$ ls sam-ba_cdc_linux 
applets  doc  sam-ba  sam-ba_64  tcl_lib  usr

// Manuellement
$ export PATH=$PATH:/opt/sam-ba_cdc_linux

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:$HOME/bin:/opt/sam-ba_cdc_linux

// Automatiquement
$ vim ~/.bashrc
export PATH=$PATH:/opt/sam-ba_cdc_linux

$ source $HOME/.bashrc

On utilisera SAM-BA pour flasher un nouveau système sur le kit Atmel. Pour cela, il faut relier le kit (le périphérique) au PC (l’hôte) en utilisant le bus USB.

Remarque : Le bus USB ne permet pas de relier entre eux deux périphériques ou deux hôtes : le seul schéma de connexion autorisé est un périphérique sur un hôte. Pour éviter des branchements incorrects, la norme spécifie deux types de connecteurs : le type A, destiné à être situé sur l’hôte, et le type B, destiné à être situé sur le périphérique. Une mise à jour de la norme USB 2 introduit une version miniature du connecteur B : le mini-B. Elle est fonctionnellement équivalente au connecteur B, mais de dimensions nettement réduites.

$ dmesg
...
[84712.871591] usb 3-9.4.2: New USB device found, idVendor=03eb, idProduct=6124
[84712.871594] usb 3-9.4.2: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[84712.872120] cdc_acm 3-9.4.2:1.0: This device cannot do calls on its own. It is not a modem.
[84712.872157] cdc_acm 3-9.4.2:1.0: ttyACM0: USB ACM device

$ lsusb
...
Bus 003 Device 020: ID 03eb:6124 Atmel Corp. at91sam SAMBA bootloader

$ ls -l /dev/ttyACM0
crw-rw---- 1 root dialout 166, 0 déc.  17 04:57 /dev/ttyACM0

Attention : le périphérique /dev/ttyACM0 ne sera accessible en lecture/écriture que par l’utilisateur propriétaire root et les membres du groupe dialout. Tous les autres (other) utilisateurs auront aucun accès. Pour modifier cette situation, vous pouvez soit changer les droits manuellement ($ sudo chmod 666 /dev/ttyACM0) soit ajouter l’utilisateur (ici toto) dans le groupe dialout ($ sudo adduser toto dialout).

$ sam-ba_64

Grâce à SAM-BA, il sera donc possible d’accéder en lecture/écriture à l’ensemble des espaces mémoires intégrés au kit (DDRAM, NAND, …). Quelque soit le kit utilisé, il est primordial de connaître le placement des cavaliers ou micro switch à configurer pour activer ou désactiver les accès.

la GUI de SAM-BA offre des fonctionnalités très complètes mais il sera plus intéressant de travailler avec des scripts pour automatiser le processus de flashage. Ici, on utilisera le langage Tcl (Tool Command Language).

Remarque : Tcl est un langage de script initialement conçu en 1988 par John Ousterhout et son équipe à l’université de Californie à Berkeley. Il s’inspire principalement des langages C, Lisp, sh et awk. Ce langage à typage dynamique est multiplateformes, extensible, facile à apprendre et repose sur douze règles syntaxiques. Tcl s’interface très aisément avec le langage C, ce qui lui permet de servir par exemple d’interprète embarqué dans des applications.

Le site www.at91.com fournit un ensemble de ressources et d’images binaires prêtes à l’emploi pour un grand nombre de kits Atmel :

Principe

La séquence de démarrage du kit AT91SAM9x5 est la suivante :