CAN 的速率与验收
本页依据 2026-10-25 的外部对插测试整理,2026-10-26 更新。完整参数、接线及命令见 接口操作说明。
这个接口是普通 CAN 还是 CAN FD
RK3588 CAN 控制器和本项目回移驱动支持 CAN FD,也可以关闭 FD,运行普通 CAN。整机是否能在指定速率可靠工作,还取决于实装收发器、时钟、线束、终端和驱动。当前默认是 普通 CAN 1M,FD 关闭。
| 写法 | 实际含义 | 本项目状态 |
|---|---|---|
| 500k | 每秒 500,000 bit,旧配置值 | 不是硬件上限 |
| 普通 CAN 1M | 普通帧、仲裁和数据同速 | 已实收实发;零错误验收尚未完成 |
| CAN FD 1M/5M + BRS | 仲裁 1M,数据阶段切换至 5M | 可配置并收发;长期严格验收失败 |
5M 不是整帧都以 5M 传输,也不是应用每秒必定收到 5Mbit 有效数据。帧头、仲裁、CRC、应答、帧间隔及填充位都占时间。经典 CAN 每帧最多 8 字节,CAN FD 最多 64 字节;标准帧/扩展帧与经典/FD 是两个不同维度。
协议背景参考 Linux SocketCAN 文档。本机实际结论以仓库测试证据为准。
5M 跑满后究竟怎样
30 分钟外部对插持续施压,两个物理控制器通过总线互收,关闭内部回环、不用本地 echo 冒充对端。逐帧比对序号、ID、格式、长度和内容。
| 阶段 | 时长 | 收发结果 | 严格结论 |
|---|---|---|---|
| 标准 ID、64 字节,A→B | 600 秒 | 3,998,643 帧全部收到,错误无增量 | 该阶段通过 |
| 标准 ID、64 字节,B→A | 600 秒 | 3,993,347 帧全部收到,错误无增量 | 该阶段通过 |
| 扩展 ID,两方向分别测试 | 180 秒 + 180 秒 | 936,786 / 912,146 帧全部收到;均有总线错误 | 失败 |
| 混合双向 | 240 秒 | 2,486,022 帧全部收到;总线和 RX FIFO 异常 | 失败 |
合计 12,386,944 帧收齐,没有缺失、重复、内容错误、乱序或接收 socket 丢弃;但每口 bus_error 累计 +6,一个控制器出现 RX FIFO 异常。总线错误可能发生恢复/重试,应用最终收到数据不代表链路没有异常。
发送端遇到 EAGAIN/ENOBUFS 的 17,028,428 次尝试均保留同一序号重试,成功入队才计入已发,不能把这些尝试直接当作丢帧。标准 ID 阶段有效载荷约 3.41Mbps,软件估算线占用约 99.33%;没有独立总线分析仪证据,不能宣称物理线速 100% 已测实。
1M 是否已经完全合格
普通 CAN 1M 已做物理收发。原厂驱动出现过一帧缺失、一帧重复;改用 RK3588 专用回移驱动后,有完整 24,002 帧收齐的记录,但勘误6相关恢复计数仍增加,另一次复测也保留失败。因此不能标成普通 1M 零错误验收完成。
如何复现和继续定位
- 按 接线说明 核对两路独立控制器、H/L/GND、实装终端及线束,电源脚不对插。
- 停止业务,先记录接口配置和错误计数,再选择默认 1M 或隔离台架 FD 1M/5M profile,重启后核对真实绑定与时序。
- 单独运行物理验证,保存完整 JSON。比较计数增量,同时检查逐帧数据,任何一项异常都保留为失败。
- 高速问题需补齐实装收发器型号、线长、H-L 电阻和示波器差分波形,再区分硬件、时序和勘误恢复原因。
# 只读检查,不发帧
ip -details -statistics link show can0
ip -details -statistics link show can1
# 正确接线、停止业务后才运行
sudo ./board/verify.sh --physical
驱动是不是我们从零写的
驱动主体来自 Linux 上游固定提交 5b0764a53235d3c77e1ed674e836e1b3fe1a4b1f。本项目做 Linux 6.1 API 回移、RK3588/BSP 适配、模块隔离及实机测试;是在已有开源驱动上适配,不是从零实现 CAN 协议,也不是厂商提供的现成 6.1 二进制。
模块须用目标 BSP 的头文件、配置和 Module.symvers 现场编译。版本号同为 6.1.172 不保证 ABI 一样。来源、版权及补丁范围见 THIRD_PARTY 和 PROVENANCE。
验证范围
这是同一 SoC 两个物理 CAN 控制器的有限台架结果。没有完成独立多节点仲裁、长线、EMC、温度、跨天寿命或整机最高物理速率证明。5M 保留实验入口,默认恢复普通 1M。