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