Answered question 10 (life is a pain)
This commit is contained in:
178
Tp2.md
178
Tp2.md
@@ -99,6 +99,8 @@ Ensuite on va sous `CLOCK SIGNAL` -> `CPU clock` et on voit bien que l'option 52
|
||||
|
||||
Pour ca j'ai pas trouvé honnêtement mais dans le menu `DRAM` -> `DRAM PARTS` je vois que la ram DDR2 est selectionnée et que c'est le seul champ qui porte le nom de notre carte SAMA5D3 et avec un identifiant MT47H64M16 x2 et honnêtement je sais pas complêtement ce que ca veut dire mais l'info doit être la...
|
||||
|
||||
[TODO] aller chercher sur google la datasheet du composant RAM pour trouver ses specs précises
|
||||
|
||||
3. “Next Software Type” est bien “U-Boot”
|
||||
|
||||
Pour ca on peut le voir directement depuis le menu principal avec un champ qui s'appelle `Next software type` et la on voit direct que c'est marqué U-BOOT mais on pourrait aussi choisir LINUX KERNEL ou Android par exemple.
|
||||
@@ -239,6 +241,10 @@ Maintenant quand je retourne dans le fichier .config et la je peux y voir les va
|
||||
|
||||
Je pense que j'aurais pu le faire manuellement mais au risque que d'autres valeurs doivent être changées sur le moment et que je les loupes donc c'est mieux de passer par le menuconfig.
|
||||
|
||||
EDIT: Il y a aussi une autre chose à modifier, il faut aller activer "CONFIG_AUTOBOOT_MENU_SHOW" car sinon il n'y aura pas de menu au moment du boot ce qui est chiant plus tard.
|
||||
|
||||
On peut activer ca sous `Boot options` > `Autoboot options` et cocher "show a menu on boot"
|
||||
|
||||
Dans la version de U-BOOT que on utilise, on doit faire un changement dans le code source pour permettre de faire fonctionner correctement les inputs clavier.
|
||||
|
||||
Dans le répertoire `/cmd` on peut trouver le fichier bootmenu.c que on peut éditer.
|
||||
@@ -289,6 +295,178 @@ Comme 760KB < 786KB ca veut dire que U-Boot en théorie devrait tenir, mais bon
|
||||
|
||||
## Flash d'AT91 et U-Boot sur la carte
|
||||
|
||||
Il faut aller chercher le programme SAM-BA à l'addresse
|
||||
|
||||
`https://www.microchip.com/en-us/development-tool/SAM-BA-In-system-Programmer`
|
||||
|
||||
Et comme je suis dans un environnement sans interface graphique il me faut le lien de téléchargement de la version `3.5` avec le lien
|
||||
|
||||
`https://ww1.microchip.com/downloads/aemDocuments/documents/MPU32/ProductDocuments/SoftwareTools/sam-ba_3.5-linux_x86_64.tar.gz`
|
||||
|
||||
On peut ensuite
|
||||
|
||||
`wget https://ww1.microchip.com/downloads/aemDocuments/documents/MPU32/ProductDocuments/SoftwareTools/sam-ba_3.5-linux_x86_64.tar.gz`
|
||||
|
||||
Je fais cela à la racine de l'utilisateur par ce que c'est un outil
|
||||
|
||||
Et pour décompresser notre tar.gz on va utiliser la commande `tar -xf`
|
||||
|
||||
Dans notre cas `tar -xf sam-ba_3.5-linux_x86_64.tar.gz`
|
||||
|
||||
Ensuite on peut essayer
|
||||
|
||||
```bash
|
||||
./sam-ba
|
||||
SAM-BA Command Line Tool v3.5
|
||||
Copyright 2018 Microchip Technology
|
||||
|
||||
Usage: ./sam-ba [options]
|
||||
|
||||
Options:
|
||||
-v, --version Displays version information.
|
||||
-h, --help Displays this help.
|
||||
-t, --tracelevel <trace_level> Set trace level to <trace_level>.
|
||||
-L, --applet-buffer-limit <SIZE> Set applet buffer limit to <SIZE>
|
||||
bytes (default 131072).
|
||||
-x, --execute <script.qml> Execute script <script.qml>.
|
||||
-p, --port <port[:options:...]> Communicate with device using <port>.
|
||||
-d, --device <device[:options:...]> Connected device is <device>.
|
||||
-b, --board <board[:options:...]> Connected board is <board>.
|
||||
-m, --monitor <command[:options:...]> Run monitor command <command>.
|
||||
-a, --applet <applet[:options:...]> Load and initialize applet <applet>.
|
||||
-c, --command <command[:args:...]> Run command <command>.
|
||||
-w, --working-directory <DIR> Set working directory to <DIR>.
|
||||
```
|
||||
|
||||
Ce qui nous donne une liste d'arguments disponibles.
|
||||
Note: la doc est dispo sous `doc/index.html` dans le répertoire samba et dans l'énoncé on propose d'aller lire `doc/samad3.html`
|
||||
|
||||
Dans l'énoncé on nous parle d'un applet nommé "nandflash" et comme je ne sais pas ce que c'est ou comment l'utiliser je suis allé regarder le fichier "nandflash.html" aussi dispo dans le répertoire doc
|
||||
|
||||
Dedans il y a un exemple de commande pour avoir l'aide qui est la suivante
|
||||
|
||||
`./sam-ba -p serial -d sama5d3 -a nandflash:help`
|
||||
|
||||
Mais il me manque apparemment une lib nommée libgl, pour la trouver j'ai fait comme plus haut :
|
||||
|
||||
`sudo apt search libgl | grep dev`
|
||||
|
||||
Et en demandant à un camarade il semble que le paquet
|
||||
|
||||
`libgl1-mesa-dev/noble-updates 24.0.9-0ubuntu0.1 amd64`
|
||||
|
||||
soit le bon. Dans les faits on a pas besoin de la version dev car on ne va pas compiler samba mais bon ca marche donc voila
|
||||
|
||||
Maintenant que j'ai les bonnes libs je peux lancer la commande et j'ai le résultat attendu dans la doc
|
||||
|
||||
```Bash
|
||||
./sam-ba -p serial -d sama5d3 -a nandflash:help
|
||||
Syntax: nandflash:[<ioset>]:[<bus_width>]:[<header>]
|
||||
Parameters:
|
||||
ioset I/O set
|
||||
bus_width NAND bus width (8/16)
|
||||
header NAND header value
|
||||
Examples:
|
||||
nandflash use default board settings
|
||||
nandflash:2:8:0xc0098da5 use fully custom settings (IOSET2, 8-bit bus, header is 0xc0098da5)
|
||||
nandflash:::0xc0098da5 use default board settings but force header to 0xc0098da5
|
||||
For information on NAND header values, please refer to SAMA5D3 datasheet section "11.4.4 Detailed Memory Boot Procedures".
|
||||
```
|
||||
|
||||
De ce que j'ai compris on va avoir besoin des actions suivantes avec nandflash
|
||||
|
||||
- erase (car on doit dabord effacer la zone de la NAND)
|
||||
- writeboot (pour écrire le bootloader level 1 at91 avec un header)
|
||||
- write pour écrire le bootloader level 2 u-boot
|
||||
|
||||
On peut commencer par erase la memoire pour voir si notre communication fonctionne avec la carte
|
||||
|
||||
`./sam-ba -p serial -b sama5d3-xplained -t 5 -a nandflash -c erase`
|
||||
|
||||
CEPENDANT. Pour que cette commande fonctionne il faut des étapes préablables.
|
||||
|
||||
- On ouvre PICOCOM sur la carte comme avant.
|
||||
- On retire le jumper JP5 (le jumper le plus proche du port USB d'alim)
|
||||
- On appuie sur le bouton RESET (bouton le plus proche du derrière de la carte avec marqué RESET)
|
||||
- On est sensé voir le message "RomBoot" dans le picocom
|
||||
- On ferme picocom
|
||||
|
||||
On peut ensuite lancer notre commande.
|
||||
|
||||
Cependant j'ai perdu beaucoup de temps à ne pas comprendre pourquoi ca ne voulait pas marcher. Mais comme je suis sur une VM j'avais pas pensé à autoriser le second USB d'atteindre la VM. En fait Picocom peut parler avec le port série, cependant le port usb d'alim est celui par lequel on va flasher notre carte. Il faut donc que les deux USB soient autorisés sur la carte.
|
||||
|
||||
Et maintenant la commande devrait marcher. Cependant c'est une mauvaise pratique de tout erase comme je l'ai fait. Je l'ai fait juste pour tester.
|
||||
|
||||
Dans l'idéal il faut calculer exactement la zone de erase. C'est ce qu'il faudra faire les prochaines fois.
|
||||
|
||||
Dans la doc pour écrire Sama5d3-xplained pour écrire notre bootloader at91 il faudrait utiliser la commande
|
||||
|
||||
`$ sam-ba -p serial -b sama5d3-xplained -t 5 -a nandflash -c writeboot:bootstrap.bin -c verifyboot:bootstrap.bin
|
||||
`
|
||||
|
||||
Seul problème c'est que apparemment il faudrait ajouter un genre de header pour que cela fonctionne et ce dernier demande quelques calculs.
|
||||
|
||||
On peut ajouter un header avec le `-a`
|
||||
|
||||
Et pour avoir les infos à propos de ca on peut effectuer la commande :
|
||||
|
||||
```Bash
|
||||
./sam-ba -p serial -d sama5d3 -a nandflash:help
|
||||
Syntax: nandflash:[<ioset>]:[<bus_width>]:[<header>]
|
||||
Parameters:
|
||||
ioset I/O set
|
||||
bus_width NAND bus width (8/16)
|
||||
header NAND header value
|
||||
Examples:
|
||||
nandflash use default board settings
|
||||
nandflash:2:8:0xc0098da5 use fully custom settings (IOSET2, 8-bit bus, header is 0xc0098da5)
|
||||
nandflash:::0xc0098da5 use default board settings but force header to 0xc0098da5
|
||||
For information on NAND header values, please refer to SAMA5D3 datasheet section "11.4.4 Detailed Memory Boot Procedures".
|
||||
```
|
||||
|
||||
On devrait ajouter à notre commande 'nandflash:2:8:0xc0098da5' mais en faisant nos calculs pour ajouter notre header
|
||||
|
||||
Dans l'énoncé il est mentionné que on veut utiliser un IOSET de 1 et un bus_width de 8 donc notre commande ressemblerait plutôt 'nandflash:1:8:0xc0098da5'
|
||||
|
||||
Et maintenant on veut calculer notre header
|
||||
|
||||
- 4 premiers bits : 12 (0xC) 1100
|
||||
- 1 bit à 0
|
||||
- 9 bits pour faire 36 000100100
|
||||
- 2 bit pour faire 00
|
||||
- 3 bit pour faire 1 (001) 001
|
||||
- 9 bits pour faire 64 001000000
|
||||
- 3 bits pour faire 2 010
|
||||
- 1 bit pour faire 1 1
|
||||
|
||||
full 1100 0000 1001 0000 0010 0100 0000 0101
|
||||
|
||||
0xC0902405
|
||||
|
||||
Header final : `0xC0902405`
|
||||
|
||||
Et donc notre commande ressemble désormais à ca
|
||||
|
||||
`./sam-ba -p serial -d sama5d3 -a nandflash:1:8:0xC0902405`
|
||||
|
||||
## [Q10] Donnez la commande complète vous ayant permis de flasher AT91Bootstrap et U-Boot dans la NAND de votre carte.
|
||||
|
||||
Voici la commande complete
|
||||
|
||||
`./sam-ba -p serial -b sama5d3-xplained -t 5 -a nandflash:1:8:0xC0902405 -c writeboot:sama5d3-bootstrap.bin -c verifyboot:sama5d3-bootstrap.bin`
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user