CAN基础知识

一、CAN协议的版本

CAN(Controller Area Network)协议由博世(Bosch)主导制定,历经多次迭代,核心版本如下:

1. CAN 1.0/1.2(基础版本,1986-1991)
  • 发布背景:最早的标准化版本,为汽车内部低速率通信设计。
  • 核心特点:仅支持标准数据帧(11位标识符,ID范围0-0x7FF),数据长度固定为0-8字节,最高通信速率125kbps。
  • 局限性:无扩展帧(无法支持更多节点)、速率低,仅用于早期汽车电子原型,目前已被淘汰。
2. CAN 2.0(主流经典版本,1991年发布)

CAN 2.0是应用最广泛的版本,分为两个子版本:

  • CAN 2.0A(标准帧模式)
    支持11位标识符(标准ID),数据长度0-8字节,最高速率1Mbps(短距离),适用于节点数量较少的场景(如汽车车身控制、低端工业传感器)。

  • CAN 2.0B(扩展帧模式)
    新增29位扩展标识符(标准ID+18位扩展位,ID范围0-0x1FFFFFFF),可支持更多节点(理论上万级),数据长度仍为0-8字节,速率1Mbps,兼容CAN 2.0A设备。

  • 核心价值:奠定了CAN的工业化基础,目前90%以上的传统CAN设备(如汽车ECU、工业PLC)仍基于CAN 2.0B运行。

3. CAN FD(Flex
CAN基础知识涵盖CAN总线的特点、通信方式等内容。CAN(Controller Area Network)即控制器局域网,是一种有效支持分布式控制或实时控制的串行通信网络。CAN协议采用CRC检验并可提供相应的错误处理功能,保证了数据通信的可靠性。同时,其数据长度通常为8个字节,不会占用总线时间过长,从而保证了通信的实时性。CAN卓越的特性、极高的可靠性和独特的设计,特别适合工业过程监控设备的互连,因此,越来越受到工业界的重视,并已公认为最有前途的现场总线之一[^2]。 CAN总线通信的核心是节点间通过发送和接收符合特定格式的“帧”来实现。标准CAN有两种主要的帧格式:标准帧(11位标识符)和扩展帧(29位标识符),这里主要介绍标准数据帧的基本构成。一个标准CAN数据帧由7个不同的位字段组成: 1. **帧起始(SOF - Start Of Frame)**:长度为1 bit,值为显性位(Dominant Bit,逻辑0),标志着数据帧的开始,它同步所有总线上的节点,表示一个新的报文即将开始传输。在总线空闲时,第一个发送显性位的节点获得总线访问权[^1]。 2. **仲裁段(Arbitration Field)**:仲裁段用于确定总线访问优先级,包含标识符(ID)和远程发送请求位(RTR)等信息。标识符用于标识消息的优先级和来源,数值越小优先级越高。 3. **控制段(Control Field)**:控制段包含数据长度码(DLC)等信息,用于指示数据段的数据字节数。 4. **数据段(Data Field)**:数据段是实际要传输的数据,长度由控制段的DLC决定,最多为8个字节。 5. **CRC段(Cyclic Redundancy Check Field)**:CRC段包含循环冗余校验码,用于检测数据传输过程中是否出现错误。 6. **应答段(ACK Field)**:应答段用于接收节点向发送节点反馈是否正确接收到数据。发送节点发送两个隐性位,若接收节点正确接收数据,则在应答间隙发送显性位。 7. **帧结束(EOF - End Of Frame)**:帧结束由7个隐性位组成,标志着数据帧的结束。 以下是一个简单的Python代码示例,使用`python-can`库来创建一个CAN消息(模拟标准数据帧): ```python import can # 创建一个CAN消息 msg = can.Message( arbitration_id=0x123, # 11位标识符 data=[0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08], # 数据段 is_extended_id=False # 标准帧 ) print(msg) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值