CAN通讯协议入门指南:简单易懂的解析
CAN通讯协议入门指南:简单易懂的解析
CAN总线是一种广泛应用于汽车工业、工业自动化、医疗设备、航空航天以及智能交通系统等领域的通讯协议。它具有高可靠性、实时性、抗干扰能力强等特点,通过多路复用技术降低了布线的复杂性和成本。本文将从CAN总线的基本概念、特点、物理层和数据链路层等方面进行详细解析。
一、CAN是什么?
CAN(Controller Area Network)即控制局域网络,最早由德国BOSCH(博世)公司开发,目前已发展成为国际标准(ISO 11898)。CAN总线最初是为了通过多路复用技术降低汽车布线的复杂性和成本而开发的,现已广泛应用于各种需要高效、可靠通信的场景。
CAN总线的主要特点包括:
- 高可靠性:通过错误检测和自动重传机制,确保数据的完整性和可靠性。
- 实时性:优先级机制使得高优先级消息可以及时传输,适合实时控制应用。
- 多主机支持:允许多个节点同时发送和接收数据,灵活性强。
- 抗干扰能力强:具有较强的抗电磁干扰能力,适用于复杂环境。
- 简洁的布线:使用双绞线和终端电阻,布线简单,减少了物理连接的复杂性。
- 低成本:相对于其他通信协议,CAN的硬件和实现成本较低。
- 扩展性:可根据需要增加节点,便于系统扩展。
二、CAN协议的特点
CAN协议具有以下显著特点:
- 高可靠性:通过错误检测和自动重传机制,确保数据的完整性和可靠性。
- 实时性:优先级机制使得高优先级消息可以及时传输,适合实时控制应用。
- 多主机支持:允许多个节点同时发送和接收数据,灵活性强。
- 抗干扰能力强:具有较强的抗电磁干扰能力,适用于复杂环境。
- 简洁的布线:使用双绞线和终端电阻,布线简单,减少了物理连接的复杂性。
- 低成本:相对于其他通信协议,CAN的硬件和实现成本较低。
- 扩展性:可根据需要增加节点,便于系统扩展。
三、CAN物理层
3.1 闭环总线网络
遵循ISO 11898标准的高速、短距离“闭环网络”,其主要特点如下:
- 总线最大长度为40米
- 通信速度最高可达1Mbps
- 总线的两端各需要一个120欧姆的终端电阻
3.2 开环总线网络
遵循ISO 11519-2标准的低速、远距离“开环网络”,其主要特点如下:
- 最大传输距离可达1公里
- 最高通信速率可达125kbps
- 两根总线独立,不形成闭环
- 每根总线上需要串联一个2.2千欧的电阻
3.3 电气特性
CAN总线采用异步通信方式,仅包含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 (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.5 CRC段
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总线的物理层和数据链路层的各个组成部分和工作原理,包括闭环总线网络、开环总线网络、数据帧结构、错误处理机制等。通过本文的学习,读者可以全面了解CAN总线的工作原理和应用场景,为从事相关领域的开发和应用提供理论基础。