CAN FD:固定物理 RAM 与明确的请求所有权¶
本合同用于装配和执行精确的 STM32G474RET6 FDCAN1 软件参考。iso-fd-normal 用于外部通信,iso-fd-loopback 用于内部静默环回;二者均使用 HSE 24 MHz,标称阶段 500 kbit/s、数据阶段 2 Mbit/s。这是分别选择的两个软件模式,均不能证明已安装收发器、实测时钟精度、外部 ACK、终端电阻或物理时序资格。HIL 仍为 not_executed。
选择独立的静态接口¶
FIG-16 描述共享的当前机制,不是 CAN 总线时序图。 在此选择中,接口面为 nx_can_fd_port_t,紧凑查找为 nx_factory_can_fd,运行期 provider 拥有 FDCAN1 及其固定消息 RAM。生成箭头、查找箭头和运行调用保留原有含义。查找既不读取硬件,也不启动发送。
以同一个软件 Board 和物理资源声明为基础,正常模式夹具和环回夹具分别选择模式。严格解析器校验精确速率、掩码、环容量和 IRQ 策略,再发布不可变 typed IR 与一份生成 bundle。控制器、共享 FDCAN 配置、消息 RAM、向量和焊盘的冲突声明都会被拒绝。Board 记录硅片 PA11/PA12 AF9 路线;实际 PCB 修订、晶振安装及外部 PHY 均未知。
所有者 |
责任 |
|---|---|
Platform |
启动 HSE24/PLL170 与 TIM2,取得共享 FDCAN 时钟门和焊盘,先构造 domain 再构造 controller,并保留未完成的外层租约 |
私有 domain |
验证固定物理 RAM 与 CKDIV0,拒绝活跃 peer,并在所有已取得控制器停止前保留 domain |
FDCAN provider |
拥有三个物理发送槽、固定过滤器、两个接收 FIFO、值事件环及 line0 发布者 |
应用执行者 |
序列化特权且未屏蔽中断的任务调用,提供 service 推进和 deadline,并等待外部观察者退出 |
调用方/生成存储 |
在规定的释放条件满足前,保持已接受请求、不可变过滤计划、事件环和唤醒 sink 有效 |
经典 CAN 接口保持独立。经典接口面不会变成 CAN FD 接口面,其帧、方法表和默认状态也不会增加 64 字节 payload 或 FDCAN 字段。可选 CAN FD 接口面只有两个指针和八个共享方法:在 32 位 ABI 上分别为 8 B 和 32 B。选定私有状态、请求及调用方定容的事件环单独计入成本。这些结构尺寸不是实测周期、延迟或栈边界。实现没有分配器、软件发送 FIFO、全局对象池或隐藏 worker。
精确硬件选择与单位¶
事实 |
固定选择及边界 |
|---|---|
目标 |
STM32G474RET6、Cortex-M4F、baremetal,仅 FDCAN1 |
时钟 |
系统/APB 为 170 MHz;FDCAN 使用 HSE 24 MHz、CCIPR.FDCANSEL0 以及 CKDIV=0/除以 1 |
标称阶段 |
BRP=3、SEG1=12、SEG2=3、SJW=2;500 kbit/s,采样点 81.25%;NBTP |
数据阶段 |
BRP=1、SEG1=9、SEG2=2、SJW=2;2 Mbit/s,采样点 83.33%;DBTP |
正常模式 |
启用 ISO FD,允许逐帧选择 BRS,DAR1;TEST/MON/ASM/LBCK0 |
环回模式 |
相同格式和时序,TEST1、MON1、LBCK1;不建立外部 ACK 资格 |
发送值 |
仅 DATA;经典帧 0..8 B,FD 帧 0..8/12/16/20/24/32/48/64 B;长度绝不向上取整 |
物理队列 |
三个各 18 word 的元素;按硬件标识符优先级选择,不按软件准入顺序 |
过滤器 |
不可变掩码列表:标准条目最多 28 个,扩展条目最多 8 个,每项指向 FIFO0 或 FIFO1;拒绝未匹配帧及远程帧 |
接收 |
两个阻塞 FIFO,每个含三个各 18 word 的元素;复制事件保留 raw DLC、ESI、过滤器及 FIFO 事实 |
时间 |
TSS0,原始硬件时间戳为 0,并设置 |
中断 |
冷态预留 IRQ21/22;仅启用 IT0/IRQ21,逻辑优先级为 5;ILS0 与 ILE.EINT0 |
焊盘 |
PA11 RX/PA12 TX AF9;连接复用功能前先把 TX 锁存器准备为隐性电平 |
FDCAN 内核不使用 170 MHz APB 时钟,也不适用 timer 时钟倍频规则。当前选择不开放任意时序参数、自动时钟改变、其他控制器、远程发送或其他运行模式。时钟容差、传播延迟、晶振精度及采样裕量需要独立实物验证。
G4 精简 M_CAN 集成在 SRAMCAN_BASE(0x4000A400)具有固定的 212 word/848 B 实例区域。生成 domain 指向这个物理租约,不能用任意调用方 SRAM 替代消息 RAM。
分区 |
字节偏移 |
容量 |
|---|---|---|
标准过滤器 |
0x000 |
28 word |
扩展过滤器 |
0x070 |
8 个两字过滤器 |
RX FIFO0 |
0x0B0 |
3 个各 18 word 的元素 |
RX FIFO1 |
0x188 |
3 个各 18 word 的元素 |
TX 事件 FIFO |
0x260 |
3 个两字元素;帧请求不选择事件存储 |
TX 队列 |
0x278 |
3 个各 18 word 的元素,结束于 |
初始化仅清空当前实例区域,不会复位活跃 FDCAN2/3 peer,也不会关闭共享时钟门。H7 的可配置消息 RAM 属于另一种集成;这些寄存器和 RAM 偏移不建立 H7 支持。
准备、准入与物理完成证明¶
先初始化请求元数据,再用 nx_can_fd_tx_prepare 复制完整帧及选定单调时间域中的绝对 deadline。准备阶段不保留帧指针。唯一任务执行者提交时,在准入前校验完整值、物理队列索引、deadline 和存储互不重叠。被拒绝的调用不会借用请求,也不会写发送 RAM 或发出 add request。
ACCEPTED 借用整个请求,直到调用方以 acquire 观察 SETTLED。provider 把精确 DLC 和 payload 打包到选定物理元素,执行屏障后发布 TXBAR。软件队列不会改变硬件标识符仲裁顺序。已借用请求不能成为另一次调用的输出或唤醒存储。公共接口面/方法表身份、私有控制、peer 寄存器、共享 RAM 和 SCS/NVIC 控制也受输出别名保护。
FIG-06 给出共享所有权状态。 ACCEPTED 与 REJECTED 是准入结果。在此 provider 中,源撤离要求对应槽的 TXBAR 和 TXBRP 都已清零,随后重新观察 TXBTO 或 TXBCF。单独的空槽、已锁存中断或上一次陈旧完成都不能释放请求。硬件 add scan 期间,TXBRP 仍为零时 TXBAR 也可能保持置位。
TXBTO 证明成功发送,并报告实际 payload 字节数。即使 TXBCF 同时置位,真实发送也可以赢得取消竞争。没有 TXBTO 的 TXBCF 证明取消完成或一次失败的 DAR 尝试;显式取消报告 CANCELLED,普通发送尝试失败报告 IO,已传输字节为零。缺失外部 ACK 不会触发软件重发。总线重试与协议恢复策略属于外部产品。
取消、超时、bus-off 与 stop 都请求物理取消,绝不撤销已有借用。排空 deadline 失败会使请求保持 QUARANTINED、槽继续保留,并阻止 stop/recover/domain 释放。后续物理证明仍可能允许结束请求。执行者必须继续有界 service;唤醒提示不提供执行推进。
接收、恢复与关闭所有者¶
一次 IRQ 或显式 service 最多处理三个发送槽,以及每个接收 FIFO 最初的三个元素。复制后的接收值保留 ESI,表示观测到的发送者状态。FD DLC15 表示 64 B;经典 DLC9..15 规范为 8 B,并附显式标志。事件采集时间不是 SOF,已禁用的硬件时间戳也不会被解释为物理总线时间。
调用方定容的事件环不会覆盖旧记录。软件丢失计数与硬件丢失下界分开保留;待发布丢失边界排在旧记录之后、新保留帧之前。bus-off、错误计数和 last-error 状态独立锁存,不依赖事件环是否已满。只有实际启用的 line0 对唤醒绑定施加系统调用优先级下限;已预留但禁用的 line1 不会成为另一个内核发布者。被拒绝的绑定保留原 sink。
显式恢复要求所有发送借用和通知发布者都已排空。它重新进入初始化,不重发、不复位共享域,也不重新分配消息 RAM 租约。不可变模式在恢复后仍保持 normal 或 loopback。bus-off 恢复时序依赖真实控制器和总线推进;配置返回不代表已测量所需总线空闲时间。
stop 先关闭准入,排空槽,禁用外设源并等待 line0 退出,然后才进入已应答的 INIT。最终 PSR/ECR 快照先于 CCE,因为 CCE 可能破坏硬件完成事实。控制器 stop 成功才结束其请求/环/唤醒借用;任何失败都保留未完成租约以便重试。之后 Platform 释放 domain,并恢复外层焊盘/时钟门/系统所有权。存储复用前,外部 adapter 观察者仍须单独退出。
来源与软件资格¶
权威 API 为 can_fd.h,并遵循共享的请求合同。私有 provider复用固定版本官方 FDCAN 定义,直接访问 volatile MMIO;本实现不链接 HAL 驱动 C、HAL_GetTick、HAL handle 或 MSP 回调。G4 来源锁保留精确选定头文件、配套 CMSIS 身份及原始许可。
已审硬件参考为 RM0440 Rev9、DS12288 Rev6 和 ES0430 Rev9。RM0440 定义固定消息 RAM、队列及取消证明,包括失败的 DAR 尝试。TEST.RX 位是只读引脚状态:配置读回仅检查拥有的 LBCK/TX 控制,必须允许 RX 为隐性电平。EFBI0 和不混用 dedicated/FIFO 发送规避了选定 FDCAN 勘误条件,不能据此宣称所有硅片限制均已验证。
公共合同测试、真实 provider 寄存器/事件测试及两个生成 factory 选择执行实际 C 实现。GoogleMock 观察外部 MMIO/IRQ 效果。模型覆盖外部 ACK/无 ACK、取消竞争、固定 RAM、只读状态、输入输出隔离及失败停止后的保留。生成测试使用同一个 RCC/TIM2 模型执行真实系统启动,再走正常 TOML/factory 路径,不手工设置 Platform 就绪状态。
实际执行与来源身份以交付证据为准。主机模型及任何单独记录的 ARM 链接都不能建立物理 ACK、错误注入、bus-off 恢复时间、晶振范围、吞吐、IRQ 延迟或 WCET 资格。正常模式在取得物理部署资格前,仍需已检查的收发器电路、安全电气连接及独立 HIL 证据。