Добавить защищённое обновление приложения через RS и CAN с сохранением загрузчика, проверкой CRC, восстановлением передачи и защитой EEPROM. Подключить общий процесс сборки C2000 и автоматический счётчик версии для согласованных RAM, Flash, CAN и паспортов бинарных образов. Уточнить запуск ЦАП, обработку измерений и параметров нагрузки, начальную индикацию и документацию регистров GAS. Дополнить модели аппаратуры и изолировать заголовки CAN в тестах. Проверка: 26 тестов выпуска, 4 теста восстановления CAN и восемь программных моделей CAN, Flash, EEPROM, ЦАП, параметров и TESTLAMP.
Сборка Бальзам-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.