FlexRay通信系统是一种用于汽车的高速通信网络,每通道速率可达10Mb/s。
FlexRay通信可用于车身、底盘、安全和ADAS应用,它的通信特点也更适合下一代汽车线控系统或分布式控制系统的通讯要求,比如线控转向和线控制动等这些对实时性和安全性有很高要求的主动安全系统。
FlexRay通信不仅仅是速度上比我们常用的CAN和LIN通信快,在通信机制上也有很大的不同。
1.网络拓扑
我们常用的CAN通信是总线型网络拓扑,拓扑形式很简单,就是各个节点通过一对差分线直接连到CAN总线上。
CAN网络拓扑-差分多主总线型
LIN通信也是总线型,但它是主从式结构,所有的子节点都要通过主节点调度,而且是单线连接。
LIN网络拓扑-单线主从总线型
1.1FlexRay的三种拓扑结构
与CAN和LIN通信相比,FlexRay的网络拓扑就比较复杂了。首先,它不只1种,而是有3种拓扑结构:总线型(Bus)、星型(Star)和混合型(Hybrid)。
总线型网络拓扑与CAN通信基本一样,也是采用差分信号传输,两根线称为BP和BM,即总线正和总线负,两根线组成一个通道Channel。
FlexRay网络拓扑之-总线型
星型拓扑会有一个中心节点,称为星型耦合器(starcoupler),星型耦合器负责转发通信数据。
FlexRay网络拓扑之-星型
(注:为了便于查看,上图及后续的FlexRay图形都用1根总线来表示差分信号)
上图中的星型拓扑的结构与LIN的拓扑有点相似,但实际上是不同的,LIN仍然是总线型,不是星型。而且FlexRay的星型拓扑中还可以有2个中心节点,LIN只能有1个主节点。
混合型网络拓扑就是总线型与星型间不同的组合。
FlexRay网络拓扑之-混合型
上图中的节点A、B和Star组成星型拓扑,节点C、D、E和F是总线型拓扑,总线型与星型间的节点可以通过中心节点Star进行通信。
1.2FlexRay的两个通道
FlexRay通信除了上面的三种类型外,每一种类型还有单通道(SingleChannel)和双通道(DualChannel)之分,双通道分别称为通道A和通道B。
在同一个网络中,允许节点连接不同的通道,即每个节点可以只连接1个通道,也可以同时连接两个通道。
双通道总线型拓扑
如上图所示,其中的A、C、E节点同时连接了通道A和通道B。D节点只连接了通道A,B节点只连接了通道B。
此外,在星型结构中,还存在级联拓扑和多星拓扑。级联拓扑中不能有超过2个星型耦合器。
单通道级联星型拓扑
如上图所示,每个节点单独连接到1个星型耦合器,两个星型耦合器直接相连。
多星拓扑可以支持冗余通信通道,但每个网络通道不能存在闭环,且每个通道不能有超过2个星型耦合器。
双通道单冗余星型网络拓扑
如上图所示,每个通道只连了1个星型耦合器。通道A连接到了Star1A,通道B连接到了Star1B。
双通道级联星型拓扑
如上图所示,每个通道(通道A或通道B)都连接了2个星型耦合器。
混合型拓扑根据总线型、星型和不同的通道组合,可以有很多种具体的拓扑结构,我们现列举一个有代表性的混合型拓扑。
单通道混合拓扑
如上图所示,节点A、B、C、D通过点对点的方式连接到星型耦合器Star1A和Star2A,节点E、F、G通过总线拓扑互相连接,总线拓扑同时又连接到星型耦合器star2A,这样E、F、G就可以通过Star2A与其他节点通信。
还有一种混合拓扑类型是不同的拓扑使用不同的通道。
双通道混合拓扑
如上图所示,通道A作为总线拓扑连接,通道B作为星型拓扑连接。
FlexRay的这种双通道架构看起来有点冗余,但是双通道架构也恰好可以满足高级安全系统的冗余要求。通过双通道传输相同的数据时,当其中某个通道出现故障或信息有误时,另一通道可继续正常传输,通过这种冗余备份实现很好的安全性和容错性。
当然这种结构也有一个缺点,就是当中心节点损坏时,整个网络便无法工作。
2.物理接口
FlexRay的物理层接口与CAN类似,也是通过收发器连接的。不同的是,CAN总线只有一路,也就是1个通道。而FlexRay最多可以有2个通道。
每个FlexRay节点通过一个控制器FlexRayController和两个收发器FlexRayTransceivers与总线相连,控制器负责FlexRay协议中的数据链路层,收发器则负责总线物理信号的接收和发送。
FlexRay的硬件结构图
Host主机向控制器发出控制、配置信息和有效负载数据,控制器向主机Host反馈状态信息和通信帧上接收的有效负载数据。
FlexRay可采用屏蔽或不屏蔽的双绞线,每个通道有两根导线,即总线正BP和总线负BM组成。每一通道需使用80~110欧的终端电阻。
这里要注意的是,FlexRay的节点收发器与星型耦合器的收发器型号是不同的。
3.TDMA时分多址
通信周期构成
3.1静态段(StaticSegment)
静态段采用TDMA(TimeDivisionMultipleAccess)方式由固定的时隙(Slot)组成,不可更改且所有时隙大小一致。
静态段示例
如上图所示,示例中的静态段分为4个时隙Slot,其中第1个时隙Slot1发送节点A的A1报文,A1报文会同时在A、B两个通道发送,因为A、B两个通道是互相独立的,可以共用第1个时隙。
第2个时隙Slot2,发送节点B和C的B1、C1报文,B1在A通道,C1在B通道发送。
第3个时隙Slot3与第1个时隙Slot1发送原理类似,也是1个节点,不同的是节点D的两个通道发送的是不同的报文。
第4个时隙Slot4的发送与第2个时隙类似。
由此可知,每个节点可拥有一个或多个时隙Slot,每个节点在每个通讯周期内都可在其所占有的Slot内发送,两个节点也可在不同的通道上共享同一Slot,单个Slot也可为空(即不被任何节点占用),所有的帧和Slot在静态段都具有相同的长度。
静态段时序示意图
3.2动态段(DynamicSegment)
动态段示例
如上图示例所示,其中Slot6和Slot8两个时隙发生了事件型报文;其它时隙没有发生事件型报文,所以Slot5、7和9中就没有报文发送。其报文发送时序如下图所示。
动态段时序示意图
如果发生了事件报文,则会根据实际帧的长度占用,比如报文C2占用了6个Minislot,报文B2占用了10个Minislot。所以动态段中的时隙Slot不是固定的,是根据实际情况变化的。
静态部分用于发送需要经常性发送的重要性高的数据,动态部分用于发送使用频率不确定、相对不重要的数据。
LIN总线的调度表机制
这里要注意的是,FlexRay通信中的事件报文处理与CAN总线的事件型发送报文类型和LIN总线中的事件触发帧都不相同。
CAN总线按ID优先级抢占总线
4.帧格式
FlexRay帧由起始段(HeaderSegment)、有效负载段(PayloadSegment)和结束段(TrailerSegment)三大部分构成。节点在网络中发送报文时,会先发送起始段,然后是有效负载段,最后是结束段。
4.1起始段
起始段由4个字节,共40位组成。前5位属于状态指示位,然后依次是帧ID、负载长度、CRC和循环计数。
状态位包括:
1位的预留位reservedbit:表示当前未使用;
1位的静荷指示位payloadpreambleindicator:表示有效负载段中是否包含可选向量。0表示负载段中没有可选向量,1表示负载段的开始部分是网络管理向量(静态段)或者报文ID(动态段);
1位的空帧指示位NullframeIndicator:表示当前帧是否为空帧,0表示负载段中没有有效数据,即空帧,此时静荷指示位也是0;1表示负载段中包含数据,空帧可用于时钟同步算法;
1位的同步帧指示位Syncframeindicator:表示当前帧是否为同步帧,为1时,所有的接收节点都将此帧作为同步使用,同步帧用于系统范围的通信同步;
1位的启动帧指示位Startupframeindicator:表示当前帧是否为启动帧,为1时表示启动帧,只有冷启动节点coldstartnodes才能发送启动帧;
11位的帧ID:一个网络中每个可能被发送的帧都要定义1个帧ID,作为将在时隙Slot中被发送的帧的唯一标识。在1个通信周期中的每个通道中,1个帧ID被使用的次数不能超过1次。帧ID的有效范围为1-2047,0是无效的ID;
7位的负载长度PayloadLength:表示该帧含有的有效负载段中的数据长度,在每个周期中的静态段中,每帧的数据长度是相同的,在动态段中的长度则是不同的,而且动态区中,每个周期可以不同,每个通道也可以不同;
这里要注意的是,负载长度值表示实际数据字节数的一半,比如当实际数据是72个字节时,负载长度参数应设置为36。或者说负载长度值表示的是2字节的字word。总之,实际数据字节数=负载长度值*2;
11位的起始校验HeaderCRC:用于起始段冗余校验,检查传输中的错误;
6位的循环计数器Cyclecount:发送节点发出的循环计数值,数值范围是0-63。
4.2有效负载段
有效负载段payloadsegment包含要传输的有效数据,有效数据长度最大254个Bytes(0~127个Words),
在动态段中,前两个字节0-1字节可选择作为报文Message的ID使用,前面介绍的起始段中的静荷指示位payloadpreambleindicator就是用于表示负载段中是否包含报文ID。
注意这里的16位报文ID与前面的11位帧ID不同,这里的报文ID是由应用层使用的,是根据具体的应用功能定义的。而帧ID是在底层通信协议中确定的。
在静态段中,第0-12字节可以用作网络管理向量,也是通过静荷指示位payloadpreambleindicator表示。
这里要注意的是,由于负载长度PayloadLength表示的是2字节的字word,所以有效数据必须要发送偶数个字节的数据,否则无法用负载长度表示。
4.3结束段
结束段包含24Bits的检验域,由起始段和有效负载段计算得出的CRC校验码,计算CRC时,根据网络传输顺序从保留位到有效负载段的最后一位放到CRC生成器中进行计算。
小结:
FlexRay通信的网络拓扑形式多样,包括总线型、星型、混合型,每种类型还包括单通道和多通道两种方式,相较于CAN通信的总线型架构要复杂许多,当然安全性也相对较高。
FlexRay的两个通道如果平行传输数据(两个通道传输不同的数据),速率可达20Mb/s;在安全应用中大多采用冗余通信(两个通道传输相同的数据)。
Flexray通信协议具有实时性、确定性和安全性的特点,其设计难度较大,对开发能力要求较高,使用成本也会高一些。