SREC (формат файла)
Расширение имени файла | |
---|---|
Разработано | Моторола |
Motorola S-запись — это формат файла, созданный Motorola в середине 1970-х годов, который передает двоичную информацию в виде шестнадцатеричных значений в ASCII текстовой форме . Этот формат файла также может называться SRECORD , SREC , S19 , S28 , S37 . Он обычно используется для программирования флэш-памяти в микроконтроллерах, EPROM , EEPROM и других типах программируемых логических устройств. В типичном приложении компилятор или ассемблер преобразует исходный код программы (например, язык C или ассемблер) в машинный код и выводит его в HEX-файл. Затем файл HEX импортируется программистом для «записи» машинного кода в энергонезависимую память или передается в целевую систему для загрузки и выполнения.
Обзор
[ редактировать ]История
[ редактировать ]Формат S-записи был создан в середине 1970-х годов для процессора Motorola 6800 . Инструменты разработки программного обеспечения для этого и других встроенных процессоров будут создавать исполняемый код и данные в формате S-записи. Программисты PROM затем считывали формат S-записи и «записывали» данные в PROM или EPROM, используемые во встроенной системе.
Другие шестнадцатеричные форматы
[ редактировать ]Существуют другие кодировки ASCII с аналогичной целью. BPNF , BHLF и B10F были ранними двоичными форматами, но они не были ни компактными, ни гибкими. Шестнадцатеричные форматы более компактны, поскольку они представляют собой 4 бита, а не 1 бит на символ. Многие из них, такие как S-запись, более гибки, поскольку включают информацию об адресе, поэтому можно указать только часть PROM. Формат Intel HEX часто использовался с процессорами Intel. TekHex — еще один шестнадцатеричный формат, который может включать таблицу символов для отладки.
Формат
[ редактировать ]Структура записи
[ редактировать ]С | Тип | Количество байтов | Адрес | Данные | Контрольная сумма |
Файл формата SREC состоит из серии текстовых записей ASCII . Записи имеют следующую структуру слева направо:
- Начало записи — каждая запись начинается с заглавной буквы «S» (ASCII 0x53), которая означает «Начало записи». [2]
- Тип записи — одна цифра от 0 до 9 (ASCII от 0x30 до 0x39), определяющая тип записи. См. таблицу ниже.
- Количество байтов — две шестнадцатеричные цифры (от «00» до «FF»), обозначающие количество байтов (пар шестнадцатеричных цифр), которые следуют в остальной части записи (адрес + данные + контрольная сумма). Минимальное значение этого поля равно 3 (2 для 16-битного поля адреса плюс 1 байт контрольной суммы) и максимальное значение 255 (0xFF). «00» / «01» / «02» — недопустимые значения.
- Адрес — четыре/шесть/восемь шестнадцатеричных цифр в зависимости от типа записи. Байты адреса располагаются в формате с обратным порядком байтов .
- Данные — последовательность из 2 n шестнадцатеричных цифр для n байт данных. Для записей S1/S2/S3 типично максимум 32 байта на запись, поскольку она поместится на экране терминала шириной 80 символов, хотя 16 байтов было бы легче визуально декодировать каждый байт по определенному адресу.
- Контрольная сумма — две шестнадцатеричные цифры, младший байт дополнения до единицы суммы значений, представленных двумя парами шестнадцатеричных цифр для полей «Счетчик байтов», «Адрес» и «Данные». В языке программирования C сумма преобразуется в контрольную сумму следующим образом:
0xFF - (sum & 0xFF)
Терминаторы текстовой строки
[ редактировать ]Записи SREC разделяются одним или несколькими символами завершения строки ASCII, так что каждая запись отображается отдельно в текстовой строке. Это повышает удобочитаемость за счет визуального разделения записей, а также обеспечивает заполнение между записями, что можно использовать для повышения эффективности машинного анализа .
Программы, создающие HEX-записи, обычно используют символы завершения строки, соответствующие соглашениям их операционных систем . Например, программы Linux используют один символ LF ( перевод строки , 0x0A как значение символа ASCII) для завершения строк, тогда как программы Windows используют символ CR ( возврат каретки , 0x0D как значение символа ASCII), за которым следует символ LF.
Типы записей
[ редактировать ]В следующей таблице описаны 10 возможных S-записей. S4 зарезервирован и в настоящее время не определен. S6 изначально был зарезервирован, но позже был переопределен.
Записывать поле |
Записывать цель |
Адрес поле |
Данные поле |
Записывать описание |
---|---|---|---|---|
S0 | Заголовок | 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 байт для «Поля контрольной суммы»). | |
S3 | Данные | 32-битный Адрес |
Эта запись содержит данные, начинающиеся с 32-битного адреса. [4] Количество байтов данных, содержащихся в этой записи, равно «Полю подсчета байтов» минус 5 (4 байта для «32-битного поля адреса» плюс 1 байт для «Поля контрольной суммы»). Эта запись обычно используется для 32-битных процессоров, таких как 68000 , ARM , RISC-V . | |
С4 | Сдержанный | — | — | Эта запись зарезервирована. |
С5 | Считать | 16-битный Считать |
Эта дополнительная запись содержит 16-битное количество записей S1/S2/S3. [4] Эта запись используется, если количество записей меньше или равно 65 535 (0xFFFF), в противном случае будет использоваться запись S6. | |
S6 | Считать | 24-битный Считать |
Эта дополнительная запись содержит 24-битное количество записей S1/S2/S3. Эта запись используется, если количество записей меньше или равно 16 777 215 (0xFFFFFF). Если меньше 65 536 (0x10000), будет использоваться запись S5. ПРИМЕЧАНИЕ. Эта новая запись является самым последним изменением (возможно, она не является официальной). [4] | |
S7 | Начальный адрес (Прекращение) |
32-битный Адрес |
Эта запись содержит место начала выполнения по 32-битному адресу. [4] [5] Это используется для завершения серии записей S3. Если файл SREC используется только для программирования устройства памяти и место выполнения игнорируется, то можно использовать нулевой адрес. | |
S8 | Начальный адрес (Прекращение) |
24-битный Адрес |
Эта запись содержит место начала выполнения по 24-битному адресу. [4] [5] Это используется для завершения серии записей S2. Если файл SREC используется только для программирования устройства памяти и место выполнения игнорируется, то можно использовать нулевой адрес. | |
S9 | Начальный адрес (Прекращение) |
16-битный Адрес |
Эта запись содержит место начала выполнения по 16-битному адресу. [4] [5] Это используется для завершения серии записей S1. [3] Если файл SREC используется только для программирования устройства памяти и место выполнения игнорируется, то можно использовать нулевой адрес. |
Порядок записи
[ редактировать ]Хотя в некоторой документации Unix говорится, что «порядок S-записей в файле не имеет значения, и никакой конкретный порядок не может быть принят», [4] на практике большинство программ заказывают записи SREC. Типичный порядок записей начинается с (иногда необязательной) записи заголовка S0, продолжается последовательностью из одной или нескольких записей данных S1/S2/S3, может иметь одну дополнительную запись счета S5/S6 и заканчивается одной соответствующей записью S7/S8/. Запись о завершении S9.
- 16-битные адресные записи в стиле S19.
- S0
- S1 (одна или несколько записей)
- S5 (дополнительная запись)
- S9
- 24-битные адресные записи в стиле S28.
- S0
- S2 (одна или несколько записей)
- S5 (дополнительная запись)
- S8
- 32-битные адресные записи в стиле S37.
- S0
- S3 (одна или несколько записей)
- S5 (дополнительная запись)
- S7
Ограничения
[ редактировать ]Длина записи
[ редактировать ]На странице руководства из исторической документации по операционной системе Unix говорится: «Файл 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 — это наибольшая степень двойки данных, которая поместилась бы на 80 столбцов шириной телетайпе / компьютерном терминале / перфокарте ).
Если исторический предел в 32 байта игнорируется, то максимальный объем данных варьируется в зависимости от размера поля адреса (4/6/8). Максимальное количество байтов данных рассчитывается как 255 (максимум для поля «Количество байт») минус (1 байт для поля «Контрольная сумма») минус (количество байтов в поле «Адрес»), таким образом, максимальный объем данных для каждого типа записи составляет: 252. байты данных (504 шестнадцатеричных символа) для записей S0 и S1, 251 байт данных (502 шестнадцатеричных символа) для записей S2, 250 байтов данных (500 шестнадцатеричных символов) для записей S3.
Комментарии
[ редактировать ]За исключением комментариев, преобразованных из ASCII в шестнадцатеричный формат, в записях заголовка S0, формат файла SREC официально не поддерживает удобочитаемые комментарии ASCII , хотя некоторые программы игнорируют все строки, которые не начинаются с «S», и/или игнорируют весь текст. после поля контрольной суммы (поэтому для комментариев иногда используется завершающий текст (несовместимо)). Например, компилятор CCS PIC поддерживает размещение «;» строка комментария вверху или внизу файла Intel HEX , а в руководствах указано, что «некоторым программистам (в частности, MPLAB) не нравятся комментарии в верхней части шестнадцатеричного файла», поэтому компилятор имеет возможность разместить комментарий. внизу шестнадцатеричного файла. [7]
Примеры
[ редактировать ]- Легенда цвета
Тип записи Количество байтов Адрес Данные Контрольная сумма
Расчет контрольной суммы
[ редактировать ]Следующий пример записи:
S1137AF00A0A0D0000000000000000000000000061
декодируется, чтобы показать, как вычисляется значение контрольной суммы. В следующем примере используется знак доллара ( $ ) для обозначения шестнадцатеричного значения (соглашение Motorola):
- Сложение: добавьте каждый байт $13 + $7A + $F0 + $0A + $0A + $0D + $00 + ... + $00 = сумма $019E.
- Маска: отбросьте самый значимый байт ( $01 ) суммы и сохраните младший байт (LSB), который равен $9E .
- Дополнение: вычислите дополнение до единиц младшего значащего разряда, которое составляет $61 .
В языке программирования C сумма преобразуется в контрольную сумму следующим образом: 0xFF - (sum & 0xFF)
16-битный адрес памяти
[ редактировать ]S00F000068656C6C6F202020202000003C S11F00007C0802A6900100049421FFF07C6C1B787C8C23783C6000003863000026 S11F001C4BFFFFE5398000007D83637880010014382100107C0803A64E800020E9 S111003848656C6C6F20776F726C642E0A0042 S5030003F9 S9030000FC
См. также
[ редактировать ]- Кодирование двоичного текста в текст , обзор и сравнение алгоритмов кодирования
- Шестнадцатеричный формат Intel
- Формат файла технологии MOS
- Шестнадцатеричный формат Tektronix
- Texas Instruments TI-TXT (текст TI)
Ссылки
[ редактировать ]- ^ «AR#476 PROMGen — Описание форматов файлов PROM/EEPROM: MCS, EXO, HEX и других» . Ксилинкс . 08 марта 2010 г. Motorola EXORmacs — код формата файла 87. Архивировано из оригинала 03 марта 2020 г. Проверено 3 марта 2020 г.
- ^ Уайлс, Майк; Феликс, Андре (21 октября 2000 г.) [1975]. Холли, Майкл (ред.). MCM6830L7 MIKBUG / MINIBUG ROM (PDF) (Техническое примечание). Motorola Semiconductor Products, Inc. Примечание 100. Архивировано из оригинала (PDF) 16 июня 2019 г. Проверено 16 июня 2019 г. (23 страницы)
- ^ Jump up to: а б с Хенниг-Ролефф, Вернер (1 февраля 1993 г.) [1988]. «HEX.DOC: Motorola — формат HEX» . SIM51 . 1.04 (на немецком языке). Архивировано из оригинала 11 августа 2017 г. Проверено 8 декабря 2021 г. (Примечание. Это старая версия SIM51, программное обеспечение и документация поддерживались до 1996 года.)
- ^ Jump up to: а б с д и ж г час я дж к л м «Motorola S-records (справочная страница UNIX и комментарии)» . Внутрисистемный программатор UISP AVR . Архивировано из оригинала 3 июля 2002 г.
- ^ Jump up to: а б с «Приложение С». Справочное руководство программатора семейства M68000 . Версия 1. Моторола . 1992. стр. C-1 – C-5. ISBN 978-0-13723289-5 .
- ^ «srec_examples и srec_cat» . СоурсФордж . Архивировано из оригинала 27 января 2013 г.
- ^ Справочное руководство компилятора CCS PCB/PCM/PCH (PDF) , Custom Computer Services, Inc. , май 2014 г., стр. 142 , получено 8 февраля 2015 г.
Дальнейшее чтение
[ редактировать ]- «2.8. Форматы микропроцессора 2.8.1. Требования к входным данным: формат Motorola Exorcisioner. Выберите код 82». Руководство оператора по возможностям последовательного ввода-вывода программистов ввода-вывода данных — пакет формата перевода (PDF) . Редакция C. Корпорация ввода-вывода данных . Октябрь 1980 г., стр. 2–9. 055-1901. Архивировано (PDF) из оригинала 01 марта 2020 г. Проверено 01 марта 2020 г.
- Руководство пользователя оценочного модуля M1468705EVM (1-е изд.). Motorola Inc. , декабрь 1983 г. M1468705EVM/Dl . Проверено 01 марта 2020 г. [1] [2]
- Форматы файлов перевода . Корпорация ввода-вывода данных . 3 сентября 1987 г. Архивировано из оригинала 01 марта 2020 г. Проверено 01 марта 2020 г. [3] (56 страниц)
- Файхтингер, Хервиг (1987). «1.8.5. Форматы данных на магнитной ленте: формат Motorola S» [1.8.5. Форматы данных бумажной ленты]. Arbeitsbuch Mikrocomputer [ Рабочая тетрадь по микрокомпьютеру ] (на немецком языке) (2-е изд.). Мюнхен, Германия: Franzis-Verlag GmbH . С. 240–243 [242]. ISBN 3-7723-8022-0 .
- «Приложение A.S. Информация о записи». Руководство пользователя оценочного модуля M68HC05EVM (PDF) (4-е изд.). Моторола . 1990. с. А-1.
[…] Для совместимости с телетайпами некоторые программы могут ограничивать количество байтов [данных] всего до 28 (56 печатных символов в S-записи). […]
- «Как интерпретировать данные Motorola S и Intel в формате HEX? Motorola S-Records» . Главная > Аппаратное обеспечение > … > Системы внутрисхемных испытаний > Оборудование для автоматизированных испытаний [Снято с производства] > Подробности . Кейсайт Технологии . Архивировано из оригинала 01 марта 2020 г. Проверено 01 марта 2020 г.
- Берд, Брайан (2016) [2007]. «Формат Motorola S-записи» . Люсид Технологии . Архивировано из оригинала 28 февраля 2020 г. Проверено 28 февраля 2020 г.
- Стромбергсон, Иоахим; Валлей, Линус; Фальтстрем, Патрик (октябрь 2005 г.). «Формат S Hexdump» . IETF . РФК 4194 . Архивировано из оригинала 01 марта 2020 г. Проверено 01 марта 2020 г.
Внешние ссылки
[ редактировать ]- SRecord — это набор инструментов для работы с файлами формата SREC.
- BIN2MOT , утилита конвертации файлов BINARY в Motorola S-Record.
- SRecordizer — это инструмент для просмотра, редактирования и проверки ошибок в файлах формата S19.
- bincopy — это пакет Python для работы с файлами формата SREC.
- kk_srec — это библиотека C и программа для чтения формата SREC.