Восстановить телеметрию CAN, обработку TESTLAMP и сохранение команд при загрузке параметров. Выбрать M95M02 основным профилем, добавить самостоятельную Flash-сборку и проверять образы до публикации. Проверки: хостовые тесты, реальные сборки TI C2000, контроль COFF/SCI8 и защита записи при активной нагрузке.
12 KiB
167: версия работающей прошивки, SHA-256 и выпуск
Что подключено
167 использует общий templates/c/firmware-info, а не копию Climate.
Работающий ПМ35 отдаёт 12 регистров версии через RS и служебный CAN.
После сборки на компьютере создаются SHA-256 BIN и JSON-паспорт.
Общая подробная инструкция, включая перенос на TMS320F2812 и STM32: BUILD_IDENTITY.md.
| Файл проекта | Роль |
|---|---|
UKSSTMS320F28335/firmware_version.h |
Редактируемый номер выпуска: FIRMWARE_VERSION_MAJOR/MINOR/PATCH |
UKSSTMS320F28335/firmware_identity.json |
Product и target; версия берётся из C-заголовка |
Source/Internal/shared_ump.c |
Подключение общей таблицы версии и привязка к UMP ПМ35 |
UKSSTMS320F28335/prepare_identity.py |
Генерация идентичности из C-заголовка перед CCS Debug/Release |
UKSSTMS320F28335/publish_identity.py |
Защищённый post-build Debug/Release: SCI8, встроенный паспорт, профиль EEPROM, размер, manifest и SHA |
tests/firmware_identity/port_test.c |
Host-проверка привязки версии к реальному порту 167 |
Номер 0.1.0 — начальная версия разработки этого механизма; он не выдаётся за
историческую версию предыдущих BIN. Назначайте release-номер вручную перед выпуском.
Выпуск и отдельные проверки
Скрипты build_logger.ps1 и build_bin.bat отсутствуют в текущем дереве.
Штатный выпуск выполняется через Clean/Rebuild CCS с оптимизацией
-O3 --opt_for_speed=0. Обе конфигурации вызывают prepare_identity.py
перед компиляцией и publish_identity.py после линковки.
Prebuild сохраняет заголовок и JSON в ${BuildDirectory}/generated.
Защищённый postbuild сначала вызывает общий конвертор во временный каталог,
затем проверяет границы EEPROM, структуру SCI8, точку входа и адреса RAM,
ровно один встроенный паспорт текущей компиляции и весь комплект manifest/SHA.
Аппаратный профиль сверяется с абсолютными символами EEPROM в карте линкера.
Ошибка любой проверки не публикует новый BIN или архив.
Проверенный выпуск сохраняется в ${BuildDirectory}/firmware вместе с
manifest и SHA-256. Архив содержит OUT и сопроводительные файлы; его копия
передаётся в каталог, заданный аргументом --export в .cproject.
Поле eeprom в manifest обязательно различает AT25256B и M95M02.
При отдельной сборке параметры обоих Python-шагов можно посмотреть через
--help. Явный --eeprom должен совпадать с define компилятора и линкера.
Паспорт зависимости относится к фактически компилируемой копии
SETGUI/third_party/templates; инструменты конверсии остаются в соседнем
основном checkout templates.
Сборка CCS
В .cproject добавлены pre-build и include paths ${BuildDirectory}/generated и
templates/c/firmware-info/include. После изменения настроек закройте/откройте
проект в IDE, затем выполните Clean/Rebuild.
Pre-build требует Python 3.10+ и Git в PATH процесса CCS. Generated принадлежит
этому проекту: не запускайте Debug/Release одновременно. Для параллельных
сборок используйте CLI с разными output-каталогами.
Штатный post-build Debug/Release создаёт в ${BuildDirectory}/firmware:
UKSSTMS320F28335_<commit>.bin
UKSSTMS320F28335_<commit>.bin.manifest.json
UKSSTMS320F28335_<commit>.bin.sha256
Идентификатор в имени BIN соответствует встроенному Build ID; знак +
обозначает незакоммиченные изменения приложения либо компилируемой зависимости.
Полная ревизия и состояние обоих деревьев находятся в паспорте.
Если CCS пишет Error ... (ignored), сборка не считается успешной: убедитесь,
что последняя проверка и seal завершились без ошибок. Старый BIN с таким же
именем может оставаться на диске после неудачной сборки.
Как прочитать версию
По прямому RS232/RS485: Modbus 03, адрес начала 4608 (0x1200), 12 слов.
Это zero-based адрес в запросе, а не обозначение 4xxxx в интерфейсе терминала.
Адрес ведомого остаётся текущим CNTRL_ADDR. Возвращается стандартный RTU-ответ
с 24 байтами данных и CRC; дополнительного legacy padding в этом окне нет.
| Адрес | Содержимое |
|---|---|
0x1200 |
Версия формата = 1 |
0x1201..0x1203 |
Major, minor, patch |
0x1204 |
Год UTC |
0x1205 |
Месяц:день, старший:младший октет |
0x1206 |
Час:минута UTC |
0x1207 |
Секунда |
0x1208..0x120B |
8 ASCII-символов Build ID, по два на слово |
По служебному CAN ПМ35: запрос UMP функции 03, 0x1200, 12 слов; ответ состоит
из шести фрагментов. Используется выбранный Mode и существующий token запроса.
CAN ПМ67 не переназначается. Запись функции 06 в окно версии запрещена.
Старый образ может вернуть исключение или неизвестный контракт. Это не следует заменять «ожидаемой» версией выбранного BIN. После прошивки переподключитесь или явно обновите чтение: ответ должен поступить с устройства, а не из кэша GUI.
Что сравнивать после заливки
Сравните SemVer, все поля UTC и Build ID с паспортом именно загруженного BIN.
+ означает локальные изменения приложения или templates; полный Git SHA
и состояние обоих деревьев записаны в JSON. Проверка SHA на ПК подтверждает
целостность файла, но не заменяет проверку программатором записанной памяти.
В контракте нет аппаратного product ID и хеша всей памяти. Подключённый профиль
должен оставаться ПМ35/167, а файл — product=Balsam-167-PM35,
target=TMS320F28335. Не переносите файл на ПМ67 только по похожему имени.
Влияние на память и параметры
Историческая сборка при внедрении механизма занимала 32 286 байт при
пределе AT25256B 32 508 байт. Этот результат не относится к текущему
полному набору функций. Основной профиль теперь M95M02, его предел до
параметров — 261 884 байта; актуальные результаты сборок приведены в
UKSSTMS320F28335/README.md. Postbuild проверяет размер каждого выпуска заново.
Таблица версии — часть .econst прошивки. Её не сохраняют в область параметров;
старые настройки не могут подменить версию после обновления. Размер буфера лога
и размещение EEPROM-параметров не менялись. Дата не разбирается на MCU, SHA-256
не вычисляется на MCU. Проверка размера встроена в publish_identity.py и
выполняется до публикации каждого нового BIN.
Проверки и ограничения
Проверка соответствия паспорта реально встроенной таблице в собранном SCI8:
python tests/firmware_identity/check_build.py Bin/FirmwareIdentity/UKSSTMS320F28335.bin
Этот независимый тест также сверяет SHA и размер, проходит boot-блоки и ищет точное 12-словное представление версии. Он обнаружит старый объект версии или паспорт другой сборки. Это тест для 167, не транспортный код для GUI.
Host-тест реального порта (GCC должен быть в PATH):
$templates = '../newProject/SETGUI/third_party/templates'
gcc -std=c99 -Wall -Wextra -Werror `
"-I$templates/c/firmware-info/include" -IBin/FirmwareIdentity/generated `
"-I$templates/c/set-protocol" "-I$templates/c/set-protocol/ports/tms320f28335" `
tests/firmware_identity/port_test.c Source/Internal/shared_ump.c `
-o Bin/FirmwareIdentity/port_test.exe
./Bin/FirmwareIdentity/port_test.exe
python tests/ump_logger/test_firmware_image.py
python tests/ump_logger/run_test.py
python tests/ump_logger/run_init_test.py
Проверены полный TI build 167, формат SCI8, host-тесты протокола и регистратора,
общие тесты identity/SHA, компиляция общего C-кода TI C28x без FPU и ARM Cortex-M4.
Это не аппаратная проверка TMS2812/STM32 и не полноценная сборка другого проекта.
Физическое чтение нового окна версии и проверку после загрузки нужно выполнить
на стенде. В SETGUI на вкладке «Загрузка / запуск / прошивка» доступны
«Прочитать версию с платы» и «Проверить файл»: показаны SemVer, дата UTC,
Build ID и сравнение с выбранным BIN. Для проверки файла держите рядом его
.bin.manifest.json; GUI проверяет product/target, размер и SHA-256 и повторяет
проверку перед передачей. BIN без паспорта отмечается как непроверенный старый
образ; неверный паспорт блокирует загрузку. После RESET прочитайте версию снова.