CAN基础概念
CAN(Control Area Network)属于现场总线的范畴,是一种高性能、高可靠性、易于开发和低成本的串行总线,使用双绞线来传输信号。由 Bosch 为汽车监测和控制而设计。随后也广泛用于工业、医疗等多种领域。
CAN总线协议距今已经发展40多年,如今,CAN总线已成为国际标准。
- 1986年:BOSCH(博世)开发了CAN协议作为解决方案
- 1991年:BOSCH(博世)发布了CAN 2.0(CAN 2.0A:11位,2.0B:29位)
- 1993年:CAN被采用为国际标准(ISO 11898-1),定义了CAN总线的物理特性、电气特性、传输速率、帧格式、位定时和错误检测机制。该标准规定了CAN总线在高速(up to 1 Mbit/s)应用中的规范。
- 2003年:ISO 11898-2,扩展了原有功能,支持更高的数据传输速率(up to 1 Mbit/s)和更长的总线长度。
- 2004年:ISO 11898-4,规定了基于事件触发的CAN总线通信机制,允许在特定条件下触发CAN帧的发送和接收。
- 2006年:ISO 11898-3,是CAN总线协议的低速CAN标准。它适用于低速(up to 125 kbit/s)和短距离的应用场景,如在汽车电子系统中的诊断通信。
- 2007年:ISO 11898-5,定义了基于ISO 11898-1到ISO 11898-4的物理和数据链路层的高级通信协议,用于在CAN总线上实现分布式控制和通信。该标准提供了对象字典、通信对象和协议机制,以支持在CAN总线上实现高层通信协议。
- 2012年:博世发布了CAN FD 1.0
- 2015年:CAN FD协议标准化(ISO 11898-1), CAN FD是对经典CAN(ISO 11898-1)进行扩展的标准,以提供更高的数据传输速率和灵活性。主要内容包括增加了更大的数据帧长度和更高的数据传输速率,使得在CAN总线上能够传输更多的数据量。CAN FD标准支持传输速率高达5 Mbit/s,并通过改进帧格式和位定时,实现了更高的数据传输效率。
- 2022年:CAN XL(尚未正式发布标准号)是对CAN FD进行进一步扩展的标准,旨在提供更高的数据传输速率和更大的数据帧长度。CAN XL的主要目标是支持更高的传输速率(目标达到10 Gbit/s)和更大的数据帧长度(目标达到2048字节),以满足未来汽车和工业应用中对更大数据吞吐量的需求。
CANopen基础概念
CANopen是基于CAN总线的通信协议和通信配置,它定义了在CAN总线上进行设备之间通信的规范和协议。提供了一套标准的通信对象和通信机制,用于配置、控制和监控分布式设备网络。
CAN提供了基础的物理传输和帧格式,而CANopen定义了用于设备之间通信的数据结构、消息格式、对象字典和通信规则。
CANopen 的发展历史是伴随着 CAN 的发展的:
- 1997年,CAN in Automation(CiA)组织成立,致力于推动CANopen的标准化和推广。
- CiA标准,由CiA组织的专家团队共同制定,并得到了广泛的应用和认可。
- CiA 301:CANopen应用层和通信配置规范。
- CiA 305:CANopen时间触发通信规范。
- CiA 306:CANopen通用数据对象(General Data Objects,GDO)规范。
- CiA 309:CANopen物理层和电气层规范。
- CiA 311:CANopen故障诊断和报警规范。
- CiA 402:CANopen驱动器应用层规范。
- CiA 404:CANopen设备配置和描述规范。
- CiA 417:CANopen分布式时钟同步规范。
- CiA 418:CANopen扩展SDO协议规范。
- CiA 419:CANopen节能节点规范。
- CiA 447:CANopen飞行器应用层和通信配置规范。
- CiA 454:CANopen电池管理系统规范。
- CiA 455:CANopen电动轮椅和电动移动系统规范。
- CiA 601:CANopen FD数据链路层和物理层规范。
- CiA 603:CANopen FD应用层和通信配置规范。
- ISO标准,2003年,ISO 15745-1标准发布,将CANopen集成到ISO/IEC 8802-3(以太网)的通信配置中。
CAN的优缺点
优点:
- 可靠性高:CAN协议具有很高的抗干扰能力,能够在噪声和干扰环境下稳定工作。它采用差分信号传输,能有效抵抗电磁干扰和信号衰减。每帧信息都有CRC校验及其他检错措施,数据错误率极低。
- 实时性强:CAN协议具备良好的实时性,可以在微秒级的响应时间内进行通信。这使得它适用于对通信时延要求较高的应用领域,如汽车电子、工业控制等。
- 灵活性高:CAN协议支持多主机通信和多帧格式,具有较高的灵活性。它允许多个节点同时发送和接收消息,节点之间的通信可以根据应用需求进行灵活配置,节点数最多可达110个。
- 成本低廉:CAN协议的硬件实现相对简单,成本较低。它使用两根线进行通信(CAN_H和CAN_L),不需要复杂的硬件设备。
- 易于集成:CAN协议是一种开放标准,有大量的供应商提供兼容的硬件和软件解决方案。这使得CAN设备的集成和应用开发变得相对容易。
缺点:
- 通信速率有限:传统的CAN协议在通信速率方面有一定的限制,最高速率为1 Mbps。尽管后续出现了CAN FD和CAN XL等扩展协议,但相对于一些高速数据通信协议,如Ethernet和FlexRay,CAN仍然具有一定的限制。
- 数据帧长度有限:传统的CAN协议的数据帧长度限制为8字节。尽管CAN FD协议对数据帧长度进行了扩展,但仍然相对有限。对于某些应用场景,需要传输更大数据量的情况下,CAN协议可能不太适用。
- 总线长度限制:CAN协议在总线长度方面有一定的限制。根据通信速率和总线特性,CAN总线的长度可能受到限制,超过一定长度可能会影响通信质量和可靠性。
- 缺乏安全机制:传统的CAN协议缺乏内置的安全机制,对数据的完整性和保密性没有特别的保护。在一些安全性要求较高的应用中,需要额外的安全层来保护CAN通信的安全性。
CAN总线拓扑结构图
CAN总线是一种广播类型的总线,可支持线形拓扑、星形拓扑、树形拓扑和环形拓扑等。在实际应用中比较推荐使用线形拓扑,如下图,且在IOS 11898-2中高速CAN物理层规范推荐也是线形拓扑。
- 所有的CAN单元都是根据两总线 CAN_H 和 CAN_L 的电位差来判断总线电平;
- 数据传递终端的电阻(120Ω),是为了避免数据传输反射回来,使数据遭到破坏;
CAN单元节点通常由三部分组成:CAN收发器、CAN控制器和MCU。
总线通过差分信号进行数据传输,CAN收发器将差分信号转换为TTL电平信号,或者将TTL电平信号转换为差分信号,CAN控制器将TTL电平信号接收并传输给MCU。
CAN总线物理电气特性
在CAN总线上,利用 CAN_H 和 CAN_L 两根线上的电位差来表示CAN信号。CAN 总线上的电位差分为显性电平(Dominant Voltage)和隐性电平(Recessive Voltage),其中显性电平为逻辑 0,隐性电平为逻辑 1。
CAN总线采用不归零码位填充技术,也就是说CAN总线上的信号有两种不同的信号状态,分别是显性的(Dominant)逻辑0和隐形的(recessive)逻辑1,信号每一次传输完后**不需要返回到逻辑0(显性)**的电平。
CAN总线报文传输规范
CAN总线在报文传输中,可传输以下4种不同类型的帧报文:
- 数据帧:数据帧装载的是发送数据,它将数据从发送节点传输到接收节点;
- 远程帧:远程帧请求具有相同标识符(CANID)的数据帧的发送,实际很少使用;
- 错误帧:任何节点检测到总线错误时都可以发送错误帧。由于总线错误帧没有CANID,所以当检测到错误帧时,只知道有错误,但无法定位该错误帧是哪个模块发送的;
- 过载帧:过载帧用于在先行的和后续的数据帧之间提供附加的延时。
帧格式
在CAN2.0规范中,数据帧和远程帧有两种帧格式,其区别主要在于标识符(即CANID)的长度:具有11位标识符的称为标准帧,而具有29位的帧称为扩展帧。
数据帧由7部分组成:帧起始(SOF)、仲裁段、控制段、数据段、CRC段、ACK段、帧结束。
远程帧结构上无数据段,由6个段组成:帧起始(SOF)、仲裁段、控制段、CRC段、ACK段、帧结束。
且由于数据帧的RTR位为显性电平,远程帧的RTR位为隐性电平,所以帧格式和帧ID都相同情况下,数据帧的优先级比远程帧优先级高。
帧起始和帧结束
帧起始:由单个显性位组成,总线空闲时,发送节点发送帧起始,其他接收节点同步于该帧起始位。
帧结束:由7个连续的隐形位组成。
仲裁段
该段用于解决多个节点同时发送数据的竞争问题。通过仲裁段帧ID规定了数据帧的优先级。根据CAN2.0标准版本不同,帧ID分为11位和29位两种。
假设节点A、B和C都发送相同格式相同类型的帧,如标准格式数据帧,它们竞争总线的过程如下,在同时发出SOF后,根据ID进行仲裁。且帧ID值越小,优先级越高。
也就是CAN控制器在发送数据的同时监测数据线的电平是否与发送数据对应电平相同(高电平会被拉低),如果不同,则停止发送并做其他处理。
控制段
控制段共6位,标准帧的控制段由标志位IDE、保留位r0和数据长度代码DLC组成;扩展帧控制段则由IDE、r1、r0和DLC组成。控制段的作用如下:
1、确定帧类型:报文格式控制段中的位用于指示CAN帧的类型。具体来说,最低位(bit 0)用于区分数据帧和远程帧。当该位为0时,表示为数据帧;当该位为1时,表示为远程帧。数据帧用于实际的数据传输,而远程帧用于请求数据,不包含实际的数据内容。
2、区分标准帧和扩展帧:报文格式控制段中的位也用于区分CAN帧的格式,即标准帧和扩展帧。具体来说,第四位(bit 4)用于标识帧的类型。当该位为0时,表示为标准帧;当该位为1时,表示为扩展帧。标准帧使用11位标识符(ID),扩展帧使用29位标识符。
CRC段
CAN-bus使用CRC校验进行数据检错,CRC校验值存放于CRC段。 CRC校验段由15位CRC值和1位CRC界定符构成
ACK段
当一个接收节点接收的帧起始到CRC段之间的内容没发生错误时,它将在ACK段发送一个显性电平。
错误帧
CAN-bus的错误类型共有5种:
当出现5种错误类型之一时,发送或接收节点将发送错误帧。错误帧的结构如下,其中错误标识分为主动错误标识和被动错误标识
为防止自身由于某些原因导致无法正常接收的节点一直发送错误帧,干扰其他节点通信,CAN-bus规定了节点的3种状态及其行为,通过限制错误次数来重置总线
这些错误处理的机制是由硬件自主完成的这样做的目的就是只要CAN在收到数据肯定是正确的数据
过载帧
当某个接收节点没有做好接收下一帧数据的准备时,将发送过载帧以通知发送节点;过载帧由过载标志和过载帧界定符组成
帧间隔
帧间隔用于将数据帧或远程帧和他们之前的帧分离开,但过载帧和错误帧前面不会插入帧间隔。
帧间隔过后,如果无节点发送帧,则总线进入空闲。
帧间隔过后,如果被动错误节点要发送帧,则先发送8个隐性电平的传输延迟,再发送帧。
CAN总线发送总流程
Reference:
1、CAN总线报文解析
2、CAN总线的前世今生
3、CAN总线之ISO15765协议(内含协议解析伪代码)
4、ISO官网
评论区