详解 CAN 协议

CAN 协议概述

CAN(Controller Area Network)是一种广泛应用于汽车、工业控制等领域的串行通信协议,由 Bosch 公司开发。其核心特点是高可靠性、多主结构和实时性,支持差分信号传输以减少电磁干扰。

CAN 协议工作原理

CAN 总线采用差分信号(CAN_H 和 CAN_L)传输数据,逻辑状态分为显性(Dominant,逻辑 0)和隐性(Recessive,逻辑 1)。总线通过“线与”机制实现仲裁,优先级高的报文(ID 值更小)可抢占总线。

帧类型

  • 数据帧:携带实际数据,包含标准帧(11 位 ID)和扩展帧(29 位 ID)。
  • 远程帧:请求节点发送数据,无数据字段。
  • 错误帧:节点检测错误时主动发送。
  • 过载帧:节点请求延迟下一帧传输。

CAN 数据帧结构

标准数据帧格式如下:

  1. 仲裁段:11 位 ID + RTR(远程传输请求位)。
  2. 控制段:6 位,包含 IDE(标识符扩展位)和数据长度(DLC,0-8 字节)。
  3. 数据段:0-8 字节的有效载荷。
  4. CRC 段:15 位 CRC 校验 + 定界符。
  5. ACK 段:确认位 + 定界符。
  6. 帧结束: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 协议的核心机制与应用方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值