Обеспечь единый процесс обновления для STM32F103/F407/G474 и TMS320F2812/F28335: discovery, служебные ответы, BUSY, тайм-аут сессии и подтверждение приложения. Добавь самостоятельные проекты CCS, аппаратные хранилища и Python-клиент. Совместимость: структуры конфигурации и порта расширены, поэтому потребители должны пересобраться и обнулить новые поля. Для C28x callbacks используют pcan_boot_byte_t; периодический pcan_boot_poll обслуживает discovery и настроенный тайм-аут.
4.9 KiB
STM32G474VET6: ProtoCAN Boot v1 / CANdle
Исходный проект: https://git.rd12.ru/setcorp/CANdle_stm32.git, commit
61a93c5. Аппаратный код извлечён из src/boot/g474_can_bootloader.c,
src/can_boot_control.c и src/boot/g474_boot_startup.c; локальная CAN state
machine заменена единым src/pcan_boot.c. Лицензия исходного проекта сохранена
в LICENSE.source.md.
| Область | Начало | Конец, исключён | Размер |
|---|---|---|---|
| Загрузчик | 0x08000000 |
0x08008000 |
32 КиБ |
| Single-slot приложение | 0x08008000 |
0x08080000 |
480 КиБ |
| RAM проекта | 0x20000000 |
0x20013FF8 |
80 КиБ − 8 байт |
| Одноразовый запрос CANB | 0x20013FFC |
0x20014000 |
4 байта |
boot_profile.h содержит единые адреса/magic и совместимый API приложения.
Валидатор векторов допускает прежний MSP вплоть до физической границы
0x20014000; новые linker/startup исключают последние восемь байт, чтобы
не затереть запрос до чтения в main. RAM-COMMIT не сохраняется после питания.
Состав и подключение
pcan_boot_stm32g474.c/.h— reusable HAL FDCAN/Flash-порт с single-slot, независимым CRC readback, doubleword записью и проверкой TXBTO перед reset.boot_main.c— самостоятельный CAN/UART-загрузчик CANdle, без собственной реализации wire-протокола; используетpcan_bootи общийrs485-boot.boot_startup.c— исходная схема Keil/GCC startup с безопасным initial MSP.boot_control.c— вход из приложения по адресному ENTER_BOOT или UART BEGIN, совместимый UART PING/ACK и исходный USART1 IRQ.
В проекте CANdle старые файлы стали include-обёртками из submodule templates.
BOOT Keil и CMake компилируют дополнительно pcan_boot.c и
pcan_boot_stm32g474.c. Приложение использует общий boot_control.c без
подключения загрузочной state machine к USB–CAN приложению.
Board-проект предоставляет device.h, device_sysclock_config,
HAL_FDCAN_MspInit, CMSIS/HAL и linker. Исходная плата использует CPU 144 МГц,
FDCAN kernel 48 МГц, FDCAN1 PB8/PB9 AF9, classic CAN 500 кбит/с,
DeviceType=7 / DeviceID=15. UART — PA9/PA10 AF7, 512000 бод, TTL без DE.
Для reusable API вызовите HAL_FDCAN_Init с двумя extended-фильтрами,
затем pcan_boot_stm32g474_init, затем регулярно poll из main.
FDCAN и его TX FIFO должны принадлежать этому порту, без конкурирующих TX IRQ.
Flash и протокол
Поддерживается реальная плотность 512 КиБ. DBANK=1 использует два банка по 256 КиБ и страницы 2 КиБ; DBANK=0 — один банк 512 КиБ и страницы 4 КиБ. Номера страниц считаются отдельно для каждого банка, с проверкой всей округлённой области до erase. BFB2 и SYSCFG FB_MODE bank swap отвергаются; Option Bytes не изменяются. Другие плотности требуют собственного профиля.
Flash программируется doubleword по восемь байт. Неполный doubleword дополняется FF только в конце образа; повторная запись ECC-слова в середине потока не допускается. UART использует тот же writer, что CAN DATA. VERIFY перечитывает Flash, COMMIT повторяет проверку, REBOOT возможен только после COMMIT и физически подтверждённого TX. Кодирование DLC определяется константами используемой версии HAL; старый сдвиг 16 и новый сдвиг 0 не смешиваются.
Стирание синхронное. Клиент должен допускать длительное Flash stall; BUSY до и после erase поддерживает сессию. Постоянного manifest, A/B-rollback, resume после питания и аутентификации в исходном single-slot профиле нет.