通信基础(三)-一篇搞懂 CAN 2.0

📅 2026/8/6 3:01:22
通信基础(三)-一篇搞懂 CAN 2.0
如果你刚接触汽车电子一定会频繁听到一个词——CAN。它是现代汽车里最核心的通信总线没有之一。从发动机到仪表盘从刹车到空调车内几十个 ECU电子控制单元之间的对话几乎都走 CAN。但 CAN 到底是什么它怎么来的帧格式每个 bit 是什么意思为什么说ID 越小优先级越高这篇文章用大白话 图解一次讲透。PART 01CAN 是怎么来的故事要从 1980 年代的汽车工业说起。那时候汽车越来越电子化一辆车上塞进了越来越多的 ECU——发动机控制、变速箱、ABS、仪表盘、车门……每个 ECU 之间都要通信。问题来了当时用的是点对点线束每两个需要通信的 ECU 之间拉一根专用线。ECU 越多线束呈指数级爆炸——当时的痛点▸ 一辆高档车的线束总长可达数公里重量几十公斤▸ 线束又多又重又贵装配困难故障率高▸ 加一个新 ECU 就要改一堆线几乎不可扩展博世Bosch坐不住了。1983 年他们启动了一个项目目标是造一种可靠、低成本、可扩展的串行总线让所有 ECU 共享一条高速公路而不是各自修专用小路。这就是 CAN 的起点。接下来是一条清晰的时间线1983Bosch 着手研发由 Uwe Kiencke 团队启动目标减少线束、提升可靠性1986CAN 协议正式发布在 SAE 大会上首次公开确立多主 非破坏性仲裁机制1987首颗 CAN 芯片Intel 82526 ——第一颗 CAN 控制器芯片1991CAN 2.0 规范发布2.0A 标准 11 位 ID2.0B 扩展 29 位 ID1993ISO 11898 标准化高速 CAN 物理层国际标准最高 1Mbps2012→CAN FD 登场速率达 5~8Mbps、数据 64 字节向下兼容 CAN 2.0一句话总结CAN 诞生的使命就是消灭线束爆炸用两根差分线替代几十根专用线事实证明它做到了而且统治了汽车总线 30 年。PART 02CAN 到底是什么用一句话定义CANController Area Network控制器局域网是一种多主、广播式、基于消息 ID 的串行通信总线专为分布式实时控制而设计用两根差分线连接多个节点。新人容易晕的几个点拆开看多主结构任意节点都可主动发送无需主机轮询各节点地位平等消息广播不靠地址寻址所有节点都收靠 ID 决定是否处理⚡ID 即优先级仲裁段 ID 越小优先级越高碰撞时自动分胜负️差分抗扰CAN_H/CAN_L 两线差分传输抗共模干扰适合恶劣电磁环境新人的三个关键认知▸ CAN 是总线不是点对点——一条线上挂多个设备大家共享信道▸ CAN 传的是消息不是发给谁——用 ID 标识消息内容谁需要谁收▸ CAN 靠仲裁不靠主机调度——同时发也不冲突ID 小的赢典型应用汽车 ECU 间通信、工业自动化、医疗设备、船舶、航空电子、电梯控制……几乎所有需要多设备可靠互连的地方都能看到 CAN 的身影。· · ·PART 03CAN 的优缺点CAN 能统治汽车总线 30 年不是没原因的。先看它凭什么✓ CAN 的优势✓多主无中心任意节点主动发无单点故障✓非破坏性仲裁高优先级无损通过实时性有保障✓高可靠性5 种错误检测机制层层把关✓错误自动隔离故障节点超限后自动离线✓布线简洁仅两根差分线 两端 120Ω 电阻✓灵活可扩展新节点直接挂总线不改其他节点✓速率距离自适应1Mbps40m ~ 5kbps10km✓实时性好高优先级消息等待时间可计算✗ CAN 的局限✗带宽有限最高 1Mbps远低于以太网/CAN FD✗载荷太小单帧最多 8 字节大报文需分片✗无安全机制无加密、无认证易被注入/伪造✗总线负载约束建议负载率 ≤30%~70%✗调试复杂广播 仲裁故障定位需专业工具✗节点数受限受收发器驱动能力限制约 30~110 个怎么弥补这些局限▸ 带宽/载荷不足 → 升级CAN FD≤64 字节、≤8Mbps或 CAN XL、车载以太网▸ 安全缺失 → 叠加AUTOSAR SecOC/ CANcrypt或在网关处做隔离与认证▸ 负载约束 → 合理规划 ID 优先级、控制周期性报文、必要时分网段▸ 调试难 → 用CAN 分析仪抓包 DBC 文件解析信号· · ·PART 04CAN 的四种帧类型CAN 总线上跑的有四种信封数据帧 Data Frame最常用携带应用数据。RTR0含 SOF→仲裁→控制→数据→CRC→ACK→EOF远程帧 Remote Frame请求某 ID 节点发送数据。RTR1无数据段现已较少使用⚠️错误帧 Error Frame检测到错误即发送打破当前帧触发重发。总线的异常自保⏸️过载帧 Overload Frame接收方来不及处理时请求延迟。现代控制器极少产生记忆要点数据帧是主角RTR0远程帧是请求数据的信号RTR1错误帧和过载帧是总线的异常自保机制。帧与帧之间用 3 个隐性 bitIFS分隔。· · ·PART 05数据帧长什么样bit 级解析这是 CAN 协议的核心。一个标准数据帧从左到右依次是 7 个字段SOF1 bit仲裁段12 bit控制段6 bit数据段0~64 bitCRC 段16 bitACK2 bitEOF7 bit逐字段拆开看字段bit 数含义SOF1帧起始1 个显性 0同步所有节点仲裁段12ID[10:0](11位) 决定优先级 RTR(1位) 帧类型控制段6IDE 标识标准/扩展 r0 保留 DLC(4位) 指定数据长度数据段0~64有效载荷MSB 先发DLC 决定字节数0~8 字节CRC 段1615 位 CRC 序列 1 位隐性界定符ACK 段2发送方发隐性正确接收方回显性 0 应答EOF77 个连续隐性 1标志帧结束合计标准数据帧47~111 bit不含数据为 47 bit含 8 字节数据为 111 bit另有 IFS 3 bit 帧间间隔。标准帧 vs 扩展帧CAN 2.0 分两个版本2.0A标准帧11 位 ID和2.0B扩展帧29 位 ID。怎么区分看IDE 位对比项标准帧 CAN 2.0A扩展帧 CAN 2.0BID 位数11 bit29 bit仲裁段 bit 数12 (ID11RTR1)32 (ID11SRRIDEID18RTR)ID 数量2,048 个约 5.37 亿个IDE 位0标准帧1扩展帧帧长度0 数据47 bit67 bit典型用途乘用车、通用控制商用车 J1939、复杂网络选型建议▸ 节点少、ID 够用 → 优先标准帧▸ 商用车/工程机械 → 用扩展帧J1939▸ 现代 CAN 控制器普遍兼容两种格式新设计一律选2.0B 兼容控制器· · ·PART 06仲裁机制CAN 的灵魂如果说帧格式是 CAN 的骨架那仲裁机制就是 CAN 的灵魂。问题场景多个节点同时往总线上发数据怎么办传统方案是先冲突再退避重传如以太网 CSMA/CD但 CAN 的做法更优雅——发送的同时逐 bit 比对高优先级无损通过低优先级自动退出。原理所有发送节点从 SOF 起逐 bit 输出 ID同时回读总线。显性 0 覆盖隐性 1线与逻辑若某节点发出 1 却读到 0说明有更高优先级在发 → 立即仲裁失败退出胜者无损继续。看一个具体例子。假设节点 A 的 ID 0x080节点 B 的 ID 0x100同时开始发送节点A (0x080)00001✓总线实际00001 A节点B (0x100)0001✕退出仲裁点在 ID8 位A 发 0B 发 1 → 总线为 0 → B 读到自己发 1 却读到 0 → B 仲裁失败转为接收为什么能做到非破坏▸电平特性显性 0 是主动驱动隐性 1 是被动释放▸线与逻辑只要有一个节点发 0总线就是 0▸ 因此高优先级的 0不会被低优先级的 1盖掉▸ 胜者全程没察觉有竞争数据零损耗工程启示▸ 把安全/实时关键消息分配小 ID如制动 0x080▸ 把非关键消息分配大 ID如车身 0x400▸ 避免大量同优先级报文否则反复仲裁致延迟▸ 远程帧也参与仲裁慎用以免干扰高优先级· · ·PART 07靠什么保证可靠靠什么传信号5 种错误检测机制CRC 校验15 位 CRC 界定符检测数据段错误位填充连续 5 个同电平 bit 后插入反相 bit保证跳变便于同步✅ACK 应答接收方正确则回显性 bit发送方检测到无 ACK 即报错帧格式校验EOF、界定符等固定格式不符则判格式错误️位监控发送方回读总线发现与发送值不符即报位错误错误状态机Active → Passive → Bus-off故障节点自动离线电平标准ISO 11898-2 高速 CANCAN 用两根线CAN_H和CAN_L传差分信号只有两种状态隐性 Recessive1CAN_H ≈ 2.5VCAN_L ≈ 2.5V差压 ≈ 0V两线电压近相等显性 Dominant0CAN_H ≈ 3.5VCAN_L ≈ 1.5V差压 ≈ 2.0VCAN_H 升、CAN_L 降CAN 抗干扰的物理基础▸逻辑值显性 0主动驱动隐性 1被动释放▸终端电阻总线两端各 120Ω匹配特性阻抗消除信号反射▸共模范围-2V ~ 7V抗共模干扰强▸ 差分传输 线与逻辑 仲裁 抗扰 一体两面速率与距离波特率最大总线长度典型应用场景1 Mbps约 40 m车内高速动力总线发动机/变速器500 kbps约 100 m车身控制、底盘总线250 kbps约 250 m商用车、工程机械125 kbps约 500 m低速容错车身网50 kbps约 1 km农业机械、长线束5 kbps约 10 km特殊远距离遥测速率 × 距离 ≈ 常数这是 CAN 的物理约束· · ·PART 08CAN 2.0 vs CAN FD升级了什么CAN 2.0 虽好但 1Mbps 和 8 字节的限制在 ADAS、大屏、OTA 等场景下越来越不够用。2012 年 Bosch 推出了CAN FDFlexible Data-rate在完全兼容 CAN 2.0 的前提下做了三大升级对比项CAN 2.0CAN FD数据段速率≤1 Mbps可达 5~8 Mbps数据长度0~8 字节0~64 字节CRC15 bit17 bit≤16B/ 21 bit16B位填充有数据段固定长度减少填充典型场景传统车身/动力控制ADAS、网关、诊断大报文为什么不直接换以太网因为 CAN 的确定性实时性、差分抗扰、布线简单是以太网比不了的。CAN FD 在兼容前提下提速成本极低是以太网无法替代的最后一公里。· · ·PART 09一页纸速查表把 CAN 2.0 的核心参数浓缩在一张表里建议收藏项目核心参数说明全称Controller Area Network控制器局域网提出方Bosch博世1983 研发1986 发布标准ISO 11898 系列-1 链路层 / -2/-3 物理层通信方式多主、广播、半双工基于消息 ID非地址寻址介质访问CSMA/CDAMP载波侦听 非破坏性仲裁信号差分两线 CAN_H/CAN_L显性 0 / 隐性 1速率≤1 Mbps速率×距离≈常数ID 位数11 bit / 29 bitIDE 位区分标准/扩展数据长度0~8 字节DLC 4 bit 指定错误检测5 种机制CRC 位填充 ACK 格式 位监控节点状态Active / Passive / Bus-off错误计数三态机终端电阻120Ω × 2两端匹配阻抗消反射四种帧数据/远程/错误/过载数据帧为主角PART 10写在最后回到最初的问题——什么是 CAN一句话CAN 用 ID 仲裁 差分传输 多重校验换来了 低线束成本 高实时 高可靠。这就是它统治汽车总线 30 年的底层逻辑。新人学习路径建议▸第一步理解多主广播 ID 仲裁——这是 CAN 区别于其他总线的本质▸第二步记住帧结构——SOF → 仲裁 → 控制 → 数据 → CRC → ACK → EOF▸第三步查电平与速率——显性 0 / 隐性 11Mbps40m ~ 5kbps10km▸第四步动手实操——用 CAN 分析仪抓包配合 DBC 文件解析信号— END —创造不易欢迎关注——公众——号:飞翔硬件杂谈。不定时分享自己的学习心得