FlexRay数据传输
FlexRay规范定义了OSI参考模型中的物理层和数据链路层,每个FlexRay节点通过一个FlexRay Controller和两个FlexRay Transceivers(用于通道冗余)与总线相连,FlexRay Controller负责Flexray协议中的数据链路层,FlexRay Transceivers则负责总线物理信号接收发送。
FlexRay可采用屏蔽或不屏蔽的双绞线,每个通道有两根导线,即总线正(Bus-Plus,BP)和总线负(Bus-Minus,BM)组成。采用不归零法(NRZ,Non-Return to Zero)进行编码。
可通过测量BP和BM之间的电压差识别总线状态,这样可减少外部干扰对总线信息的影响,因这些干扰同时作用在两根导线上可相互抵消。每一通道需使用80~110欧的终端电阻。将不同的电压加载在一个通道的两根导线上,可使总线有四种状态:Idle_Lp(Low power)、Idle、Data_0和Data_1
显性:差分电压不为0V(Data_0和Data_1)
隐性:差分电压为0V(Idle_Lp、Idle)
FlexRay帧格式
FlexRay帧由起始段、有效负载段和结束段三大部分构成。
1、起始段:由40个bits构成(5 bytes),包括
-Status Bits-5bits
-Frame ID-11bits
-Payload Length-7 bits
-Hedaer CRC-11bits
-Cycle count -6 bits
其中5bits的Status Bits包含四类指示符:净荷指示位(Payload Preamble Indicator)、空帧指示位(Null Frame Indicator-指明该帧是否为无效帧)、同步帧指示位(Sync Frame Indicator-指明该帧是否为一个同步帧)和起始帧指示位(Startup Frame Indicator-指明该帧是否为起始帧)。
Frame ID:数据标志符,定义了在时间窗口(Slot)中发送的号码,每个通道数据标志符需唯一。
Payload Length:工作区长度,指示该帧含有的有效数据长度,在每个Cycle下的静态区中,每帧的数据长度是相同的,在动态区的长度则是不同的。
Hedaer CRC:用于起始段冗余校验,检查传输中的错误。
Cycle count:循环计数器。
2、有效负载段
包含要传输的有效数据,有效数据长度最大254个Bytes(0~127个Words),
3、结束段
包含24 Bits的检验域,由起始段和有效负载段计算得出的CRC校验码,计算CRC时,根据网络传输顺序从保留位到有效负载段的最后一位放到CRC生成器中进行计算。
FlexRay编码
编码的过程实际就是对要发送的数据进行一定的打包处理,即在节点可传输带有主计算机数据的数据前需将其转换为“比特流(Bitstream)”。
RxD为接收信号,TxD为发送信号,TxEN为通讯控制器请求数据,对于静态帧和动态帧分别按照如下方式进行编码。
其中TSS(传输启动序列):用于初始化节点和网络通讯的对接(5~15位的低电平);FSS(帧启动序列):用于补偿TSS后第一个字节可能出现的量化误差(一位高电平);BSS(字节启动序列):给接收节点提供数据定时信息(一位高电平并紧随一位低电平);FES(帧结束序列):用于标识数据帧最后一个字节序列结束(一位低电平紧随一位高电平)。
对于动态区数据还额外需要DST(动态段尾部序列):仅用于动态帧传输,用于表明动态段中传输时动作点的精确时间防止接收段过早检测到网络空闲状态(一位长度可变的低电平和高电平)。
将这些序列和有效位(MSB到LSB)组装起来完成了编码过程,最终构成在网络传播的比特流。
FlexRay通讯
FlexRay总线的通讯由通讯周期(Communication Cycle)构成,从总线启动到停止都在不断重复该通讯周期。每个通讯周期具有相同的可配置时间间隔,且每个通讯周期由静态段(Static Segment)、动态段(Dynamic Segment)、特征窗(Symblo Window)和网络空闲时间(Network Idle Time)四部分构成。
1、静态段(Static Segment)
静态段采用TDMA(Time Division Multiple Access)方式由固定的时隙(Slot)组成,不可更改且所有时隙大小一致。
因此每个节点可拥有一个或多个Slots,这样每个节点在每个通讯周期内都可在其所占有的Slot内发送,两个节点也可在不同的通道上共享同一Slot,单个Slot也可为空(即不被任何节点占用),所有的帧和Slots在静态段都具有相同的长度。单个Slot的长度由总线中最长的FlexRay Message决定,其包括四部分:Action Point Offset、FlexRay Frame、Channel Idle Delimiter(11个隐性位)和Channel Idle。
2、动态段(Dynamic Segment)
动态段采用FTDMA(Flexible Time Division Multiple Access)方式,由较小的时隙(Minislot)组成,可根据需要拓展变动,一般用于传输事件控制型消息。
在动态段每帧可能有不同的长度,动态时隙(Dynamic Slot)的长度依赖于帧的长度,只有空的Slot才是实际的一个Minislot的大小。
3、特征窗(Symblo Window)
用于传输特征符号,FlexRay的符号有三种:
-冲突避免符号:用于冷启动节点的通讯启动
-测试符号:用于总线的测试
-唤醒符号:用于唤醒过程的初始化
4、网络空闲时间(NIT-Network Idle Time)
用于时钟同步处理
如下是一个通讯示例:
FlexRay总结
从上面可看出,FlexRay相比传统LIN、 CAN和CAN FD要更复杂一些,因此不管对OEM还是供应商的能力要求势必提高不少,其次从传统总线技术向FlexRay迁移在成本及Effort上都要增加很多,普遍应用仍需要时间。
参考文献:
1、FlexRay introduction(EB、Vector、BOSCH等资料)