YYMBOT 5IO开发板系统优化
GitHub ↗

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% 已测实。

证据:30 分钟压测、补充探测。短测通过不抵消长测失败。

1M 是否已经完全合格

普通 CAN 1M 已做物理收发。原厂驱动出现过一帧缺失、一帧重复;改用 RK3588 专用回移驱动后,有完整 24,002 帧收齐的记录,但勘误6相关恢复计数仍增加,另一次复测也保留失败。因此不能标成普通 1M 零错误验收完成。

参考 原厂失败记录 与 回移驱动勘误6记录。

如何复现和继续定位

  1. 按 接线说明 核对两路独立控制器、H/L/GND、实装终端及线束,电源脚不对插。
  2. 停止业务,先记录接口配置和错误计数,再选择默认 1M 或隔离台架 FD 1M/5M profile,重启后核对真实绑定与时序。
  3. 单独运行物理验证,保存完整 JSON。比较计数增量,同时检查逐帧数据,任何一项异常都保留为失败。
  4. 高速问题需补齐实装收发器型号、线长、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。

输入关键词搜索全文;正文无需 JavaScript 也可阅读。