title: S-record
text: # S-record
  
  Il formato S-record Motorola è una codifica di dati da binario a esadecimale ("hex") in testo ASCII . È noto anche come SREC o S19. Ogni record contiene un checksum per rilevare errori durante la trasmissione. Il primo record (S0) può includere commenti arbitrari come il nome del programma o il numero di versione. L'ultimo (terminazione) record (S7, S8, o S9) può comprendere un indirizzo di partenza.
  
  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é uno solo. 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
  
  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:
  
  * Codice d'inizio, un carattere, una S.
  * Tipo Record, una cifra, da 0 a 9, definisce il tipo del campo dati.
  * 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).
  * 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.
  * Dati, sequenza di coppie di n cifre esadecimali, per n byte di dati.
  * 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
  
  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
  
  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
  
  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.
  
  ### S7, S8, S9
  
  Il campo indirizzo del record S7, S8, oppure S9 può contenere un indirizzo di partenza per il programma.
  
  ## Esempio
  
  Codice d'inizio
  
  Tipo Record
  
  Contatore byte
  
  Indirizzo
  
  Dati
  
  Checksum
  
  