【通信接口】CAN总线协议

目录

一、什么是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_HCAN_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),该显性位将掩盖发送节点输出的隐性位,使总线上表现为显性;如果发送节点检测应答位为隐性,那么说明没有节点收到有效帧。

  • 3
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值