汽车CAN总线-01 介绍
字数 2240 2025-08-18 11:36:53
汽车CAN总线技术详解
1. CAN总线概述
CAN(Controller Area Network,控制器局域网)是由德国BOSCH公司开发的一种串行通讯协议总线,现已成为国际标准(ISO 11898)。它是当前应用最广泛的汽车总线技术。
主要特点:
- 使用双绞线传输信号(屏蔽或非屏蔽)
- 能在恶劣环境下工作
- 具备高可靠性:即使双绞线中有一根断路,总线仍能继续工作
2. CAN总线组成
一个CAN总线系统包含:
- CAN传输器
- CAN控制器
- 微控制器
其中CAN传输器和控制器负责建立CAN协议的底层规则,微控制器负责提取CAN协议部分并提供给应用程序使用。
3. 寻址方式
CAN协议支持两种寻址方式:
- 点对点传输
- 广播传输
4. CAN过滤器
在CAN网络上,控制器实现了过滤节点功能,能够过滤不属于自身以及自身不感兴趣的报文。
5. 冲突访问与仲裁机制
5.1 仲裁原理
当多个节点同时发送报文时,采用优先级仲裁机制:
- 0为显性位
- 1为隐性位
- 采用"1 & 0"方式确定发送优先级
仲裁优胜方继续发送,失败方从发送节点转为接收节点。
5.2 优先级规则
- CAN ID越低优先级越高
- 仲裁过程是逐位进行的
6. 报文协议
CAN总线支持多种报文类型:
| 名称 | ID长度 | 数据长度 | 常见度 | 说明 |
|---|---|---|---|---|
| 远程帧 | 11位 | 0 | 不常见 | 仅起请求作用 |
| 标准帧 | 11位 | 64位 | 常见 | 基本数据帧 |
| 扩展帧 | 29位 | 64位 | 商用车常见 | 扩展ID帧 |
| 扩展远程帧 | 29位 | 0位 | 极少见 | 扩展ID请求帧 |
7. CAN报文帧结构
7.1 帧起始(SOF)
- 发送节点设置起始为0,表示总线非空闲
- 接收节点与发送节点做硬同步
7.2 标识(Identifier)
- 标准帧:11位
- 扩展帧:29位
7.3 远程传输请求(RTR)
- 0:表示数据帧
- 1:表示远程帧
7.4 标识扩展(Identifier Extension)
- 0:标准CAN报文
- 1:扩展CAN报文
7.5 扩展帧的远程请求位(SRR)
在扩展帧状态下,SRR位与RTR的作用相同,表示是否为远程帧。
7.6 保留位(r)
- 标准帧上无意义,一般为0
- 在CAN FD时重新定义
7.7 数据长度与数据(DLC)
- 4位,表示0-15
- 0-8:实际数据段字节数
- 9-15:表示数据段有8个字节
- CAN FD中可扩展到16个字节
7.8 循环校验(CRC)
- 发送节点计算从SOF到数据部分的校验值
- 接收节点按同样算法计算并比较
7.9 界定符位(DEL)
固定格式1,目前无实际意义。
7.10 应答位(ACK)
- 0:表示成功
- 1:表示失败
发送节点发送后接收回应帧:
- ACK为0:继续发送
- ACK为1:停止发送并发送错误帧
7.11 结束位(EOF)
- 连续7个1表示帧结束
- ITM(帧间隔):三个1,紧跟在EOF后
7.12 总线空闲检测
- DEL + EOF + ITM = 连续11个1
- 检测到11个1表示总线空闲,可发送数据
8. 位填充机制
为防止帧中出现连续11个1导致误判:
- 连续5个1或0后插入相反位
- 填充范围:从SOF到CRC结束
- 确保报文区域不会出现连续相同位
9. 数据保护机制
CAN总线采用多种检测手段确保数据可靠性:
- 位检查
- ACK回应包
- ACK回应位检查
- CRC校验
- 位填充
- 格式检测
9.1 位检查
发送节点通过位监控检测发送错误:
- 仲裁场(Identifier + RTR):发1读0不算错误(仲裁失败)
- 发0读1视为错误
- ACK部分:发1读0不算错误
9.2 格式检测
检测DEL位和EOF位是否为固定格式1,错误则发送错误帧。
9.3 ACK回应位检查
接收节点发送回应包后会回读:
- 发送1回读0:认为帧内容被破坏
- 下一帧发送错误帧
10. 错误处理机制
10.1 错误帧
检测到错误时立即发送错误帧(CRC错误除外)。
错误帧格式:
- 错误标志位 + 错误界定符
- 错误标志位:
- 主动状态:6个0
- 被动状态:6个1
- 错误界定符:8个1
10.2 错误状态
节点有三种错误状态:
- 主动错误状态(Error-Active)
- TEC和REC ≤ 127
- 正常收发
- 被动错误状态(Error-Passive)
- TEC或REC > 127
- 发送受限
- BUS OFF状态
- TEC > 255
- 禁止发送
状态转换规则:
- 主动→被动:TEC或REC > 127
- 被动→主动:TEC和REC < 128
- 被动→BUS OFF:TEC > 255
- BUS OFF恢复:
- 软件重置
- 等待连续128组11个1
10.3 错误计数器规则
- 成功发送一帧:TEC和REC减1
- 发送节点检测到错误:TEC加8
- 接收节点率先检测到错误:REC加8
- 其他节点检测到错误后又检测到错误:REC加1
10.4 不同错误状态的行为差异
- 主动错误状态:正常收发
- 被动错误状态:
- 检测到连续11个1后不能立即发送
- 必须等待8位空闲时间
- BUS OFF状态:禁止发送数据
11. 总结
CAN总线作为一种可靠的汽车通信协议,通过精妙的仲裁机制、错误检测与处理机制确保了在恶劣环境下的稳定通信。理解其工作原理和协议细节对于汽车电子系统的开发和故障诊断至关重要。