# Firmware Info Переносимая библиотека версии реально запущенной прошивки. Повторяет контракт `FirmwareInfo` из `john103C6T6NewVer`, но оформлена как template: ядро не знает ни о HAL, ни о конкретном протоколе, ни о модели МК. Контракт v1 содержит 12 слов: версия контракта, `major.minor.patch`, дата/время компиляции и 8-символьный build ID. `firmware_info_to_registers()` подходит для Modbus, `firmware_info_to_le_bytes()` — для SETGUI и других byte-протоколов. ## Подключение 1. Добавьте `include`, `src/firmware_info.c` и `src/firmware_info_port.c`. 2. Скопируйте подходящий `ports//firmware_info_config.template.h` в проект как `firmware_info_config.h` и задайте SemVer. 3. Добавьте каталог с config и `include` в include path. 4. Перед сборкой запустите `tools/make_build_id.ps1`; каталог generated также должен быть в include path. Чистая сборка получает 8 знаков git commit, dirty-сборка — 7 знаков и `+`, сборка без Git — `NOGIT000`. Готовые конфигурации есть для STM32F1, STM32F4, STM32G4 и К1921ВК028. Порт не содержит регистров МК: стандартные `__DATE__`/`__TIME__` одинаковы для GCC, Arm Compiler 5/6 и Clang. Поэтому добавление следующего МК требует только config, а не дублирования ядра. KONOR публикует эти 24 байта ответом `FIRMWARE_INFO (0x03)`, сохраняя старый 32-байтовый `DEVICE_INFO` без изменений.