Обеспечь единый процесс обновления для STM32F103/F407/G474 и TMS320F2812/F28335: discovery, служебные ответы, BUSY, тайм-аут сессии и подтверждение приложения. Добавь самостоятельные проекты CCS, аппаратные хранилища и Python-клиент. Совместимость: структуры конфигурации и порта расширены, поэтому потребители должны пересобраться и обнулить новые поля. Для C28x callbacks используют pcan_boot_byte_t; периодический pcan_boot_poll обслуживает discovery и настроенный тайм-аут.
16 KiB
Отдельные проекты 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
- Project → Import CCS Projects, каталог поиска —
c/protocan-boot/projects/ccs. - Выбрать
F28335_CAN_ABиF2812_CAN_NOR. Оставить проекты в исходном расположении: не включать Copy projects into workspace, поскольку переносимые ссылкиPCAN_ROOTведут к общей библиотеке выше проектов. - Выбрать Debug либо Release, затем Build Project. Оба проекта
содержат собственные
.project,.cproject,.ccsproject. - 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 и поведение конкретной платы при отключении питания требуют стенда; физическое программирование этим комплектом автоматически не выполнялось.