Files
templates/c/protocan-boot/ports/stm32g474/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

64 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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).