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)关心的是“怎么在总线上物理传输?”
例如:
- 波特率是多少?
- 什么时候采样?
- 节点之间如何同步?
- 仲裁阶段如何保证显性覆盖隐性?
这两个概念完全不在一个层面上。
浙公网安备 33010602011771号