2. CAN总线协议:CAN2.0A/B协议帧结构
CAN总线协议是汽车电子系统通信的“语言规则”。CAN 2.0规范定义了四种基本帧类型和一种帧间隔结构。理解这些帧结构是故障定位的基础——当总线出现错误帧风暴或节点丢失时,工程师需要从帧层面分析问题根源。
2.1 帧类型总览
CAN 2.0A(标准帧)与CAN 2.0B(扩展帧)的主要区别在于标识符长度。下表对比了四种帧类型的核心用途:
| 帧类型 | 英文名称 | 主要用途 | 触发方式 |
|---|---|---|---|
| 数据帧 | Data Frame | 发送节点向总线传输数据 | 节点自主发送 |
| 远程帧 | Remote Frame | 请求其他节点发送指定ID的数据 | 节点主动请求 |
| 错误帧 | Error Frame | 检测到总线错误时通知所有节点 | 硬件自动触发 |
| 过载帧 | Overload Frame | 节点接收过载时请求延迟发送 | 接收节点触发 |
| 帧间隔 | Interframe Space | 分隔连续帧,提供总线恢复时间 | 总线空闲自动插入 |
实训提示:在故障诊断中,错误帧和过载帧的出现频率是判断总线物理层或协议层问题的重要指标。正常运行的CAN总线不应频繁出现错误帧。
2.2 数据帧结构详解
数据帧是CAN总线最常用的帧类型,负责承载实际通信数据。标准帧(CAN 2.0A)与扩展帧(CAN 2.0B)的结构对比如下:
| 字段 | 标准帧(11位ID) | 扩展帧(29位ID) | 位宽说明 |
|---|---|---|---|
| SOF | 1 bit | 1 bit | 帧起始,显性位同步所有节点 |
| 仲裁场 | 11位ID + RTR | 11位基ID + SRR + IDE + 18位扩展ID + RTR | 决定总线访问优先级 |
| 控制场 | IDE + r0 + DLC | r1 + r0 + DLC | IDE=0标准帧,IDE=1扩展帧;DLC表示数据长度 |
| 数据场 | 0~8字节 | 0~8字节 | 实际传输的有效数据 |
| CRC场 | 15位CRC + 1位CRC界定符 | 15位CRC + 1位CRC界定符 | 校验传输错误 |
| ACK场 | 1位ACK槽 + 1位ACK界定符 | 1位ACK槽 + 1位ACK界定符 | 接收节点应答确认 |
| EOF | 7位隐性位 | 7位隐性位 | 帧结束标志 |
关键对比:标准帧的11位ID可提供211=2048个标识符;扩展帧的29位ID可提供229=5.36亿个标识符。在汽车网络中,动力系统通常使用标准帧,而信息娱乐和ADAS系统更倾向扩展帧。
2.3 远程帧
远程帧用于请求数据,其结构与数据帧类似,但数据场为空且RTR位为隐性(1)。远程帧的工作流程如下:
- 请求节点发送远程帧,包含目标数据ID
- 目标节点识别到该ID的远程帧后,准备对应数据
- 目标节点发送同ID的数据帧作为响应
故障排查要点:如果远程帧发送后未收到响应数据帧,可能原因包括:目标节点离线、目标节点未配置该ID的响应服务、总线负载过高导致响应超时。在CANoe或PCAN中捕获远程帧后,应检查其ID是否与预期节点匹配。
2.4 错误帧与过载帧
这两种帧是总线故障诊断的核心关注点:
| 特性 | 错误帧 | 过载帧 |
|---|---|---|
| 触发条件 | 任何节点检测到位错误、填充错误、CRC错误、格式错误或ACK错误 | 接收节点内部缓冲区满,或检测到帧间隔的显性位 |
| 结构组成 | 6个显性位(错误标志)+ 8个隐性位(错误界定符) | 6个显性位(过载标志)+ 8个隐性位(过载界定符) |
| 对总线影响 | 中断当前传输,所有节点丢弃当前帧 | 延迟后续帧发送,但不破坏当前帧 |
| 故障诊断价值 | 高——指示物理层或协议层严重问题 | 中——指示节点处理能力不足或总线负载过高 |
2.5 帧间隔
帧间隔用于分隔数据帧/远程帧与后续帧,提供总线同步恢复时间。其结构分为两部分:
- 间歇场(Intermission):3个隐性位,所有节点在此时进行总线空闲检测
- 总线空闲(Bus Idle):任意长度的隐性位,直到有节点开始发送SOF
实训应用:在分析CAN总线波形时,帧间隔的隐性位电平应稳定在2.5V(CAN_H与CAN_L差分电压约0V)。如果帧间隔期间出现异常显性位或电平抖动,通常指示总线终端电阻匹配不良或节点驱动电路故障。
2.6 位填充机制
CAN协议采用位填充(Bit Stuffing)机制保证时钟同步:在SOF到CRC场之间,如果连续出现5个相同电平的位,发送节点自动插入一个相反电平的填充位。接收节点在解码时自动移除填充位。
| 场景 | 原始位序列 | 填充后序列 | 说明 |
|---|---|---|---|
| 连续显性位 | 00000 1 | 000001 1 | 第5个0后插入1个隐性位 |
| 连续隐性位 | 11111 0 | 111110 0 | 第5个1后插入1个显性位 |
| 填充错误 | 000000 | — | 检测到6个连续相同位,触发错误帧 |
故障诊断关键:位填充错误是CAN总线最常见的协议层错误之一。当总线受到电磁干扰或节点晶振偏差过大时,接收节点可能误判填充位,导致CRC校验失败并触发错误帧。使用示波器捕获CAN_H/CAN_L差分信号,观察位时间宽度是否一致,可快速定位时钟同步问题。
2.7 仲裁机制与优先级
CAN总线采用载波监听多路访问/冲突检测(CSMA/CD)结合非破坏性逐位仲裁机制:
- 所有节点在SOF后同时发送仲裁场
- 显性位(0)覆盖隐性位(1)——发送隐性位的节点检测到总线为显性时,自动退出竞争
- ID数值越小的帧,优先级越高
实训要点:在故障排查中,如果低优先级节点的数据频繁丢失,应检查总线负载率是否超过60%。高负载率下,低优先级帧可能因持续仲裁失败而无法发送,导致节点报“发送超时”故障码。