Files
Balsam_167/UKSSTMS320F28335
Andrey 13f1a2c5fd Добавить heartbeat и передачу CAN по изменению и таймеру
Для всех Mode передавать пакеты при обновлении данных и повторять каждый через 1300 мс от последнего CAN ACK. Отдельно отправлять heartbeat раз в секунду. Сохранить маски рассылки, отключение потоков нулевым периодом и неблокирующее восстановление после ошибок TX.

Проверены границы периодов, все Mode, занятый mailbox, отмена без CANAA, отсутствие ACK, переполнение Timer1, первый снимок и справедливость потоков. Изменённые модули ecan.c и main.c скомпилированы компилятором TI C2000.
2026-10-16 23:17:00 +03:00
..

Проект 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_<build_id>.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.

Телеметрия CAN: heartbeat, изменения и повтор 1,3 с

Для всех Mode технологические пакеты выбранных масками регистров R0–R127 передаются при первом снимке, изменении любого из трёх слов или через 1300 мс после последнего успешного CAN ACK этого пакета. Неудачная попытка не обновляет подтверждённый снимок. Конечные пакеты карты дополняются нулями за R127. Сканирование изменений идёт по Timer1 с шагом 20 мс; готовая очередь выдаётся по мере освобождения mailbox, без ожидания нового периода между её кадрами. Фактическую отправку могут задержать занятая шина, ошибки и работа main.

Heartbeat отправляется независимо раз в секунду: адрес 0x0100, затем три 16-битных слова — счётчик секунд, Mode, Desk. После задержки main отправляется последнее значение, без очереди пропущенных секундных кадров.

Ноль в Cancount[0] или Cancount[1] по-прежнему отключает данные соответствующей маски. Любое ненулевое значение включает новый режим изменения/1300 мс; прежний числовой делитель периода больше не используется. Heartbeat остаётся включённым при отключённых потоках данных. Параметры EEPROM не переносятся. После ошибки TX новая попытка разрешается через секунду без ожидания в цикле.

Проверка без CAN-адаптера: python tests/can_telemetry/run_test.py.