20251115 - CAN 协议的总线访问规则和帧间隔
1️⃣ CAN 总线上的帧类型
CAN 协议中常见帧类型有:
| 帧类型 | 简述 |
|---|---|
| 数据帧(Data Frame) | 携带数据的正常帧 |
| 遥控帧(Remote Frame) | 请求其他节点发送数据的帧 |
| 错误帧(Error Frame) | 发送节点发现总线错误时广播,用于纠错 |
| 过载帧(Overload Frame) | 接收节点因处理不过来而请求延迟,暂时阻止总线发送 |
| 帧间隔(Interframe Space, IFS) | 两帧之间的间隔,保证总线同步与准备时间,恒为隐性 |
2️⃣ 帧的发送先后顺序规则
CAN 总线是多主机总线,遵循 非破坏性位仲裁和 总线访问规则:
- 数据帧或遥控帧可以直接发送
- 如果总线空闲,任意节点都可以开始发送数据帧或遥控帧
- 遥控帧是主动请求其他节点发送数据的特殊帧
- 如果发送期间出现错误 → 错误帧优先发送
- 错误帧立即打断当前传输
- 总线所有节点检测到错误,会发送 6~12 个显性位(Error Flag)
- 错误帧后,总线重新回到空闲状态,由节点重新仲裁发送
- 过载帧
- 当接收节点处理不过来时,在数据帧或遥控帧之后发送过载帧
- 阻止后续帧立即发送,保护接收节点
- 过载帧之后,总线再次空闲,再进行仲裁
- 帧间隔 IFS(Interframe Space)
- 两帧之间必须保持至少 3 位的隐性位(Standard IFS)
- IFS 保证节点准备好接收下一帧
- IFS 本质上不是“帧”,只是总线空闲时间段
3️⃣ 可视化顺序示意(常规场景)
[Data Frame / Remote Frame] → [IFS] → [Next Data/Remote Frame]
出现异常时顺序:
[Data/Remote Frame] → [Error Frame] → [IFS] → [重发Data/Remote Frame]
过载情况:
[Data/Remote Frame] → [Overload Frame] → [IFS] → [Next Data/Remote Frame]
4️⃣ 关键点总结
- 正常情况下:数据帧 / 遥控帧 → 帧间隔 → 下一帧
- 错误出现时:错误帧优先,打断当前帧,纠错后重新发送
- 接收端处理不过来:过载帧插入,延迟后续帧
- 仲裁机制保证总线无冲突:显性覆盖隐性,优先级 ID 小的帧先发
🔹 简单记忆口诀
正常帧送完 → 留点空(IFS)
出错马上打断 → 先发错误帧
节点忙不过来 → 插入过载帧
总线空闲 → 重新仲裁,下一帧开始
浙公网安备 33010602011771号