Прошивка микроконтроллера отклоняется программатором с ошибкой неверного формата — типичный признак того, что на руках текстовый HEX-файл, а устройство ждёт чистый бинарный образ. Перевести hex в bin файл можно несколькими способами: через онлайн-конвертер, hex-редактор, скрипт на Python или штатные утилиты вроде srec_cat. Выбор метода зависит от того, что именно скрывается за расширением .hex — текстовый формат Intel HEX или просто шестнадцатеричное представление байтов.
Прежде чем приступать к конвертации, важно понять принципиальную разницу. Файл BIN — это последовательность байтов «как есть», готовая к прямой записи в память. Файл HEX чаще всего представляет собой текст, где данные описаны в шестнадцатеричном виде с адресами и контрольными суммами. Поэтому простая смена расширения ничего не даст: содержимое нужно именно преобразовать.
Чем отличаются форматы HEX и BIN
Текстовый формат Intel HEX состоит из строк-записей. Каждая строка начинается с двоеточия, затем следуют длина данных, адрес, тип записи, сами данные и контрольная сумма. Такой формат удобен для передачи прошивок, потому что ошибку в строке легко обнаружить по контрольной сумме.
Бинарный файл не содержит ни адресов, ни служебной информации — только сами байты подряд. Именно поэтому размер BIN-файла после конвертации обычно заметно меньше исходного HEX: текстовое представление каждого байта занимает минимум два символа плюс служебные поля.
Бывает и второй сценарий: файл с расширением .hex содержит просто шестнадцатеричные значения в виде текста, без структуры Intel HEX. Такое встречается при экспорте данных из логических анализаторов или отладчиков. Способ конвертации в этом случае будет другим — об этом ниже.
Как определить тип вашего HEX-файла
Откройте файл в любом текстовом редакторе, например в Notepad++ или стандартном «Блокноте». Если каждая строка начинается с двоеточия и выглядит примерно как :10000000214601360121470136007EFE09D2190140 — перед вами классический Intel HEX. Для него подходят специализированные конвертеры и утилиты.
Если же содержимое выглядит как сплошной набор шестнадцатеричных пар, разделённых пробелами или переносами строк (48 65 6C 6C 6F), — это простое hex-представление байтов. С ним работают hex-редакторы и скрипты.
- 🔍 Строки начинаются с
:— формат Intel HEX, нужен конвертер с поддержкой этого стандарта. - 📄 Сплошные hex-пары без структуры — подойдёт hex-редактор или скрипт.
- 📦 Строки вида
S1,S2,S3в начале — это формат Motorola S-Record, конвертируется утилитой srec_cat. - ❓ Файл не открывается как текст — возможно, это уже бинарный файл с неверным расширением.
Способ 1: онлайн-конвертеры
Самый быстрый путь для разовой задачи — загрузить файл в онлайн-конвертер. Сервисы с поддержкой Intel HEX принимают текстовый файл и отдают готовый .bin для скачивания. Никакой установки программ не требуется, достаточно браузера.
Порядок действий прост: открываете сервис, выбираете исходный файл, указываете направление конвертации «hex to bin» и скачиваете результат. Некоторые конвертеры позволяют задать байт-заполнитель (обычно 0xFF) для пропусков между блоками данных — эта опция важна для прошивок с «дырами» в адресном пространстве.
⚠️ Внимание: не загружайте в публичные онлайн-сервисы прошивки, содержащие коммерческую тайну, ключи шифрования или персональные данные. Файл передаётся на чужой сервер, и вы не контролируете его дальнейшую судьбу. Для чувствительных данных используйте только локальные инструменты.
Способ 2: hex-редакторы
Hex-редакторы вроде HxD или 010 Editor позволяют вручную преобразовать шестнадцатеричный текст в бинарные данные. Метод подходит для файлов с простым hex-представлением байтов без структуры Intel HEX.
В HxD последовательность такая: создайте новый файл, скопируйте hex-строку из исходного документа и вставьте её через функцию вставки с интерпретацией как hex-значений. Затем сохраните результат с расширением .bin. Редактор запишет каждую пару символов как один байт.
Этот способ даёт полный визуальный контроль над результатом: вы видите итоговые байты и можете сразу проверить сигнатуры, заголовки и контрольные участки прошивки. Минус — при больших объёмах ручная вставка неудобна.
☑️ Проверка перед конвертацией
Способ 3: конвертация через Python
Для автоматизации и работы с большими файлами удобнее скрипт. Небольшой фрагмент на Python преобразует простой hex-текст в бинарный файл буквально в несколько строк:
with open("input.hex") as f:
hex_data = f.read().replace(" ", "").replace("\n", "")
with open("output.bin", "wb") as f:
f.write(bytes.fromhex(hex_data))
Для формата Intel HEX потребуется разбор записей с учётом адресов и контрольных сумм. Существуют готовые библиотеки, например intelhex, которая устанавливается через пакетный менеджер и выполняет конвертацию одной командой из терминала. Это надёжнее ручного разбора, потому что библиотека проверяет контрольные суммы каждой строки.
Пример работы с библиотекой intelhex
После установки библиотеки (pip install intelhex) конвертация выполняется командой: python -m intelhex input.hex output.bin. Библиотека автоматически обрабатывает расширенные адресные записи и заполняет пропуски байтом 0xFF, если не указано иное.
Скриптовый подход особенно ценен, когда конвертировать нужно регулярно — например, после каждой сборки прошивки в среде разработки. Скрипт легко встроить в автоматическую цепочку сборки.
Способ 4: утилиты командной строки
Разработчики встраиваемых систем часто используют пакет SRecord и его утилиту srec_cat. Она понимает десятки форматов прошивок, включая Intel HEX и Motorola S-Record, и выводит чистый бинарник:
srec_cat input.hex -Intel -o output.bin -Binary
Утилита позволяет дополнительно обрезать образ по адресному диапазону, менять байт-заполнитель и объединять несколько файлов. Для Windows доступны сборки SRecord, в Linux пакет обычно ставится из репозиториев. Ещё один вариант — objcopy из набора binutils, если он установлен вместе с тулчейном для кросс-компиляции.
Сравнение способов конвертации
| Способ | Поддержка Intel HEX | Скорость | Подходит для |
|---|---|---|---|
| Онлайн-конвертер | Да, у большинства сервисов | Быстро для мелких файлов | Разовые задачи |
| Hex-редактор (HxD) | Нет, только простой hex | Медленно, вручную | Малые объёмы, визуальный контроль |
| Python-скрипт | С библиотекой intelhex | Быстро | Автоматизация, большие файлы |
| srec_cat | Да, плюс S-Record и другие | Очень быстро | Профессиональная разработка |
Для разовой конвертации небольшой прошивки проще всего воспользоваться онлайн-сервисом. Если задача повторяется или файл содержит чувствительные данные, ставьте локальный инструмент — srec_cat или библиотеку для Python.
Типичные ошибки и их решение
Частая проблема — программатор отвергает полученный BIN-файл. Возможная причина: в исходном HEX были пропуски адресов, а конвертер заполнил их нулями вместо 0xFF. Для флеш-памяти стёртое состояние — это единицы, поэтому заполнитель имеет значение. Проверьте настройки конвертера или задайте байт-заполнитель явно.
⚠️ Внимание: нельзя конвертировать HEX в BIN простым переименованием расширения. Текстовый файл останется текстом, и устройство либо откажется его принимать, либо запишет в память ASCII-коды символов вместо реальных данных — прошивка будет испорчена.
Вторая типичная ситуация — ошибка контрольной суммы при конвертации Intel HEX. Она означает, что исходный файл повреждён при скачивании или передаче. Решение одно: получить файл заново из надёжного источника, а не пытаться «исправить» его вручную.
- 🚫 Ошибка checksum — файл повреждён, скачайте его повторно.
- 📏 Размер BIN равен размеру HEX — конвертация не выполнилась, проверьте формат входного файла.
- 🧭 Устройство не стартует после прошивки — проверьте начальный адрес и байт-заполнитель.
- 🔁 Конвертер выдаёт пустой файл — вероятно, входной формат распознан неверно.
Часто задаваемые вопросы
Можно ли перевести HEX в BIN без установки программ?
Да, для этого существуют онлайн-конвертеры, работающие в браузере. Загружаете файл, получаете готовый .bin. Учитывайте только ограничение по конфиденциальности: чувствительные прошивки лучше обрабатывать локальными инструментами.
Почему BIN-файл получился больше, чем ожидалось?
Вероятная причина — пропуски в адресном пространстве исходного HEX. Конвертер заполняет «дыры» байтом-заполнителем от минимального до максимального адреса, и итоговый файл может занимать весь диапазон памяти контроллера. Это нормальное поведение, но при необходимости образ можно обрезать по диапазону, например через srec_cat.
Чем открыть BIN-файл после конвертации для проверки?
Любым hex-редактором: HxD, 010 Editor или аналогом. Вы увидите байты в шестнадцатеричном виде и сможете сверить начало образа с ожидаемым содержимым — например, с таблицей векторов прерываний для прошивок микроконтроллеров.
Что делать, если файл имеет расширение .hex, но внутри не текст?
Откройте его в hex-редакторе. Если в начале видны нечитаемые байты вместо ASCII-символов, перед вами уже бинарный файл с неверным расширением. Достаточно переименовать его в .bin — конвертация не требуется.
Подойдёт ли полученный BIN для прошивки через программатор?
Зависит от программатора и его ПО: одни принимают оба формата, другие требуют строго BIN или строго HEX. Сверьтесь с документацией на ваше оборудование. Если программатор принимает Intel HEX напрямую, конвертация может вообще не понадобиться.