EXPLAINER / SVG ANIMATION

CAN 버스 중재 원리

여러 노드가 동시에 보낼 때 ID 비트 비교와 우성/열성 레벨로 우선순위가 정해지는 과정을 단계별로 보여줍니다.

재생 · 일시정지 · 단계 · 다시재생 자동차 전자 SVG
INTERACTIVE SIMULATION / CanArbitration

세 표준 프레임의 실제 11비트 ID 비트열을 bit10부터 보여줍니다. 열성 1을 보내고 우성 0을 읽은 노드는 즉시 탈락하며, 가장 작은 ID가 이깁니다. ID 필드만 다룹니다.

노드 bit 10bit 9bit 8bit 7bit 6bit 5bit 4bit 3bit 2bit 1bit 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 的非破坏性仲裁。

关键结论

  1. 仲裁在仲裁场(标准帧为 11 位 ID + RTR,扩展帧还涉及 SRR/IDE)进行,进入数据场后只剩一个发送者。
  2. ID 数值越小,优先级越高:ID 从最高位开始发送,越早出现显性 0 的一方获胜。
  3. 输掉的节点自动转为接收,并在总线空闲后重试,报文不会丢。
  4. 标准帧(11 位 ID)与扩展帧(29 位 ID)可以共存:标准帧的 IDE 位为显性,因此同 ID 前缀时标准帧优先。
  5. 数据帧的 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

관련 도구