CAN总线的初步认识
1.概述:
CAN(Controller Area Network)即控制器局域网,是一种能够实现分布式实时控制的串行通信网络。一般形式是一个pc端(包括嵌入式系统、单片机系统)与多个设备(传感器、仪表、电机等)建立的实时通讯模型。
2.原理:
当一个节点向另一个节点发送数据时,cpu将数据和标识符交给本节点的CAN芯片,并进入准备状态;一但该CAN芯片被总线分配到,就变为发送状态,CAN芯片将要发送的数据按规定的报文形式发出。此时,总线上的其他节点进入接收状态,所有节点都要对其进行接受,判断是不是发送给自己的报文,如果不是就忽视,是的话对数据进行解读。
3.特点:
- 总线上的任意节点可在任意时刻给其他节点发送数据。
- 传输速度可达1Mbps;通信距离可达10km;节点数可达110个;传输速度与距离成反比。
- 传输方式有点对点、点对多点、点对全局。
- 可靠的检错机制,信息遭到破坏后自动重发,使得数据的出错率较低。严重出错时自动与总线切断联系。
- 采用非破坏性仲裁总线结构,每个节点都有不同的优先级。
4.通讯协议
常用的帧类型:数据帧,远程帧,过载帧,错误帧,帧间隔。
- 数据帧:将发送器发送的数据传送到接收器。
- 远程帧:请求远程特定节点发送数据帧。
- 过载帧:用于接收单元通知其尚未做好接收准备的帧。
- 错误帧:任何节点检测到错误,就发生错误帧。
- 帧间隔:用于将数据帧及遥控帧与前面的帧分离开来的帧。
5.帧结构
(1)数据帧:包括帧开始、仲裁段、控制段、数据段、CRC段、ACK段、帧结束。数据帧根据仲裁段长度不同分为标准帧(2.0A)和扩展帧(2.0B)。
- 帧开始:帧开始由一个显性位(低电平)组成,发送节点发送帧起始,其他节点同步于帧开始。
- 帧结束:7个隐性位(高电平)组成。
- 仲裁段:CAN总线控制器在发送数据的同时监控总线电平,如果电平不同,则停止发送并做其他处理。如果该位位于仲裁段,则退出竞争;如果位于其他段,则产生错误。帧id越小,优先级越高;对于前11位id相同的帧:数据帧RTR位为显性,远程帧RTR位为隐性,所以数据帧优先于远程帧;标准帧的IDE位为显性,扩展帧的IDE位为隐性,所以标准帧优先于扩展帧。
- 控制段:共6位,标准帧的控制段由IDE(扩展帧标志位)、保留位r0和数据长度代码DLC组成;扩展帧控制段则由r1、r0和DLC组成。
- 数据段:为0-8字节,短帧结构,实时性好,适合汽车和工控领域。
- CRC段:CRC校验段由15位CRC值和CRC界定符组成。
- ACK段:当接收节点收到的帧起始到CRC段都没有错误时,它将在ACK段发送一个显性电平,发送节点发送隐性电平,线与结果为显性电平。
图1 数据帧的构成
(2)远程帧:分为6段,也分为标准帧和扩展帧,且 RTR位为1(隐性电平)。
比较内容 | 数据帧 | 远程帧 |
ID | 发送节点的ID | 被请求节点的ID |
SRR位 | 0(显性电平) | 1(隐性电平) |
RTR位 | 0(显性电平) | 1(隐性电平) |
DCL | 发送数据的长度 | 请求数据的长度 |
是否有数据段 | 是 | 否 |
CRC检验范围 | 帧起始+仲裁段+控制段+数据段 | 帧起始+仲裁段+控制段 |
图2 数据帧和远程帧的区别
(3)过载帧:当某节点没有做好接收的“准备”时,将发送过载帧,以通知发送节点。
(4)帧间隔:用来隔离数据帧、远程帧与他们前面的帧,错误帧和过载帧前面不加帧间隔。
(5)错误帧:CAN是可靠性很高的总线,但是他也有五种错误。
- CRC错误:发送与接收的CRC值不同发生该错误
- 格式错误:帧格式不合法发生的错误
- 应答错误:发送节点在ACK阶段没有接收到应答信息发生该错误
- 位发送错误:发送节点在发送信息时发现总线电平与发送电平不符发生该错误
- 位填充错误:通讯线缆上违反通讯规则是发生该错误
当发生这五种错误之一时,发送节点或接受节点将发送错误帧。错误帧由错误标志和错误界定符构成。主动错误标志用6个位的显性位表示,被动错误标志用6个位的隐性位表示;错误界定符由8个位的隐性位构成。
5.总线电平
采用差分信号通讯,由CAN_H和CAN_L组成,电平分显性电平和隐形电平。
(1)ISO11898是通信速度为125kbps-1Mbps的CAN高速通讯标准
- 显性电平:CAN_H - CAN_L=2v 左右,对应逻辑0
- 隐形电平:CAN_H - CAN_L=0v 左右,对应逻辑1
(2)IOS11519是通信速度为125kbps以下的CAN低速通信标准
- 显性电平:CAN_H - CAN_L=3v 左右,对应逻辑0
- 隐形电平:CAN_H - CAN_L=-1.5v 左右,对应逻辑1
6.构建一个CAN节点:
构建节点由底向上分为四个部分:
- CAN节点电路:接线的方法。
- CAN控制器驱动:供上层程序或库的调用,是数字信号转换成模拟信号的重要步骤。
- CAN应用层协议:已经实现好的一些函数,供给应用程序通过包含头文件进行调用。
- CAN节点应用程序:基于CAN协议,进行初始化CAN、发送CAN报文、接受CAN报文。除了完成通讯的功能,还会调用一些控制特定功能的电路函数。特定功能包括信号的采集、人机显示等。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
