2. CAN总线基础
在CAN节点量产测试与一致性验证中,所有测试项最终都会落到“物理层是否可靠、链路层是否合规、帧格式是否正确、仲裁是否可预期、错误处理是否收敛”这五个问题上。理解CAN协议的分层结构,是后续编写测试脚本、分析波形、定位一致性偏差的基础。
一、物理层:差分信号与终端匹配
CAN总线物理层采用差分传输,CAN_H与CAN_L两根信号线在显性位(Dominant,逻辑0)时被驱动到约2.5V以上的压差,隐性位(Recessive,逻辑1)时压差接近0V。接收端通过比较两线压差判断总线电平,因此共模干扰、地偏移会被大幅抑制。
物理层的关键参数包括:终端电阻、总线长度、节点数量、线束拓扑。标准高速CAN要求在总线两端各放置一个120Ω终端电阻,并联后等效60Ω。量产测试中常用万用表或LCR表测量CAN_H与CAN_L之间的直流电阻,正常值应在55Ω~65Ω之间;若测得约120Ω,说明只有一端终端电阻有效;若测得约40Ω,说明存在多余终端。
二、数据链路层:帧格式与位填充
CAN数据链路层定义了帧的组成、位定时、同步、仲裁、错误检测与故障界定。以标准帧(CAN 2.0A)为例,一帧由帧起始、仲裁段、控制段、数据段、CRC段、ACK段和帧结束组成。扩展帧(CAN 2.0B)在仲裁段中增加了18位扩展ID,使标识符达到29位。
数据链路层还规定了位填充规则:在帧起始到CRC序列之间,连续出现5个相同极性位后,发送器必须插入1个相反极性位;接收器在检测到5个相同位后自动删除后续的填充位。位填充保证了接收端能够持续从跳变沿恢复位定时,但也意味着实际总线上的位数会多于理论位数。
标准数据帧结构(CAN 2.0A):
SOF | 11位ID | RTR | IDE | r0 | DLC | 0~8字节数据 | CRC(15+1) | ACK | EOF(7位)
扩展数据帧结构(CAN 2.0B):
SOF | 11位基本ID | SRR | IDE | 18位扩展ID | RTR | r1 | r0 | DLC | 数据 | CRC | ACK | EOF
量产一致性测试中,常通过CAN分析仪抓取报文,核对DLC与实际数据长度是否一致、IDE位是否正确、CRC是否由硬件自动生成。若节点发送的帧在示波器上出现固定位置错误,往往与位定时配置或晶振偏差有关。
三、仲裁机制:非破坏性逐位仲裁
CAN采用载波监听多路访问/冲突检测(CSMA/CD)与逐位仲裁相结合的方式。当多个节点同时发送时,每个节点在发送每一位的同时回读总线电平。若某节点发送隐性位(1)而回读为显性位(0),说明有更高优先级节点正在发送,该节点立即退出仲裁,转为接收状态,且不会破坏已获胜节点的报文。
仲裁的优先级由标识符决定:ID数值越小,优先级越高。标准帧的RTR位用于区分数据帧与远程帧,数据帧的RTR为显性,远程帧的RTR为隐性,因此相同ID下数据帧优先于远程帧。扩展帧中SRR为隐性、IDE为隐性,标准帧IDE为显性,因此相同基本ID下标准帧优先于扩展帧。
四、错误处理:错误类型与故障界定
CAN节点通过发送错误计数器(TEC)和接收错误计数器(REC)实现故障界定。每个节点维护两个计数器,并根据错误类型增减。错误类型包括:位错误、填充错误、CRC错误、格式错误和ACK错误。
| 错误类型 | 检测方 | 典型原因 | 计数器影响 |
|---|---|---|---|
| 位错误 | 发送方 | 回读电平与发送不一致 | TEC +8 |
| 填充错误 | 收发双方 | 连续6个相同极性位 | 接收方 REC +1 |
| CRC错误 | 接收方 | 数据或ID传输受扰 | REC +1 |
| 格式错误 | 接收方 | 固定格式位出现非法电平 | REC +1 |
| ACK错误 | 发送方 | 无节点应答 | TEC +8 |
当TEC或REC超过127时,节点进入“错误被动”状态,发送的帧中错误标志由主动错误标志(6个显性位)变为被动错误标志(6个隐性位),且必须等待额外的暂停传输时间。当TEC超过255时,节点进入“总线关闭”状态,自动脱离总线,不再发送或接收,直到检测到128次连续11个隐性位后才可恢复。
五、量产测试中的典型场景与误区
场景一:某节点在整车上偶发丢帧。用示波器抓取CAN_H/CAN_L波形,发现显性电平只有1.8V,低于标准要求。进一步检查发现该节点收发器供电为3.3V且未加隔离,导致驱动能力不足。更换为5V供电收发器后问题消失。
场景二:产线EOL测试中,多个节点同时上电,仲裁频繁失败。分析发现所有节点默认发送相同ID的报文,且发送周期一致,导致持续冲突。解决方案是给每个节点分配唯一ID,或在测试工装中错开发送时序。
常见误区包括:认为“CAN总线只要接上就能通信”,忽略终端电阻和共模电压;认为“ID越小优先级越高”只适用于标准帧,忽略扩展帧的SRR/IDE位影响;认为“错误帧只是干扰”,忽略错误计数器累积会导致节点离线。在一致性测试中,应把物理层参数、位定时、帧格式、仲裁行为和错误计数器状态全部纳入检查清单。
量产一致性检查清单(CAN基础部分):
[ ] 终端电阻:CAN_H-CAN_L 直流电阻 55~65Ω
[ ] 共模电压:CAN_H/CAN_L 对地电压在 1.5~3.5V
[ ] 波特率:与总线配置一致,误差 < 0.5%
[ ] 采样点:推荐 75%~87.5%
[ ] 帧格式:标准帧/扩展帧与DBC一致
[ ] DLC:与实际数据长度一致
[ ] 仲裁:多节点并发时无持续冲突
[ ] 错误计数器:TEC/REC 在正常范围内
[ ] 总线关闭恢复:128次11隐性位后可恢复