Краткая справочная таблица для формата 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-файл импортируется программистом для «записи» машинного кода в энергонезависимую память или передается в целевую систему для загрузки и выполнения.
Формат S-записи был создан в середине 1970-х для процессора Motorola 6800. Инструменты разработки программного обеспечения для этого и других встроенных процессоров будут создавать исполняемый код и данные в формате S-записи. Затем программисты PROM считывают формат S-записи и «записывают» данные в PROM или EPROM, используемые во встроенной системе.
Существуют и другие кодировки ASCII с аналогичной целью. Они были ранними двоичными форматами, но они не являются ни компактными, ни гибкими. Шестнадцатеричные форматы более компактны, потому что они представляют 4 бита, а не 1 бит на символ. Многие из них, например S-запись, являются более гибкими, поскольку включают информацию об адресе, поэтому они могут указывать только часть PROM. Формат Intel HEX часто использовался с процессорами Intel. TekHex - еще один шестнадцатеричный формат, который может включать в себя таблицу символов для отладки.
S | Тип | Счетчик байтов | Адрес | Данные | Контрольная сумма |
Файл формата SREC состоит из серии текстовых записей ASCII. Записи имеют следующую структуру слева направо:
Записи 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". | |
S1 | Data | 16-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.
Длина записи - документация на странице руководства 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
декодируется, чтобы показать, как вычисляется значение контрольной суммы, следующим образом:
S00F000068656C6C6F202020202000003C S11F00007C0802A6900100049421FFF07C6C1B787C8FFC2370000C 0014382100107C0803A64E800020E9 S111003848656C6C6F20776F726C642E0A0042 S5030003F9 S9030000FC
[…] Для совместимости с телетайпами некоторые программы могут ограничивать количество байтов [данных] до 28 (56 печатаемых символов в S-записи). […]