Intel HEX

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Intel HEX — формат файла, предназначенного для представления произвольных двоичных данных в текстовом виде. По историческим причинам является стандартом де-факто при прошивке разнообразных микросхем с памятью (микроконтроллеров, ПЗУ, EEPROM и т. п.). Соответственно большинство инструментов подготовки образов прошивки (компиляторы, редакторы, просмотрщики и т. п.) умеют работать с этим форматом.

Файл обычно имеет расширение .hex. Названия I8HEX, I16HEX и I32HEX иногда используются для определения набора записей, используемых в файле. I8HEX использует только записи с типами 00/01 (16-битная адресация), в I16HEX добавляются записи 02/03 (20-битная адресация), и в I32HEX добавляются записи 04/05 (32-битная адресация).

Достоинством формата (в отличие от простого двоичного) является возможность указывать только определенные области адресов (с точностью до байта). Многие микроконтроллерные архитектуры имеют несколько областей программирования с обширными пустотами в адресации между ними.

Формат записи[править | править вики-текст]

Объяснение первое[править | править вики-текст]

Файл состоит из текстовых ASCII строк. Каждая строка представляет собой одну запись. Каждая запись начинается с двоеточия (:), после которого идет набор шестнадцатеричных цифр кратных байту:

  • Начало записи (:).
  • Количество байт данных, содержащихся в этой записи. Занимает один байт (две шестнадцатеричных цифры), что соответствует 0…255 в десятичной системе.
  • Начальный адрес блока записываемых данных — 2 байта. Этот адрес определяет абсолютное местоположение данных этой записи в двоичном файле.
  • Один байт, обозначающий тип записи. Определены следующие типы записей:
    • 0 — запись содержит данные двоичного файла.
    • 1 — запись обозначает конец файла, данных не содержит. Имеет характерный вид «:00000001FF».
    • 2 — запись адреса сегмента (подробнее см.ниже).
    • 4 — запись расширенного адреса (подробнее см.ниже).
  • Байты данных, которые требуется сохранить в EPROM (их число указывается в начале записи, от 0 до 255 байт).
  • Последний байт в записи является контрольной суммой. Рассчитывается так чтобы сумма всех байтов в записи была равна 0.
  • Строка заканчивается стандартной парой CR/LF (0Dh 0Ah).

Объяснение второе[править | править вики-текст]

Файл формата Intel HEX может состоять из любого количества записей. Каждая запись представляет собой ASCII-строку состоящую из нескольких пар 16-ричных цифр. Строка должна начинаться с символа двоеточия и оканчиваться парой символов CR и LF. Запись состоит из пяти полей следующего формата:
:LLAAAATTDD...CC
Каждая группа букв (LL, AAAA, TT и т. д.) представляет собой отдельное поле. Каждая буква — отдельную 16-ричную цифру (4 бита). Каждое поле состоит, как минимум, из двух 16-ричных цифр (байт). Ниже представлена расшифровка полей записи:

  •  : Каждая запись в файле Intel HEX должна начинаться с двоеточия.
  • LL Поле длины — показывает количество байт данных (DD) в записи.
  • AAAA Поле адреса — представляет начальный адрес записи.
  • TT Поле типа. Оно может принимать следующие значения:
    • 00 запись содержит данные двоичного файла.
    • 01 запись является концом файла.
    • 02 запись адреса сегмента (подробнее см. ниже).
    • 03 Start Segment Address Record.
    • 04 запись расширенного адреса (подробнее см. ниже).
    • 05 Start Linear Address Record.
  • DD Поле данных. Запись может содержать несколько байт данных. Количество байт данных должно соответствовать полю LL.
  • CC Поле контрольной суммы. Поле контрольной суммы вычисляется путем сложения значений всех байт (пар 16-ричных цифр) записи по модулю 256 с последующим переводом в дополнительный формат (отнять получившееся значение от 0). Таким образом, если просуммировать все пары шестнадцатеричных чисел, включая LL, AA, TT, DD, CC, получится 0.

Запись адреса сегмента[править | править вики-текст]

Файл формата Intel HEХ может содержать записи для процессоров Intel 8086, которые определяют адрес сегмента (иначе говоря — номер параграфа, один параграф — это 16 байт). Если используется директива H167, то этот тип записи заменяет запись расширенного линейного адреса. Номер параграфа используется как смещение адреса для всех записей данных, следующих за этой записью. Смещение представляет собой сдвиг адреса на четыре бита влево. Например, смещение равное 0x1234 даст реальный адрес 0x12340. Пример записи:
:020000021000EC где:

  • 02 Количество байт данных
  • 0000 В этом типе записи всегда равно 0000
  • 02 Тип записи 02 (запись адреса сегмента).
  • 1000 Номер параграфа (реальный адрес будет равен 0x10000).
  • EC Контрольная сумма

Запись расширенного адреса[править | править вики-текст]

Когда используется директива H167, файл формата Intel HEX возможно будет содержать записи расширенного линейного адреса. Этот тип записи определяет значения двух старших байт абсолютного адреса (биты 16-31). Эти два старших байта адреса будут применяться как смещение адреса для всех записей данных, следующих за этой записью. Пример записи:
: 0200000400FFFB
где:

  • 02 Количество байт данных
  • 0000 Всегда равно 0
  • 04 Тип записи 04 (запись расширенного линейного адреса)
  • 00FF Старшее слово смещения адреса (0x00FF0000)
  • FB Контрольная сумма

Запись конца файла[править | править вики-текст]

Файлы формата Intel HEX должны иметь запись Конца Файла (EOF).[источник не указан 237 дней] Пример записи:
:00000001FF где:

  • 00 Количество байт записи
  • 0000 Поле игнорируется. Не имеет значения, что там записано, но обычно всегда равно 0
  • 01 Тип записи 01 (Конец Файла)
  • FF Контрольная сумма, вычисленная как 01h + NOT(00h + 00h + 00h + 01h).

Примеры[править | править вики-текст]

Пример 1[править | править вики-текст]

:10010000214601360121470136007EFE09D2190140
:100110002146017EB7C20001FF5F16002148011988
:10012000194E79234623965778239EDA3F01B2CAA7
:100130003F0156702B5E712B722B732146013421C7
:00000001FF

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

Пример 2[править | править вики-текст]

Пример одной записи данных:
:10246200464C5549442050524F46494C4500464C33 где

  • 10 Количество байт данных (16 байт)
  • 2462 Адрес памяти, куда будет помещена запись.
  • 00 Тип записи — данные.
  • 464C...464C Данные
  • 33 Контрольная сумма записи

Пример 3[править | править вики-текст]

: 020000021000EC
: 10C20000E0A5E6F6FDFFE0AEE00FE6FCFDFFE6FD93
: 10C21000FFFFF6F50EFE4B66F2FA0CFEF2F40EFE90
: 10C22000F04EF05FF06CF07DCA0050C2F086F097DF
: 10C23000F04AF054BCF5204830592D02E018BB03F9
: 020000020000FC
: 04000000FA00000200
: 00000001FF

См. также[править | править вики-текст]

SREC — формат файла используемый ф.Motorola

Ссылки[править | править вики-текст]