feat: add M95M02-only GAS and EEPROM profiles
Expose the existing registers through Modbus and service CAN using one GAS provider only in M95M02 builds. Include the EEPROM layout/driver, LOAD protection and calibration, firmware identity and shared CCS build workflow. Add transport/profile and SCI8 validation tests, documentation and the checked M95M02 firmware image.
This commit is contained in:
@@ -0,0 +1,167 @@
|
||||
# 167: версия работающей прошивки, SHA-256 и выпуск
|
||||
|
||||
## Что подключено
|
||||
|
||||
167 использует общий `templates/c/firmware-info`, а не копию Climate.
|
||||
Работающий ПМ35 отдаёт 12 регистров версии через RS и служебный CAN.
|
||||
После сборки на компьютере создаются SHA-256 BIN и JSON-паспорт.
|
||||
|
||||
Общая подробная инструкция, включая перенос на TMS320F2812 и STM32:
|
||||
[BUILD_IDENTITY.md](../../newProject/SETGUI/third_party/templates/c/firmware-info/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 |
|
||||
| `build_logger.ps1` | Полный CLI build: prepare, compile, link, SCI8, size check, seal |
|
||||
| `build_bin.bat` | Debug post-build: проверка SCI8 и паспорт конечного BIN |
|
||||
| `tests/firmware_identity/port_test.c` | Host-проверка привязки версии к реальному порту 167 |
|
||||
|
||||
Номер `0.1.0` — начальная версия разработки этого механизма; он не выдаётся за
|
||||
историческую версию предыдущих BIN. Назначайте release-номер вручную перед выпуском.
|
||||
|
||||
## Сборка из PowerShell
|
||||
|
||||
Из корня 167:
|
||||
|
||||
```powershell
|
||||
./build_logger.ps1 -OutputDirectory "$PWD/Bin/FirmwareIdentity" `
|
||||
-ImageName UKSSTMS320F28335
|
||||
```
|
||||
|
||||
По умолчанию применяется `-O2 --opt_for_speed=0`. Результаты:
|
||||
|
||||
```text
|
||||
Bin/FirmwareIdentity/UKSSTMS320F28335.bin
|
||||
Bin/FirmwareIdentity/UKSSTMS320F28335.bin.manifest.json
|
||||
Bin/FirmwareIdentity/UKSSTMS320F28335.bin.sha256
|
||||
Bin/FirmwareIdentity/generated/firmware_identity.h
|
||||
Bin/FirmwareIdentity/generated/firmware_identity.json
|
||||
```
|
||||
|
||||
Проверка файла перед передачей:
|
||||
|
||||
```powershell
|
||||
python ../newProject/SETGUI/third_party/templates/c/firmware-info/tools/identity.py verify `
|
||||
--image Bin/FirmwareIdentity/UKSSTMS320F28335.bin `
|
||||
--manifest Bin/FirmwareIdentity/UKSSTMS320F28335.bin.manifest.json
|
||||
```
|
||||
|
||||
CLI принимает `-TemplatesRoot`, если общий checkout расположен иначе. Все
|
||||
исходники общего механизма собираются непосредственно из этого checkout.
|
||||
|
||||
## Сборка 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-каталогами.
|
||||
|
||||
Штатный Debug post-build создаёт в `Bin`:
|
||||
|
||||
```text
|
||||
UKSSTMS320F28335_<commit>.bin
|
||||
UKSSTMS320F28335_<commit>.bin.manifest.json
|
||||
UKSSTMS320F28335_<commit>.bin.sha256
|
||||
```
|
||||
|
||||
Имя BIN исторически содержит HEAD без dirty-суффикса; достоверные признаки dirty
|
||||
находятся внутри ответа версии и паспорта. Не определяйте чистоту только по имени.
|
||||
Release-конфигурация получает embedded identity через pre-build, но её старый
|
||||
проект не имел автоматического BIN post-build. Для готового проверенного BIN с
|
||||
паспортом используйте описанный CLI либо настройте release-конверсию по общей
|
||||
инструкции; нельзя запускать Debug `build_bin.bat` на Release и ожидать другой `.out`.
|
||||
|
||||
Если 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 байт**, предел —
|
||||
**32 508**, запас **222 байта**. Механизм добавил 116 байт относительно сборки
|
||||
без него. Это результат конкретной сборки, не обещание для следующих изменений.
|
||||
|
||||
Таблица версии — часть `.econst` прошивки. Её не сохраняют в область параметров;
|
||||
старые настройки не могут подменить версию после обновления. Размер буфера лога
|
||||
и размещение EEPROM-параметров не менялись. Дата не разбирается на MCU, SHA-256
|
||||
не вычисляется на MCU. Проверка размера `check_firmware.ps1` остаётся обязательной.
|
||||
|
||||
## Проверки и ограничения
|
||||
|
||||
Проверка соответствия паспорта **реально встроенной** таблице в собранном SCI8:
|
||||
|
||||
```powershell
|
||||
python tests/firmware_identity/check_build.py Bin/FirmwareIdentity/UKSSTMS320F28335.bin
|
||||
```
|
||||
|
||||
Этот независимый тест также сверяет SHA и размер, проходит boot-блоки и ищет
|
||||
точное 12-словное представление версии. Он обнаружит старый объект версии или
|
||||
паспорт другой сборки. Это тест для 167, не транспортный код для GUI.
|
||||
|
||||
Host-тест реального порта (GCC должен быть в PATH):
|
||||
|
||||
```powershell
|
||||
$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 прочитайте версию снова.
|
||||
Reference in New Issue
Block a user