SREC (formát souboru) - SREC (file format)

S-záznam
Motorola SREC Chart.png
Stručný referenční graf pro formát Motorola SREC. (Všimněte si, že v ukázkovém záznamu záznamu se ke specifikaci znaků alternativně používá slovo „bytes“.)
Přípona názvu souboru
.s19, .s28, .s37, .s, .s1, .s2, .s3, .sx, .srec, .exo,[1] .mot, .mxt
VyvinulMotorola

Motorola S-record je formát souboru vytvořený uživatelem Motorola, který přenáší binární informace jako hex hodnoty v ASCII textová forma. Tento formát souboru může být také známý jako SRECORD, SREC, S19, S28, S37. Běžně se používá pro programování flash paměť v mikrokontrolérech, EPROM, EEPROM a další typy programovatelných logických zařízení. V typické aplikaci kompilátor nebo assembler převede zdrojový kód programu (například C nebo assembler) na strojový kód a odešle jej do souboru HEX. Soubor HEX je poté importován programátorem, aby do něj „vypálil“ strojový kód energeticky nezávislá paměť, nebo je přenesen do cílového systému pro načtení a provedení.

Přehled

Dějiny

Formát S-record byl vytvořen v polovině 70. let pro Motorola 6800 procesor. Nástroje pro vývoj softwaru pro to a další vestavěné procesory by vytvořil spustitelný kód a data ve formátu S-záznamu. Programátoři PROM by poté načetli formát záznamu S a „vypálili“ data do PROM nebo EPROM použitých ve vestavěném systému.

Jiné hexadecimální formáty

Existují i ​​další kódování ASCII s podobným účelem. BPNF, BHLF, a B10F byly rané binární formáty, ale nejsou ani kompaktní, ani flexibilní. Hexadecimální formáty jsou kompaktnější, protože představují 4 bity místo 1 bit na znak. Mnoho z nich, například S-record, je flexibilnějších, protože obsahují informace o adrese, takže mohou specifikovat jen část PROM. Intel HEX formát byl často používán s procesory Intel. TekHex je další hexadecimální formát, který může obsahovat tabulku symbolů pro ladění.

Formát

Struktura záznamu

STypPočet bajtůAdresaDataKontrolní součet

Soubor ve formátu SREC se skládá z řady textových záznamů ASCII. Záznamy mají následující strukturu zleva doprava:

  1. Začátek záznamu - každý záznam začíná velkým písmenem znakem „S“ (ASCII 0x53), což znamená „Start-of-Record“.[2]
  2. Typ záznamu - jedna číselná číslice „0“ až „9“ definující typ záznamu.
  3. Počet bajtů - dvě hexadecimální číslice označující počet bajtů (páry hexadecimálních číslic), které následují ve zbytku záznamu (adresa + data + kontrolní součet). Toto pole má minimální hodnotu 3 pro 16bitové pole adresy plus 1 byte kontrolního součtu a maximální hodnotu 255 (0xFF).
  4. Adresa - čtyři / šest / osm hexadecimálních číslic podle typu záznamu. Bajty adresy jsou uspořádány v velký endian formát.
  5. Data - posloupnost 2n hexadecimální číslice pro n bajtů dat. Pro záznamy S1 / S2 / S3 je typické maximálně 32 bajtů na záznam, protože se vejde na terminálovou obrazovku o šířce 80 znaků, ačkoli 16 bajtů by bylo jednodušší vizuálně dekódovat každý bajt na konkrétní adresu.
  6. Kontrolní součet - dvě hexadecimální čísla, nejméně významný bajt z doplněk součtu hodnot představovaných dvěma dvojicemi hexadecimálních čísel pro počet bajtů, adresu a datová pole. V příkladu najdete podrobný příklad kontrolního součtu.

Terminátory textových řádků

Záznamy SREC jsou odděleny jedním nebo více znaky ukončení řádku ASCII, takže se každý záznam zobrazuje samostatně na textovém řádku. To vizuálně zvyšuje čitelnost vymezení záznamy a také poskytuje výplň mezi záznamy, které lze použít ke zlepšení stroje analýza účinnost.

Programy, které vytvářejí záznamy HEX, obvykle používají znaky ukončení řádku, které odpovídají jejich konvencím operační systémy. Například programy Linux používají jeden znak LF (posuv řádku, 0x0A jako hodnota znaku ASCII) znak pro ukončení řádků, zatímco programy Windows používají znak CR (návrat vozíku, 0x0D jako hodnota znaku ASCII) následovaný znakem LF.

Typy záznamů

Následující tabulka popisuje 10 možných S-záznamů. S4 je rezervován a není aktuálně definován. S6 byla původně rezervována, ale později byla předefinována.

Záznam
Pole
Záznam
Účel
Adresa
Pole
Data
Pole
Záznam
Popis
S0Záhlaví16-bit
"0000"
NeTento záznam obsahuje textový komentář ASCII specifický pro dodavatele, představovaný jako řada dvojic hex číslic. Je běžné vidět data tohoto záznamu ve formátu a řetězec zakončený nulou. Textová data mohou být cokoli, včetně kombinace následujících informací: název souboru / modulu, číslo verze / revize, datum / čas, název produktu, jméno dodavatele, označení paměti na desce plošných spojů, upozornění na autorská práva. Je běžné vidět: 48 44 52, což je ASCII H, D a R - "HDR".[3]
S1Data16-bit
Adresa
AnoTento záznam obsahuje data, která začínají na 16bitovém poli adresy.[4] Tento záznam se obvykle používá pro 8bitové mikroprocesory, jako jsou AVR, PIC, 8051, 68xx, 6502, 80xx, Z80. Počet bajtů dat obsažených v tomto záznamu je „Pole počtu bajtů“ minus 3 (tj. 2 bajty pro „16bitové pole adresy“ a 1 bajt pro „pole kontrolního součtu“).
S2Data24-bit
Adresa
AnoTento záznam obsahuje data začínající na 24bitové adrese.[4] Počet bajtů dat obsažených v tomto záznamu je „Pole počtu bajtů“ minus 4 (tj. 3 bajty pro „24bitové pole adresy“ a 1 bajt pro „pole kontrolního součtu“).
S3Data32-bit
Adresa
AnoTento záznam obsahuje data začínající na 32bitové adrese.[4] Tento záznam se obvykle používá pro 32bitové mikrokontroléry, například ARM a 680x0. Počet bajtů dat obsažených v tomto záznamu je „Pole počtu bajtů“ minus 5 (tj. 4 bajty pro „32bitové pole adresy“ a 1 bajt pro „pole kontrolního součtu“).
S4RezervovánoN / AN / ATento záznam je vyhrazen.
S5Počet16-bit
Počet
NeTento volitelný záznam obsahuje 16bitový počet záznamů S1 / S2 / S3.[4] Tento záznam se používá, pokud je počet záznamů menší nebo roven 65 535 (0xFFFF), jinak by byl použit záznam S6.
S6Počet24-bit
Počet
NeTento volitelný záznam obsahuje 24bitový počet záznamů S1 / S2 / S3. Tento záznam se používá, pokud je počet záznamů menší nebo roven 16 777 215 (0xFFFFFF). Pokud je menší než 65 536 (0 x 10 000), použije se záznam S5. POZNÁMKA: Tento novější záznam je nejnovější změnou (nemusí být oficiální).[4]
S7Počáteční adresa
(Ukončení)
32-bit
Adresa
NeTento záznam obsahuje počáteční umístění spuštění na 32bitové adrese.[4][5] Slouží k ukončení řady záznamů S3. Pokud se soubor SREC používá pouze k programování paměťového zařízení a místo provádění je ignorováno, lze použít adresu nula.
S8Počáteční adresa
(Ukončení)
24-bit
Adresa
NeTento záznam obsahuje počáteční umístění spuštění na 24bitové adrese.[4][5] Slouží k ukončení řady záznamů S2. Pokud se soubor SREC používá pouze k programování paměťového zařízení a místo provádění je ignorováno, lze použít adresu nula.
S9Počáteční adresa
(Ukončení)
16-bit
Adresa
NeTento záznam obsahuje počáteční umístění spuštění na 16bitové adrese.[4][5] Slouží k ukončení řady záznamů S1. Pokud se soubor SREC používá pouze k programování paměťového zařízení a místo provádění je ignorováno, lze použít adresu nula.

Zaznamenat objednávku

Ačkoli některá dokumentace Unix uvádí „pořadí S-záznamů v souboru nemá žádný význam a nelze předpokládat žádné konkrétní pořadí“,[4] v praxi většina softwaru objednala záznamy SREC. Typické pořadí záznamů začíná (někdy volitelným) záznamem záhlaví S0, pokračuje sekvencí jednoho nebo více datových záznamů S1 / S2 / S3, může mít jeden volitelný záznam počtu S5 / S6 a končí jedním příslušným S7 / S8 / Záznam o ukončení S9.

16bitové záznamy adres ve stylu S19
  1. S0
  2. S1 (jeden nebo více záznamů)
  3. S5 (volitelný záznam)
  4. S9
24bitové záznamy adres ve stylu S28
  1. S0
  2. S2 (jeden nebo více záznamů)
  3. S5 (volitelný záznam)
  4. S8
32bitové záznamy adres ve stylu S37
  1. S0
  2. S3 (jeden nebo více záznamů)
  3. S5 (volitelný záznam)
  4. S7

Omezení

Délka záznamu - V dokumentaci k ruční stránce stránky Unix se uvádí: „Soubor záznamu S se skládá ze sekvence speciálně formátovaných řetězců znaků ASCII. Záznam S bude mít délku menší nebo rovnou 78 bajtů.“ Ruční stránka dále omezuje počet znaků v datovém poli na 64 (nebo 32 datových bajtů).[4] Záznam s adresou s 8 hexadecimálními znaky a 64 datovými znaky by měl délku 78 (2 + 2 + 8 + 64 + 2) znaků (tento počet ignoruje možné znaky ukončení nebo ukončení řetězce). Soubor lze vytisknout na 80místném teleprinteru. Poznámka ve spodní části ruční stránky uvádí: „Tato [manuální stránka] je jediným místem, kde je dokumentován 78bajtový limit na celkovou délku záznamu nebo 64bajtový limit na délku dat. Tyto hodnoty by neměly být důvěryhodné pro obecný případ “.[4] Pokud je toto omezení ignorováno, je maximální délka záznamu S 514 znaků: 2 pro pole Typ záznamu + 2 pro pole Počet bajtů (jehož hodnota by byla 0xFF = 255) + 2 * 255 pro pole Adresa, Data a Kontrolní součet . Může být vyžadován další vyrovnávací prostor pro zakončení řádků a řetězce. Používání dlouhých řádků má problémy: "Definice formátu Motorola S-record umožňuje až 255 bajtů užitečného zatížení nebo řádků o délce 514 znaků plus ukončení řádku. Všichni programátoři EPROM by měli mít dostatečně velké vyrovnávací paměti řádků, aby se vyrovnali s tak velkými záznamy. Málokdo. “[6]

Datové pole - Některá dokumentace v tomto poli doporučuje maximálně 32 bajtů dat (64 hexadecimálních znaků).[4] Minimální množství dat pro záznamy S0 / S1 / S2 / S3 je nula. Maximální množství dat se liší v závislosti na velikosti pole adresy. Protože pole Počet bytů nemůže být vyšší než 255 (0xFF), maximální počet bajtů dat se vypočítá o 255 minus (1 bajt pro pole kontrolního součtu) minus (počet bajtů v poli adresy). Záznamy S0 / S1 podporují až 252 bajtů dat. Záznam S2 podporuje až 251 bajtů dat. Záznam S3 podporuje až 250 bajtů dat.

Komentáře - Formát souboru SREC nepodporuje komentáře. Některý software ignoruje všechny textové řádky, které nezačínají na „S“, a ignoruje veškerý text za polem kontrolního součtu; tento text navíc se někdy (nekompatibilně) používá pro komentáře. Například kompilátor CCS PIC podporuje umístění znaku „;“ řádek komentáře v horní nebo dolní části souboru Intel HEX soubor a v jeho příručkách se uvádí, že „někteří programátoři (zejména MPLAB) nemají rádi komentáře v horní části hexadecimálního souboru“, proto má překladač možnost umístit komentář do spodní části hexadecimálního souboru.[7]

Příklady

Barevná legenda

  Typ záznamu  Počet bajtů  Adresa  Data  Kontrolní součet

Výpočet kontrolního součtu

Následující příklad záznamu:

S1137AF00A0A0D0000000000000000000000000061

je dekódováno, aby se ukázalo, jak se hodnota kontrolního součtu vypočítá takto:

  1. Přidat: Přidejte každý bajt 0x13 + 0x7A + 0xF0 + 0x0A + 0x0A + 0x0D + 0x00 + ... + 0x00 = 0x19E celkem.
  2. Maska: Ponechte nejméně významný bajt z celkového počtu = 0x9E.
  3. Doplněk: Vypočítat doplněk nejméně významného bajtu = 0x61.

16bitová adresa paměti

S00F000068656C6C6F202020202000003CS11F00007C0802A6900100049421FFF07C6C1B787C8C23783C6000003863000026S11F001C4BFFFFE5398000007D83637880010014382100107C0803A64E800020E9S111003848656C6C6F20776F726C642E0A0042S5030003F9S9030000FC

Viz také

Reference

  1. ^ „AR # 476 PROMGen - Popis formátů souborů PROM / EEPROM: MCS, EXO, HEX a další“. Xilinx. 08.03.2010. Motorola EXORmacs - kód formátu souboru 87. Archivováno z původního dne 2020-03-03. Citováno 2020-03-03.
  2. ^ Wiles, Mike; Felix, Andre (2000-10-21) [1975]. Holley, Michael (ed.). MCM6830L7 MIKBUG / MINIBUG ROM (PDF) (Technická poznámka). Motorola Semiconductor Products, Inc. Poznámka 100. Archivovány od originál (PDF) dne 16. 06. 2019. Citováno 2019-06-16. (23 stránek)
  3. ^ Tareski, Val. "Popis Motorola S-record". www.amelek.gda.pl. Citováno 2018-06-26.
  4. ^ A b C d E F G h i j k l „Motorola S-records z manuálových stránek Unixu“. Citováno 2014-06-30.
  5. ^ A b C „Dodatek C“. Referenční příručka programátoru rodiny M68000 (PDF). Revize 1. Motorola (Freescale ). 1992. str. C-1 – C-5. ISBN  978-0-13723289-5.
  6. ^ „srec_examples“. sourceforge.net.
  7. ^ Referenční příručka kompilátoru CCS PCB / PCM / PCH (PDF), Custom Computer Services, Inc., Květen 2014, s. 107, vyvoláno 2015-02-08

Další čtení

externí odkazy

  • SRecord je sbírka nástrojů pro manipulaci se soubory ve formátu SREC.
  • BIN2MOT, BINARY na nástroj pro převod souborů Motorola S-Record.
  • SRecordizer je nástroj pro prohlížení, úpravy a kontrolu chyb ve formátu S19.
  • binkopie je balíček Pythonu pro manipulaci se soubory ve formátu SREC.
  • kk_srec je knihovna C a program pro čtení formátu SREC.