BINX

Универсальный формат файлов прошивок


Формат прошивок BINX может быть интересен разработчикам устройств на микроконтроллерах, которые планируют в своих устройствах функцию обновления прошивки (Update Firmware), т.е. само-программирование микроконтроллера, в условиях:

  • недостаточности промежуточной памяти используемой для приёма новой прошивки
  • медленного либо неустойчивого канала связи с прошиваемым устройством
  • не желанием разработчика занимать микроконтроллер разбором HEX формата

По сути, BINX является бинарным представлением обычного HEX файла прошивки стандарта Intel HEX, он передаётся устройству “как есть”.

Лично для меня необходимость в данном формате возникла когда потребовалось полное размещение новой прошивки в оперативной памяти микроконтроллера STM32F103 (SRAM = 20 kB), при само-программировании. HEX формат в силу своего текстового представления просто не смог бы разместиться физически. В общем случае объём BINX файла получается в три раза меньше HEX файла одной и той же прошивки.

Итак, BINX файл в является массивом BINX блоков. BINX блок - это структура которая содержит данные для записи и необходимую техническую информацию для произведения записи данных. Эта структура состоит из 4 полей.

  • Первое поле размером 4 байта содержит общий размер структуры/блока в байтах.
  • Второе поле, также размером 4 байта, содержит адрес по которому будет произведена запись данных в ROM устройства.
  • Третье поле переменной произвольной длинны и ограничено только допустимой длиной данных в блоке (4 294 967 285 байт) содержит непосредственно данные которые будут записаны по адресу указанному во втором поле структуры.
  • Четвёртое поле, размером 2 байта, является контрольной суммой CRC16 предыдущих трёх полей структуры.
  • Заканчивается BINX файл BINX блоком длиной 4 байта в котором присутствует только первое поле указывающее на нулевой размер блока.

Все поля структуры имеют порядок байт соответствующий формату Intel - Little-Endian.

Структура BINX файла

BINX_struct

Признаки BINX файла.

Поскольку в заголовке BINX файла нет маркера явно указывающего на то что файл содержит структуры BINX формата, для определения используются следующие признаки (от простого к сложному):

  1. Файл заканчивается четырьмя байтами ‘00 00 00 00’
  2. Сумма указанных в заголовках BINX блоков длин блоков равна размеру файла
  3. Все контрольные суммы CRC16 BINX блоков корректны

Скриншот конвертера HEX2BINX

hex2binx_screenshot