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

CAN 的“位时序(Bit Timing)” 与 “CAN 报文(Frame)” 的关系是什么?一个报文内部是否包含多个位时序?

⭐ 结论先说

一个 CAN 报文包含很多个 CAN 位(bit)
每一个 bit 都按照“位时序(bit timing)”来传输。
所以,一个 CAN 报文内部一定包含多个“位时序周期”。

换句话说:

位时序决定“一个 bit 怎么发”
报文定义“bit 的排列结构”

两者是完全不同层级的概念。

⭐ 1. CAN 发送报文 = 按顺序发送很多个 bit

例如一个标准数据帧(不考虑 stuffing)包含的 bit 数量:

  • SOF:1 bit
  • Arbitration Field:12 bit
  • Control Field:6 bit
  • Data Field:0~64 bit
  • CRC:16 bit
  • ACK:2 bit
  • EOF:7 bit

总共:
最少 44 bit,最多 108 bit(含 8 字节数据)

也就是说:

一个报文需要几十到上百个 bit 来发送。

⭐ 2. 每一个 bit 都必须按“位时序”发送

“位时序”= 一个 bit 的时间结构。

一个位的时序由多个 Segment 组成:

Sync_Seg | Prop_Seg | Phase_Seg1 | Phase_Seg2

再由:

  • TQ(Time Quantum)时间单位构成
  • 总线速率由 TQ 的数量 × TQ 时间决定

例如:

  • TQ = 50 ns
  • 每个 bit = 16 个 TQ
  • 位时间 = 800 ns
  • 总线速率 = 1/800ns = 1 Mbps

这就叫:

位时序(bit timing)——定义“1 bit 要多长时间、分为几个段、每段干什么”

⭐ 3. 报文 = 按顺序排好的 bit 序列

CAN 报文规定了 bit 的内容:

SOF → Arbitration → Control → Data → CRC → ACK → EOF

位时序规定了 bit 的形状、同步、采样方式。

所以两者关系是:

层级 作用
位时序(bit timing) 定义“一个 bit 是怎么发送的”
报文(frame format) 定义“这些 bit 的顺序是什么”

⭐ 4. 一个报文里有多少“位时序周期”?

答案:

报文中每一个 bit 都有一个独立的位时序周期。

假设一个报文传输了 80 个 bit
→ 就有 80 个位时序周期。

每个 bit 都会进行:

  • 同步
  • 采样
  • 重同步(必要时)
  • 位填充检查
    等等。

⭐ 5. 为什么需要分开理解?

因为:

报文(Frame)关心的是“内容是什么?顺序是什么?”

例如:

  • 哪些字段?
  • DLC 是多少?
  • CRC 怎么算?

位时序(Bit Timing)关心的是“怎么在总线上物理传输?”

例如:

  • 波特率是多少?
  • 什么时候采样?
  • 节点之间如何同步?
  • 仲裁阶段如何保证显性覆盖隐性?

这两个概念完全不在一个层面上。

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