引言
一般来说,一次通信的任务是不可以中断的,只有CAN总线例外,出错之后,CAN有报错帧来提前结束当前传送帧。那么这种中断能力能否扩展,扩展了又有什么好处?
IntCAN是在CAN总线基础上的一种设计,目前还在研究之中,它不仅要解决已知的CAN总线的各种安全性问题(错帧的漏检率大、等效离线、假冒错和不一致接收),而且还考虑了2级中断的引入。本文主要分析2级中断的各种应用的可能性及其给用户带来的好处。希望对这些问题的讨论有助于改进协议设计,引导系统应用功能的提升,推动产业链的形成。
12级中断如何产生
CAN总线收发器的输出有两个状态:隐位(1)的高阻状态和显位(0)的电平差压。总线上只要有一个节点输出0,所有节点都会收到0,写0的节点就可以打断当前的传送,实现中断。CAN总线的报错帧就属于中断。
CAN总线的报错帧由两部分组成,第1部分是由6~12位0构成的报错标志(Error flag),第2部分是8位1构成的报错帧分界符(Error frame delimiter)。在分界符内的显位按CAN标准是错误,将会导致再次报错。IntCAN因为添加了中断这种新的帧形式及其规定,协议运行状态种类大大增加,中断帧的定义也作了改变,并着重解决各节点有局部错之后如何恢复帧收发的同步,以避免局部出错与相互作用形成的系统崩溃。目前已经有了解决方案,不会出现冲突形成的系统崩溃。
IntCAN中断帧的第1部分是6位0构成的中断标志(Interrupt flag),第2部分是由两个6位数构成的中断识别位(Interrupt identification)。当识别位的第一个6位是6个1时,就是1级中断,相当于原来CAN总线的报错帧。所有节点收到报错标志之后可能有回应的报错(Echo),与识别位的第1个6位重叠,原来发送中断识别的第1个6位的节点将重发此6位。当识别位的第1个6位不是6个1时,可以是2级中断,而由识别的第2个6位再细分分类。例如,识别的第1个6位是00 0111(或11 1000)时,它代表2a级中断,识别的第2个6位是00 0111时,整个中断代表2a1中断帧;识别的第二个6位是11 1000时整个中断代表2a2中断帧。
识别的第1个6位和第2个6位的代码设计是专门针对用途的,主要是能容错,其详细内容不在本文中解释。识别的第1个6位为实现容错,分为a、b、c、d四类,识别的第2个6位除2a中断外,对容错的要求比较低,所以可以有较多的选择,不过,为了简化硬件现在只考虑了4种,即每种中断有4个子类。
任何一个节点发现错误之后可以发送1级中断报错,而2级中断只能由主节点发送。如果设计中谁都可以发送2级中断,那么中断之间发生冲突时的解决方案将非常复杂:有可能需要更长的识别位来解决容错问题,通信控制器的硬件复杂性将大大增加,而且时间也会加长。
IntCAN所有的2级中断管理不仅包括中断帧的形式,还含有解释该帧的后续通信操作规定,例如等待恢复原通信的条件。
2针对强化物理层故障下存活能力的2a中断
当通信系统遇到了只有改变物理层设置才能提供继续工作的问题时,已经无法可靠地通过原有的帧传送来重新组态,这时可以利用2a中断帧。
2a1中断之后引导一个心跳帧,这样可以知道总线的这一段上哪些节点在正常通信,并进一步推断是否发生了断线。由于2a中断的容错设计,断线时终端电阻位置变化引起的读错也不会影响。利用2a1中断实现自愈总线方案的介绍可借鉴参考文献[1]。断线自愈后终端电阻的位置也会自动调整,保证了自愈后总线上的信号完整性。需要着重指出的是,这一点对时时处在风险之中的应用来说,(例如坦克、无人运载工具、道弹火箭的拖运车辆),是保持生存和战斗力的关键措施。
现在许多维修工作是要发现哪个ECU不通信了,如果有了2a1中断引导的心跳记录,维修时就很容易,提高了系统的可用性。
2a2中断用于传达改变通信速率的命令。
美国宇航局曾在2008年航天飞机一次发射的准备中发生了错误而导致停发[2],事后调查发现是一个二极管的结区发生了裂缝,二极管变成了电容。这个二极管是数据链(类似STD1553)接口中的,它使4重冗余计算机系统由31变为211,直到1111。在CAN总线中,一般也配有抗静电与雷击的瞬态电位抑制二极管TVS,如果发生类似故障变为电容,就会影响信号转变速度,造成错误,此时如果降低位速率可以改善出错情况。
另一种情况是现场干扰。Siemens VDO汽车部门电磁兼容实验室主任David Ladd曾提到,在欧洲有些高速公路跨越处,由于下面高压线的电磁干扰,有些车的控制器受影响而出现熄火现象[3],还出现过无线电通信等设备对车干扰致使车行驶失常的情况。在车内,由于设备接地变坏,造成由电源或总线进入CAN总线的干扰增加。
此时,主节点会发现总线上的错误较多,因为出错之后,节点的错误计数器增减速率对比变大,容易进入消极报错(Error passive)和离线(bus off)状态,使故障扩大。安全策略在降低位速率的同时也使一些次要的应用让出带宽,但现在的CAN总线没有一个可靠的可用通知管道。在通知过程中出错就会使一部分节点以较低的位速率工作,一部分节点以原位速率工作,冲突会造成更大范围的失效。用IntCAN之后,主节点可以发送2a2中断,让所有节点在收到此帧后改为预定的较低位速率运行,改善出错情况。由于2a2的跳变少,而且容错、接收节点误读的可能性就变小,系统就能一致地降到低位速率。此种故障降额运行方案,在限制车速、可能增加排放、降低燃油效率等不利情况下,保证了最基本的安全运动功能。
另外,经过一段时间之后,主节点发现错误较少或没有时,可以通过低速的常规帧(或者其他的2级中断帧)告诉所有节点恢复原速度传送,检查造成原来错误多现象的原因是否已经消失,从而形成一种自适应方案。
这类应用具有普遍的意义,例如飞行器在敌方电磁攻击下保证飞行,保存战斗力,民用电网控制设备等在恐怖分子电磁攻击下维持运行,不会导致灾难性后果。
3针对降低成本的2b中断
2b类中断提供一种IntCAN芯片引脚的直接开闭控制,无需节点软件的时间开销,这是从现代车控趋势而来的一种推测。由于许多安全攸关的应用在软硬件上要求的提高,ECU主计算芯片会越来越强大,有些芯片已经有了冗余通道+锁步运行,以后还会出现更高级的对各寄存器作冗余的多核多通道表决用的芯片。但是这无疑会使ECU的成本大大提高,所以一种可能的发展方向是减少外围节点的功能来强化核心ECU。当推出新的控制算法时,只是在核心ECU中添加软件。此时外围节点只是从事日常的设备诊断、检测和执行,就可以选用较低档的芯片。诊断信息将通过通信告知核心ECU、黑匣子。当核心ECU有紧急的消息要控制对象时,有两种方法可以传送到对象:一种是直接硬接线,另一种是通过总线。IntCAN的2b类中断就是代替硬接线,从而在极小延迟的情况下节省线束的重量、体积。
延迟小在一些可能的应用中是很重要的。例如图1中摄像机节点判定发生碰撞已不可避免时,趁碰撞尚未发生时,它就要关断输油泵,并打开所有门锁,开启天窗,可能还要闪烁车灯,发送无线求助请求,最后启动安全气囊。另一个例子是飞机或导弹追踪误差增大,瞄准装置发现目标有逃离中心的趋势时,立即采用次优的攻击策略发射导弹,不失战机。
虽然一个节点只控制2个引脚的开闭,实际上这个引脚可以有硬件的扩展方法,例如译码线路、移位寄存器等。
图1 用2b中断直接操作对象开闭
4针对灵活调度需要的2c中断
2c中断功能类似于2b中断,但它更加灵活。用滤波器设置使只有匹配的节点才能接收该帧并采取行动。这些行动包括启动某种任务(含开关特定引脚)。它的响应很快,因为主要的处理都是在硬件中进行。这些运行控制用常规数据帧的方式也可以,但在intCAN中用中断帧会更加灵活、快速。
学术界对于事件触发调度与时间触发调度的争论由来已久,现在比较倾向于用时间触发调度机制来保证消息送达时间的可预知性,例如TTP/C和FlexRay协议。但是这些协议仍然存在问题,比如传送中出现错误怎么办?这些协议的解决办法是用物理上的两套系统实现冗余,但两套系统也会同时出错[4]。两套系统中有的节点因局部原因同时出错而与其他节点出现不一致接收怎么办?它们没有解决,所以这个争论并未结束。
IntCAN传承了CAN总线的报错机制,出错时可以自动重发,报错也能使全局取得一致。
为了在时间触发调度中加入报错,提出了一种弱的时间同步方法Flexstep,把时隙(slot)的概念换成步(step),step的开始时刻与原来slot的开始时刻对应,但是它可以延迟开始,在无发送时可以追赶原定的开始时刻。step的推进由两个条件之一决定:如果总线上已经开始发送,那么以成功收发结束进入下一步,这样就可以容纳出错自动重发;如果总线上没有开始发送,那么原定下一步开始时间到时进入下一步。这样,消息的送达时间会因报错/重发而造成小的抖动,但不会有原来时间触发调度产生丢帧、不一致性。由于Flexstep是弱时间触发调度,所以同样重要性的帧不会因ID设置的限制而在送达时间上出现大的差别。
由于step开始时间有一定范围的灵活性,所以引申出新的调度方案。每一个帧或节点被指定在某个step发送,可以按不同节点所需带宽离线预分配好。如果因为某种原因,这个step没有在开始处的小窗口开始原定发送,那么这个step可以被其他节点竞争发送。可参与竞争的有原来的非周期性消息,以及预定在下一步但已提前就绪的周期性消息,后者可使空闲顺延,有利于充分利用带宽。
这种调度方法可方便未来的应用,例如车联网中的实时诊断数据上传需要较大的带宽,如果有些step传送的消息处于稳态(如节气门开度没有变化)的话,则主节点可通过2c3中断,使这些节点省下所预定的step。又如有紧急的事件(碰撞)发生了,为了特定目的需要传送更多的帧,重要性较低的帧(例如为精细排放控制或提高发动机效率而设的某些修正参数)可以在短时内让出它们的step,而2c4中断可用于收回带宽,恢复正常运行。
5针对提高诊断能力的2d中断
2d中断帧是一种新的工具。节点收到2d中断帧后要停止一段时间的发送,等待主节点发送一个任意优先级的帧,后续的处理取决于2d子类的定义。
例如收到 2d1 及主节点发送的一个任意优先级的帧后,它可以恢复竞争性发送,或者恢复Flexstep的调度发送。收到 2d2、2d3 及主节点发送的一个任意优先级的帧后,等待一定空闲时间才恢复原来的发送调度机制,所以2d中断可以强力干预通信过程。
在信息安全领域,这种中断将很有意义。例如当怀疑有黑客侵入车内系统时,驾驶员不仅要禁止车与外网的连接,而且要恢复原来曾成功的设置,就像重启 Windows一样。此时驾驶员不必知晓动作的细节,只要按一个按钮就行。与按钮相连的主节点发送2d1中断帧,此中断优先级可以超越所有常规帧,不管黑客植入什么,系统是否正在被病毒操作,仍能停止其干扰。节点在收到2d1中断及其后续帧后,恢复到后备设置,或其他预定的工作模式。
在诊断和维修过程中,如果能够设置ECU所需的输入值,就可能很快地找到问题所在。2d2中断可提供这一特性,2d2中断后随一个主节点发送替代输入值,如果再与其他手段配合,加上禁止原来节点所发的这个输入值,就可以实现在线诊断。
收到2d3 中断及其后续的帧后,节点要等待一段时间,等收到另一个帧后才恢复常规通信。例如主节点可发送一个远程请求帧(要知道某ECU的内部状态),对应ECU就回复其数据,此时用中断嵌入的请求得到的是实时状态。如果需要,只要标识符够用,甚至可诊断到ECU的特定寄存器,就像单片机开发中的debug过程一样。用这一工具可以开发出更先进的诊断软件与标准,实时在线诊断能力可以极大地减少维修所需时间,增强可用性(availability)。
参考文献[5]转述:2006年GE、Ford、Daimler Chrysler三大车厂售出2.08千万辆车,总保修费支出达153.4亿美元(折算到每车为700美元),涉及零件失效、更换、不准确的投诉、客户不满等。而更换零件诊断时,故障条件不能重现,正常工作的零件被不必要地更换、有故障的零件仍在车上的情况常常发生。在4年中的电子点火模块中标为NFF(未发现错)而更换的占25%~80%,可见实时在线诊断的经济意义。无人驾驶车已是现在的潮流,必须用实时在线诊断才能快速找到问题的根源,并推理出是一种失效、还是一种临界但仍安全的情况,才能保证安全、容错而连续性地工作。
实时在线诊断对ECU开发以及生产过程的校验也是非常有用的工具。
6新能力引出新方案
通信中传送中断是一种前所未有新的能力,在前面提到了加强功能安全,实现硬件容错,保证故障降额运行的可靠实行,扩充和加速在线诊断能力,提供新的灵活调度能力,替代硬接线节省成本等可能性。此外中断的快速响应机制有可能引起新的系统与产品设计。
以对抗爆胎故障为例,现在的胎压检测控制系统对车胎内压力的变化不断检测,通过无线方式传送出去,由于采用电池供电,检测周期越长越省电,也就没有更换电池的麻烦。但是该系统只是预防胎压超值引起的爆胎,没有考虑有尖锐物刺破轮胎时的爆胎。爆胎时,这个轮子将难以参与驱动、制动以及支撑,所以会涉及车的方向、倾斜,就与许多系统存在耦合关系。假定两个驱动轮中有一个爆胎了,车会转向,惯性会使转向后的车翻车。由于人的反应时间至少需要0.1~0.2 s,所以保护方案的反应时间至少需快于人,而刹车、发动机、变速器部分的反应时间是固定的,所以能够加快的是控制与通信。
TPMS发现爆胎报警需要4~6 s,时间太长了,根本无法防止事故的扩大。设想一种利用中断唤醒无线发送的方法:假定开机以后传感器每分钟送一次温度、压力数据(这对缓慢变化的温度压力已经足够),达到省电的目的;在车身主节点处有一个爆胎声传感器,发生爆胎时通过2b1中断通知轮胎附近的无线唤醒单元供电,传感器内的接收天线收到启动信号(传感器内部天线部分不耗电),立即采样压力并传送胎压数据到胎压仪,然后胎压仪判断本车有没有爆胎,是哪个胎爆了。车身主节点再送2d3中断,读取胎压仪的信号,就可以作相应处理了。
这样的方案响应时间主要取决于无线传送唤醒时间,可能在数ms之内。该方案当然也可以用通常的通信帧实现,然而在CAN总线中,最高优先级的消息仍可能被传送中的低优先级帧阻断,所以这一方案的二次通信可能被阻断270位, 绝不可能像用IntCAN中断那样快,何况爆胎信号能否取最高优先级也是未定之事。
结语
IntCAN提供了已有通信协议从未具有的能力,不仅能分享已有通信协议市场的蛋糕,而且可把市场做大,希望有更多的人参与进来。