Что такое формат файла HEX?
Файлы с расширением .hex используют формат Intel HEX - текстовый формат записей ASCII, который кодирует скомпилированную бинарную прошивку для надежной передачи в программатор или инструмент прошивки. Вместо хранения необработанных бинарных данных каждый байт содержимого представлен двумя шестнадцатеричными символами, что делает файл полностью читаемым для человека в любом текстовом редакторе.
Файлы .hex всегда являются текстовыми, и их можно открыть стандартным текстовым редактором, таким как Notepad. Для прошивки микропрограммы в микроконтроллер используются специализированные инструменты, такие как avrdude или Arduino IDE. Если же требуется чистый машинный код, компилятор может выдать бинарный образ .bin или Motorola S-record .srec для систем, предпочитающих этот формат.
Файл .hex является результатом работы компилятора или ассемблера, преобразующего исходный код в машинный код и кодирующего его для безопасной передачи на целевое устройство.
Где используются файлы .hex
Данные, содержащиеся в файлах .hex, используются для программирования микроконтроллеров и записи содержимого во встроенную память, такую как EEPROM и Flash. Микроконтроллеры установлены во многих привычных устройствах - от пультов дистанционного управления и систем управления двигателем автомобиля до современных датчиков IoT и робототехники.
Структура данных в файлах .hex
Шестнадцатеричные данные в файле .hex хранятся в виде текстовых строк, называемых записями, и каждая запись состоит из шести полей:
- Стартовый код - двоеточие (
:), отмечающее начало каждой записи - Количество байтов - две шестнадцатеричные цифры, определяющие количество байтов данных в этой записи
- Адрес - четыре шестнадцатеричные цифры, указывающие 16-битный адрес назначения (адресация до 64 КБ на сегмент в базовом формате)
- Тип записи - две шестнадцатеричные цифры от
00до05(например,00= запись данных,01= конец файла) - Данные - фактическая полезная нагрузка, где каждый байт закодирован двумя шестнадцатеричными символами
- Контрольная сумма - две шестнадцатеричные цифры, содержащие дополнение до двух контрольной суммы всех предыдущих байтов в записи
Последняя строка каждого корректного файла Intel HEX - это фиксированная запись конца файла :00000001FF.
Безопасность и защита
РИСК: MEDIUMФайл .hex содержит только данные и не может запуститься на вашем ПК сам по себе, поэтому его открытие в текстовом или шестнадцатеричном редакторе безопасно. Реальный риск существует для устройства: прошивка недоверенной микропрограммы может превратить оборудование в «кирпич» или загрузить вредоносный код в микроконтроллер. Прошивайте только те файлы .hex, которые получены от производителя устройства или из надежного источника, и перед загрузкой подтвердите, что файл соответствует вашей модели платы/чипа. Ручное редактирование байтов прошивки также может повредить образ.
Детали формата
в двух словах- Общий шестнадцатеричный дамп - Читаемый человеком протокол необработанных байтов другого файла (колонки смещения + hex + ASCII), созданный шестнадцатеричным редактором или инструментами типа xxd/hexdump; иногда произвольные бинарные данные также нестрого сохраняются с расширением .hex.
Программы, открывающие файлы HEX
Технические подробности
глубокая спецификация| Кодировка | Чистый текст ASCII; каждый байт данных представлен двумя шестнадцатеричными символами |
| Стартовый символ записи | Двоеточие `:` (0x3A) - каждая строка записи начинается с этого символа; бинарная сигнатура отсутствует |
| Типы записей | Шесть типов под номерами 00-05: данные (00), конец файла (01), расширенный адрес сегмента (02), начальный адрес сегмента (03), расширенный линейный адрес (04), начальный линейный адрес (05) |
| Базовый диапазон адресов | 16-битная адресация на сегмент, охватывающая до 64 КБ без записей расширения адреса |
| Расширенный диапазон адресов | До 4 ГБ (32-бит) с использованием записей типа 04 (Extended Linear Address), что позволяет выполнять полное 32-битное отображение памяти |
| Макс. байт данных в записи | До 255 байт (0xFF) данных на запись; на практике обычно используется 16 или 32 байта на запись |
| Алгоритм контрольной суммы | 8-битное дополнение до двух всех байтов в записи (количество байтов, адрес, тип записи и данные), исключая начальное двоеточие |
| Маркер конца файла | Фиксированная запись `:00000001FF` должна завершать каждый корректный файл Intel HEX |
| MIME-тип | text/plain |
| Порядок байтов адреса | Big-endian - старший байт первым в полях адреса и многобайтового счетчика |
| Основное использование | Программирование Flash и EEPROM на микроконтроллерах, таких как семейства AVR, PIC, ARM Cortex-M и 8051 |
| Происхождение инструментария | Вывод компиляторов и ассемблеров, включая avr-gcc, MPLAB X IDE, Keil MDK и IAR Embedded Workbench |
| Избыточность размера файла | Примерно в 1,4-2 раза больше размера необработанного бинарного файла, так как каждый байт данных превращается в два символа ASCII плюс служебные байты записи |
| Выпущен | 1973 (Intel HEX format) |
| Открыть стандартное | Да · без роялти |
| Спецификация | en.wikipedia.org |
Конвертации HEX
Вопросы и ответы сообщества
спрошено пользователямиВопросов пока нет - станьте первым, кто спросит о файлах HEX.