RT-Thread上的CAN总线介绍以及驱动编写
昨晚很荣幸邀请到李工在RT-Thread微信群进行RT-Thread上的CAN驱动和应用讲座。小编整理了讲座内容,特发出讲义以供享用。
讲师:李起伟,任职于煤炭科学技术研究院有限公司,助理研究员,硕士,现主要从事嵌入式系统与煤矿安全监测监控系统的研究工作
分享主题:RT-Thread上的CAN驱动和应用
大家晚上好,今天跟大家探讨一下RTT上的CAN驱动和应用相关一些内容,主要有三个方面,第一项介绍一下CAN总线的基础知识,主要是一些帧格式的介绍。第二项是RTT上的CAN驱动的一个编写,这部分内容主要介绍一些CAN设备的读和写以及中断处理函数的驱动编写,中断处理函数主要说一下接收部分的处理。最后一项就是介绍一下CAN数据的处理现场的编写,整个内容都写得比较浅,然后在咱们这个探讨内容结束之后,我给大家发一个CAN总线的基础教程,然后另外我写的这部分驱动包括处理现场也是我在实际产品当中应用的,随后我把这部分内容的代码然后整理一下,之后也放出来。
我们就开始第一部分的内容,,说一下CAN的这个特性吧,在这个CAN的介绍当中会有跟这个modbus总线会有一些简单的对比,那么CAN总线它是一个多主站的结构,在总线上挂的这个所有的节点,他们的节点地位都是平等的,就是所有的节点都可以向总线当中主动地发送数据,不需要等待其他的节点的就是跟他发命令说我才可以往上发,这一点是跟modbus的区别,就是说modbus总线,他是一主多从的,在总线上只有一个主节点,其他节点都是从机,从机只能被动地根据主机的命令做出相应的回复或者是动作,当然这些节点再往总线上发送数据的时候会有一个优先级的问题。
在CAN总线当中,它有一个种CAN总线仲裁的机制,它主要是通过报文ID来实现的,那么在CAN总线当中执行的是"线与"操作,0是属于显性电平,1是隐性电平。这样的话进行限于之后报名ID越小,那么他在总线竞争当中优先级也就越高,报文ID或者说是这个标识符与这个节点的ID或者节点序号,这是两个完全不同的概念,就是在这个报名ID当中其实可以包,因为它在扩展的帧当中有29位,可以包含很多有意义的内容,你都可以帮放在这个标识符当中。
在这个标识符当中,我们可以把发送节点的序号类型、接受节点的序号类型甚至安装位置等一系列信息都包含在那里,所以说标识符它在一定程度上就描述数据的含义,这样的话就在某些特定应用当中可以对标识符进行过滤,就是说我需要的我才接受,不需要的我就可以过滤掉,然后这样的话CPU呢不需要进行参与一些操作,完全由CAN控制器就可以完成了。
modbus总线一些协议栈也可以对报文进行过滤,但是这是需要CPU进行参与的,这样的话就会占用CPU,也就是说当modbus总线上有数据的时候,所有节点都是要参与的,这样的话一旦modbus总线上有数据,所有的节点当前正在执行的任务都会被打断,所以这样的话也是CAN总线跟modbus总线的区别,或者是一点优势吧。
因为CAN总线是是一种差分电平,所以它使用那个双绞线作为它的总线传输介质,在1Mbps的情况下,总线长度一般会小于40米,我们看这个U线这张图,从现在传输速率跟它的传输距离在一定程度上是成反比例关系的,而我们在实际应用当中,曾经做到过在5Kbps的情况下达到了7到8公里,而且还是一种多分叉多分枝这种结构。总线结构比较复杂,而不是我们通常见的一条总线或母线,节点都单独的挂在这个总线路线上,在实际运用当中,这种情况其实很少见。
说一下CAN协议的版本,那么目前主要就是2.0B,是可以兼容11位和29位两种ID的报文,就是说标准帧和扩展帧都可以兼容,具体的协议内容大家可以去查阅一下相关的文档,这里就不再多说。
CAN总线当中主要的帧格式主要数据帧和远程侦。数据帧也分两种,就是标准帧和扩展帧,远程侦同样有对应的标准帧和扩展帧。
对这两种帧格式来简单地介绍一下,标准帧和扩展帧主要区别就是在帧ID的位数上,标准帧是11位ID,扩展帧是29位ID。我们看标准帧,它有一个隐性电平帧起始,之后是11位的帧ID,然后是一个RTR位,RTR位的意思是什么呢?远程传送请求位,那这位是0就是数据帧,1的话就代表远程帧,显性电平,也就是说数据帧的优先级要高于远程帧,那么在进行总线仲裁的时候,数据帧获得总线的控制权。用来区别标准帧和扩展帧的这位叫做标识符扩展位。0代表标准帧,1代表扩展郑这样的话,当标准帧和扩展帧在进行争夺总
- CAN总线镍氢电池管理解决方案(04-23)
- CAN总线在机车监控系统中的应用(04-04)
- 基于can总线技术的电子控制系统单元在汽车网络系统中的应用(07-16)
- CAN总线+单片机实现通信网络设计(08-27)
- 基于S3C2440处理器和WinCE的智能车载仪表设计(02-04)
- 基于CDMA和CAN总线的车辆远程故障诊断系统(02-20)