CAN 协议概述
CAN(Controller Area Network)是一种广泛应用于汽车、工业控制等领域的串行通信协议,由 Bosch 公司开发。其核心特点是高可靠性、多主结构和实时性,支持差分信号传输以减少电磁干扰。
CAN 协议工作原理
CAN 总线采用差分信号(CAN_H 和 CAN_L)传输数据,逻辑状态分为显性(Dominant,逻辑 0)和隐性(Recessive,逻辑 1)。总线通过“线与”机制实现仲裁,优先级高的报文(ID 值更小)可抢占总线。
帧类型:
- 数据帧:携带实际数据,包含标准帧(11 位 ID)和扩展帧(29 位 ID)。
- 远程帧:请求节点发送数据,无数据字段。
- 错误帧:节点检测错误时主动发送。
- 过载帧:节点请求延迟下一帧传输。
CAN 数据帧结构
标准数据帧格式如下:
- 仲裁段:11 位 ID + RTR(远程传输请求位)。
- 控制段:6 位,包含 IDE(标识符扩展位)和数据长度(DLC,0-8 字节)。
- 数据段:0-8 字节的有效载荷。
- CRC 段:15 位 CRC 校验 + 定界符。
- ACK 段:确认位 + 定界符。
- 帧结束:7 位隐性位。
示例代码(CAN 数据帧解析伪码):
typedef struct {
uint32_t id; // 11 位或 29 位标识符
uint8_t dlc; // 数据长度
uint8_t data[8]; // 数据
} CAN_Frame;
CAN 错误处理机制
- 位错误:节点发送的位与总线电平不一致。
- 填充错误:连续 5 个相同位后未出现相反位。
- CRC 错误:校验和不匹配。
- ACK 错误:未收到其他节点的确认。
错误触发后,节点发送错误帧并进入错误计数状态,严重时自动离线。
CAN 波特率配置
波特率由总线时钟分频和位时间段决定。位时间段分为:
- 同步段(SYNC_SEG):固定 1 个时间单位。
- 传播段(PROP_SEG):补偿物理延迟。
- 相位缓冲段(PHASE_SEG1/2):调整采样点位置。
计算公式:
$$ \text{波特率} = \frac{\text{总线时钟}}{\text{分频系数} \times (\text{SYNC_SEG} + \text{PROP_SEG} + \text{PHASE_SEG1} + \text{PHASE_SEG2})} $$
CAN 应用场景
- 汽车电子:ECU(发动机控制单元)、传感器通信。
- 工业自动化:PLC、电机控制。
- 医疗设备:实时数据监控。
CAN 与 CAN FD 区别
CAN FD(Flexible Data Rate)是 CAN 的升级版本,主要改进:
- 数据段波特率可高于仲裁段。
- 数据长度扩展至 64 字节。
- 改进 CRC 校验算法。
CAN 硬件连接
- 终端电阻:总线两端需接 120Ω 电阻以匹配阻抗。
- 布线要求:双绞线减少干扰,长度影响最大波特率。
通过上述内容可全面理解 CAN 协议的核心机制与应用方法。
7420

被折叠的 条评论
为什么被折叠?



