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 файла.
Поскольку в заголовке BINX файла нет маркера явно указывающего на то что файл содержит структуры BINX формата, для определения используются следующие признаки (от простого к сложному):
- Файл заканчивается четырьмя байтами ‘00 00 00 00’
- Сумма указанных в заголовках BINX блоков длин блоков равна размеру файла
- Все контрольные суммы CRC16 BINX блоков корректны