Обеспечь единый процесс обновления для STM32F103/F407/G474 и TMS320F2812/F28335: discovery, служебные ответы, BUSY, тайм-аут сессии и подтверждение приложения. Добавь самостоятельные проекты CCS, аппаратные хранилища и Python-клиент. Совместимость: структуры конфигурации и порта расширены, поэтому потребители должны пересобраться и обнулить новые поля. Для C28x callbacks используют pcan_boot_byte_t; периодический pcan_boot_poll обслуживает discovery и настроенный тайм-аут.
64 lines
4.9 KiB
Markdown
64 lines
4.9 KiB
Markdown
# 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`](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 профиле нет.
|
||
|
||
[Подключённые проекты и проверки Keil/CMake](../../projects/STM32.md).
|