20251115 - CAN 协议的总线访问规则和帧间隔

1️⃣ CAN 总线上的帧类型

CAN 协议中常见帧类型有:

帧类型 简述
数据帧(Data Frame) 携带数据的正常帧
遥控帧(Remote Frame) 请求其他节点发送数据的帧
错误帧(Error Frame) 发送节点发现总线错误时广播,用于纠错
过载帧(Overload Frame) 接收节点因处理不过来而请求延迟,暂时阻止总线发送
帧间隔(Interframe Space, IFS) 两帧之间的间隔,保证总线同步与准备时间,恒为隐性

2️⃣ 帧的发送先后顺序规则

CAN 总线是多主机总线,遵循 非破坏性位仲裁总线访问规则

  1. 数据帧或遥控帧可以直接发送
    • 如果总线空闲,任意节点都可以开始发送数据帧或遥控帧
    • 遥控帧是主动请求其他节点发送数据的特殊帧
  2. 如果发送期间出现错误错误帧优先发送
    • 错误帧立即打断当前传输
    • 总线所有节点检测到错误,会发送 6~12 个显性位(Error Flag)
    • 错误帧后,总线重新回到空闲状态,由节点重新仲裁发送
  3. 过载帧
    • 当接收节点处理不过来时,在数据帧或遥控帧之后发送过载帧
    • 阻止后续帧立即发送,保护接收节点
    • 过载帧之后,总线再次空闲,再进行仲裁
  4. 帧间隔 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️⃣ 关键点总结

  1. 正常情况下:数据帧 / 遥控帧 → 帧间隔 → 下一帧
  2. 错误出现时:错误帧优先,打断当前帧,纠错后重新发送
  3. 接收端处理不过来过载帧插入,延迟后续帧
  4. 仲裁机制保证总线无冲突:显性覆盖隐性,优先级 ID 小的帧先发

🔹 简单记忆口诀

正常帧送完 → 留点空(IFS)
出错马上打断 → 先发错误帧
节点忙不过来 → 插入过载帧
总线空闲 → 重新仲裁,下一帧开始

posted @ 2025-11-15 23:11  zeku  阅读(68)  评论(0)    收藏  举报