1 物理层
1.1 信号状态
CAN总线的信号状态为2种:隐位与显位。当总线上出现隐位与显位发送的竞争时,总线上的最终结果是显位。这种二值特性对cAN总线的可靠性与其他特性有很大贡献。CAN总线信号的二值且“单稳态”的特性为它的数据链路层创造了条件,即CAN总线上可以容许多主发送、竞争占线的方式。这极大简化了消息的调度。为使总线上的节点均有机会发送,有些总线采用“主从方式”,这种方法使总线的利用率较低,且从节点消息发送的等待时间较长。有些总线采用“令牌方式”,但令牌的丢失和重复需要特别的处理机制。
许多总线是不容许总线上有冲突的,因为冲突发生后,不同的接收节点得到的电平结果是不同的。这使它们对总线上发生的事件在时间上与内容上产生不同的解释,退出冲突就会有时间的先后,从而导致节点间状态的不同步。但是由于干扰的存在,节点可能会有误动作,发生不希望的冲突。为此,要增加需多辅助的设备来防止冲突,例如在时间触发协议中经常采用的总线监守。在CAN总线里,冲突的处理由于该信号的二值且“单稳态”的特性变得简单,报错帧可以使所有节点(包括发生冲突的节点)容易地取得数据的一致性和节点状态的同步。
FlexRay总线的状态有低功耗闲置、闲置、“O”、“1”四种。在正常工作模式时,总线接收部分只认可后3种状态。与RS485总线不同的是,FlexRay收发器有一个判断闲置状态的机制。当总线电平差处于某范围内——uBus—ActiveLow(最低一450 mV)~uBusActiveHigh(最高450mV)一段时间(dIdleDetection,最小50 ns,最大250 ns)后,它就将RxEN引脚置”l”,并将RxD置”1”。当总线电平超出该范围一段时间(dActivityDetection,最小100 ns,最大300 ns)后,就退出闲置状态。因此它不会在闲置状态受干扰而轻易地误判为新帧的开始。而总线上因干扰而引起冲突的情形可由另设的总线监守加以防止。当然,这些功能的添加意味着成本的增加。
1.2 信号电平与共模电压
信号电平的高低有两层影响:一是闲置时有干扰被误认为是传送的启动信号;二是传送逻辑信号时因干扰而产生误码。
RS485接收器的阈值很小,总线电压差小于一200mV时为“0”,大于200 mV时为“1”。因此,200 mV幅度的干扰就可能引起误启动,而造成误码的干扰幅度为400mV。RS485总线的共模电压为~7~+12 v。
CAN只有2种状态:当总线电压差小于0.5 V时,接收为隐位(即逻辑“1”);大于0.9 V时,为显位(即逻辑“O”)。O.5~O.9 V为变化的过渡区。总线隐位电压差的正常值为0 V,因此可能引起误启动的最小干扰为0.5 V;显位电压差的正常值为2.O V,合格的网络显位电压差的最小值为1.2 V,引起误码的最小干扰为O.3 V。CAN总线的共模电压为一2~+7V。
前面已介绍了FlexRay总线在总线闲置与正常通信的过渡情况,不再重复。它的接收器逻辑“l”电平为uData1(最低150 mV,最高300 mV),逻辑“O”电平为uData一0(最低一300 mV,最高一150 mV)。因此引起误码的最小干扰为0.3 V。FlexRay总线的共模电压为一10~+15 V。
1.3 采 样
采用RS485收发器的总线往往与UART相连,它们一般在启动电平负跳变后的1/2位处对总线的逻辑值作采样判断。因此,当总线闲置时,若干扰的幅度足够大,且持续时间大于1/2位,就可能产生误启动。
CAN总线的位值一般在80%~90%位处采样,因此它能容忍的误启动干扰不但幅度大,而且时间长。正常传送时,高速CAN的位采样为1次,低速时可以有3次(例如TJAl000中由SAM位控制)。这意味着可以抵御1次干扰引起的错误,因为没有看到这3次采样的间隔有多大,只能估计它是以Tq为单位。高速时实现3次采样的可能性在于厂家产品的设计,与CAN标准无关,如果以1 Mbps计算,每位分为25个Tq,那么在3次采样下,可以抵御的干扰持续时间为40 ns。
FlexRayr总线容许的误启动时间与位采样点位置无关,由dActivityDeteetion决定,最小为100 ns。正常传送时,根据FlexRay数据链路层3.2.2的规定,每一位采样cSamplesPerBit(=8)次,将最近的cVotingSamples(=5)次按多数进行表决,即可得到当时的总线接收值(zVoted—Val)。因此这种方法可以抵御1/4位长度的干扰,按FlexRay 10 Mbps计算,抵御的干扰持续时间为25 ns。
2 媒体存取与逻辑链路层
2.1 位填充
CAN总线的位填充是在以前的位填充做法的基础上发展起来的。在高级数据链路控制规程(HDLC)中用01111110作报头与报尾的标志位;在其他部分为了不致引起误解,采用每连续5个“1”之后填入一个“0”的办法,接收后将填人的O去掉。cAN总线不仅在连续5个“1“之后填入一个“0”,而且在5个“0”之后填入一个“1”,接收后将填入位丢掉。CAN总线这样做不仅为报错机制(报错帧)创造了条件,而且还有2个对信号传递有利的方面:一是为CAN总线的位同步创造了较短的同步间隔,有利于提高同步精确度;二是有利于在总线上引入适时的反向放电,减少因总线长期同一极性充电造成的物理层误判。
但是位填充方法减弱了CAN总线的CRC防止错误漏检的能力。发生在填充位的错误会改变位流的相位,只要有2次填充位错就会使原来的部分位流提前或推后1位,而此时仍有CRC检查通过的可能。通过仿真方法注入位错,求出CRC检查漏检出错的概率为l.3×10-7,而不是CAN总线声称的所有5位以下的错误均能检出。位填充的另一个缺点是造成数据输送率的下降以及帧长度的不确定性。FlexRay总线没有用位填充的方法,使用其他方法实现位同步。