Le fichier S-record de Motorola est un fichier texte dont
chaque chaine de caracteres renseigne sur :
- le type de la chaine
- la longueur de la chaine
- l'adresse memoire ou stocker les donnees
- les donnees
- le checksum
Chaque octet est decrit par 2 caracteres qui representent
sa valeur hexa, le premier car est le MSB, le second le LSB. Une chaine de caracteres a la structure :
TYPE |
LONGUEUR |
ADRESSE |
DONNEES |
CHECKSUM |
Les champs ont les caracteristiques :
champ |
nombre
de
caracteres |
contenu |
TYPE |
2 |
S0 = chaine
d'en tete - le champ de donnees peut contenir une description - l'adresse est normalement
nulle.
S1 = chaine de donnees a une adresse sur 2 octets
S2 = chaine de donnees a une adresse sur 3 octets
S3 = chaine de donnees a une adresse sur 4 octets
S5 = chaine qui indique sur le nombre de chaines S1, S2 et S3 transmises dans un bloc en
particulier - ce nombre apparait dans le champ de l'adresse - il n'y a aucune donnee.
S7 = chaine finale d'un bloc de chaines S3 - l'adresse peut optionnellement contenir une
adresse sur 4 octets qui pointe sur une instruction - il n'y a aucune donnee
S8 = chaine finale d'un bloc de chaines S2 - l'adresse peut optionnellement contenir une
adresse sur 3 octets qui pointe sur une instruction - il n'y a aucune donnee
S9 = chaine finale d'un bloc de chaines S1 - l'adresse peut optionnellement contenir une
adresse sur 4 octets qui pointe sur une instruction - si cette valeur n'est pas precisee,
on devra utiliser la premiere entree dans le code objet - il n'y a aucune donnee |
LONGUEUR |
2 |
= le nombre de
paires de caracteres de la chaine, sans compter le TYPE et la LONGUEUR |
ADRESSE |
4, 6 ou 8 |
= l'adresse ou
doivent etres rangees les donnees |
DONNEES |
0-2n |
de 0 a n
octets. Une regle consiste a limiter la quantite de donnees par chaine a 28 octets = 56
caracteres |
CHECKSUM |
2 |
= le LSB de la
somme des donnees contenues dans la chaine, en complement a 1 (il suffit alors de faire la
somme des donnees transmises + le checksum : si le resultat est $FF ie pas d'erreur de
transmission) |
Chaque chaine peut etre terminee par : Accessoirement, chaque chaine peut etre precedee par un
champ, par exemple le numero de ligne. Il n'y a en general qu'une chaine finale par bloc. Il n'y a en general qu'un chaine d'en tete, mais il peut
aussi il y en avoir plusieurs. Exemple: S00600004844521B
S1130000285F245F2212226A000424290008237C2A
S11300100002000800082629001853812341001813
S113002041E900084E42234300182342000824A952
S113003000144ED492
S9030000FC Cet exemple contient :
- 1 chaine S0
- 4 chaines S1
- 1 chaine S9
Exemple du calcul du Checksum :
13
+28
+5f
+24
+5f
+22
+12
+22
+6a
+00
+04
+24
+29
+00
+08
+23
+7c
------
=2d5
complement a 1 de d5
d5 = 1101 0101
-> = 0010 1010 = 2a
d'ou le checksum a 2a
La chaine S0 est constituee par : S0 = le type d'en-tete 06 = $06 = 6 paires de caracteres
suivent 0000 = adresse sur 2 octets a
$0000 484452 = ASCII pour HDR 1B = checksum
La 1ere chaine S1 est constituee par : S1 = le type d'une chaine de
donnees pour une adresse sur 2 octets 13 = $13 = 19 paires de
caracteres suivent 0000 = adresse ou doivent etres
stockees les donnees 285F245F2212226A000424290008237C = donnees 2A = checksum
La chaine S9 est constituee par : S9 = chaine finale 03 = $03 = 3 paires de caracteres
suivent 0000 = champ d'adresse a 0 FC = checksum ref : RAPID/D Motorola
|