首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

CAN优先级倒置原因与对策

CAN优先级倒置原因与对策

关键字: CAN优先级倒置  CAN总线  毛刺  
CAN总线是代表性的基于消息优先级进行调度的事件触发协议。为了保障通信的正常运行,必须实现帧开始时的硬同步以及无帧发送时的毛刺滤除。在现有CAN总线协议中,这2个设计的组合在特定场合会引起高优先级消息失去与同时发生的低优先级消息的竞争机会,即优先级倒置。优先级倒置的后果是高优先级消息的送达时间延迟,送达时间的理论分析结果不再正确。在完全兼容CAN总线的条件下,提出了在总线空闲时以及在服务间隔第3位处理毛刺的方法。它对于优先级倒置有改进,但对于毛刺较长而与低优先级消息帧开始位(SOF)相连引起的倒置仍无法解决。

CAN总线起始于1986年左右,至今仍广泛应用。现在人们对安全的要求已大为提高,所以要不断仔细审视CAN的安全性能。现在已经发现的重要的CAN问题有:在消极报错状态下可能出现等效离线,使节点不能收发的时间相当长[1];错帧漏检率的估计不准,特别在误码率高时比Bosch CAN2.0数据高多个数量级[2],在单目的地址时影响数据正确性,在多个目的地址时会影响数据一致性;标准的振荡源精度要求偏低[3],使误用廉价器件成为可能,影响系统的稳定性;本文发现的优先级倒置的可能性,使调度分析结果的可信度下降;在数据帧倒数第二位的局部错可能引起不一致的接收重复或丢失[4]。所以在FlexRay尚未达到预定目标、无论在可靠性还是价格上能取代CAN以前,对CAN作进一步的改进仍然是非常有意义的。

CAN是一种代表性的事件触发通信协议,同时发生的多个通信请求将按照消息的优先级进行无损仲裁,高优先级的胜出。按照消息的优先级进行无损仲裁是CAN原始专利的唯一权利要求[5]。对于低优先级的消息而言,送达时间将受到高优先级消息的阻扰,在高优先级消息为周期性时,最坏送达时间是可以预先计算出的[6]。如果能安排好发送消息的初始相位并作宽松的时钟同步,这个最坏送达时间可以大为减少。事件触发协议的优点是总线带宽可以得到充分利用。另一个优点是高优先级消息可得到迅速发送。但是由于工业环境中普遍存在的电磁干扰,总线上会有毛刺,CAN总线的标准中已考虑到应对方法。现在发现毛刺应对方法可能使节点的同步受到影响,从而损及高优先级消息的发送机会,出现优先级的倒置,动摇了CAN总线的基本性能。

1 毛刺的存在

车内电磁环境恶劣, ISO 76372/3总结出代表性的传导和辐射干扰。有人专门作了辐射干扰的实验,参考文献[7]的实验中用24 V蓄电池给车内常用的继电器供电(CAN系统供电是独立的),电源线与CAN电缆靠得很近,在电缆线有屏蔽、线长为2 m时,手动开关继电器时可以看到CAN波形上叠加的毛刺,辐射干扰实验结果如图1所示。


图1 辐射干扰实验结果

实际汽车上也见到CAN总线失效的报告[8]:丰田汽车在经销商产品报告中确认,由任何原因召回的车中发现丢失CAN数据的记录有292宗。毛刺是引起CAN总线出错的可能原因,其具体诱发过程需要仔细分析,不能掉以轻心。

2 CAN位时间与消息仲裁原理

CAN总线把位时间划分为NBT等分的时间片,称为Tq。CAN总线控制器按Tq对总线上的差分电平进行采样,以决定内部状态。当总线上没有通信时,称为总线空闲,电平差在0~0.5 V,逻辑值为“1”。电平差为0.9 V以上时逻辑值为“0”。 由图1可知,存在“0“毛刺,也存在“1“毛刺。CAN总线驱动器的特性是线与,当“1”和“0”同时发生时,总线的电平为“0”,这便是仲裁功能。一帧开始发送的第一位是“0“,称为SOF,然后是消息的标识符ID。ID代表了消息的优先级,每个节点通过位采样知道总线上仲裁的结果,正常工作时如果发送“1”而读回“0”,表示本发送节点本次ID发送失败,需等下一次帧发送机会。

总线空闲时,一个有发送要求的节点须先观察是否有别的节点已经开始发送,如已开始就不能发送。正是这里,由一个“0”毛刺开始的时段可以误解为别的节点已开始传送SOF,毛刺阻断了该节点的发送(不管该节点要传送的消息优先级有多高)。

由于传送电缆延迟以及中间器件(如光隔离)的延迟τ,节点将见不到提前量τ以内发送的别的节点的SOF。同理,别的节点要经过τ以后才见到该节点发送的SOF,τ以后别的节点就因总线上已有发送而不允许发送了。这样,在本节点请求时刻±τ内的发送被认为是“同时”请求发送,它们将按ID仲裁。对迟于其τ的其他低优先级帧的发送,它也是必然胜出的。

3 CAN位时间同步的有关规定

CAN的位时间分为同步段(Sync)、传输段(Tprop)、缓冲1段(Ph1)与缓冲2段(Ph2),位值采样在Ph1 与Ph2之间。位值变化时将有跳变沿,只有1/0为同步用的跳变沿。跳变沿决定了相位差e,跳变沿在Ph2内e为负,在Sync内为0,在Tprop和Ph1内为正。每个节点根据e实行同步,同步的修正量受同步的种类限制。同步分两种:硬同步与重同步。硬同步对应帧开始时的情况,重同步对应帧内有同步沿时的情况。对重同步而言,每次的修正量不能大于称为重同步宽度的可预先设定的量SJW,SJW=min(Ph1,Ph2)。
返回列表