基于CAN总线的数据传输与分析讨论
首先我们来讨论一下为什么要使用CAN通信?以及使用CAN通信能给我们带来什么样的方便?
首先不得不说的是CAN通信现在被应用于很多的领域,比如说汽车And so on........CAN通信的好处很简单,它可以以最少的CPU消耗来处理一大批的文件,当然这里所说的文件是指传输的数据之类的,为什么要传输数据呢?因为有些数据你想管理,哈哈哈!
为什么说CAN通信可以减少CPU的消耗呢?因为很简单,CAN把你要处理的特殊数据帮你给处理好了,就好像别人帮你做好了一样,你只要告诉CAN你想要哪些数据就好了,它就会帮你把你想要的数据给你挑选出来,来供你使用。
而且最重要的一点就是CAN的数据传输只是需要两根线就OK了,哈哈哈 ,你很难想像两根线来完成那么多数据的处理吧。通过这两根线,就可以轻松搭建一个最小局域网,简单来说就是让这些控制器通过CAN总线相互打交道,让它们自己嗨起来!
当下我们来分析一下STM32中的CAN通信原理,我所使用的是一款32的单片机(ZET6),不过都一样了,不管使用什么样的控制器,原理都是一样了。
首先来让我们看看CAN的工作框图
哈哈 是不是觉得还是比较简单的,首先允许我说一下那两个电阻是什么东东,这两个电阻如果你学习过射频的话,估计都不用我多说啥,这里照顾一下那些没有接触过射频的童鞋了,这两个电阻其实它有一个好听的名字是叫做终端电阻,用途是用来做阻抗匹配的,减少回波反射的。
(不懂的话可以自己查查)
CAN总线上有两个电平,一个显性,一个是隐性电平。也就是CAN_High,CAN_Low,这两个电平在工作的时候电压差是2.5V。这里不难理解了。如果对这个电平不太了解的你可以看下TGA1050这款芯片,是CAN的一个收发芯片。(你值得了解)
好了我们接下来开始进入重点学习了
CAN呢!它的协议主要是通过5种类型饿帧构成的。
帧类型
帧用途
数据帧
用于发送单元向接收单元传送数据的帧
遥控帧
用于接收单元向具有相同ID的发送单元请求数据的帧
错误帧
用于当检查出错时向其他单元通知错误的帧
过载帧
用于接收单元通知其尚未做好接收准备的帧
间隔帧
用于将数据帧及遥控帧与前面的帧分离开来的帧
由于本人比较懒啦,所以以最重要的一个数据帧来讲解一下
数据帧有7个段构成,即
1、帧起始。表示数据帧开始的段。
2、仲裁段。表示该帧优先级的段。