详解CAN协议标准和帧格式
CAN(Controller Area Network)协议是一种两线半双工高速串行网络技术,它主要用于小半径区域的不同设备之间的通信,例如在汽车中。
CAN协议是CSMA-CD/ASM(基于消息优先级)协议的载波侦听多路访问冲突检测仲裁,CSMA确保每个节点在发送任何消息之前必须等待给定的时间段。冲突检测通过根据消息的指定优先级选择消息来确保避免冲突。
CAN提供从125kbps到 1Mbps的信令速率,并提供了2048个不同的消息标识符。CAN协议符合ISO-11898标准并使用7层开放系统互连模型。
CAN协议由罗伯特博世于1982年开发,1986年由底特律汽车工程师协会正式发布。第一辆集成CAN总线的汽车于1992年由梅赛德斯奔驰制造。
ISO 11898架构
CAN协议11889分层架构由三层组成,分别如下所述:
- 应用层:它与操作系统或CAN设备的应用程序交互。
- 数据链路层:它在发送、接收和验证数据方面将实际数据连接到协议。
- 物理层:它代表实际的硬件。
帧格式
一个CAN通信网络可以配置不同的帧或消息格式,具体如下:
- 标准或基本帧格式或CAN 2.0 A
- 扩展帧格式或CAN 2.0 B
这两种格式的区别在于位的长度,即基本帧支持11位长度的标识符,而扩展帧支持29位长度的标识符,由18位扩展和一个11位标识符。IDE位不同于CAN扩展帧格式和CAN基本帧格式,其中IDE在11位帧情况下作为显性传输,在29位帧情况下作为隐性传输。一些支持扩展帧格式的CAN控制器也可以发送或接收基本帧格式的消息。
一般情况下,标准的CAN帧由以下位组成:
- SOF——帧开始:消息从这一点开始。
- Identifier——标识符:它决定消息的优先级。二进制值越低,优先级越高。它是11位。
- RTR——远程传输请求:当需要来自另一个节点的信息时,它是显性的。每个节点都收到请求,但只有标识符与消息的标识符匹配的节点才是所需节点。每个节点也收到响应。
- IDE——单一识别扩展:如果它是显性的,则意味着正在传输一个没有扩展名的标准CAN标识符。
- R0——保留位。
- DLC——数据长度代码:它定义了发送数据的长度,它是4位。
- Data——数据:最多可传输64位数据。
- CRC——循环冗余校验:它包含用于错误检测的先前应用程序数据的校验和(传输的位数)。
- ACK——确认:它适用于2位。如果接收到准确的消息,则它是显性的。
- EOF——帧结束:它标志着Can帧的结束并禁用位填充。
- IFS——帧间空间:它包含控制器将正确接收的帧移动到其正确位置所需的时间。
另外,标准的CAN帧具有5种不同的消息类型,分别是:
- 数据帧:它由任意字段、数据字段、CRC字段和确认字段组成。
- 远程帧:它请求从另一个节点传输数据,这里的RTR位是隐性的。
- 错误帧:检测到错误时发送。
- 过载帧:它用于提供消息之间的延迟,它在节点变得太忙时传输。
- 有效帧:如果EOF字段是隐性的,则消息有效。否则再次发送消息。
CAN物理层
1、总线
它由一个两线串行链路组成,即CAN_H和CAN_L,它们之间的电压电平决定了传输的是1还是0。这是差分信号,每条信号线中流动的电流相等但方向相反,从而产生场抵消效应,这是实现低噪声排放的关键。
这确保了平衡的差分信号,从而减少了噪声耦合并允许通过电线进行高速率传输。通常情况下,电线是双绞线电缆,总线长度为40m,最多30个节点。它是一种屏蔽或非屏蔽电缆,特性阻抗为120欧姆。
2、CAN收发器
CANH和CANL两根线通常为2.5V,由两个晶体管和2.5V电压源决定。基本上两条线之间的差异应该始终为0。驱动控制决定了施加到CANH和CANL线上的电压。当两个晶体管都导通时,第一个晶体管和二极管两端的电压降为1.5V,使CANH线上拉至3.5V。第二个电压降晶体管和二极管为1V,使CANL线下拉至 1.5V。二极管用于高压保护。
接收器是一个鉴别器电路,当两个输入CANH和CANL相同时输出1,如果两个输入不同则输出0。TXD显性块用于接地故障保护,如果二极管和晶体管过热,热关断块将禁用驱动器控制。
应用示例
控制器局域网在工业和车辆中都有广泛的应用。其中一个主要应用涉及车辆中不同设备之间的通信。另一个可以在不同的微控制器之间,假设用于检测密码,用于满足任何要求,例如使用密码打开锁着的门或打开灯泡等。
基本应用程序由3个微控制器组成,它们使用两条线相互通信,就像在CAN网络中一样。第一个微控制器与键盘连接,第二个与LCD连接,第三个与蜂鸣器和操作灯的继电器连接。当在键盘上输入密码时,第二个微控制器充当接收器,并逐位接收从第一个发送器发送的消息,并将消息显示在LCD上。当整个消息被传输时,第 2个微控制器进行验证,如果密码错误,它会向第3个微控制器发送信号微控制器,它又发送蜂鸣器打开这个信号。当密码正确时,第三个微控制器打开继电器,继而打开灯。
主要优点
CAN协议具有诸多的优势,常见的优势表现在以下几个方面:
- 由于它是分布式控制,因此减少了布线,从而确保提高了系统性能。
- 许多CAN芯片制造商提供数据链路层和与芯片接口的物理层,软件开发人员需要做的只是开发应用程序编码。
- 它提供了在不同电气环境中工作的能力,并确保无噪声传输。
- 由于消息是根据它们的优先级传输的,因此消除了流量拥塞,并且它允许整个网络满足时序约束。
- 它提供无差错传输,因为每个节点都可以在消息传输期间检查错误并发送错误帧。
总结
其实,CAN协议不是基于地址的协议,而是面向消息的协议,CAN中嵌入的消息具有传输数据的内容和优先级。在总线上接收到数据后,每个节点决定是丢弃还是处理数据——然后根据系统的不同,将网络消息发送到单个节点或许多其他节点。CAN通信允许特定节点通过发送RTR(远程传输请求)从任何其他节点请求信息。
它通过传输最高优先级的消息并支持和等待较低优先级的消息来提供无仲裁的自动数据传输。在这个协议中,显性是逻辑0,隐性是逻辑1。当一个节点传输隐性位而另一个节点传输显性位时,显性位获胜。如果两个或多个设备同时开始传输,则基于优先级的仲裁方案决定是否授予继续传输的许可。