Files
templates/c/protocan-boot/projects/README.md
T
Andrey c6390ae1c9 feat(protocan-boot): Добавь порты MCU и сервисы загрузки
Обеспечь единый процесс обновления для STM32F103/F407/G474 и TMS320F2812/F28335: discovery, служебные ответы, BUSY, тайм-аут сессии и подтверждение приложения. Добавь самостоятельные проекты CCS, аппаратные хранилища и Python-клиент.

Совместимость: структуры конфигурации и порта расширены, поэтому потребители должны пересобраться и обнулить новые поля. Для C28x callbacks используют pcan_boot_byte_t; периодический pcan_boot_poll обслуживает discovery и настроенный тайм-аут.
2026-10-23 14:16:19 +03:00

16 KiB
Raw Blame History

Отдельные проекты CCS: F28335 и F2812

Весь комплект находится внутри templates/c/protocan-boot: проекты CCS, исходники загрузчиков, аппаратные порты, linker command files, необходимая поддержка TI, CLI-сборка, тесты и документация. Зависимости от исходников 28335_periph и BALZAM_167 при сборке отсутствуют. Требуется установленный TI C2000 compiler с поддержкой COFF ABI; проверена версия 22.6.0.LTS.

Проект CCS Контроллер Обновляемая память Схема
ccs/f28335 — F28335_CAN_AB TMS320F28335 M95M02, 256 КиБ A/B, trial, CONFIRM, rollback
ccs/f2812 — F2812_CAN_NOR TMS320F2812 / ПМ67 AM29LV800BT-70EI, 1 МиБ, x16 Один выделенный NOR-слот, проверяемый manifest, CAN recovery

F2812 не использует EEPROM. Его карта, GPIO, частота CAN, допустимые адреса приложения и состояние протокола отделены от F28335.

Открытие в Code Composer Studio

  1. Project → Import CCS Projects, каталог поиска — c/protocan-boot/projects/ccs.
  2. Выбрать F28335_CAN_AB и F2812_CAN_NOR. Оставить проекты в исходном расположении: не включать Copy projects into workspace, поскольку переносимые ссылки PCAN_ROOT ведут к общей библиотеке выше проектов.
  3. Выбрать Debug либо Release, затем Build Project. Оба проекта содержат собственные .project, .cproject, .ccsproject.
  4. OUT/MAP появятся в ccs/<контроллер>/<Debug|Release>/.

В targetConfigs сохранены существующие конфигурации Sauris SAU510: F28335 — Iso Plus v.2, F2812 — Iso Plus. Для другого адаптера выбрать свой Connection в Target Configuration. Компиляция и импорт не подключаются к JTAG и не программируют плату.

Для отдельных workspace с ограниченными правами CCS допускает переменную TI_APPDATA_DIR с доступным для записи каталогом. Это служебный cache IDE, он не относится к исходникам загрузчиков.

Сборка без запуска IDE

Из корня templates:

python c/protocan-boot/projects/build.py --device f28335
python c/protocan-boot/projects/build.py --device f2812
python c/protocan-boot/projects/build.py --device f28335 --configuration Release
python c/protocan-boot/projects/build.py --device f2812 --configuration Release

Можно передать --compiler <каталог-ti-cgt-c2000> и --output <каталог>. Скрипт читает состав исходников и настройки из этих же CCS-проектов, полностью пересобирает их и проверяет реальные COFF LOAD-адреса официальным ofd2000. Проверка отклоняет загружаемый RAM-код без Flash LOAD, пересечения, отсутствующие boot branch/C entry, запись CSM/OTP и посторонних внутренних секторов. Рядом с OUT сохраняются MAP, build.log и manifest с SHA-256.

Результаты:

  • ccs/f28335/Debug/F28335_CAN_AB.out;
  • ccs/f2812/Debug/F2812_CAN_NOR.out.

OUT — постоянный загрузчик для первоначальной установки через JTAG во внутреннюю Flash соответствующего TMS. Образ самого приложения передаётся по CAN в его внешнюю память. Для автоматического запуска должен быть выбран внутренний Flash boot; у ПМ67 необходимо также учитывать штатную логику CPLD выбора источника reset/boot из big_dsp_module платы.

Prebuild/postbuild и копирование в SETGUI

В .cproject обоих проектов настроены Debug и Release. Prebuild вызывает projects/build.py --step prepare: сохраняет UTC, Git-ревизию templates, контроллер, конфигурацию и SHA-256 исходников в ${BuildDirectory}/generated/canboot_build.json. Это внешний паспорт сборки загрузчика; номер версии приложения 167 не изменяется.

Postbuild вызывает тот же скрипт с --step postbuild. Он требует подготовку той же конфигурации и неизменные исходники, проверяет фактические COFF LOAD-адреса, C entry и аппаратный boot-переход через TI ofd2000, затем сохраняет OUT/MAP, .out.manifest.json, .out.sha256 и firmware_identity.json в локальном архиве ${BuildDirectory}/firmware/HASH_дата_UTC+3. Manifest содержит контроллер, Debug/Release, назначение canboot, адреса проверки и SHA-256 точного OUT. firmware/latest_build.json указывает текущие локальную и экспортированную папки.

Проверенный архив автоматически копируется в SETGUI по следующей схеме:

SETGUI/..periph_28335/firmware/periph28335/balzam167/canboot/
  28335/HASH_дата_UTC+3/F28335_CAN_AB.out
  2812/HASH_дата_UTC+3/F2812_CAN_NOR.out

MAP, manifest, SHA-256 и метаданные лежат рядом с соответствующим OUT. ..periph_28335 — буквальное имя существующего каталога SETGUI с двумя точками в начале. Время имени папки берётся из prebuild; + после HASH означает изменения в templates. Debug и Release имеют отдельные BuildDirectory и свои метаданные.

В Project Properties → Build → Steps команды уже заполнены для обеих конфигураций. Пример для F28335 Debug, каждая команда вводится одной строкой:

python "${PROJECT_LOC}/../../build.py" --device f28335 --configuration Debug --compiler "${CG_TOOL_ROOT}" --output "${BuildDirectory}" --step prepare
python "${PROJECT_LOC}/../../build.py" --device f28335 --configuration Debug --compiler "${CG_TOOL_ROOT}" --output "${BuildDirectory}" --step postbuild --export "${PROJECT_LOC}/../../../../../../SETGUI/..periph_28335/firmware/periph28335/balzam167/canboot/28335"

Для F2812 используются --device f2812 и конечная папка 2812; для Release — --configuration Release. При другом расположении SETGUI измените --export в postbuild обеих конфигураций. Все пути с пробелами должны оставаться в кавычках. CLI-сборка из раздела выше выполняет те же prepare/postbuild и копирует в эти же каталоги; аргумент --export <каталог> переопределяет место копирования. При ошибке компиляции, проверки OUT, отсутствии MAP или изменении исходников после prebuild новый комплект в SETGUI не копируется. После изменения исходников выполните Rebuild Project, чтобы обновить и OUT, и подготовку.

В диалоге SETGUI Flash JTAG (OUT) для установки постоянного загрузчика F28335 выбирайте canboot/28335/HASH_дата_UTC+3/F28335_CAN_AB.out. F2812_CAN_NOR.out предназначен для JTAG соответствующего F2812. Копирование файлов не запускает программирование платы и сетевую публикацию.

F28335 / M95M02

Проект использует существующий порт и формат журнала без изменения адресов: PERIPH 0–31: Type = 1 + PERIPH / 16, Device ID = PERIPH mod 16. УМП1 — 1/5, УМП2 — 1/6, задатчик — 1/8. Product 0x2833, HW 1, CAN 250000 бит/с. Приложение и загрузчик используют один аппаратный номер платы; прежний общий адрес 3/7 отменён. Код загрузчика — внутренний сектор A 0x338000..0x33FF7F, boot — 0x33FFF6. Слоты M95M02 имеют по 130560 октетов, параметры — прежние 258 октетов по адресу 0x3FEFC. Приложение загружается в RAM ниже CPU word-адреса 0xE000.

После установки постоянного загрузчика новое приложение 167 передаётся существующим клиентом SETGUI CAN / ProtoCAN Boot. Оно обязано содержать hooks READY/CONFIRM и watchdog: пример интеграции реализован в ветке 167. Без CONFIRM следующий reset возвращает подтверждённый active. Полная последовательность — документация порта F28335.

F2812 / AM29LV800BT

Профиль: Device Type 3, Device ID 6, Product 0x2812, HW 1, CAN 250000 бит/с, SYSCLKOUT 150 МГц. CAN находится на GPIOF6 TX / GPIOF7 RX. F2812 использует программную арифметику rts2800_ml.lib; F28335 — FPU32 и rts2800_fpu32.lib.

Внутренний сектор A загрузчика: 0x3F6000..0x3F7F7F, boot — 0x3F7FF6. Внешняя NOR подключена по CPU word-адресу 0x100000. Новый CAN-раздел задан явно в ports/tms320f2812/boot2812.h:

Область CPU word-адреса включительно Размер
Существующая нижняя область: прежние образы/параметры/FPGA 0x100000..0x15FFFF 768 КиБ
Новый SCI8 CAN-образ: обычные сектора 12/13/14 0x160000..0x177FFF 192 КиБ
Неизменяемые этим загрузчиком top-boot сектора 15/16/17 0x178000..0x17DFFF 48 КиБ
Новый manifest: последний top-boot сектор 18 0x17E000..0x17FFFF 16 КиБ

Это новое явное размещение CAN-образа, а не автоматическое определение свободного места в уже заполненном чипе. Перед первоначальной установкой согласовать эти два выделенных участка с фактической картой NOR конкретной платы. В известном исходнике FPGA начинается с 0x130000, а новый CAN-слот находится выше; драйвер не изменяет ничего ниже 0x160000 и в секторах 15–17.

После reset доступно 3 секунды для ENTER_BOOT. Открытая сессия удерживает загрузчик; пустой/повреждённый manifest оставляет CAN recovery постоянно. Для обновления уже работающего приложения нужно войти в это окно после reset; приложение F2812 само по себе пока не получает обработчик ENTER_BOOT от добавления отдельного проекта загрузчика.

Перед записью требуется AMD manufacturer 0x0001, device 0x22DA. Сначала стирается сектор manifest, затем три сектора образа. Запись проверяет каждое слово. VERIFY повторно читает NOR, проверяет CRC32, SCI8, entry, перекрытия и запрещённые назначения. COMMIT повторяет проверку, сохраняет manifest с собственной CRC, два magic-слова публикуются последними. Стирание сообщает BUSY каждые 250 мс, продлевая живую сессию.

Это single-slot схема: при обрыве обновления последнего CAN-образа остаётся recovery, автоматический A/B rollback для F2812 не заявляется. Полное стирание NOR, запись внутренней Flash по CAN и программирование FPGA отсутствуют.

Образ приложения — TI SCI8 AA 08, максимум 196608 октетов. Старый flat BIN основного контроллера автоматически не мигрируется. Допустимый payload:

  • L0 0x8000..0x8EFF;
  • H0 0x3F8000..0x3F9FFF;
  • внешняя SRAM zone2 0x80000..0xFFFFF.

Стек M1, L1 0x9000..0x9FFF, RAM InitFlash 0x8F00..0x8FFF, периферия, внутренняя Flash и NOR не допускаются как назначения SCI8. .ebss приложения может занять L1 после перехода в его C runtime; инициализированный payload работающую RAM загрузчика перезаписывать не должен. Настройка приложения F2812/его linker — отдельная от импорта загрузчика операция.

Геометрия x16, ID и команды AA/55/A0/80/30/F0 взяты из оригинального datasheet AMD Am29LV800B. Аппаратные GPIO/CPLD и XINTF-тайминги перенесены из действующих big_dsp_module.c / flash_tools.c ПМ67, без зависимости от этих файлов при сборке.

Проверки

$env:CC = 'C:/msys64/ucrt64/bin/gcc.exe'
python c/protocan-boot/tests/run_tests.py

Проверяются протокол, CRC, сессии/BUSY, A/B F28335 с trial/rollback/CONFIRM, NOR F2812 с настоящими AMD command cycles, ID, readback, запрещёнными секторами, обрывами COMMIT, повреждением CRC/SCI8 и тайм-аутом DQ7. Вариант с CMake/CTest также поддерживается.

Подтверждены реальные import/build обоих проектов в CCS 12.3, CLI-сборки Debug/Release TI 22.6 COFF и проверки секций OUT. Физические JTAG/CAN/XINTF, режим boot и поведение конкретной платы при отключении питания требуют стенда; физическое программирование этим комплектом автоматически не выполнялось.