Pgm EEPROM
Transcription
Pgm EEPROM
Sauvegarde d’un programme en EEPROM Page 1 de 3 Procédure de sauvegarde d’un programme en EEPROM La procédure présentée ici permet de sauvegarder en EEPROM, donc de façon permanente, un programme développé en assembleur, en C ou en C++. La première étape consiste en la mise au point du programme en mémoire vive. Pour cela on utilise le fichier de spécification link_rom.spc. Le code est placé en mémoire vive à partir de l’adresse $3000. Lorsque le programme fonctionne tel que souhaité il est alors possible de le placer dans la mémoire EEPROM. Il pourra alors être exécuter depuis le moniteur CPU32Bug sans avoir à le charger de nouveau. La région de l’EEPROM aux adresses à partir de $F0000 est réservée pour les programmes de l’utilisateur. Seule la partition contenant le code du programme, les chaînes de caractères et une copie des données initialisées sera placée dans l’EEPROM. Les autres partitions vont rester en mémoire vive. Construction de l’image mémoire du programme Une nouvelle image mémoire du programme va devoir être construite. Pour cela on suggère de modifier le fichier de spécification link_rom.spc. La partition ROM va être placée à l’adresse $F0000. Voici un exemple du fichier de spécification résultant : partition { overlay { region {} data[roundsize=4]; /* region {} ram[roundsize=4]; /* region {} malloc[size=0x10000]; region {} stack[size=0x8000]; /* STKTOP = $; /* } o2; } RAM[addr=0x10000]; RAM to be initialized on reset */ RAM to be zeroed on reset */ /* RAM available to malloc() */ stack of at least 0x1000 bytes */ stack pointer reset value */ partition { overlay { region {} code; region {} init; region {} exit; region {} const; region {} string; DATA = $; } o1; } ROM[addr=0xF0000]; executable code */ pointers to C++ init thunks */ pointers to C++ exit thunks */ constant data */ constant strings */ where to download region data */ /* /* /* /* /* /* Attention, l’ordre de déclaration des partitions doit être inversé par rapport au fichier original car cet ordre doit respecter l’ordre de la disposition dans la mémoire. Si ce fichier de spécification modifié est link_romF.spc les lignes suivantes vont permettre la construction de l’image mémoire à placer dans l’EEPROM : U:\LIBSDS>cc68000 -F optcc test.cpp Philippe Mabilleau ing. 1/4/98 Sauvegarde d’un programme en EEPROM Page 2 de 3 U:\LIBSDS>linker -f link_romF.spc start_rom.o test.o -o test.out U:\LIBSDS>down -d mot -m data,DATA -o test.txt test.out Chargement de l’image mémoire L’image mémoire ainsi reconstruite il est nécessaire de la charger en mémoire vive avant de la programmer dans l’EEPROM. Pour cela nous allons utiliser la commande de chargement habituelle LO avec un paramètre spécifiant un déplacement à ajouter à l’adresse de chargement par défaut. Ici l’image mémoire a été construite pour être chargée en mémoire à partir de l’adresse $F0000, or nous voulons la charger en mémoire vive à partir de l’adresse $5000, il faut donc ajouter –EB000 (soustraire $EB000) à l’adresse de chargement. CPU32Bug>lo -eb000 Le choix de l’adresse $5000 pour charger l’image mémoire en mémoire vive résulte du fait que le programme EEPROG utilise la mémoire à partir de l’adresse $3000 pour s’exécuter (en fait de $3000 à $3408). Si l‘image mémoire s’étendait au delà de l’adresse $10000 en mémoire vive, il serait nécessaire d’utiliser la plage mémoire commençant à l’adresse $12000 (jusqu’à $22000 pour une taille maximum de 64K, c’est à dire de $F0000 à $FFFFF dans l’EEPROM). Sauvegarde en mémoire EEPROM Pour sauvegarder l’image mémoire du programme dans la mémoire EEPROM nous devons utiliser le logiciel de programmation EEPROG. La taille de l’image mémoire peut être obtenue à l’aide de l’utilitaire SYM (dans sds70\cmd). Ici le programme construit par l’éditeur des liens est test.out. U:\LIBSDS>sym -m test.out REGION BASE ====== ==== data 10000H ram 10000H malloc 10000H stack 20000H code F0000H init F0156H exit F0156H const F0156H string F015EH SIZE ==== 0H 0H 0H 0H 156H 0H 0H 8H 34H La taille de la partition ROM est obtenue par addition de la taille des régions qui la constituent : code, init, exit, const et string. Il faut y ajouter la taille de la région data qui contient les données initialisées et dont une copie est placée après la partition ROM dans l’image mémoire. 156H+0H+0H+8H+34H+0H = 192H Cette valeur est utilisée pour déterminer l’adresse du dernier mot à programmer dans la mémoire EEPROM. CPU32Bug>g cf000 Effective address: 000CF000 Logiciel de programmation de l'EEPROM (version 1.02) L'EEPROM est aux adresses de $C0000 a $FFFFF Philippe Mabilleau ing. 1/4/98 Sauvegarde d’un programme en EEPROM Page 3 de 3 et est selectionnee avec le signal CSBOOT Adresse du premier mot a programmer = 00000002 ?f0000 Adresse du premier mot a programmer = 000F0000 Adresse du dernier mot a programmer = 00000002 ?f0192 Adresse du dernier mot a programmer = 000F0192 Adresse de depart des donnees en memoire = 00000002 ?5000 Adresse de depart des donnees en memoire = 00005000 -- Plage de memoire a programmer : [$000F0000-$000F0192] -- Plage de memoire affectee : ... [$000F0000-$000F01FF] CPU32Bug> Exécution du programme sauvegardé Le programme ainsi sauvegardé peut être exécuter à l’aide de la commande G depuis le moniteur CPU32Bug. CPU32Bug>g f0000 Effective address: 000F0000 Ceci est un programme de test... Pi = 3.1415927410 CPU32Bug> Philippe Mabilleau ing. 1/4/98