一种CAN总线高层通信协议的设计与实现
1 引言
can全称为controller area network,即控制器局域网,由德国bosch公司最先提出,是国际上应用最广泛的现场总线之一。最初can 被设计作为汽车环境中的通讯,在汽车电子控制装置之间交换信息形成汽车电子控制网络。由于其卓越的性能、极高的可靠性和低廉的价格现已广泛应用于工业现场控制、医疗仪器等众多领域[1][2]。
can协议是建立在osi 7层开放互连参考模型基础之上的。但can协议只定义了模型的最下面两层:数据链路层和物理层,仅保证了节点间无差错的数据传输。can的应用层协议必须 由can 用户自行定义,或采用一些国际组织制订的标准协议。应用最为广泛的是devicenet和canopen,分别广泛应用于过程控制和机电控制领域。但此类协议一般结构比较复杂,更适合复杂大型系统的应用。笔者在研制一种基于can总线的分布式高频开关电源充电机系统的过程中设计了一种适合于小型控制系统的 can总线高层通信协议。
2 can的特点[3]
can 是一种多主方式的串行通讯总线,基本设计规范要求有高的位速率、抗电磁干扰性,而且要能够检测出总线的任何错误。当信号传输距离达10km时,can仍可 提供高达50kbps 的数据传输速率。
can具有十分优越的特点:
(1) 较低的成本与极高的总线利用率;
(2) 数据传输距离可长达10km,传输速率可高达1mbps[7];
(3) 可靠的错误处理和检错机制,发送的信息遭到破坏后可自动重发;
(4) 节点在错误严重的情况下具有自动退出总线的功能;
(5) 报文不包含源地址或目标地址,仅用标志符来指示功能信息和优先级信息。
3 can的技术规范
(1) 帧类型
在can总线中,有四种不同的帧类型[4][5]:
·数据帧(data frame) 数据帧带有应用数据;
· 远程帧(remote frame) 通过发送远程帧可以向网络请求数据,启动其他资源节点传送他们各自的数据,远程帧包含6个不同的位域:帧起始、仲裁域、控制域、crc域、应答域、帧结尾。仲裁域中的rtr位的隐极性表示为远程帧;
·错误帧(error frame)错误帧能够报告每个节点的出错,由两个不同的域组成,第一个域是不同站提供的错误标志的叠加,第二个域是错误界定符;
·过载帧 (overload frame)如果节点的接收尚未准备好就会传送过载帧,由两个不同的域组成,第一个域是过载标志,第二个域是过载界定符。
(2) 数据帧结构
数据帧由以下7个不同的位域(bit field)组成:帧起始、仲裁域、控制域、数据域、crc域、应答域、帧结尾。其标准帧结构如表1所示:
表1 数据帧的结构[4]
·帧起始:标志帧的开始,它由单个显性位构成,在总线空闲时发送,在总线上产生同步作用。
·仲裁域: 由11位标识符(id10-id0)和远程发送请求位(rtr)组成,rtr位为显性表示该帧为数据帧,隐性表示该帧为远程帧;标识符由高至低按次序发送,且前7位 (id10-id4)不能全为显性位。标识符id用来描述数据的含义而不用于通信寻址,can总线的帧是没有寻址功能的。标识符还用于决定报文的优先权,id值越低优先权越高,在竞争总线时,优先权高的报文优先发送,优先权低报文退出总线竞争。can总线竞争的算法效率很高,是一种非破坏性竞争。
· 控制域:为数据长度码 (dlc3-dlc0),表示数据域中数据的字节数,不得超过8。
·数据域:由被发送数据组成,数目与控制域中设定的字节 数相等,第一个字节的最高位首先被发送。其长度在标准帧中不超过8个字节。
·crc域:包括crc(循环冗余码校验)序列(15位)和crc界定 符(1个隐性位),用于帧校验。
l应答域:由应答间隙和应答界定符组成,共两位;发送站发送两个隐性位,接收站在应答间隙中发送显性位。应答界定符必须是隐性位。
·帧结束:由7位隐性位组成。
4 自订can高层协议
can的高层协议也可理解为应用层协议,是一种在现有的底层协议(物理层和数据链路层)之上实现的协议。由于充电机系统的结构比较简单,网络规模也比较 小。因此我们自行制订了一种简单而有效的高层通信协议。
技术规范can2.0a规定标准的数据帧有11位标识符,用户可以自行规定其含义,将所需要的信息包含在内。在充电机系统中,每一个节点都有一个唯一的地址,地址码和模块一一对应,通过拨码开关设定,总线上数据的传送也是根据地址进行的。由于本系统规模较小,节点数少于32个,因此为每个模块分配一个5位 的地址码,同一系统中地址码不得重复,系统初始化时由外部引脚读入。将标识符id9-id5定义为源地址,id4-id0定义为目的地址,本协议中从模块 的目的地址全填0,表示数据是广播数据,所有节点都可接收,主模块中目
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)