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

редактировать

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

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

Содержание
  • 1 Обзор
    • 1.1 Другие шестнадцатеричные форматы
  • 2 Формат
    • 2.1 Структура записи
    • 2.2 Знаки конца текстовой строки
    • 2.3 Типы записей
    • 2.4 Порядок записи
    • 2.5 Ограничения
  • 3 Примеры
    • 3.1 Расчет контрольной суммы
    • 3.2 16-битный адрес памяти
  • 4 См. Также
  • 5 Ссылки
  • 6 Дополнительная литература
  • 7 Внешние ссылки
Обзор

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

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

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

Формат

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

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

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

  1. Тип записи, два символа, заглавная буква «S» (0x53 как значение символа ASCII), затем цифра от «0» до «9», определяющая тип записи.
  2. Число байтов, две шестнадцатеричные цифры, указывающие количество байтов (пары шестнадцатеричных цифр), которые следуют в остальной части записи (адрес + данные + контрольная сумма). Это поле имеет минимальное значение 3 для 16-битного поля адреса плюс 1 байт контрольной суммы и максимальное значение 255 (0xFF).
  3. Адрес, четыре / шесть / восемь шестнадцатеричных цифр, как определено типом записи. Байты адреса расположены в формате big endian.
  4. Data ', последовательность из 2n шестнадцатеричных цифр для n байтов данных. Для записей S1 / S2 / S3 типично максимум 32 байта на запись, поскольку она умещается на экране терминала шириной 80 символов, хотя 16 байтов было бы легче визуально декодировать каждый байт по определенному адресу.
  5. Контрольная сумма, две шестнадцатеричные цифры, младший байт из дополнения до единиц суммы значений, представленных двумя парами шестнадцатеричных цифр для счетчика байтов, адреса и полей данных. Подробный пример контрольной суммы см. В разделе «Примеры».

Знаки конца текстовой строки

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

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

Типы записей

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

Запись. ПолеЗапись. НазначениеАдрес. ПолеДанные. ПолеЗапись. Описание
S0Заголовок16-битный. "0000"Нет Эта запись содержит текстовый комментарий ASCII производителя, представленный в виде серии пар шестнадцатеричных цифр. Обычно данные для этой записи представлены в формате строки с завершающим нулем. Текстовые данные могут быть любыми, включая смесь следующей информации: имя файла / модуля, версия / номер ревизии, дата / время, название продукта, имя поставщика, обозначение памяти на печатной плате, уведомление об авторских правах. Обычно можно увидеть: 48 44 52, что является ASCII H, D и R - "HDR".
S1Data16-bit. AddressДа Эта запись содержит данные, которые начинаются с 16-битного адресного поля. Эта запись обычно используется для 8-битных микроконтроллеров, таких как AVR, PIC, 8051, 68xx, 6502, 80xx, Z80. Количество байтов данных, содержащихся в этой записи, равно «Поле счетчика байтов» минус 3 (то есть 2 байта для «16-битного поля адреса» и 1 байт для «поля контрольной суммы»).
S2Данные24-битный. АдресДа Эта запись содержит данные, которые начинаются с 24-битного адреса. Количество байтов данных, содержащихся в этой записи, равно «Поле счетчика байтов» минус 4 (то есть 3 байта для «24-битного поля адреса» и 1 байт для «поля контрольной суммы»).
S3Данные32-битный. АдресДа Эта запись содержит данные, которые начинаются с 32-битного адреса. Эта запись обычно используется для 32-битных микроконтроллеров, таких как ARM и 680x0. Количество байтов данных, содержащихся в этой записи, равно «Поле счетчика байтов» минус 5 (то есть 4 байта для «32-битного поля адреса» и 1 байт для «поля контрольной суммы»).
S4ЗарезервированоН / ДН / ДЭта запись зарезервирована.
S5Счетчик16-битный. СчетчикНет Эта дополнительная запись содержит 16-битный счетчик записей S1 / S2 / S3. Эта запись используется, если количество записей меньше или равно 65 535 (0xFFFF), в противном случае будет использоваться запись S6.
S6Счетчик24-битный. СчетчикНет Эта дополнительная запись содержит 24-битный счетчик записей S1 / S2 / S3. Эта запись используется, если количество записей меньше или равно 16 777 215 (0xFFFFFF). Если меньше 65 536 (0x10000), то будет использоваться запись S5. ПРИМЕЧАНИЕ: Эта новая запись является самым последним изменением (возможно, не официальным).
S7Начальный адрес. (Завершение)32- бит. АдресНет Эта запись содержит начальное место выполнения по 32-битному адресу. Это используется для завершения серии записей S3. Если файл SREC используется только для программирования устройства памяти, а место выполнения игнорируется, то можно использовать нулевой адрес.
S8Начальный адрес. (Завершение)24-битный. АдресНет Эта запись содержит начальное место выполнения по 24-битному адресу. Это используется для завершения серии записей S2. Если файл SREC используется только для программирования устройства памяти, а место выполнения игнорируется, то можно использовать нулевой адрес.
S9Начальный адрес. (Завершение)16-битный. АдресНет Эта запись содержит начальное место выполнения по 16-битному адресу. Это используется для завершения серии записей S1. Если файл SREC используется только для программирования устройства памяти, а место выполнения игнорируется, то можно использовать нулевой адрес.

Порядок записи

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

16-битные адресные записи в стиле S19
  1. S0
  2. S1 (одна или несколько записей)
  3. S5 (дополнительная запись)
  4. S9
24-битные адресные записи в стиле S28
  1. S0
  2. S2 (одна или больше записей)
  3. S5 (дополнительная запись)
  4. S8
32-битные адресные записи в стиле S37
  1. S0
  2. S3 (одна или несколько записей)
  3. S5 (дополнительная запись)
  4. S7

Ограничения

Длина записи - документация на странице руководства Unix гласит: «Файл S-записи состоит из последовательности специально отформатированных строк символов ASCII. Длина S-записи будет меньше или равна 78 байтам». Страница руководства дополнительно ограничивает количество символов в поле данных до 64 (или 32 байтов данных). Запись с адресом из 8 шестнадцатеричных символов и 64 символами данных будет иметь длину 78 (2 + 2 + 8 + 64 + 2) символов (этот счетчик игнорирует возможные символы конца строки или завершения строки). Файл можно было распечатать на телетайпе шириной 80 символов. В примечании внизу страницы руководства указано: «Эта [страница руководства] - единственное место, где задокументировано 78-байтовое ограничение на общую длину записи или 64-байтовое ограничение на длину данных. Этим значениям нельзя доверять общий случай ». Если это ограничение игнорируется, максимальная длина S-записи составляет 514 символов: 2 для поля типа записи + 2 для поля счетчика байтов (значение которого будет 0xFF = 255) + 2 * 255 для полей адреса, данных и контрольной суммы.. Дополнительное буферное пространство может потребоваться для символов конца строки и строки. При использовании большой длины строки возникают проблемы: «Определение формата S-записи Motorola допускает до 255 байтов полезной нагрузки или строк по 514 символов плюс завершение строки. Все программисты EPROM должны иметь достаточно большие буферы строк, чтобы справиться с записями такого размера. Немногие делают. "

Поле данных. В некоторых документах рекомендуется использовать максимум 32 байта данных (64 шестнадцатеричных символа) в этом поле. Минимальный объем данных для записей S0 / S1 / S2 / S3 равен нулю. Максимальный объем данных зависит от размера адресного поля. Поскольку значение поля Byte Count не может быть больше 255 (0xFF), максимальное количество байтов данных рассчитывается как 255 минус (1 байт для поля контрольной суммы) минус (количество байтов в поле адреса). Записи S0 / S1 поддерживают до 252 байтов данных. Запись S2 поддерживает до 251 байта данных. Запись S3 поддерживает до 250 байт данных.

Комментарии - формат файла SREC не поддерживает комментарии. Некоторые программы игнорируют все текстовые строки, которые не начинаются с буквы «S», и игнорируют весь текст после поля контрольной суммы; этот дополнительный текст иногда используется (несовместимо) для комментариев. Например, компилятор CCS PIC поддерживает размещение символа ";" строка комментария вверху или внизу файла Intel HEX, а в руководствах к ней говорится, что «некоторым программистам (в частности, MPLAB) не нравятся комментарии вверху шестнадцатеричного файла», поэтому компилятор имеет возможность размещения комментария в нижней части шестнадцатеричного файла.

Примеры
Цветовая легенда

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

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

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

S1137AF00A0A0D0000000000000000000000000061

декодируется, чтобы показать, как вычисляется значение контрольной суммы, следующим образом:

  1. Добавить: Добавить каждое байт 0x13 + 0x7A + 0xF0 + 0x0A + 0x0A + 0x0D + 0x00 +... + 0x00 = 0x19E всего.
  2. Маска: оставить младший значащий байт из общего числа = 0x9E.
  3. Дополнение : Вычислить дополнение до единиц младшего значащего байта = 0x61.

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

S00F000068656C6C6F202020202000003C S11F00007C0802A6900100049421FFF07C6C1B787C8FFC2370000C 0014382100107C0803A64E800020E9 S111003848656C6C6F20776F726C642E0A0042 S5030003F9 S9030000FC
См. Также
Ссылки
Дополнительная литература
Внешние ссылки
  • SRecord - это набор инструментов для работы с файлами формата SREC.
  • BIN2MOT, утилита преобразования файлов BINARY в Motorola S-Record.
  • SRecordizer - это инструмент для просмотра, редактирования и проверки ошибок файлов формата S19.
  • bincopy - это пакет Python для управления файлами формата SREC.
  • kk_srec - это библиотека и программа на языке Си. для чтения формата SREC.
Последняя правка сделана 2021-06-06 04:21:09
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте