多控制器所有权

公共 I/O 接口面保持既有方法表与调用方持有的请求合同。选择另一个物理控制器会建立另一个私有提供者实例,而不是增加传输抽象或全局注册表。实例的冷态寄存器、时钟、DMA 和 IRQ 事实在发布者集合撤销且实例停止前保持不可变。

I2C V1 IRQ 与有限 DMA

STM32F407 I2C1/I2C2 和 GD32F470 I2C0/I2C1 执行同一维护中的 V1 寄存器算法。各控制器的冷态包装使用真实 SDK 校验寄存器指针、DATA 偏移、线路输入、总线时钟与 DMA 选择器。EV、ER、RX DMA 和 TX DMA IRQ 由所选控制器身份确定。初始化已使能的物理控制器时,在修改控制寄存器或 IRQ 优先级前返回 BUSY。

SoC 控制器

GPIOB 引脚与 AF

外设时钟

有限 RX/TX 路由

STM32F407 I2C1

PB6/PB7 或 PB8/PB9,AF4

42 MHz

DMA1 stream0 / stream6,channel1

STM32F407 I2C2

PB10/PB11,AF4

42 MHz

DMA1 stream2 / stream7,channel7

GD32F470 I2C0

PB6/PB7 或 PB8/PB9,AF4

50 MHz

DMA0 channel0 / channel6,selector1

GD32F470 I2C1

PB10/PB11,AF4

50 MHz

DMA0 channel2 / channel7,selector7

本表 GD32 名称使用厂商原始 DMA0/DMA1 命名。平台配置中的不透明控制器 ID 使用独立映射。DMA 请求选择器既不标识也不分配内存引擎。静态冷态装配必须拒绝其他器件选择已被占用的物理引擎。

私有状态中的 DMA 描述符设为 NULL 时选择纯 IRQ 消息,不取得 DMA 向量。精确不可变宏 NX_STM32_I2C2_DMA(regions, count) 和 NX_GD32_I2C1_DMA(regions, count) 选择第二组有限路由。初始化 API 不变。引脚、总线时钟、DMA 时钟和共享资源租约仍由冷态装配负责;提供者不会静默分配这些资源。

每个请求保留描述符、消息、缓冲区和端点,直到该控制器的引擎、中断源与线侧完成排空。一个实例的完成或取消不能确认另一 stream 的 W1C 标志、关闭其向量、释放其请求或改变其唤醒接收器。DMA 拒绝停止时,仅受影响实例的借用保留在 DRAINING 或 QUARANTINED;时间流逝不能证明硬件静止。

共享 DMA 确认叶子编译为直接写入所选寄存器。测试覆盖模拟真实 W1C 副作用,而不是把清除寄存器当普通 RAM。没有逐字节 MMIO 方法表或新增可变字段。真实 Cortex-M4F 编译测得不变状态为 56 字节、端点 8 字节、可选不可变 DMA 描述符 80 字节。提供者与共享算法对象的全局 DATA/BSS 为零。选中对象的 text 大小只是编译对象证据,不代表完整镜像保留的 Flash 或周期测量。

已审阅硅片路由来源为 STM32 RM0090 Rev22 表 43 和 GD32F4xx User Manual Rev3.3 表 10-2/10-3。这些事实不能证明板级外部接线。第二控制器板级路由需要显式审阅配置。主机测试模拟外部 CPU/MMIO,真实 ARM 编译使用真实厂商 SDK 头文件。总线时序、电气电平和 DMA 争用仍需硬件资格;本页不声明物理结果。