SREC (формат файла)

Формат файла, разработанный Motorola

S-запись
Краткая справочная таблица для формата Motorola SREC. (Обратите внимание, что в примере записи слово «байты» используется в качестве альтернативы для указания символов.)
Расширение имени файла
.s19, .s28, .s37, .s, .s1, .s2, .s3, .sx, .srec, .exo, [1] .mot ,.mxt
РазработаноМоторола

Motorola S-record — это формат файла, созданный Motorola в середине 1970-х годов, который передает двоичную информацию в виде шестнадцатеричных значений в текстовой форме ASCII . Этот формат файла также может быть известен как SRECORD , SREC , S19 , S28 , S37 . Он обычно используется для программирования флэш-памяти в микроконтроллерах, EPROM , EEPROM и других типах программируемых логических устройств. В типичном приложении компилятор или ассемблер преобразует исходный код программы (например, язык C или ассемблера) в машинный код и выводит его в файл HEX. Затем файл HEX импортируется программистом для записи машинного кода в энергонезависимую память или передается в целевую систему для загрузки и выполнения.

Обзор

История

Формат S-record был создан в середине 1970-х годов для процессора Motorola 6800. Инструменты разработки программного обеспечения для этого и других встроенных процессоров создавали исполняемый код и данные в формате S-record. Затем программисты PROM считывали формат S-record и «записывали» данные в PROM или EPROM, используемые во встроенной системе.

Другие шестнадцатеричные форматы

Существуют и другие кодировки ASCII с аналогичной целью. BPNF , BHLF и B10F были ранними двоичными форматами, но они не являются ни компактными, ни гибкими. Шестнадцатеричные форматы более компактны, поскольку представляют 4 бита, а не 1 бит на символ. Многие, такие как S-record, более гибки, поскольку включают адресную информацию, поэтому они могут указывать только часть PROM. Формат Intel HEX часто использовался с процессорами Intel. TekHex — еще один шестнадцатеричный формат, который может включать таблицу символов для отладки.

Формат

Структура записи

СТипКоличество байтовАдресДанныеКонтрольная сумма

Файл формата SREC состоит из серии текстовых записей ASCII . Записи имеют следующую структуру слева направо:

  1. Начало записи — каждая запись начинается с заглавной буквы «S» (ASCII 0x53), что означает «Начало записи». [2]
  2. Тип записи - один цифровой символ от "0" до "9" (ASCII 0x30 - 0x39), определяющий тип записи. См. таблицу ниже.
  3. Количество байтов — две шестнадцатеричные цифры («от 00» до «FF»), указывающие количество байтов (пар шестнадцатеричных цифр), которые следуют в остальной части записи (адрес + данные + контрольная сумма). Это поле имеет минимальное значение 3 (2 для 16-битного поля адреса плюс 1 байт контрольной суммы) и максимальное значение 255 (0xFF). «00» / «01» / «02» — недопустимые значения.
  4. Адрес - четыре / шесть / восемь шестнадцатеричных цифр, как определено типом записи. Байты адреса расположены в формате big-endian .
  5. Данные — последовательность из 2 n шестнадцатеричных цифр для n байт данных. Для записей S1/S2/S3 обычно используется максимум 32 байта на запись, поскольку они помещаются на экране терминала шириной 80 символов, хотя 16 байтов было бы проще для визуального декодирования каждого байта по определенному адресу.
  6. Контрольная сумма - две шестнадцатеричные цифры, младший значащий байт дополнения к единице суммы значений, представленных двумя парами шестнадцатеричных цифр для полей Количество байтов, Адрес и Данные. В языке программирования C сумма преобразуется в контрольную сумму следующим образом:0xFF - (sum & 0xFF)

Ограничители текстовых строк

Записи SREC разделяются одним или несколькими символами завершения строки ASCII, так что каждая запись отображается отдельно на текстовой строке. Это повышает читаемость, визуально разграничивая записи, а также обеспечивает заполнение между записями, что может использоваться для повышения эффективности машинного анализа .

Программы, создающие записи HEX, обычно используют символы завершения строки, соответствующие соглашениям их операционных систем . Например, программы Linux используют один символ LF ( перевод строки , 0x0A как значение символа ASCII) для завершения строк, тогда как программы Windows используют символ CR ( возврат каретки , 0x0D как значение символа ASCII), за которым следует символ LF.

Типы записей

В следующей таблице описываются 10 возможных S-записей. S4 зарезервирована и в настоящее время не определена. S6 была изначально зарезервирована, но позже была переопределена.


Поле записи

Цель записи

Поле адреса

Поле данных

Описание записи
С0Заголовок16-битный
"0000"
НетЭта запись содержит специфичный для поставщика текстовый комментарий ASCII, представленный в виде серии пар шестнадцатеричных цифр. Обычно данные для этой записи можно увидеть в формате строки с нулевым завершением . Текстовые данные могут быть любыми, включая смесь следующей информации: имя файла/модуля, номер версии/ревизии, дата/время, название продукта, название поставщика, обозначение памяти на печатной плате, уведомление об авторских правах, вход в систему. [3] Обычно можно увидеть: 48, 44, 52, что является ASCII-представлением букв «H», «D», «R». [4]
С1Данные16-битный
адрес
ДаЭта запись содержит данные, которые начинаются с 16-битного адреса. [4] [3] Количество байтов данных, содержащихся в этой записи, равно "Поле количества байтов" минус 3 (2 байта для "16-битного поля адреса" плюс 1 байт для "Поле контрольной суммы"). Эта запись обычно используется для 8-битных процессоров, таких как 6502 , 6800 , 8051 , Z80 , AVR , PIC .
С2Данные24-битный
адрес
ДаЭта запись содержит данные, которые начинаются с 24-битного адреса. [4] Количество байтов данных, содержащихся в этой записи, равно «Полю количества байтов» минус 4 (3 байта для «24-битного поля адреса» плюс 1 байт для «Поля контрольной суммы»).
С3Данные32-битный
адрес
ДаЭта запись содержит данные, которые начинаются с 32-битного адреса. [4] Количество байтов данных, содержащихся в этой записи, равно "Byte Count Field" минус 5 (4 байта для "32-битного поля адреса" плюс 1 байт для "Checksum Field"). Эта запись обычно используется для 32-битных процессоров, таких как 68000 , ARM , RISC-V .
С4СдержанныйЭта запись зарезервирована.
С5Считать16-битный
счетчик
НетЭта необязательная запись содержит 16-битное количество записей S1/S2/S3. [4] Эта запись используется, если количество записей меньше или равно 65 535 (0xFFFF), в противном случае будет использоваться запись S6.
С6Считать24-битный
счетчик
НетЭта необязательная запись содержит 24-битное количество записей S1/S2/S3. Эта запись используется, если количество записей меньше или равно 16 777 215 (0xFFFFFF). Если меньше 65 536 (0x10000), то будет использоваться запись S5. ПРИМЕЧАНИЕ: Эта более новая запись является самым последним изменением (она может быть неофициальной). [4]
С7Начальный адрес
(Окончание)
32-битный
адрес
НетЭта запись содержит начальное место выполнения по 32-битному адресу. [4] [5] Это используется для завершения серии записей S3. Если файл SREC используется только для программирования запоминающего устройства, а место выполнения игнорируется, то можно использовать нулевой адрес.
С8Начальный адрес
(Окончание)
24-битный
адрес
НетЭта запись содержит начальное место выполнения по 24-битному адресу. [4] [5] Это используется для завершения серии записей S2. Если файл SREC используется только для программирования запоминающего устройства, а место выполнения игнорируется, то можно использовать адрес ноль.
С9Начальный адрес
(Окончание)
16-битный
адрес
НетЭта запись содержит начальное место выполнения по 16-битному адресу. [4] [5] Это используется для завершения серии записей S1. [3] Если файл SREC используется только для программирования устройства памяти, а место выполнения игнорируется, то можно использовать нулевой адрес.

Запись заказа

Хотя в некоторых документах Unix указано, что «порядок S-записей в файле не имеет значения, и не может предполагаться какой-либо определенный порядок», [4] на практике большинство программ упорядочивают записи SREC. Типичный порядок записи начинается с (иногда необязательной) записи заголовка S0, продолжается последовательностью из одной или нескольких записей данных S1/S2/S3, может иметь одну необязательную запись счетчика S5/S6 и заканчивается одной соответствующей записью завершения S7/S8/S9.

16-битные адресные записи в стиле S19
  1. С0
  2. S1 (одна или несколько записей)
  3. S5 (необязательная запись)
  4. С9
24-битные адресные записи в стиле S28
  1. С0
  2. S2 (одна или несколько записей)
  3. S5 (необязательная запись)
  4. С8
32-битные адресные записи в стиле S37
  1. С0
  2. S3 (одна или несколько записей)
  3. S5 (необязательная запись)
  4. С7

Ограничения

Длина записи

Страница руководства из исторической документации Unix O/S гласит: «Файл S-записи состоит из последовательности специально отформатированных строк символов ASCII . Длина S-записи будет меньше или равна 78 байтам». Страница руководства дополнительно ограничивает количество символов в поле данных до 64 (или 32 байта данных). [4] Запись с адресом из 8 шестнадцатеричных символов и 64 символами данных будет иметь длину 78 (2 + 2 + 8 + 64 + 2) символов (это количество игнорирует возможные символы конца строки или завершения строки) и помещается на телетайпе шириной 80 символов . Примечание в нижней части страницы руководства гласит: «Эта страница руководства — единственное место, где документировано ограничение общей длины записи в 78 байт или ограничение длины данных в 64 байта. Этим значениям не следует доверять в общем случае». [4]

Если исторический предел в 78 байт игнорируется, максимальная длина S-записи составит 514 символов. Если предположить, что количество байт равно 0xFF (255), то это будет 2 для поля типа записи + 2 для поля количества байт + (2 * 255) для полей адреса / данных / контрольной суммы. Может потребоваться дополнительное буферное пространство для хранения до двух управляющих символов ( возврат каретки и/или перевод строки ) и/или символа конца строки NUL (0x00) для языков программирования C/C++. Использование длинных строк имеет проблемы: «Определение формата S-записи Motorola допускает до 255 байт полезной нагрузки или строк по 514 символов плюс завершение строки. Все программисты EPROM должны иметь достаточно большие буферы строк, чтобы справляться с записями такого размера. Немногие это делают». [6]

Поле данных

Минимальный объем данных для записей S0/S1/S2/S3 равен нулю.

В некоторых исторических документах рекомендуется использовать в этом поле максимум 32 байта данных (64 шестнадцатеричных символа) [4] (возможно, потому что 32 — это наибольшая степень числа 2 для данных, которые могут поместиться на телетайпе / компьютерном терминале / перфокарте шириной 80 столбцов ).

Если исторический предел в 32 байта игнорируется, то максимальный объем данных варьируется в зависимости от размера поля адреса (4 / 6 / 8). Максимальное количество байт данных рассчитывается как 255 (максимум для поля количества байт) минус (1 байт для поля контрольной суммы) минус (количество байт в поле адреса), таким образом, максимальный объем данных для каждого типа записи составляет: 252 байта данных (504 шестнадцатеричных символа) для записей S0 и S1, 251 байт данных (502 шестнадцатеричных символа) для записей S2, 250 байт данных (500 шестнадцатеричных символов) для записей S3.

Комментарии

За исключением преобразованных из ASCII в hex комментариев в заголовочных записях S0, формат файла SREC официально не поддерживает читаемые человеком комментарии ASCII , хотя некоторое программное обеспечение игнорирует все строки, которые не начинаются с "S" и/или игнорирует весь текст после поля контрольной суммы (таким образом, конечный текст иногда используется (несовместимо) для комментариев). Например, компилятор CCS PIC поддерживает размещение строки комментария ";" в верхней или нижней части файла Intel HEX , и в его руководствах говорится, что "некоторые программисты (в частности, MPLAB) не любят комментарии в верхней части файла hex", поэтому компилятор имеет возможность размещать комментарий в нижней части файла hex. [7]

Примеры

Цветовая легенда

  Тип записи  Количество байтов  Адрес  Данные  Контрольная сумма

Расчет контрольной суммы

Следующий пример записи:

S1 13 7AF0 0A0A0D0000000000000000000000000000 61

декодируется, чтобы показать, как вычисляется значение контрольной суммы. В следующем примере используется знак доллара ( $ ) для указания шестнадцатеричного значения (конвенция Motorola):

  1. $13 + $7A + $F0 + $0A + $0A + $0D + $00 + ... + $00 = $019EДобавить: сложить сумму каждого байта .
  2. Маска: отбросить старший байт ( $01) суммы и сохранить младший байт (LSB), то есть $9E.
  3. Дополнение: вычислить дополнение до единиц младшего бита, которое равно $61.

В языке программирования C сумма преобразуется в контрольную сумму следующим образом:0xFF - (sum & 0xFF)

16-битный адрес памяти

S0 0F 0000 68656C6C6F20202020200000 3C S1 1F 0000 7C0802A6900100049421FFF07C6C1B787C8C23783C60000038630000 26 S1 1F 001C 4BFFFFE5398000007D83637880010014382100107C0803A64E800020 E9 S1 11 0038 48656C6C6F20776F726C642E0A00 42 S5 03 0003Ф9 С9 03 0000ФК

Смотрите также

Ссылки

  1. ^ "AR#476 PROMGen - Описание форматов файлов PROM/EEPROM: MCS, EXO, HEX и другие". Xilinx . 2010-03-08. Motorola EXORmacs - Код формата файла 87. Архивировано из оригинала 2020-03-03 . Получено 2020-03-03 .
  2. ^ Уайлс, Майк; Феликс, Андре (2000-10-21) [1975]. Холли, Майкл (ред.). MCM6830L7 MIKBUG / MINIBUG ROM (PDF) (Инженерная записка). Motorola Semiconductor Products, Inc. Примечание 100. Архивировано из оригинала (PDF) 2019-06-16 . Получено 2019-06-16 .(23 страницы)
  3. ^ abc Hennig-Roleff, Werner (1993-02-01) [1988]. "HEX.DOC: Motorola - HEX Format". SIM51 . 1.04 (на немецком языке). Архивировано из оригинала 2017-08-11 . Получено 2021-12-08 .(Примечание. Это старая версия SIM51, программное обеспечение и документация поддерживались до 1996 года.)
  4. ^ abcdefghijklm "Motorola S-records (страница руководства UNIX и комментарии)". Uisp AVR In-System Programmer . Архивировано из оригинала 2002-07-03.
  5. ^ abc "Приложение C". Справочное руководство программиста семейства M68000. Редакция 1. Motorola . 1992. стр.  C-1 – C-5 . ISBN  978-0-13723289-5.
  6. ^ "srec_examples и srec_cat". SourceForge . Архивировано из оригинала 2013-01-27.
  7. ^ CCS Compiler Reference Manual PCB/PCM/PCH (PDF) , Custom Computer Services, Inc. , май 2014 г., стр. 142 , получено 08.02.2015 г.

Дальнейшее чтение

  • "2.8. Форматы микропроцессоров 2.8.1. Требования к входным данным: формат Motorola Exorciser. Выберите код 82". Руководство оператора по возможностям последовательного ввода-вывода программаторов ввода-вывода данных - Пакет форматов перевода (PDF) . Редакция C. Data I/O Corporation . Октябрь 1980 г. стр.  2– 9. 055-1901. Архивировано (PDF) из оригинала 01.03.2020 . Получено 01.03.2020 .
  • Руководство пользователя оценочного модуля M1468705EVM (1-е изд.). Motorola Inc. Декабрь 1983 г. M1468705EVM/Dl . Получено 01.03.2020 .[1][2]
  • Форматы файлов перевода. Data I/O Corporation . 1987-09-03. Архивировано из оригинала 2020-03-01 . Получено 2020-03-01 .[3] (56 страниц)
  • Файхтингер, Хервиг (1987). «1.8.5. Lochstreifen-Datenformate: Das Motorola-S-Format» [1.8.5. Форматы данных бумажной ленты]. Arbeitsbuch Mikrocomputer [ Рабочая тетрадь по микрокомпьютеру ] (на немецком языке) (2-е изд.). Мюнхен, Германия: Franzis-Verlag GmbH . С. 240–243 [242]. ISBN 3-7723-8022-0.
  • «Приложение A. Информация о записи S». Руководство пользователя модуля оценки M68HC05EVM (PDF) (4-е изд.). Motorola . 1990. стр. A-1. […] Для совместимости с телетайпами некоторые программы могут ограничивать количество байтов [данных] до 28 (56 печатных символов в записи S). […]
  • "Как интерпретировать данные Motorola S и Intel HEX в формате? Motorola S-Records". Главная > Аппаратное обеспечение > … > Системы внутрисхемного тестирования > Автоматизированное испытательное оборудование [Снято с производства] > Подробности . Keysight Technologies . Архивировано из оригинала 2020-03-01 . Получено 2020-03-01 .
  • Бирд, Брайан (2016) [2007]. "Формат Motorola S-record". Lucid Technologies . Архивировано из оригинала 2020-02-28 . Получено 2020-02-28 .
  • Strombergson, Joachim; Walleij, Linus; Faltstrom, Patrik (октябрь 2005 г.). "The S Hexdump Format". IETF . RFC  4194. Архивировано из оригинала 2020-03-01 . Получено 2020-03-01 .
  • SRecord — это набор инструментов для работы с файлами формата SREC.
  • BIN2MOT, утилита конвертации двоичных файлов в файлы Motorola S-Record.
  • SRecordizer — инструмент для просмотра, редактирования и проверки ошибок файлов формата S19.
  • bincopy — это пакет Python для работы с файлами формата SREC.
  • kk_srec — это библиотека C и программа для чтения формата SREC.
Получено с "https://en.wikipedia.org/w/index.php?title=SREC_(формат_файла)&oldid=1270984913"