1 CAN的MAC机制分析
CAN技术规范中的MAC机制是指对媒体访问的控制/仲裁机制。CAN网络上一个节点发送的报文可被网络上所有其他节点监听并应答。当总线开放时,任何CAN节点均可开始发送报文;若多个节点同时开始发送报文,总线访问冲突借助标识符进行逐位仲裁来解决。仲裁期间,每一个发送器都将发送的位电平与在总线上监视到的电平进行比较。若相同,则该单元可以继续发送;若不同,则该单元丢失仲裁,且须退出而不再发送后续位。
对于多个节点同时发送情况下总线访问的仲裁,CAN采用的是带优先权的非破坏性逐位仲裁机制来解决总线冲突的;对于一个节点想要发送而另一个节点正在发送的总线访问情况,CAN采用的是载波监听技术。这二者共同的基础是CAN总线上一个节点发送的报文可被所有节点(包括自身)监听。带优先权的非破坏性逐位仲裁机制所依赖的其他基础是显性位(“O”)的优先权高于隐性位(“l”),即当一个隐性位和一个显性位同时被发送至总线上时,总线上所出现的结果为一个显性位,“非破坏性”即是对高优先权的“O”而言的。参与逐位仲裁的位为仲裁场(11位标识符和RTR位,对于标准格式),如图1所示。
2 硬件支持
CAN报文优先级检测系统由4个CAN通信节点组成,通过各节点的CAN—H和CAN—L端口并联到总线上,总线两端各接上一个120Ω左右的终端电阻,构成一个闭合回路。4个节点的主体结构是基本相同的,根据系统功能的需要每个节点在硬件结构上又有所差别。系统总体结构如图2所示。每个节点均有键盘和显示单元;节点1、2、3为发送节点,每个节点均有“启动发送”按钮;节点1还有“停止发送”按钮,并可对CAN总线电平进行检测,亦即可对CAN总线MAC(媒体访问控制)帧进行检测;节点4为接收节点,可显示接收到的报文。
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监听总线的结果是:发现有比其本身优先级高的报文正在发送,因此要边监听边等待。这时节点l停止发送后,节点2和3会同时竞争总线,从而创造了使不同优先级的报文同时竞争总线的条件。根据节点4接收到报文的先后顺序即可验证节点2和节点3所发报文的优先级了,并且两个节点发出的报文都被成功接收,也验证了CAN总线的非破坏性仲裁机制。另外,通过节点1检测到的MAC帧也能确定节点2和3的报文优先级。这里要注意的是,SENT_ID_12的报文作为检测开始的标志。使节点l停止连续发送报文,让节点1再发送1帧ID为SENT_ID_12的报文,同时开始检测总线电平,捕捉MAC帧。在第3次检测到连续11个“l”时停止检测,即第3帧报文结束时停止检测。节点1将检测到的MAC帧的各位值通过显示单元顺序地显示出来,并与节点2和3发送的MAC帧相比较,可体现节点2和3的报文优先级。这就双方面验证了报文优先级,保证了准确性和可信度。