STM32G474RET6/MB1367 首批纵切片¶
这是 NUCLEO-G474RE 上经源码审阅的 STM32G474RET6 基线,实现 CPU startup、固定 clock transaction、TIM2 time、GPIOA、LPUART1 IRQ bytes 和独立 PA0/PA1 EXTI edge event。不建立 Flash 编程、DMA、ADC、SPI、I2C、FDCAN、USB、Ethernet、低功耗连续性或其他 G4 外设支持。不支持模式必须在配置解析时失败。真实 PCB 检查与全部 HIL 均未执行。
已审阅来源¶
来源 |
修订/锁定身份 |
相关事实 |
|---|---|---|
DS12288 Rev6 |
M4F、170 MHz、内存与时钟限制 |
|
RM0440 Rev9 |
RCC/PWR/Flash boost 次序、TIM2、GPIO、LPUART |
|
UM2505 Rev7 |
X3、VCP 焊桥与 LD2 接线 |
|
626ee412334a5ed2e5b320af5a8d77d69f03a558 |
真实 G474 寄存器 mask/layout、IRQ102、GCC startup |
源码摘要与原 SDK 许可归依赖锁及审查证据。厂商 notices 和 LICENSE.md 保持不变。公共 Nexus 接口不依赖寄存器定义。
精确目标与内存¶
首目标为 STM32G474RET6、Cortex-M4F、ARMv7E-M、FPv4-SP-D16 hard ABI、DSP 和 DWT CYCCNT。外部 IRQ ID 0..101,包含 TIM2=28、LPUART1=91、FMAC=101,实现四个优先级位。
Flash 为 0x08000000 起 512 KiB。Startup 检查观察 DEV_ID 0x469、Flash density 512 KiB 及实际 DBANK=1。DEV_ID 标识硅片类别,不标识封装或订货号。DBANK=1 是跨两 bank 的 2 KiB page;首 geometry profile 拒绝 DBANK=0。Startup 绝不写 option bytes 或擦除/编程。产品须核对精确订货号和 option 状态。
RAM 为 0x20000000 起 80 KiB SRAM1、0x20014000 起 16 KiB SRAM2,以及系统总线 alias 0x20018000 起 32 KiB CCM。CPU CCM 地址 0x10000000 映射同一物理存储,不重复计数。首链接布局使用 0x20000000 起连续 128 KiB,预留 2048 字节 MSP。此 CPU-only 布局不声明已实现 DMA 提供者,调用方缓冲不静默迁入其他内存域。
参考 Board 事实与未知项¶
功能 |
已审默认参考 |
必需物理确认 |
|---|---|---|
HSE |
X3 24 MHz 晶体,SB25/SB26 接通,SB27 断开 |
实际 X3、焊桥与修订 |
LED LD2 |
PA5,高有效,SB6 接通 |
实际 LED 与焊桥安装 |
ST-LINK VCP |
LPUART1 PA2 TX / PA3 RX,AF12;SB17/SB23 接通,SB18/SB22/SB13/SB19 断开 |
真实焊桥与 ST-LINK 连接 |
替代 ST-LINK MCO 8 MHz 接线需另一已审 profile,本配置不接纳。VCP 是 LPUART1,不是 USART2。源码审查不能证明实际电气状态、UART 接收、板级供电或晶振频率。私有 PCB 与焊桥策略留在平台之外。
时钟事务与回滚¶
准入要求特权任务、进入掩码全清、正数 phase poll budget、近似复位 HSI16 已选、PLL/HSE idle 及预留 TIM2/NVIC 未用。未知活动资源在效果前拒绝。Poll count 限制工作量;timebase 不可用时它不是经过时间 deadline。
已审 profile 为 HSE 24 / PLLM 6 / PLLN 85 / PLLR 2 = 170 MHz。PLL 输入 4 MHz、VCO 340 MHz,满足数据手册。HCLK/APB1/APB2 和 TIM2 kernel clock 均 170 MHz。G4 使用 SW_HSI=1、SW_PLL=3,不复用 F4 编码。
Startup 取得 PWREN 并读回、执行屏障后读取 PWR;选择 voltage range 1,等待 VOSF clear,使用 boost 与四个 Flash wait state,启动并观察 HSE/PLL,经 AHB/2(85 MHz)切换,等待至少规定转换间隔,再选 AHB/1。真实 M4 对象包含已校验 85 MHz 下 85 次依赖 SUBS/BNE;至少 170 指令/core cycle 给出保守 2 微秒下限,IRQ 可延长。物理时序未测。Volatile、读回及排序屏障不能优化掉。
失败记录 primary、cleanup 和仍持有效果。回滚在关闭 PLL/HSE 或降低 Flash/电压前恢复已观察 HSI。撤销 TIM2 所有权前先证明 source withdrawal 和 NVIC。回滚失败保留资源位供显式重试,绝不报告虚构清理成功或发布可用 I/O。Stop 要求外部全部外设/任务消费者已 join;无隐藏协调者猜测。
时间、GPIO 与串口合同¶
TIM2 被预留:32 位 count、prescaler 169、ARR 0xffffffff、1 MHz、overflow IRQ priority0 且无 OS API。快照保存/恢复中断状态并修正一次 pending overflow;IRQ 至少每 2^32 微秒执行一次。NMI、HardFault、动态调频与深睡不在此 time 合同内。
GPIO 初始化先预装 BSRR 并观察 ODR,再开放 mode;观察 push/pull 和 pull 配置,然后所选 MODER。部分失败保留实例供显式 inactive-level 回滚。热写直接 BSRR。Toggle 要求单 owner 串行合同。
LPUART1 支持调用方 byte ring 与一个借用 TX request。真实 20 位 BRR 为 round(256PCLK/(16baud)),范围 0x300..0xfffff;170 MHz、115200 使用 PRESC=16(寄存器7)、BRR 23611。发布接口前观察 TEACK/REACK。IRQ 有界为一个 TX byte 和一个 RX byte,报告聚合 corruption/overflow loss 并保留旧环内容,不复用 F4 USART 分频、offset 或错误清除序列。
TXE 证明寄存器可接收字节,TC 证明末字节线侧完成。Request metadata/payload/ring/private registers/wake target 不重叠。Cancel/timeout 禁止新发送,等待真实线侧完成。排空失败保留 QUARANTINED 存储,后续硬件证明可最终完成并排空。提供者先解除 active 指针和中断源,最后发布 SETTLED;此发布是其对请求的最终访问。Cold stop 关闭准入、join 已捕获回调、观察 UE 与 TEACK/REACK 关闭、关闭/清除/读回 NVIC,再解除 ring/wake 所有权。支持 FreeRTOS 的 sink 要求真实 priority/group 校验;wake 不启动 scheduler。
软件证据与剩余资格¶
精确 EXTI 扩展¶
EXTI0/PA0 与 EXTI1/PA1 使用独立 IRQ6/7、显式优先级和调用方选定 1..4096 事件槽。RM0440 Rev9 10.2.3 节 367–368 页给出 SYSCFG_EXTICR1 GPIOA 零编码;15.3–15.5 节 441–453 页说明中断选择与 W1C EXTI_PR1。官方 CMSIS 布局与精确料号封装清单提供寄存器/引脚事实。tests/contracts/g474_assembly/exti_board 仅为软件夹具,不声明真实 NUCLEO button、connector、bias resistor 或电气路由。
公共 edge-event 接口每条线有唯一任务 reader 和 IRQ producer。每次确认一个所选 pending bit,最多采样一个 level 并记录一个 timebase timestamp。硬件边沿可合并,双边沿方向反映采样 level;没有轮询重建丢边沿。满环保留旧事件、开放独立 loss 边界,然后才接纳后续事件。每次复制事件的 CPU 排他有界;read 工作随显式调用方容量增长。
平台准入在改变全局时钟或 GPIO 前检查 line mask、trigger、pending 与 NVIC。共享 SYSCFG gate 只有一个生成 owner,保留先前 enable。每条线保存 mux nibble,仅在自身 source 和独立 vector 撤销后恢复该字段。完整 Platform stop 时 GPIO cold lease 恢复原 input/analog。清理失败保留 storage 和 recovery 责任。Wake 绑定检查实际 IRQ policy,在释放 storage 前 join 捕获回调。不引入新公共 API、动态分配、worker、运行时 registry 或额外 OS 层。
两份作者 EXTI 夹具选择 baremetal/FreeRTOS 及精确三/二事件容量。Native GoogleTest/GoogleMock 执行真实 provider 与生成双线 factory;ARM 保留 selected ops/handler 和真实 FreeRTOS 图。Empty 与既有 GPIO/LPUART 保持独立回归。物理 HIL 保持 not_executed:未来准入工位须确认 PA0/PA1 可接入性及 bias,注入观察边沿,对比仪器计数/波形与 coalesced/loss 语义,测 IRQ 延迟并证明 storage 复用前 source withdrawal。软件成功不是该证据。
既有基线证据¶
真实 host model 以官方 SDK layout/mask 执行生产寄存器算法,验证有界 timeout、回滚失败、初始 latch 失败、source withdrawal、request alias 拒绝、wire drain、overflow、callback borrow 与独立 state;不建立 oscillator、voltage、timing、peripheral errata 或物理 IRQ。
真实 GCC 14.3 ARM C11 构建与锁定官方 GCC startup 链接 empty、LED、UART、mixed baremetal ELF。所选类型占 System 56、GPIO 12、UART 72、TX request 32 字节。小配置成本来自实际 ELF 并含 2048 字节 MSP,不由 host sizeof 推断。未选 GPIO/UART 符号经 section GC 消失。
生成类型化 factory、两种 OS 后端组合、clean 可复现构建、精确 SDK lock/bundle 身份与未来 Board HIL 都有独立资格退出条件。纯软件交付须保持物理状态 unknown。