导读入门三篇讲完了“测什么、怎么连、分几域”还顺手看了工具链。从这篇起正式进入协议深水区——阶段二 · CAN/LIN 总线。本篇全部依据《车载通信协议入门培训》课件整理把 CAN 的物理层、帧结构、最精髓的“非破坏性仲裁”以及课件里讲得很透的错误帧、错误状态机、过载帧、报文发送类型、波特率与采样点一次讲清。吃透这篇CAN 测试就有了 root。一、CAN 是什么为什么非它不可CANController Area Network是 1986 年博世为汽车发明的串行通信协议后来被 standardized 为ISO 11898。它的几个关键标签多主Multi-Master总线上任何节点都能主动发没有“主机”差分Differential用一对双绞线传信号抗干扰极强广播 报文滤波发的是“ID 数据”谁关心谁收强错误检测与容错有错误帧、自动重发、错误计数器与离线Bus-Off保护。对比一下你熟悉的UART 是点对点、I2C/SPI 有主从且距离短而 CAN 专为复杂电磁环境里多节点可靠通信而生——这正是车载场景的刚需。课件里一句话点得很准“现代汽车是一个高度集成的电子系统发展到今天CAN 总线依然是网络通信的基石。一辆中高端汽车通常包含多条 CAN 总线连接超过 50 个 ECU。”回顾前面“五大域”里动力域、底盘域、车身域都跑 CAN/CAN FD所以它必须第一个吃透。二、物理层差分信号与终端电阻重点CAN 用一对双绞线CAN_H / CAN_L传输只有两种电平状态状态逻辑值CAN_HCAN_L说明隐性 Recessive1≈ 2.5 V≈ 2.5 V总线释放靠终端电阻上拉显性 Dominant0≈ 3.5 V≈ 1.5 V节点主动驱动覆盖隐性2.1 线与逻辑Wired-AND这是 CAN 最反直觉也最关键的一点显性0可以覆盖隐性1。只要任意一个节点驱动总线为“显性 0”整条总线就是 0只有所有节点都发隐性 1时总线才是 1。这叫“线与”——像多个开关并联接地一个按下就导通。靠它才能实现后面的“非破坏性仲裁”。2.2 终端电阻的作用课件专门强调终端电阻的作用是“匹配阻抗消除信号反射”。总线两端各接一个120 Ω 终端电阻当信号到达线缆末端时阻抗匹配让能量被吸收而不是反射回来叠加避免波形振铃导致误采样。不接或只接一端高速通信时反射会让眼图闭合、误码率飙升。经典 CAN 最高1 Mbps约 40 m 内速率越高允许的总线距离越短差分传输让共模干扰如电机点火噪声被两端相减抵消抗干扰能力是单端信号比不了的。三、数据帧结构重点CAN 有标准帧11 位 ID和扩展帧29 位 ID。标准帧结构紧凑是最基础、应用最广泛的格式扩展帧的仲裁场含基本 ID 扩展 ID共 29 位能支持海量节点与复杂报文类型是构建大型 CAN 网络的基础。入门以标准数据帧为主段作用SOF 帧起始1 个显性位标志一帧开始仲裁段11 位 ID RTR远程帧标志ID 决定优先级控制段IDE标准/扩展 DLC数据长度 0~8 字节数据段0~8 字节有效数据CAN FD 可到 64 字节CRC 段15 位校验 界定符保证数据完整ACK 段接收节点回确认EOF 帧结束7 个隐性位位填充Bit Stuffing发送方在连续 5 个相同位之后强制插入 1 个相反位。接收方收到后自动剔除。目的保证总线上有足够的跳变沿让所有节点能持续同步、也能检测“填充错误”。测试视角DLC 是否越界、实际数据字节数是否与 DBC 定义一致、CRC 是否正确、位填充是否合规——这些都是 CAN 一致性测试的高频检查点。四、非破坏性仲裁核心多主同时想发怎么办CAN 用非破坏性仲裁优雅解决所有节点同时发仲裁段从 ID 最高位开始比发“隐性 1”却读到“显性 0”的节点立刻知道自己优先级低主动退出发送不发送剩余位最高优先级ID 最小的节点无损赢得总线帧不被破坏退出的节点等总线空闲后自动重发。因为靠“线与逻辑”高优先级节点全程不知道有人在让它的帧一个位都没被破坏——所以叫“非破坏性”。对比以太网 CSMA/CD冲突后双方都停、都重发是“破坏性”的浪费带宽。CAN 在 arbitration 阶段就分出了胜负更高效、更确定。测试视角仲裁失败节点的退让行为是否合理两个节点配了相同 ID会怎样优先级反转低 ID 一直霸占总线、高 ID 饿死如何验证——这些都是 CAN 测试工程师的看家题。五、错误检测与错误帧重点CAN 的可靠性不是靠“祈祷”而是靠一套硬件级本能反应。课件把这部分讲得很透这里完整梳理。5.1 五种错误只要节点检测到以下任意一种错误底层 CAN 控制器就会自动且立即发送错误帧完全由芯片状态机完成属于硬件级“本能反应”错误类型触发场景课件案例位错误 (Bit Error)节点发送的同时回读总线发出与读回的电平不一致仲裁段和 ACK 段例外不判定位错误填充错误 (Stuff Error)连续 5 个相同位后未插入相反位或错误插入了相反位CRC 错误 (CRC Error)接收方自算 CRC 与发送方附带的 CRC 不一致格式错误 (Form Error)帧中固定必须为隐性位的保留位被检测为显性ACK 错误 (ACK Error)发送方在 ACK 槽没读到显性位说明没人确认5.2 错误帧长什么样错误帧 错误标志 错误界定符主动错误标志6 个连续的显性位“000000”被动错误标志6 个连续的隐性位“111111”之后是 8 个连续的隐性位错误界定符用于隔离。注意错误帧主体就是“6 个连续显/隐性位 8 个连续隐性位”它本身会违反位填充规则——但协议规定错误帧豁免填充检查所以不会自己触发填充错误。5.3 双 8 位错误计数器TEC 与 RECCAN 用两个计数器实现“精准识别与网络防护”TECTransmit Error Counter发送错误计数记录发送侧错误位错误、填充错误等随发送失败累加RECReceive Error Counter接收错误计数统计接收侧异常格式错误、ACK 错误等。核心思想惩罚错误奖励正确。场景TECREC发送节点检测到错误8重罚因影响全网—接收节点检测到错误—1轻罚严重位错误—8正常发送/接收一帧且无错−1最小 0若 1REC≤127 则 −1REC 为 0 或 127 不变化5.4 错误状态机主动 → 被动 → Bus-Off节点依据 TEC/REC 数值进入三级状态构成分布式容错体系主动错误状态 (Error Active)TEC 128 且 REC 128健康态。检测到错误会主动发“主动错误标志”正常参与通信。被动错误状态 (Error Passive)TEC ≥ 128或REC ≥ 128亚健态。只能发“被动错误标志”且发送后需等待额外延时避免干扰总线。总线关闭 (Bus-Off)TEC 255时触发节点被逻辑“踢出”网络不能收发任何报文需复位或计数器清零才能恢复。Bus-Off 智能恢复硬件内置机制检测到128 次连续的 11 个隐性位后自动清零错误计数器恢复至主动错误状态确保网络自愈。软件也可实施快恢复 / 延迟慢恢复策略防止故障节点反复震荡。测试视角故意注入位错误 / 填充错误观察节点是否按 TEC/REC 规则迁移状态强制触发 Bus-Off验证快/慢恢复策略是否符合需求——这是动力域、底盘域 CAN 测试的硬指标。六、过载帧与报文发送类型6.1 过载帧过载帧用于处理节点“来不及处理”的过载状态。它的标志同样是连续 6 个显性位——课件特意留了个思考题“为什么过载帧连续 6 个位的显性电平不会报错”答案是过载帧标志本身就被协议定义为 6 个显性位属于豁免帧不参与填充错误判定和错误帧同理。6.2 报文发送类型整车 CAN 报文按触发方式分为四类测试时要分别验证固定周期型按固定周期发送如车速 10 ms 一帧事件周期型有事件才发但限定最大周期事件型的上限兜底使能周期型需先被使能再按周期发送事件型仅事件触发时发送无周期。七、波特率与采样点波特率单位是比特每秒bps决定每位持续多长时间仲裁段靠它竞争总线控制权。采样点在一个比特时间内进行信号采样的位置。课件给的例子“波特率 5 Mbps、采样点 75%”含义是数据以每秒 500 万比特传输在每个比特时间的 75% 处采样判定该位是 0 还是 1。实战经验采样点通常设在比特时间的70%~80%常见 75%。同一总线上的节点采样点必须一致否则一位还没采到就被下一位冲掉会大面积丢帧、错帧。这也是为什么 CAN 一致性测试必测“采样点”。八、CAN 应用场景现代汽车是高度集成的电子系统CAN 至今仍是网络基石。一辆中高端车通常包含多条 CAN 总线动力 CAN、底盘 CAN、车身 CAN 等连接超过 50 个 ECU。其高可靠性、实时性和多主特性使其在动力总成、底盘控制、车身电子等对安全性和确定性要求极高的领域依然是不可替代的通信骨干。