# Проект 166 для CCS 12 Настройки перенесены из проекта 167. Имя проекта в CCS: `Balsam_166`. ## Импорт и сборка 1. В CCS выберите **Project → Import CCS Projects** и укажите эту папку (`166/UKSSTMS320F28335`). 2. Импортируйте проект без **Copy projects into workspace**: исходники и библиотеки подключены из родительской папки по относительным путям. 3. Выберите конфигурацию **Debug** и выполните **Build Project**. Используется TI C2000 Compiler **22.6.1.LTS**, TMS320F28335, FPU32 и COFF ABI. Сохранены настройки компиляции, линковки и преобразования прошивки из 167. Исходники берутся из `166/Source`, linker-файл — `166/F28335.cmd`. Файл `28335_RAM_lnk.cmd`, как и в 167, исключён из сборки. Результаты сборки находятся в `166/Bin`: `UKSSTMS320F28335.out`, `UKSSTMS320F28335.hex` (Intel HEX) и `UKSSTMS320F28335_.bin`. Рядом с BIN создаются `<имя>.bin.manifest.json` и `<имя>.bin.sha256`. Build ID содержит восемь символов: восемь цифр ревизии либо семь цифр и `+` при изменённых исходниках или общей библиотеке. При недоступном Git общий контракт 167 использует `NOGIT000`; для выпуска следует проверить ревизии `source` и `templates` в манифесте. Время паспорта хранится в UTC. Prebuild `prepare_identity.py` использует тот же генератор firmware-info, что 167, но product равен `Balsam-166-PM35`. Единственный источник версии — `firmware_version.h`; первый выпуск с паспортом имеет версию **1.0.0**. Обязательный `generated/firmware_identity.h` создаётся до компиляции. Postbuild `build_identity.py` использует hex2000 из выбранного компилятора CCS, общий манифест и SHA-256, затем независимо проверяет наличие ровно одного соответствующего 12-словного паспорта в SCI8. Старый OUT без паспорта или BIN с чужими полями не публикуется. Превышение границы параметров EEPROM **32508 байт** также останавливает выпуск. Архивы сохраняются локально в `UKSSTMS320F28335/Debug/firmware`; записи в репозиторий GUI нет. `build_bin.bat` сохраняет ручную точку входа для уже скомпилированного OUT, но теперь также требует его совпадения с паспортом соответствующего prebuild. Простая конверсия старой прошивки не может создать ей достоверную версию. Карта линковки остаётся в корне 166, карта конверсии — в `166/Bin`. ## Проверка прошивки в SetGUI Из 167 точечно перенесён контракт firmware-info v1: FC03, адрес **0x1200**, **12 регистров**, версия, дата UTC и Build ID. Чтение доступно также через существующий служебный CAN; запись в паспорт запрещена. Технологическая карта, логгер v4 с записью 12 слов, управление и CAN ID не меняются. В GUI выберите модель **«Бальзам-166 · ПМ35»**, новый BIN и оставьте рядом его `.bin.manifest.json`. После записи EEPROM перезапустите плату и нажмите чтение версии: продолжающая работать старая прошивка ещё не имеет окна 0x1200 и отвечает `Modbus 2`. Надпись CRC OK при записи подтверждает запись EEPROM, а версия начнёт читаться после запуска нового образа. Сравнение версий и SHA-256 манифеста не является измерением SHA всей памяти платы. `python tests/firmware_identity/run_test.py` проверяет реальные обработчики RS/CAN, все слова паспорта, CRC, частичные чтения, границы, запрет записи, сохранность старой карты и логгера. Отдельно проверяются устаревшие и повреждённые SCI8, предел EEPROM и действующий анализатор манифеста SetGUI. Проверено: импорт и полная сборка **Debug** в CCS **12.7.1** с компилятором **22.6.1.LTS**, включая генерацию HEX/BIN, завершились без ошибок. Есть шесть предупреждений в существующих `peripher.c` и `measure.c` (преобразование знака, выход результата за диапазон и отсутствие перевода строки в конце файла). Проверка на устройстве не выполнялась. Перенос паспорта дополнительно проверен полной пересборкой и линковкой TI C2000 **22.6.0.LTS** и host-тестами под GCC с оптимизацией O3. Проверенный SCI8 BIN занимает **30248 байт**, запас до параметров EEPROM — **2260 байт**. Совпадение встроенного паспорта, манифеста и результата штатного анализатора SetGUI проверено программно; обмен новой прошивки с физической платой требует её установки и перезапуска. Конфигурация **Release** перенесена из 167 без изменений и не проверялась; для сборки прошивки используйте **Debug**.