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 FD 选择一个控制器接口面和一个私有所有者

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 0x02020B02

数据阶段

BRP=1、SEG1=9、SEG2=2、SJW=2;2 Mbit/s,采样点 83.33%;DBTP 0x00000811

正常模式

启用 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,并设置 NX_CAN_FD_TIMESTAMP_UNAVAILABLE;acquired_us 为单调采集时间

中断

冷态预留 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 的元素,结束于 0x350 之前

初始化仅清空当前实例区域,不会复位活跃 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:当前请求生命周期;取消和隔离继续保留请求,先完成物理排空才能发布 SETTLED

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 证据。