目录
一、什么是CAN
1、CAN 的概念
2、节点构成(CAN 总线通信模型)
3、差分信号(电平特性)
4、CAN 总线的特点
二、CAN 总线协议的通信过程
1、发送过程
2、接收过程
3、概括
三、CAN 通信帧的分类
一、什么是CAN
1、CAN 的概念
CAN 是 Controller Area Network 的缩写,即控制器局域网络。最初的动机是为了解决电子控制系统中不断增加的信号线,CAN总线是一个单一的总线,所有的外围器件都可以被挂载到该总线。(大致示意图见下图)
ps:120Ω 的电阻用于匹配总线阻抗,吸收信号发射及回拨,提高数据通信的抗干扰能力
2、节点构成(CAN 总线通信模型)
每一个节点都对应一个外围器件,每个外围器件要接入到CAN总线都需包含:CAN 控制器、CAN收发器
- CAN控制器负责上层应用层信号和逻辑电平之间的转换。
- CAN 收发负责逻辑电平和物理信号之间的转换。
3、差分信号(电平特性)
CAN 总线使用两根线来连接各个单元:CAN_H 和 CAN_L。CAN 控制器通过判断这两根线上的电位差来得到总线电平(逻辑电平)。CAN 标准有两种,IOS11898 和 IOS11519,两者差分电平特性不同。以 IOS11898 标准为例。
- 逻辑电平 0:也叫显性电平
- CAN_H = 3.5 V,CAN_L = 1.5 V
- 电位差 = 2 V
- 逻辑电平 1:也叫隐性电平
- CAN_H = CAN_L = 2 V
- 电位差 = 0 V
CAN 总线是通过显性电平和隐形电平的变化来将具体的数据发送出去,总线上无节点传输数据时,一直处在隐形状态。
4、CAN 总线的特点
(1) 多主控制
CAN 总线没有主从之分,每个设备都可以主动发送数据,最先访问总线的单元获得发送权,剩余总线禁止发送数据。
如果多个单元同时开始发送时,高优先级 ID(数据帧中的一个字段)的单元可获得发送权
(2) 控制通信速度
根据整个网络的规模,可设定适合的通信速度。
在同一网络中,所有单元必须设定成统一的通信速度。即使有一个单元的通信速度与其它的不一样,此 单元也会输出错误信号,妨碍整个网络的通信。不同网络间则可以有不同的通信速度。
(3) 远程数据请求
可通过发送“遥控帧” 请求其他单元发送数据。
(4) 具有错误检测、通知、恢复功能
所有的单元都可以检测错误(错误检测功能)。
检测出错误的单元会立即同时通知其他所有单元(错误通知功能)。
正在发送消息的单元一旦检测出错误,会强制结束当前的发送。强制结束发送的单元会不断反复地重新 发送此消息直到成功发送为止(错误恢复功能)。
(5) 系统的柔软性
与总线相连的单元没有类似于“地址”的信息。因此在总线上增加单元时,连接在总线上的其它单元的软硬件及应用层都不需要改变
二、CAN 总线协议的通信过程
假设CAN总线处在隐性状态,即没有数据的传输。
1、发送过程
假设节点A开始发送数据,上层应用层发送信号,假设CAN控制器转换成了逻辑电平 0,经由 TxD 发给 CAN 收发器,然后转换成对应的电压(电压大小详见上面第二部分《差分信号》的表),这样就完成了 1 bit 数据的发送。
发送完一帧数据以后,接下来我们要考虑的是接收了。
2、接收过程
CAN是广播式地给当前局部网络的所有节点发送数据帧的,即接收时总线上的每一个设备都会收到这一帧的数据。CAN 的帧格式是面向内容的编址方案,可以认为报文是通过内容寻址,也就是说,报文的内容隐式地确定其地址。
节点B:检查了内容发现不是发给自己的,直接过滤
节点C:同样发现不是发给自己的,直接过滤
节点D:读取这一帧数据
节点D 的CAN收发器将总线上的差分电平转换成逻辑电平,随后再由CAN控制器转换成信号发送给上层。
3、概括
- 发送方通过使总线电平发生变化,将其信息传递到CAN总线上。
- 接收方通过监听总线电平,将总线上的消息读入自己的接收器。
三、CAN 通信帧的分类
了解了通信的过程,接下来我们要进一步了解每一个节点发送的一帧报文。其实CAN 通信帧有很多种,有用于数据传输的、远程控制的、错误通知等等。其中最为常用的就是用于传输数据的数据帧。
帧 | 用途 |
数据帧 | 用于发送单元向接收单元传送数据的帧。 |
遥控帧 | 用于接收单元向具有相同 ID 的发送单元请求数据的帧。 |
错误帧 | 用于当检测出错误时向其它单元通知错误的帧 |
过载帧 | 用于接收单元通知其尚未做好接收准备的帧 |
间隔帧 | 用于将数据帧及遥控帧与前面的帧分离开来的帧 |
下面重点介绍数据帧。其他帧可以参考:深入理解CAN总线
数据帧还可以根据仲裁段长度不同,分为标准帧、扩展帧。
(1) 帧起始、帧结束
帧起始由一个显性位(低电平)组成,帧结束由7个隐形位(高电平)组成
(2) 仲裁段
表示该帧优先级的段,仲裁段的作用是解决多点竞争问题。
每次可能有好几个设备同时要往总线发送数据,仲裁段包含帧ID,帧ID越小,优先级越高,优先级高拥有优先使用总线的权利。
(3) 控制段
表示数据的字节数及保留位的段。
(4) 数据段
为0-8字节,短帧结构,实时性好,适合汽车和工控领域。CAN-FD的数据段最高可以发送 64 字节
(5) CRC段
检查帧的传输错误的段。
(6) ACK段
表示确认正常接收的段。任何节点如果准确无误地接收到帧,都要向总线上发送显性位(逻辑电平0),该显性位将掩盖发送节点输出的隐性位,使总线上表现为显性;如果发送节点检测应答位为隐性,那么说明没有节点收到有效帧。