feat(protocan-boot): Добавь порты MCU и сервисы загрузки
Обеспечь единый процесс обновления для STM32F103/F407/G474 и TMS320F2812/F28335: discovery, служебные ответы, BUSY, тайм-аут сессии и подтверждение приложения. Добавь самостоятельные проекты CCS, аппаратные хранилища и Python-клиент. Совместимость: структуры конфигурации и порта расширены, поэтому потребители должны пересобраться и обнулить новые поля. Для C28x callbacks используют pcan_boot_byte_t; периодический pcan_boot_poll обслуживает discovery и настроенный тайм-аут.
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
# 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).
|
||||
Reference in New Issue
Block a user