20251114 - CAN 的“位时序(Bit Timing)” 与 “CAN 报文(Frame)” 的关系是什么?

“线与(wired-AND)在 CAN 总线优先级仲裁机制中的应用”

🟦 一、什么是“线与(wired-AND)”

在 CAN 总线中,信号是差分形式,但逻辑上可以理解为:

  • dominant(显性) = 0
  • recessive(隐性) = 1

总线上的多个节点是 “线与” 关系(wired-AND):

只要有一个节点发送 dominant(0),总线就呈现 dominant(0);
只有所有节点都发送 recessive(1),总线才是 recessive(1)。

逻辑就像:

总线 = 节点1 AND 节点2 AND 节点3 AND ...

也就是:0 优先于 1

这就是 CAN 能实现“无冲突、无中心仲裁”的基础。

🟦 二、线与结构如何实现优先级仲裁?

CAN 的 ID 越 ,优先级越 ,原因正是:

仲裁位是显性=0、更高优先级。

我们来看一个实际例子。
假设有三个节点同时发报文:

节点 想发送的 ID(二进制) 优先级
A 0010 0001
B 0100 0010
C 0110 0100

三者从最高位开始发送:

▶ 步骤 1

第一位:

A: 0
B: 0
C: 0
总线 = 0(显性)
三者都继续

▶ 步骤 2

第二位:

A: 0
B: 1
C: 1
总线 = 0(因为A发显性)

这时,B 和 C 发现:

  • 自己发送的是 1(隐性)
  • 但是总线读到 0(显性)

说明 有更高优先级节点存在(优先级更高 ID 更小)

于是 B、C 自动停止发送,进入“被仲裁”状态,只剩 A 继续


🟦 三、为什么 CAN 无冲突?因为 wire-AND + “边发边读”

CAN 在仲裁阶段使用:

✔ 边发送边监听(bit monitoring)

✔ 显性压倒隐性(wire-AND)

因此:

  • 不会出现两个节点“撞车冲突”
  • 低优先级节点发现压不过 0,就乖乖停
  • 高优先级节点完全不会受到干扰,继续无损发送

这就是 无冲突总线(collision-free bus) 的关键。

🟦 四、总结一句话(最关键)

CAN 通过 wire-AND(显性 0 优先)实现多节点同时竞争时的无冲突仲裁,ID 越小、显性位越多的报文优先级越高。

posted @ 2025-11-15 14:28  zeku  阅读(64)  评论(0)    收藏  举报