SREC (format pliku) - SREC (file format)

Rekord S
Motorola SREC Chart.png
Skrócona tabela referencyjna dla formatu Motorola SREC. (Zauważ, że w przykładowym obrazie rekordu słowo „bajty” jest alternatywnie używane do określania znaków.)
Rozszerzenie nazwy pliku
.s19 , .s28 , .s37 , .s , .s1 , .s2 , .s3 , .sx , .srec , .exo , .mot , .mxt
Opracowany przez Motorola

Motorola S-record to format pliku stworzony przez firmę Motorola , który przekazuje informacje binarne jako wartości szesnastkowe w formie tekstowej ASCII . Ten format pliku może być również znany jako SRECORD , SREC , S19 , S28 , S37 . Jest powszechnie używany do programowania pamięci flash w mikrokontrolerach, EPROM-ach , EEPROM-ach i innych typach programowalnych urządzeń logicznych. W typowej aplikacji kompilator lub asembler konwertuje kod źródłowy programu (taki jak C lub język asemblera) na kod maszynowy i wyprowadza go do pliku HEX. Plik HEX jest następnie importowany przez programistę w celu „wypalenia” kodu maszynowego w pamięci nieulotnej lub jest przesyłany do systemu docelowego w celu załadowania i wykonania.

Przegląd

Historia

Format S-record został stworzony w połowie lat 70. dla procesora Motorola 6800 . Narzędzia programistyczne dla tego i innych wbudowanych procesorów tworzyłyby kod wykonywalny i dane w formacie S-record. Programiści PROM odczytywali następnie format S-record i „wypalali” dane w PROM lub EPROM używanych w systemie wbudowanym.

Inne formaty szesnastkowe

Istnieją inne kodowania ASCII o podobnym celu. BPNF , BHLF i B10F były wczesnymi formatami binarnymi, ale nie są ani kompaktowe, ani elastyczne. Formaty szesnastkowe są bardziej zwarte, ponieważ reprezentują 4 bity, a nie 1 bit na znak. Wiele z nich, takich jak S-record, jest bardziej elastycznych, ponieważ zawierają informacje adresowe, dzięki czemu mogą określić tylko część PROM. Format Intel HEX był często używany z procesorami Intela. TekHex to kolejny format szesnastkowy, który może zawierać tabelę symboli do debugowania.

Format

Struktura rekordu

S Rodzaj Liczba bajtów Adres Dane Suma kontrolna

Plik w formacie SREC składa się z serii rekordów tekstowych ASCII. Rekordy mają następującą strukturę od lewej do prawej:

  1. Początek rekordu - każdy rekord zaczyna się wielką literą „S” (ASCII 0x53), co oznacza „Start-of-Record”.
  2. Typ rekordu - pojedyncza cyfra „0” do „9”, określająca rodzaj rekordu.
  3. Liczba bajtów - dwie cyfry szesnastkowe, wskazujące liczbę bajtów (par cyfr szesnastkowych), które następują w pozostałej części rekordu (adres + dane + suma kontrolna). To pole ma minimalną wartość 3 dla 16-bitowego pola adresowego plus 1 bajt sumy kontrolnej i maksymalną wartość 255 (0xFF).
  4. Adres - cztery / sześć / osiem cyfr szesnastkowych zgodnie z typem rekordu. Bajty adresu są ułożone w formacie big endian .
  5. Dane - ciąg 2 n cyfr szesnastkowych, dla n bajtów danych. W przypadku rekordów S1/S2/S3 typowe jest maksymalnie 32 bajty na rekord, ponieważ zmieści się na ekranie terminala o szerokości 80 znaków, chociaż 16 bajtów byłoby łatwiej wizualnie zdekodować każdy bajt pod określonym adresem.
  6. Suma kontrolna - dwie cyfry szesnastkowe, najmniej znaczący bajt uzupełnienia do jedynek sumy wartości reprezentowanych przez dwie pary cyfr szesnastkowych dla pól liczby bajtów, adresu i danych. Zobacz sekcję przykładową dla szczegółowego przykładu sumy kontrolnej.

Terminatory linii tekstu

Rekordy SREC są oddzielone jednym lub kilkoma znakami zakończenia wiersza ASCII, dzięki czemu każdy rekord pojawia się sam w wierszu tekstu. Poprawia to czytelność poprzez wizualne rozgraniczenie rekordów, a także zapewnia wypełnianie między rekordami, które można wykorzystać do poprawy wydajności analizowania maszynowego .

Programy tworzące rekordy HEX zazwyczaj używają znaków zakończenia wiersza, które są zgodne z konwencjami ich systemów operacyjnych . Na przykład, programy Linux używają pojedynczego znaku LF (zmiana wiersza , 0x0A jako wartość znaku ASCII) do zakończenia linii, podczas gdy programy Windows używają znaku CR ( powrót karetki , 0x0D jako wartość znaku ASCII), po którym następuje znak LF.

Rodzaje nagrań

Poniższa tabela opisuje 10 możliwych rekordów S. S4 jest zarezerwowany i nie jest aktualnie zdefiniowany. S6 był pierwotnie zarezerwowany, ale później został przedefiniowany.


Pole rekordu
Rekordowy
cel

Pole adresowe

Pole danych

Opis rekordu
S0 nagłówek 16-bitowy
„0000”
Nie Ten rekord zawiera komentarz tekstowy ASCII specyficzny dla dostawcy, reprezentowany jako seria par cyfr szesnastkowych. Często dane dla tego rekordu są wyświetlane w formacie łańcucha zakończonego znakiem null . Dane tekstowe mogą być dowolne, w tym mieszaniną następujących informacji: nazwa pliku/modułu, numer wersji/wersji, data/godzina, nazwa produktu, nazwa dostawcy, oznaczenie pamięci na płytce drukowanej, informacja o prawach autorskich. Często można zobaczyć: 48 44 52, który jest ASCII H, D i R - „HDR”.
S1 Dane
Adres 16-bitowy
tak Ten rekord zawiera dane, które zaczynają się od 16-bitowego pola adresu. Ten rekord jest zwykle używany dla mikrokontrolerów 8-bitowych, takich jak AVR, PIC, 8051, 68xx, 6502, 80xx, Z80. Liczba bajtów danych zawartych w tym rekordzie to „Pole liczby bajtów” minus 3 (czyli 2 bajty dla „16-bitowego pola adresu” i 1 bajt dla „Pola sumy kontrolnej”).
S2 Dane
Adres 24-bitowy
tak Ten rekord zawiera dane, które zaczynają się od adresu 24-bitowego. Liczba bajtów danych zawartych w tym rekordzie to „Pole liczby bajtów” minus 4 (czyli 3 bajty dla „24-bitowego pola adresu” i 1 bajt dla „Pola sumy kontrolnej”).
S3 Dane 32-bitowy
adres
tak Ten rekord zawiera dane, które zaczynają się od adresu 32-bitowego. Rekord ten jest zwykle używany dla mikrokontrolerów 32-bitowych, takich jak ARM i 680x0. Liczba bajtów danych zawartych w tym rekordzie to „Pole liczby bajtów” minus 5 (czyli 4 bajty dla „32-bitowego pola adresu” i 1 bajt dla „Pola sumy kontrolnej”).
S4 Skryty Nie dotyczy Nie dotyczy Ten rekord jest zarezerwowany.
S5 Liczyć
Licznik 16-bitowy
Nie Ten opcjonalny rekord zawiera 16-bitową liczbę rekordów S1/S2/S3. Ten rekord jest używany, jeśli liczba rekordów jest mniejsza lub równa 65 535 (0xFFFF), w przeciwnym razie zostanie użyty rekord S6.
S6 Liczyć
Licznik 24-bitowy
Nie Ten opcjonalny rekord zawiera 24-bitową liczbę rekordów S1/S2/S3. Ten rekord jest używany, jeśli liczba rekordów jest mniejsza lub równa 16 777 215 (0xFFFFFF). Jeśli mniej niż 65 536 (0x10000), zostanie użyty rekord S5. UWAGA: Ten nowszy rekord to najnowsza zmiana (może nie być oficjalna).
S7 Adres początkowy
(zakończenie)
32-bitowy
adres
Nie Ten rekord zawiera początkową lokalizację wykonania pod adresem 32-bitowym. Służy do zakończenia serii rekordów S3. Jeśli plik SREC jest używany tylko do programowania urządzenia pamięci, a lokalizacja wykonania jest ignorowana, można użyć adresu zero.
S8 Adres początkowy
(zakończenie)

Adres 24-bitowy
Nie Ten rekord zawiera początkową lokalizację wykonania pod adresem 24-bitowym. Służy do zakończenia serii rekordów S2. Jeśli plik SREC jest używany tylko do programowania urządzenia pamięci, a lokalizacja wykonania jest ignorowana, można użyć adresu zero.
S9 Adres początkowy
(zakończenie)

Adres 16-bitowy
Nie Ten rekord zawiera początkową lokalizację wykonania pod adresem 16-bitowym. Służy do zakończenia serii rekordów S1. Jeśli plik SREC jest używany tylko do programowania urządzenia pamięci, a lokalizacja wykonania jest ignorowana, można użyć adresu zero.

Nagraj kolejność

Chociaż niektóre dokumenty Uniksa stwierdzają, że „kolejność rekordów S w pliku nie ma znaczenia i nie można zakładać żadnej konkretnej kolejności”, w praktyce większość oprogramowania uporządkowała rekordy SREC. Typowa kolejność rekordów zaczyna się od (czasami opcjonalnym) rekordem nagłówka S0, kontynuuje sekwencją jednego lub więcej rekordów danych S1/S2/S3, może mieć jeden opcjonalny rekord licznika S5/S6 i kończy się jednym odpowiednim S7/S8/ Rekord zakończenia S9.

16-bitowe rekordy adresów w stylu S19
  1. S0
  2. S1 (jeden lub więcej rekordów)
  3. S5 (zapis opcjonalny)
  4. S9
24-bitowe rekordy adresów w stylu S28
  1. S0
  2. S2 (jeden lub więcej rekordów)
  3. S5 (zapis opcjonalny)
  4. S8
32-bitowe rekordy adresów w stylu S37
  1. S0
  2. S3 (jeden lub więcej rekordów)
  3. S5 (zapis opcjonalny)
  4. S7

Ograniczenia

Długość rekordu - Dokumentacja strony podręcznika systemowego Unix stwierdza: "Plik S-record składa się z sekwencji specjalnie sformatowanych ciągów znaków ASCII. Długość rekordu S będzie mniejsza lub równa 78 bajtom". Strona podręcznika dodatkowo ogranicza liczbę znaków w polu danych do 64 (lub 32 bajtów danych). Rekord z adresem składającym się z 8 znaków szesnastkowych i 64 znakami danych miałby długość 78 (2 + 2 + 8 + 64 + 2) znaków (liczba ta ignoruje możliwe znaki końca wiersza lub zakończenia łańcucha). Plik można wydrukować na teledrukarce o szerokości 80 znaków. Uwaga na dole strony podręcznika stwierdza: „Ta [strona podręcznika] jest jedynym miejscem, w którym udokumentowany jest 78-bajtowy limit całkowitej długości rekordu lub 64-bajtowy limit długości danych. ogólny przypadek". Jeśli to ograniczenie jest ignorowane, maksymalna długość rekordu S wynosi 514 znaków: 2 dla pola Typ rekordu + 2 dla pola Liczba bajtów (którego wartość będzie wynosić 0xFF=255) + 2 * 255 dla pól Adres, Dane i Suma kontrolna . Dodatkowe miejsce w buforze może być wymagane dla terminatorów linii i ciągów. Używanie długich linii powoduje problemy: „Definicja formatu rekordu Motorola S-record dopuszcza do 255 bajtów ładunku lub wierszy o długości 514 znaków plus zakończenie linii. Wszyscy programiści EPROM powinni mieć wystarczająco duże bufory wierszy, aby poradzić sobie z tak dużymi rekordami. Niewielu to robi."

Pole danych — niektóre dokumenty zalecają w tym polu maksymalnie 32 bajty danych (64 znaki szesnastkowe). Minimalna ilość danych dla rekordów S0/S1/S2/S3 wynosi zero. Maksymalna ilość danych różni się w zależności od wielkości pola adresu. Ponieważ pole Byte Count nie może być większe niż 255 (0xFF), to maksymalna liczba bajtów danych jest obliczana przez 255 minus (1 bajt dla pola sumy kontrolnej) minus (liczba bajtów w polu adresu). Rekordy S0/S1 obsługują do 252 bajtów danych. Rekord S2 obsługuje do 251 bajtów danych. Rekord S3 obsługuje do 250 bajtów danych.

Komentarze — format pliku SREC nie obsługuje komentarzy. Niektóre programy ignorują wszystkie wiersze tekstu, które nie zaczynają się od „S” i ignorują cały tekst za polem sumy kontrolnej; ten dodatkowy tekst jest czasami używany (niezgodnie) do komentarzy. Na przykład kompilator CCS PIC obsługuje umieszczanie znaku „;” wiersz komentarza na górze lub na dole pliku Intel HEX , a jego podręczniki stwierdzają, że „niektórzy programiści (w szczególności MPLAB) nie lubią komentarzy na górze pliku hex”, dlatego kompilator ma możliwość umieszczenia komentarza na dole pliku szesnastkowego.

Przykłady

Legenda kolorów

  Typ rekordu   Liczba bajtów   Adres   Dane   Suma kontrolna

Obliczanie sumy kontrolnej

Poniższy przykładowy rekord:

S1137AF00A0A0D0000000000000000000000000061

jest dekodowany, aby pokazać, jak obliczana jest wartość sumy kontrolnej. Dyskusja wykorzystuje konwencję Motoroli, w której znak dolara ( $ ) wskazuje wartość szesnastkową:

  1. Dodaj: Dodaj każdy bajt $13 + $7A + $F0 + $0A + $0A + $0D + $00 + ... + $00 = $019E .
  2. Maska: Odrzuć najbardziej znaczący bajt ( $01 ) sumy i zachowaj najmniej znaczący bajt (LSB), czyli $9E .
  3. Uzupełnienie: Oblicz uzupełnienie do jedynek LSB, które wynosi 61 USD . Zazwyczaj jest to realizowane na Motorola 6800 mikroprocesor przez exclusive-Oring na akumulator z $ FF .

16-bitowy adres pamięci

S00F000068656C6C6F202020202000003C
S11F00007C0802A6900100049421FFF07C6C1B787C8C23783C6000003863000026
S11F001C4BFFFFE5398000007D83637880010014382100107C0803A64E800020E9
S111003848656C6C6F20776F726C642E0A0042
S5030003F9
S9030000FC

Zobacz też

Bibliografia

Dalsza lektura

Zewnętrzne linki

  • SRecord to zbiór narzędzi do manipulowania plikami w formacie SREC.
  • BIN2MOT , narzędzie do konwersji plików binarnych na Motorola S-Record.
  • SRecordizer to narzędzie do przeglądania, edycji i sprawdzania błędów plików w formacie S19.
  • bincopy to pakiet Pythona do manipulowania plikami w formacie SREC.
  • kk_srec to biblioteka C i program do odczytu formatu SREC.