EXPLAINER / SVG ANIMATION
CAN 버스 중재 원리
여러 노드가 동시에 보낼 때 ID 비트 비교와 우성/열성 레벨로 우선순위가 정해지는 과정을 단계별로 보여줍니다.
INTERACTIVE SIMULATION / CanArbitration
세 표준 프레임의 실제 11비트 ID 비트열을 bit10부터 보여줍니다. 열성 1을 보내고 우성 0을 읽은 노드는 즉시 탈락하며, 가장 작은 ID가 이깁니다. ID 필드만 다룹니다.
| 노드 | bit 10 | bit 9 | bit 8 | bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 | 상태 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0x120 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | — |
| 0x180 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | — |
| 0x3A0 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | — |
우성 0 / 열성 1
원리 분석
아래 본문은 현재 중국어 전체 버전만 제공됩니다. 화면·제목·설명·FAQ는 선택한 언어로 표시됩니다.
为什么需要仲裁
CAN 是多主总线:任何节点都可以在总线空闲时开始发送。如果两个节点同时开口,总线并不会”撞车丢包”——物理层把总线实现为”线与”:
- 显性位(dominant, 0):任一节点拉低,总线即为低。
- 隐性位(recessive, 1):所有节点都释放,总线才为高。
因此发送隐性位却读回显性位的节点,立刻知道自己输了,于是停止发送、转为接收。没有任何位被破坏,胜者无需重发——这就是 CAN 的非破坏性仲裁。
关键结论
- 仲裁在仲裁场(标准帧为 11 位 ID + RTR,扩展帧还涉及 SRR/IDE)进行,进入数据场后只剩一个发送者。
- ID 数值越小,优先级越高:ID 从最高位开始发送,越早出现显性 0 的一方获胜。
- 输掉的节点自动转为接收,并在总线空闲后重试,报文不会丢。
- 标准帧(11 位 ID)与扩展帧(29 位 ID)可以共存:标准帧的 IDE 位为显性,因此同 ID 前缀时标准帧优先。
- 数据帧的 RTR 为显性 0、远程帧为隐性 1,所以 ID 相同时数据帧优先。
动手验证
动画里的位流是由三个标准帧 ID 的真实二进制生成的,从左到右是 bit10 → bit0:
0x120=00100100000,0x180=00110000000,0x3A0=01110100000。- 第 1 位(bit10)三者都是 0,不分胜负。
- 第 2 位(bit9):
0x3A0发隐性 1,另两个节点发显性 0,总线读到 0,0x3A0退出。 - 第 4 位(bit7):
0x180发 1、0x120发 0,0x180退出,0x120赢得仲裁。
理解了仲裁,再看 CAN 位定时计算器:每个位时间的采样点位于 SYNC_SEG + TSEG1 结束处,节点只有在采样点读到总线电平才能判断自己是否输掉仲裁,因此位定时参数要与网络传播延迟匹配。
APPLY IT / TOOLS