S-record

Da Wikipedia, l'enciclopedia libera.

Il formato S-record Motorola è una codifica di dati da binario a testo ASCII esadecimale ("hex"). È noto anche come SREC[1] o S19[2]. Ogni record contiene una checksum per rilevare errori durante la trasmissione.[3] Il primo record (S0) può includere commenti arbitrari come il nome del programma o il numero di versione.[4] L'ultimo (terminazione) record (S7, S8, o S9) può comprendere un indirizzo di partenza.[4]

Il formato S-record è stato creato nel 1970 per il processore Motorola 6800 quale tool di sviluppo software per questo e altri processori embedded, per convertire codice eseguibile e dati in formato S-record. I programmatori di PROM sono in grado leggere il formato S-record e "bruciare" i dati nelle PROM o EPROM utilizzate nei sistemi embedded.

Esistono altre codifiche ASCII con uno scopo simile. BPNF, BHLF e B10F sono vecchie codifiche di formati binari, ma non sono né compatti né flessibili. I formati esadecimali sono più compatti perché rappresentano 4 bit per carattere, anziché 1 byte. Altri, al pari di S-record, sono più flessibili, poiché includono informazioni di indirizzo, in modo da poter specificare solo una parte di una PROM. Il formato HEX di Intel è stato spesso utilizzato con processori Intel. Hex Tek è un altro formato esadecimale che può includere una tabella dei simboli per il debug.

Formato[modifica | modifica sorgente]

Un file in formato SREC consiste in una serie di record ASCII. Tutti i numeri esadecimali (hex) sono espressi in Big Endian. I record hanno la seguente struttura:

  1. Codice d'inizio, un carattere, una S.
  2. Tipo Record, una cifra, da 0 a 9, definisce il tipo del campo dati.
  3. Contatore byte, due cifre esadecimali, indica il numero di byte (coppie di cifre esadecimali) che seguono nel resto del record (indirizzo, dati e campi di checksum).
  4. Indirizzo, quattro, sei, o otto cifre esadecimali, determinati dal tipo di record per la locazione di memoria del primo byte di dati. I byte degli indirizzi sono espressi nel formato big endian.
  5. Dati, sequenza di coppie di n cifre esadecimali, per n byte di dati.
  6. Checksum, due cifre esadecimali: il byte meno significativo del complemento a uno della somma dei valori rappresentati dalle due coppie di cifre esadecimali per il numero di byte, l'indirizzo e campi dati. Ad esempio:

S1137AF0 0A0A0D0000000000000000000000000061

13+7A+F0 +0A+0A+0D+00+00+00+00+00+00+00+00+00+00+00+00+00 = 19E, poi prendere il byte meno significativo e quindi prendere il complemento a uno di tale byte (9E) che è uguale a 0x61

Ci sono otto tipi di record, elencati di seguito:

Record Descrizione Bytes di indirizzo Sequenza dati
S0 Blocco di intestazione 2 Si
S1 Sequenza dati 2 Si
S2 Sequenza dati 3 Si
S3 Sequenza dati 4 Si
S5 Contatore record 2 No
S7 Fine blocco 4 No
S8 Fine blocco 3 No
S9 Fine blocco 2 No

S0[modifica | modifica sorgente]

La sequenza dati del record S0 contiene i dati specifici del fornitore piuttosto che i dati di programma. Una stringa con il nome del file ed eventualmente informazioni sulla versione.

S1, S2, S3[modifica | modifica sorgente]

Sequenza dati, dipendente dalla dimensione dell'indirizzo. Un sistema a 16-bit/64K utilizza S1, a 24-bit di indirizzo utilizza S2 e a 32-bit utilizza S3.

S5[modifica | modifica sorgente]

Conteggio dei record S1, S2 e S3 che in precedenza compaiono nel file o nella trasmissione. Il conteggio dei record è memorizzato nel campo a 2 byte di indirizzo. Non ci sono dati associati a questo tipo di record.[5]

S7, S8, S9[modifica | modifica sorgente]

Il campo indirizzo del record S7, S8, oppure S9 può contenere un indirizzo di partenza per il programma.[6]

Esempio[modifica | modifica sorgente]

S00F000068656C6C6F202020202000003C
S11F00007C0802A6900100049421FFF07C6C1B787C8C23783C6000003863000026
S11F001C4BFFFFE5398000007D83637880010014382100107C0803A64E800020E9
S111003848656C6C6F20776F726C642E0A0042
S5030003F9
S9030000FC

██ Codice d'inizio

██ Tipo Record

██ Contatore byte

██ Indirizzo

██ Dati

██ Checksum

Riferimenti[modifica | modifica sorgente]

  1. ^ SREC è un'abbreviazione di formato S-RECord
  2. ^ S19 deriva dai caratteri iniziali di ciascun record: S1, S2, S3, ... S9. S1-S9, abbreviato S19.
  3. ^ srec - Linux man page
  4. ^ a b Motorola, op. cit., p. C-2
  5. ^ Motorola S-records. URL consultato il 16 febbraio 2011.
  6. ^ Motorola, op. cit., Appendix C

Collegamenti esterni[modifica | modifica sorgente]

  • SRecord è un insieme di strumenti per la manipolazione di file in formato SREC.
  • Intel HEX file format
  • GNU Binutils objdump e objcopy sono programmi per generare e visualizzare S-records.