CAN通讯协议入门指南:简单易懂的解析
CAN通讯协议入门指南:简单易懂的解析
前言
CAN总线常用于汽车工业、工业自动化、医疗设备、航空航天以及智能交通系统等行业。这些领域利用CAN总线的高效、可靠性和实时性来实现设备间的通信和数据传输。
一、CAN是什么?
CAN:Controller Area Network,控制局域网络,最早由德国 BOSCH(博世)开发,目前已经是国际标准(ISO 11898),是当前应用最广泛的现场总线之一。CAN 总线协议最初是为了通过多路复用来降低汽车布线的复杂性和成本而开发的,此后已被其他各种情况采用。CAN总线的特点包括高可靠性、实时性、抗干扰能力强、支持多主机通信、简单的布线结构以及高效的错误检测和处理机制。这些特点使其在复杂环境下尤为适用。
二、CAN协议的特点
- 高可靠性:通过错误检测和自动重传机制,确保数据的完整性和可靠性。
- 实时性:优先级机制使得高优先级消息可以及时传输,适合实时控制应用。
- 多主机支持:允许多个节点同时发送和接收数据,灵活性强。
- 抗干扰能力强:具有较强的抗电磁干扰能力,适用于复杂环境。
- 简洁的布线:使用双绞线和终端电阻,布线简单,减少了物理连接的复杂性。
- 低成本:相对于其他通信协议,CAN的硬件和实现成本较低。
- 扩展性:可根据需要增加节点,便于系统扩展。
三、CAN物理层
3.1 闭环总线网络
遵循ISO11898标准的高速、短距离“闭环网络”,它的总线最大长度为40m,通信速度最高为1Mbps,总线的两端各要求有一个“120欧”的电阻。
3.2 开环总线网络
遵循ISO11519-2标准的低速、远距离“开环网络”,它的最大传输距离为1km,最高通讯速率为125kbps,两根总线是独立的、不形成闭环,要求每根总线上各串联有一个“2.2千欧”的电阻。
3.3 电气特性
异步通讯,只具有CAN_High和CAN_Low两条信号线,共同构成一组差分信号线,以差分信号的形式进行通讯。在CAN总线中,必须使它处于隐性电平(逻辑1)或显性电平(逻辑0)中的其中一个状态。假如有两个CAN通讯节点,在同一时间,一个输出隐性电平,另一个输出显性电平,类似I2C总线的“线与”特性将使它处于显性电平状态,显性电平的名字就是这样来的,即可以认为显性具有优先的意味。
四、CAN数据链路层
CAN 协议提供了 5 种帧格式来传输数据:数据帧、遥控帧、错误帧、过载帧和帧间隔。
4.1 数据帧
字段名 | 位长度 | 意义 |
---|---|---|
Start-of-frame | 1 | 表示帧传输的开始 |
Identifier (green) | 11 | 一个(唯一)标识符,也表示消息优先级 |
Stuff bit | 1 | 每5个0插入1个1,以保持时钟同步 |
Remote Transmission Request (RTR) (blue) | 1 | 对于数据帧,必须为显性(0),对于远程请求帧,必须为隐性(1) |
Identifier Extension Bit (IDE) | 1 | 对于具有 11 位标识符的基本帧格式,必须为显性(0) |
Reserved bit (r0) | 1 | 必须是显性(0) |
Data Length Code (DLC) (yellow) | 4 | 数据字节数(0-8 字节) |
Data field (red) | 0~64 | 要传输的数据 |
CRC | 15 | 循环冗余校验 |
CRC delimiter | 1 | 必须是隐性的(1) |
ACK slot | 1 | 发射器发送隐性(1),任何接收器都可以置位显性(0) |
ACK delimiter | 1 | 必须是隐性的(1) |
Frame End (EOF) | 7 | 必须是隐性的(1) |
Interframe Space (IFS) | 3 | 必须是隐性的(1) |
4.1.1 帧起始
SOF(Start Of Frame),一个显性电平(0)
4.1.2 仲裁段
当同时有两个报文被发送时,总线会根据仲裁段的内容决定哪个数据包能被传输,这也是它名称的由来。仲裁段先发显性电平(0)的主机先抢占总线,故比特0称为显性电平,故ID越小,优先级越高
4.1.2.1 ID
IDE位(Identifier Extension Bit),译作标识符扩展位,标准格式的ID为11位,扩展格式的ID为29位
4.1.2.2 RTR
一位RTR位(Remote Transmission Request Bit),远程传输请求位, 当它为显性电平(0)时表示数据帧,隐性电平(1)时表示遥控帧
4.1.2.3 IDE
一位IDE位(Identifier Extension Bit),标识符扩展位,当它为显性电平(0)时表示标准格式,隐性电平(1)时表示扩展格式。
4.1.2.4 SRR
一位SRR位(Substitute Remote Request Bit),只存在于扩展格式,固定为隐性电平(1),与标准格式中的RTR位同位
4.1.3 控制段
4.1.3.1 r0、r1
r1和r0为保留位,各1位,默认设置为显性电平(0)。
4.1.3.2 DLC
4位DLC(Data Length Code),数据长度码(0~8),表示本报文中的数据段含有多少个字节,可见数据段最长8字节
4.1.4 数据段
0~8个字节组成,MSB先行,表示节点要发送的原始信息
4.1.5CRC段
4.1.5.1 CRC校验码
15位的CRC校验码,CRC部分的计算一般由CAN控制器硬件完成,出错时的处理则由软件控制最大重发数。
4.1.5.2 CRC界定符
1位CRC界定符,固定为隐性电平(1)
4.1.6 ACK段
4.1.6.1 ACK位
发送节点发送的是隐性位(1),接收节点则在这一位中发送显性位(0)以示应答
4.1.6.2 ACK界定符
ACK界定符,1位隐性电平(1)
4.1.7 帧结束
7个隐性位(1)表示结束。
4.2 遥控帧
遥控帧没有数据,因此 DLC 表示的是所请求的数据帧数据长度,遥控帧的其他段参考数据帧的描述即可。
4.3 错误帧
主动错误标志是 6 个显性位(0),被动错误标志是 6 个隐性位(1),错误界定符由 8 个隐性位(1)组成。
4.4 过载帧
4.5 间隔帧
分隔数据帧和遥控帧,中断为3 个隐性位(1),暂停传输为8个隐性位(1),总线空闲为隐性电平(1),长度没有限制,本状态下表示总线空闲,
4.6 位分解
对于 CAN 总线,一个位分为 4 段,19Tq:
4.6.1 SS段(SYNC SEG)
同步段(SS)
4.6.2 PTS段(PROP SEG)
传播时间段(PTS)
4.6.3 PBS1段(PHASE SEG1)
相位缓冲段 1(PBS1)
4.6.4 PBS2段(PHASE SEG2)
相位缓冲段 2(PBS2)
4.7 位定时
CAN 网络上的所有节点必须以相同比特率运行,但无时钟信号线,因此需要一种节点间时钟同步的方法。在仲裁期间,同步很重要,因为仲裁中的节点必须能够同时看到其传输的数据帧ID和其他节点的同时传输的数据帧ID。
总结
本文介绍了CAN总线的物理、链路层