CAN(Controller Area Network)总线协议定义了4种基本帧类型和1种帧间隔,分别用于数据传输、错误处理、总线负载控制等场景。以下是各类帧的结构、功能及实际应用详解:
一、数据帧(Data Frame)
1. 功能
- 核心用途:节点间传输实际数据(如传感器读数、控制指令)。
- 帧类型:
- 标准数据帧:11位标识符(ID)。
- 扩展数据帧:29位标识符(ID)。
2. 帧结构
字段 | 位数 | 说明 |
帧起始(SOF) | 1 | 显性0,标志帧开始。 |
仲裁字段 | 12/32 | 11位ID(标准帧)或29位ID(扩展帧)+ RTR位(显性0)。 |
控制字段 | 6 | IDE位(标识帧类型)、保留位、DLC(数据长度码,0-8字节)。 |
数据字段 | 0-64 | 有效载荷,长度由DLC定义。 |
CRC字段 | 16 | 15位CRC校验码 + 隐性1界定符。 |
ACK字段 | 2 | ACK槽(接收节点拉低) + 隐性1界定符。 |
帧结束(EOF) | 7 | 7位隐性1,标志帧结束。 |
3. 应用场景
- 汽车电子:发动机ECU发送转速数据(ID=0x123,数据=0x01 0x45)。
- 工业控制:PLC向电机驱动器发送位置指令(ID=0x200,数据=0x00 0x7F)。
- 关键设计:
- 高优先级ID(数值小)在仲裁中胜出,确保关键数据(如刹车信号)优先传输。
- DLC字段需准确匹配数据长度,避免接收方解析错误。
二、远程帧(Remote Frame)
1. 功能
- 核心用途:请求其他节点发送指定ID的数据帧(无数据载荷)。
- RTR位标识:隐性1(与数据帧的显性0区分)。
2. 帧结构
- 与数据帧区别:
- RTR位:隐性1(仲裁字段中)。
- 数据字段:无数据(DLC=0)。
3. 应用场景
- 按需数据获取:仪表盘请求发动机温度(发送远程帧ID=0x123,接收方回复数据帧)。
- 资源节省:避免周期性发送数据,降低总线负载。
- 注意事项:
- 远程帧必须与数据帧ID一致,否则无法触发响应。
- 接收节点需配置为支持远程帧处理(部分协议如CANopen默认禁用)。
三、错误帧(Error Frame)
1. 功能
- 核心用途:节点检测到错误时主动中断通信,强制发送方重传。
- 错误类型:位错误、CRC错误、格式错误、ACK未确认等。
2. 帧结构
字段 | 位数 | 说明 |
错误标志 | 6 | 显性0(主动错误)或隐性1(被动错误)。 |
错误界定符 | 8 | 8位隐性1,标志错误帧结束。 |
3. 触发条件与处理
- 主动错误:
- 节点检测到错误后立即发送6位显性0,通知全网。
- 所有节点终止当前帧,发送方重试。
- 错误计数器:
- 发送错误计数器(TEC)和接收错误计数器(REC)超限后,节点进入“总线关闭”状态。
- 应用场景:
- 电磁干扰导致CRC校验失败时,触发错误帧重传。
- 关键系统(如刹车控制)需配置快速错误恢复机制。
四、过载帧(Overload Frame)
1. 功能
- 核心用途:接收节点通知总线延迟处理下一帧(类似“忙线”信号)。
- 触发条件:节点内部处理过载(如缓冲区满、CPU负载过高)。
2. 帧结构
字段 | 位数 | 说明 |
过载标志 | 6 | 显性0,与错误帧相似但由接收节点发送。 |
过载界定符 | 8 | 8位隐性1,标志过载帧结束。 |
3. 应用场景
- 高负载系统:网关节点处理多路CAN数据时,临时延迟接收。
- 设计注意:
- 过载帧不可滥用,否则会显著降低总线效率。
- 需优化节点处理能力(如增大缓冲区、提升MCU性能)。
五、帧间隔(Inter-Frame Space, IFS)
1. 功能
- 核心用途:分隔连续帧,确保节点同步和总线空闲检测。
- 组成:
- 间隔段:3位隐性1(标准间隔)。
- 总线空闲段:可变长度隐性1(无帧传输时)。
2. 应用场景
- 多主仲裁:总线空闲后,节点可竞争发送权限。
- 错误恢复:节点在总线空闲后尝试重发错误帧。
- 低功耗模式:若总线空闲超时,节点可进入睡眠模式(如CAN FD的“局部网络唤醒”)。
六、帧类型对比与设计指南
帧类型 | 发送方 | 典型应用 | 设计要点 |
数据帧 | 任意节点 | 传输实时数据(传感器、控制指令) | 优化ID优先级分配,确保关键数据低延迟。 |
远程帧 | 请求方节点 | 按需获取数据 | 避免频繁请求,防止总线拥塞。 |
错误帧 | 错误检测节点 | 错误恢复与重传 | 配置合理的错误计数器阈值,防止节点脱网。 |
过载帧 | 过载接收节点 | 延迟处理新帧 | 优化节点处理能力,减少过载触发频率。 |
帧间隔 | 自动生成 | 分隔帧与总线空闲检测 | 确保间隔时间符合协议要求(如CAN FD扩展)。 |
七、实际应用案例
1. 汽车动力系统
- 数据帧:变速箱控制器(ID=0x100)发送当前档位(数据=0x03)。
- 错误帧:CAN线短路时,ECU触发错误帧并进入“总线关闭”保护模式。
2. 工业机器人
- 远程帧:主控PLC请求关节编码器位置(ID=0x200),驱动器回复数据帧。
- 过载帧:多轴同步控制时,从节点因计算延迟发送过载帧。
3. 电池管理系统(BMS)
- 数据帧:电池模组(ID=0x301)上报电压温度(数据=0x25 0x3C)。
- 帧间隔:总线空闲时,主控节点发起新一轮数据采集。
总结
CAN总线的帧类型设计是其高可靠性与实时性的核心保障:
- 数据帧与远程帧实现灵活数据传输。
- 错误帧与过载帧确保异常状态快速恢复。
- 帧间隔维护总线秩序与多主仲裁。
硬件工程师需结合具体应用场景(如汽车、工业),合理配置ID优先级、错误处理策略及节点负载能力,以充分发挥CAN总线的性能优势。