引言
作为国际标准ISO11898和ISO11519的控制器局域网CAN[1],虽然最初是为汽车的监测、控制系统而设计的,但由于它在性能、可靠性等方面的突出优势,现已广泛地应用于各工业领域[2]。在CAN总线技术中,MAC机制是基本的和关键的部分之一[3]。在CAN的技术规范中首先提到的就是仲裁,而仲裁规则是通过报文优先级体现的。目前国内外虽然对CAN报文优先级有一些理论研究和分析,但尚未见到有文献介绍有效的方法或手段来产生和检测报文的优先级。这在很大程度上阻碍了CAN总线的进一步研究与应用。本文给出了一种CAN报文优先级的产生与检测方法,清晰地解析了CAN总线的非破坏性逐位仲裁机制。
1 CAN的MAC机制分析
CAN技术规范中的MAC机制是指对媒体访问的控制/仲裁机制[45]。CAN网络上一个节点发送的报文可被网络上所有其他节点监听并应答。当总线开放时,任何CAN节点均可开始发送报文;若多个节点同时开始发送报文,总线访问冲突借助标识符进行逐位仲裁来解决。仲裁期间,每一个发送器都将发送的位电平与在总线上监视到的电平进行比较。若相同,则该单元可以继续发送;若不同,则该单元丢失仲裁,且须退出而不再发送后续位。
对于多个节点同时发送情况下总线访问的仲裁,CAN采用的是带优先权的非破坏性逐位仲裁机制来解决总线冲突的;对于一个节点想要发送而另一个节点正在发送的总线访问情况,CAN采用的是载波监听技术。这二者共同的基础是CAN总线上一个节点发送的报文可被所有节点(包括自身)监听。带优先权的非破坏性逐位仲裁机制所依赖的其他基础是显性位(“0”)的优先权高于隐性位(“1”),即当一个隐性位和一个显性位同时被发送至总线上时,总线上所出现的结果为一个显性位,“非破坏性”即是对高优先权的“0”而言的。参与逐位仲裁的位为仲裁场(11位标识符和RTR位,对于标准格式),如图1所示。
图1 CAN的非破坏性逐位仲裁
2 硬件支持
CAN报文优先级检测系统由4个CAN通信节点组成,通过各节点的CANH和CANL端口并联到总线上,总线两端各接上一个120 Ω左右的终端电阻,构成一个闭合回路。4个节点的主体结构是基本相同的,根据系统功能的需要每个节点在硬件结构上又有所差别。系统总体结构如图2所示。每个节点均有键盘和显示单元;节点1、2、3为发送节点,每个节点均有“启动发送”按钮;节点1还有“停止发送”按钮,并可对CAN总线电平进行检测,亦即可对CAN总线MAC(媒体访问控制)帧进行检测;节点4为接收节点,可显示接收到的报文。
图2 系统结构
3 CAN报文优先级的产生与检测方法
3.1 基本原理
根据CAN的MAC机制及仲裁规则,如果高优先级的报文一直占用着总线,则其他低优先级的报文将无法获得仲裁,但是会尝试重新发送。只有当高优先级报文不再占用总线时,低优先级的报文才可能发送成功。因此,检测报文优先级的前提和关键是如何让不同优先级的报文同时竞争总线。
为方便说明,首先命名标识符。节点1要发送两种报文,将其发送报文标识符分别命名为SENT_ID_11和SENT_ID_12,将节点2和节点3发送报文标识符分别命名为SENT_ID_2和SENT_ID_3。报文的优先级顺序:SENT_ID_11>SENT_ID_2,SENT_ID_11>SENT_ID_3,SENT_ID_12>SENT_ID_2,SENT_ID_12>SENT_ID_3,SENT_ID_11不同于SENT_ID_12,SENT_ID_2不同于SENT_ID_3。使节点1连续发送标识符为SENT_ID_11的报文,目的是让高优先级的报文占用总线,使总线一直处于“忙”的状态。然后使节点2和节点3分别开始发送标识符为SENT_ID_2和SENT_ID_3报文,节点2、3发送的报文优先级不同且均比节点1优先级低。此时,节点2和3监听总线的结果是:发现有比其本身优先级高的报文正在发送,因此要边监听边等待。这时节点1停止发送后,节点2和3会同时竞争总线,从而创造了使不同优先级的报文同时竞争总线的条件。根据节点4接收到报文的先后顺序即可验证节点2和节点3所发报文的优先级了,并且两个节点发出的报文都被成功接收,也验证了CAN总线的非破坏性仲裁机制。另外,通过节点1检测到的MAC帧也能确定节点2和3的报文优先级。这里要注意的是,SENT_ID_12的报文作为检测开始的标志。使节点1停止连续发送报文,让节点1再发送1帧ID为SENT_ID_12的报文,同时开始检测总线电平,捕捉MAC帧。在第3次检测到连续11个“1”时停止检测,即第3帧报文结束时停止检测。节点1将检测到的MAC帧的各位值通过显示单元顺序地显示出来,并与节点2和3发送的MAC帧相比较,可体现节点2和3的报文优先级。这就双方面验证了报文优先级,保证了准确性和可信度。
3.2 软件实施
软件实施是严格依据基本原理设计的,各个节点的软件实施流程如图3所示。流程的几点说明:
① 配置CAN位定时寄存器时要保证各节点的通信波特率严格一致;
② 配置CAN接收码和接收屏蔽寄存器时要保证节点1、2和3屏蔽总线上所有报文,节点4只接收来自节点2和节点3的报文;
③ 节点1软件流程中第1次配置仲裁场、控制场及数据场是为连续报文发送作准备,第2次配置是为标定报文检测起始标志作准备。
④ 节点1软件流程中第1次键盘扫描目的是为启动连续报文发送,第2次键盘扫描是为停止连续报文发送。
⑤ CAN的MAC帧检测是过检测单元中断服务程序实现的。
图3 各节点软件流程
3.3 应用实例
以CAN总线实验系统为平台,利用CAN总线优先级检测方法检测报文优先级的实例如表1、表2和表3所列。表1给出了各节点实际设置发送的报文;根据方法的基本原理,表2给出了报文过滤设置情况;表3给出了节点1实际检测到的CAN的MAC帧(灰色阴影标示位为位填充),其检测到的顺序从前到后依次是SENT_ID_12、SENT_ID_2、SENT_ID_3,实际检测情况与理论分析相符,进而报文优先级得以验证。另外,节点4液晶显示接 41收到的报文顺序也与理论分析相符合,更进一步证实了方法的可行性。
表1 各节点发送的报文
表2 各节点通信设置及报文过滤设置
表3 检测到的MAC帧
4 结论
① CAN的MAC机制是带优先级的非破坏性逐位仲裁机制,因此,CAN报文优先级的产生应以此为基础。
② 本文提出了一种CAN报文优先级产生与检测的方法。该方法能够直观地展示CAN总线上信息优先级的竞争情况,有助于深入掌握、理解CAN总线的报文优先级、MAC机制及其相关技术内容;有助于对CAN总线机理与实质的深入研究,为更好地应用CAN总线奠定了理论基础。
③ 本文所提出的方法已通过实验系统验证,结果证明该方法可行且效果良好。