Files
Andrey 05be38a04a Обновить Flash/CAN, версии сборок и управление периферией
Добавить защищённое обновление приложения через RS и CAN с сохранением
загрузчика, проверкой CRC, восстановлением передачи и защитой EEPROM.
Подключить общий процесс сборки C2000 и автоматический счётчик версии
для согласованных RAM, Flash, CAN и паспортов бинарных образов.

Уточнить запуск ЦАП, обработку измерений и параметров нагрузки,
начальную индикацию и документацию регистров GAS.
Дополнить модели аппаратуры и изолировать заголовки CAN в тестах.

Проверка: 26 тестов выпуска, 4 теста восстановления CAN и восемь
программных моделей CAN, Flash, EEPROM, ЦАП, параметров и TESTLAMP.
2026-11-06 16:11:11 +03:00
..

Сборка Бальзам-167

Проект CCS использует TMS320F28335, модель памяти large и ABI COFF. Исходники и русские комментарии сохранены в UTF-8 без BOM. Кодировка проекта задана в .settings/org.eclipse.core.resources.prefs, правило редактора — в ../.editorconfig. Подробная проверка покрытия: COMMENT_AUDIT.md.

Версия и паспорт прошивки

Номер хранится в firmware_identity.json вместе с product, target и increment_version: true. Перед каждой сборкой Debug или Release общий prebuild атомарно увеличивает patch, как в ветке 166: 1.1.2 → 1.1.3 → 1.1.4. При переполнении patch 999 увеличивается minor; пределы major/minor — 255. Номер резервируется до компиляции, поэтому неудачная попытка также расходует его.

generated/firmware_identity.h и JSON создаются в каталоге выбранной конфигурации; вручную их редактировать не нужно. firmware_version.h подключает подготовленный заголовок: RAM, Flash, CAN и паспорта используют один номер. Postbuild и сборка дополнительных вариантов счётчик не увеличивают. Паспорт включает исходный коммит, признак незакоммиченных изменений и время UTC. Порядок проверки приведён в FIRMWARE_IDENTITY.md.

Зависимости и настройки CCS

Для текущих конфигураций нужны Python, Git и TI C2000 22.6 LTS. Debug и Release используют оптимизацию уровня 3 и приоритет размера --opt_for_speed=0. Основной аппаратный профиль — M95M02-DR, 256 КиБ. Локальный проверенный выпуск после переноса доработок 166 находится в Bin/Final167/M95M02: EEPROM/RAM SCI8 занимает 34 120 байт при пределе 261 884. AT25256B остаётся явным альтернативным профилем, однако текущий полный образ превышает её предел; защищённый выпуск не разрешает такой BIN. Общая реализация УМП и порт TMS320F28335 подключаются из ../newProject/SETGUI/third_party/templates/c/set-protocol относительно корня репозитория. shared_ump.c включает эту реализацию и модуль паспорта.

В .cproject обе конфигурации вызывают единый K:/git_project/newProject/templates/c/firmware-info/tools/c2000_build.py: prepare перед компиляцией и build после линковки. prepare_identity.py и publish_identity.py оставлены совместимыми адаптерами без копии алгоритмов. Генератор паспорта и Git-ревизия компилируемой зависимости берутся из SETGUI/third_party/templates. firmware_build_profile.json задаёт аппаратные пути, имена макросов EEPROM и допустимые RAM-адреса в словах C28x; ёмкость EEPROM и размер SCI8 выражены в октетах. При переносе проекта проверьте оба пути templates, Include Options и каталог назначения BIN. Значения ram_ranges [32768, 57344] соответствуют CPU-адресам слов 0x8000..0xDFFF из F28335.cmd: верхняя граница 0xE000 не включается, чтобы загружаемый образ не затронул рабочую память постоянного CAN-загрузчика.

Защищённый post-build использует общий конвертор только во временном каталоге. До сохранения комплекта проверяются аппаратный профиль по MAP, размер до параметров EEPROM, структура SCI8, RAM-адреса, встроенный паспорт, manifest и SHA-256. Поле eeprom различает AT25256B и M95M02. Готовый комплект сохраняется в Debug/firmware/prepared либо Release/firmware/prepared. В обеих конфигурациях CCS postbuild также экспортирует архив в ../newProject/SETGUI/..periph_28335/firmware/periph28335/balzam167/HASH_дата_UTC+3. Локальный выпуск и его архив имеют одинаковую структуру:

eeprom/  <артефакт>_<build_id>.bin, HEX, RAM OUT и карты
flash/   <артефакт>_flash.out и карта — внутренняя Flash через JTAG
can/     <артефакт>_<build_id>_can.bin — ProtoCAN Boot, M95M02 A/B
rs/      <артефакт>_flash_rs.bin и карта — внутренняя Flash через COM

Flash OUT и Flash RS BIN теперь предназначены для постоянного общего загрузчика: сектор A и аппаратный вход 0x33FFF6 исключены из приложения. Описание FAB1 с CRC32 занимает 16 слов по 0x300000; программа находится ниже 0x338000. Сначала через JTAG устанавливается обновлённый F28335_CAN_AB.out, затем можно обновлять приложение по RS Flash или JTAG с сохранением A. Flash основная, EEPROM/CAN — резерв. Порядок запуска, маски стирания и переход.

Каждый основной образ имеет рядом собственные .manifest.json и .sha256. Общий firmware_identity.json находится в корне архива. Папка неподдержанного варианта не создаётся. latest_build.json указывает архив текущей сборки и относительный путь eeprom/<артефакт>_<build_id>.bin.manifest.json. В SETGUI откройте Сервис → Прошивка → Публикатор, выберите режим «Из папки postbuild / manifest» и «Импорт папки postbuild…». Для обновления Flash по RS выбирайте паспорт из rs, для CAN — из can, для EEPROM — из eeprom. Можно выбрать корень одной сборки: диалог покажет пути с назначениями. Для JTAG импортируйте комплект через его основной EEPROM BIN и выберите загрузчик «TMS320F28335 / Flash JTAG (OUT)»: он найдёт подписанный OUT в flash. Импорт любого варианта сохраняет все четыре папки одной сборки в ZIP. Сетевой выпуск создаёт Публикатор после предпросмотра; CCS подготавливает локальные файлы и копирует проверенный комплект в каталог SETGUI.

COM_1 работает на 115200 с FIFO. COM_2 использует 9600 для OWEN либо 115200 для другого режима. Эти скорости задаются в main.c.

Профиль EEPROM и GAS

В Source/Internal/Include/eeprom_config.h значение EEPROM_M95M02=0 выбирает AT25256B 32 КиБ; значение 1 — M95M02-DR 256 КиБ и выбрано по умолчанию. Выбор обязан соответствовать микросхеме на плате. После изменения нужен Clean/Rebuild. При отдельной сборке определение должно совпадать у компилятора и у препроцессора линкера.

GAS включается только при значении 1: технологические слова 0x5000..0x507F и дескриптор только для чтения 0x5F00..0x5F07. Транспорты — Modbus RTU и служебный CAN УМП. Карта и измеренные размеры: GAS_167_M95M02.md. Подробное назначение модулей: SOURCE_GUIDE.md.

Проверки

Запускайте из корня репозитория Python-скрипты tests/comments/run_test.py, tests/gas167/run_test.py, tests/eeprom_profiles/run_test.py, tests/load_control/run_test.py и проверки регистратора в tests/ump_logger. Проверка FIFO: tests/rs232_fifo/run_test.py --cc <путь к GCC>. Для MinGW каталог исполняемых файлов GCC должен присутствовать в PATH.

Полезные доработки из ветки 166

В 167 перенесены heartbeat CAN 1 Гц, отправка изменившихся данных, повтор каждого подтверждённого пакета через 1,3 с, повтор после потери ACK и защита границы R127. R96/R97 теперь включают потоки: 0 выключает соответствующую маску, любое ненулевое значение разрешает её. Значение больше не задаёт делитель периода. R0–R3 пульта находятся в быстрой маске; служебный канал УМП/GAS и опрос OWEN сохраняются. Подробности: PERIPH28335_CAN.md.

TESTLAMP включается после двух секунд непрерывного удержания физической кнопки. Время считает Timer1, поэтому занятость главного цикла и EEPROM не меняет задержку. Порядок индикаторов в профиле 167 сохранён.

Загрузка и заводской сброс параметров сохраняют действующие START/RESET готовой платы нагрузки. Сохранённое в EEPROM слово команд не подаётся автомату даже на промежуточный такт. Новый автомат защиты нагрузки и регистратор 167 сохранены.

Проверки переноса: tests/can_telemetry/run_test.py, tests/can_vpu_rx/run_test.py, tests/can_timeout/run_test.py, tests/testlamp/run_test.py --cc <путь к GCC> и tests/load_control/run_test.py. Проверки защищённого выпуска: tests/firmware_identity/test_release.py.

Внутренняя Flash

Общий postbuild templates автоматически выпускает отдельный <артефакт>_<build_id>_can.bin для ProtoCAN Boot при профиле M95M02. Профиль включён полем can_boot_profile: f28335-m95m02-ab в firmware_build_profile.json. Проверяются предел 130560 октетов, не более 64 SCI8-секций, RAM [0x8000,0xE000), точка входа, встроенный паспорт и hooks CAN-приложения по MAP. Для AT25256B CAN-файл не создаётся. У CAN BIN собственные .manifest.json и .sha256; все три файла добавляются в тот же архив и каталог GUI, что обычный RAM BIN и варианты Flash. Изменение CAN-профиля после prebuild требует новой сборки.

В этом же автоматическом выпуске сохраняются <артефакт>_flash.out для JTAG и <артефакт>_flash_rs.bin для обновления внутренней Flash по RS, с отдельными паспортами и SHA-256. CAN BIN содержит RAM-приложение для M95M02 A/B; он не является образом внутренней Flash.

Обновлённый постоянный загрузчик также записывает внутреннюю Flash по CAN. В SETGUI выбираются «CAN / ProtoCAN Boot» и «Внутренняя Flash F28335», затем существующий *_flash_rs.bin из папки rs. Он проходит staging в неактивном EEPROM-слоте, повторную проверку SCI8/FAB1 и запись только B–H; сектор A и подтверждённый EEPROM-резерв сохраняются. Сначала нужен обновлённый boot в A через JTAG. Установка, протокол и проверки.

В 167 добавлен отдельный Flash-вариант на основе ветки прошивка-через-flash (437f250) с сохранением текущих CAN, GAS, регистратора и защиты нагрузки. Основной F28335.cmd размещает .text в RAM. Альтернативный F28335_flash.cmd размещает код во FlashH, константы и инициализацию — во FlashG, аппаратный переход codestart — по адресу слова 0x33FFF6. Предстартовый код TI отключает watchdog до входа в _c_int00, чтобы холодный запуск не прерывал инициализацию C. ramfuncs копируются в RAML4 до InitFlash; автономный RS-программатор и TI Flash API копируются из FlashF в RAML0 до стирания.

Штатный защищённый postbuild вызывает build_flash.py и выпускает оба варианта с одним паспортом текущей компиляции. Требуется официальный TI Flash API v2.10 для F28335; его каталог задаётся TI_FLASH_API_ROOT либо штатным путём controlSUITE. Перед публикацией проверяются COFF официальным ofd2000, точные LOAD/RUN, точка входа, содержимое SCI8 и побайтное совпадение загружаемых слов COFF/SCI8.

Проверенный локальный комплект: Bin/Final167/M95M02.

Файл Назначение
firmware_9858046+.bin M95M02 → RAM, 34 120 байт SCI8
firmware_flash.out Первичная запись внутренней Flash через JTAG, COFF с символами
firmware_flash_rs.bin Обновление внутренней Flash по RS, 39 494 байта SCI8

Паспорта Flash дополнены execution=FLASH и image_format=COFF либо SCI8-FLASH; поле eeprom=M95M02 описывает отдельную память параметров. Для запуска после сброса аппаратные boot-перемычки должны выбирать Flash. При SPI boot загружается EEPROM/RAM-образ из M95M02.

Команда записи Flash на плате нагрузки отклоняется кодом 0x1005, пока штатный STOP не завершён и SPI не подтвердил отправку текущего кода 4 мА. Probe не останавливает нагрузку. После начала стирания IRQ запрещены, все вызовы остаются в RAM, boot-переход записывается последним. При ошибке записи может потребоваться восстановление через JTAG: резервного Flash-образа нет. Сборка, хостовые проверки и дизассемблер не заменяют проверку записи и самостоятельного запуска на стенде; физическая плата в этой работе не прошивалась.

Помощник настройки linker

Общая утилита и инструкция находятся в соседнем репозитории templates/tools/c2000-linker. Она создаёт стартовые карты COFF для TMS320F28335 и TMS320F2812 в режимах RAM/Flash, объясняет LOAD/RUN и проверяет физические пересечения памяти. Профильные особенности платы и внешняя XINTF RAM задаются в проекте.

EEPROM M95M02 хранит загрузочный поток SCI8. Её 256 КиБ не являются CPU-адресуемым расширением RAM и не добавляются в MEMORY linker-файла. В текущем RAM-варианте .text занимает внутренние RAML0–RAML3, а .cinit и константы — RAML4. При Flash-варианте код и константы загружаются во Flash, а секции ramfuncs и автономного программатора имеют отдельные LOAD и RUN.

CAN-загрузчик подключён из templates: ресурс CCS Source/Templates/f28335_can_application.c ссылается непосредственно на c/protocan-boot/ports/tms320f28335/f28335_can_application.c той же зависимости. Общие ядро, A/B-хранилище, SPI/handoff и CAN-порт не копируются в проект. Source/Internal/Include/f28335_can_application_config.h задаёт включение для RAM/M95M02 и версию из счётчика firmware_identity.json. Локальный can_boot.c содержит только аппаратную остановку нагрузки. Постоянный Flash-загрузчик остаётся отдельным проектом templates/c/protocan-boot/projects/ccs/f28335.