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

4.9 KiB
Raw Blame History

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 профиле нет.

Подключённые проекты и проверки Keil/CMake.