FlexRay传输过程
FlexRay网络按周期循环组织信息的传送。在传送信息时,一个通信周期有静态的和动态的两个部分。动态段和静态段又由一些时间片构成,每个时间片传输一个FlexRay帧。FlexRay帧是一个有格式的位流。
由于一个FlexRay通信周期的动态部分和符号窗口可以是空的,所以,一个通信周期可以有4种形式如图,其中静态段和网络空闲段必选,动态段和符号窗口是可选的。当前通信周期由通信周期计数器的值标识,这是一个只增计数器,对通信周期进行计数。通信控制器配置数据决定了通信周期的长度,可以由应用程序设置。只有总线处于允许状态下,通信控制器才可以启动一个通信周期。一个结点的信息内容可以在不同的通信周期的特定时间片上多重发送。静态部分和动态部分信息的传送方式是不同的。
FlexRay通信周期的组合形式
FlexRay静态部分具有以下特性:
🔵一个通信周期的静态部分可以由程序设定它的时间片数;
🔵在一个通信周期内,一个结点可以由程序设定它可以使用的时间片;
🔵静态部分在每一个时间片内,最多只允许有一个结点向通道上发送一个帧信息,通信周期的静态部 分按TDMA方式访问媒体;
🔵所有静态部分时间片的长度相同,可以由程序设定;
🔵在一个通信周期第一个时间片之前是通信起始符。
FlexRay动态部分具有以下特性:
🔵在一个通信周期内可以没有或有几个动态时间片;
🔵在一个通信周期内静态部分具有优先访问总线权;
🔵在通信周期的动态部分,采用最小时间片(Mini-Slotting Scheme)和标识符优先的仲裁策略,发 送的信息标识符优先级高的结点获得仲裁;
🔵动态部分的信息长度在网络运行时是可变的。
1、 FlexRay通信周期
FlexRay的一个通信周期包含静态段(Static Segment)、动态段(Dynamic Segment)、符号窗(Symbol Window)和网络空闲向量(Network Idle Time)。
下图所示是FlexRay一个通信周期的时间分层结构。
FlexRay通信周期时间层次
下图所示是只包含静态段和动态段的通信周期示例。
只包含静态段和动态段的通信周期
(1)通信周期的基本执行过程
除了启动阶段,FlexRay通信周期以一个固定的宏时钟数周期性地循环执行。通信周期依次从0到一个可设置的最大值依次计数。总线仲裁基于在静态段和动态段的帧标识符。帧标识符决定了其在通信周期的哪个段和这个段的哪个时间片发送。
一个FlexRay通信周期的执行过程
(2)静态段
一个FlexRay通信周期的静态段,按照配置值设置其时间片数。所有静态段中的时间片大小相同,由一个以宏时钟为单位的数给出。每个时间片有一个序号,在静态段中将固定的时间片分配给各个结点,在一个通信周期的静态段中,每个结点在一个通道上只能在分配给它的时间片内发送数据帧,而在自己时间片之外的时间只能接收数据。在FlexRay网络运行的时候,这个时间片的分配情况是不允许动态发生改变的。
静态段结构
静态段时序关系
(3)动态段
可以配置一个FlexRay通信周期动态段的微时间片数量,并且从1开始依次编号。所有微时间片的大小相同,也由一个以宏时钟为单位的数给出,不用动态段的时候可以设置微时间片数为0。在一个通信周期的动态段中,结点如果要发送消息,要通过竞争获得总线使用权。在动态段部分,是按照发送数据的数据帧优先级分配带宽,优先级由帧的标识ID确定。
动态段结构
动态段时序关系
(4)符号窗
一个FlexRay通信周期可以有一个符号窗。符号窗通过配置设定一定数量宏时钟的时间宽度,这个配置值为零,表示不用符号窗。在符号窗内的内容及功能由高层协议规定,FlexRay结点发送一个符号表示某种自定义的特殊用途。
(5)网络空闲向量
一个FlexRay通信周期的网络空闲向量用来对FlexRay网络进行调整,是不可缺少的部分。一个周期除去前面几个段使用的时间,余下的就是空闲段的长度。一个通信周期可以根据结点的实际需要,动态配置动态段和网络空闲向量各部分的带宽。在网络空闲向量时间范围内,FlexRay网络中的结点不进行任何通信。
2 、FlexRay帧格式
在FlexRay网络中,结点把要发送的信息打包成帧在静态段或动态段的时间片发送,一个帧的格式如图所示,由帧头、有效数据段和帧尾构成。每个字段又分成具有不同意义的位段。
FlexRay帧格式
(1)帧头段
FlexRay的帧头段共有5个字节,包括1位保留位、1位有效数据前导指示位、1位空帧指示位、1位同步帧指示位、1位启动帧指示位、11位帧ID、7位有效数据长度、11位头CRC校验码和6位周期计数。
保留位不能被应用功能使用,发送时把这一位设置为逻辑“0”,接收时忽略这一位。
有效数据前导指示位,用于描述数据部分的一些特征。其值为1时,对于在静态段传输的帧,指示在数据部分的开始位置有一个网络管理矢量(Network Management Vector,NMVector),其值为1,对于在动态段传输的帧,其指示在数据部分开始位置有一个信息的ID部分;其值为0,表示数据部分没有这些特殊信息。
空帧指示位为1时,表示本帧有效数据部分有数据,如果空帧指示位为0,表示本帧为空帧,有效数据部分没有数据。
同步帧指示位用于说明本帧是否为同步帧,如果同步帧指示位为0,本帧为非同步帧;如果同步帧指示位为1,本帧为同步帧,所有接收到本帧的结点会把其信息用于同步。
启动帧指示位用于说明本帧是否为启动帧,如果启动帧指示位为0,则本帧为非启动帧;如果启动帧指示位为1,则本帧为启动帧。只有冷启动结点可以发送启动帧。
帧ID定义了本帧在哪一个时间片发送,在一个簇中的结点发送的帧都会赋予一个帧ID。帧ID值的范围为1~204754。
有效数据长度字段用于说明有效数据部分的数据长度,单位为16位2B,如数据部分有100个字节数据,则有效数据长度字段的值为50。在动态字段,不同帧的有效数据长度字的定义可能不同。
头CRC校验码字段是由同步帧指示位、启动帧指示位、帧ID、有效数据长度构成的部分生成的CRC校验码。发送时,这个值是主控制器计算后配置到通信控制器的,接收时,通信控制器会用这个值进行CRC校验计算。周期计数字段给出发送结点在帧发送的时候的周期计数器计数值。
(2)有效数据段
有效数据段部分传输0~254B的载荷数据,依次为数据0、数据1……。在一个周期的静态段,帧的有效数据段可以用于传输网络管理向量。这个值是在配置POC的时候设置的,一个簇中的所有结点的NM Vector是一致的,这个值只用于静态段的帧。NM Vector是发送结点的主控制器按照应用数据填到帧中的,通信控制器没有相关操作。一个帧是否包含NM Vector,是在帧头部分的有效数据前导指示位定义的。
在一个周期的动态段中,FlexRay帧有效数据段部分的前两个字节可以用于传输16位的信息ID(Message ID)。一个帧的信息ID标识这是什么数据,接收结点可以用信息ID过滤数据帧。信息ID只用于动态段,是由结点主控制器提供的。一个帧是否包含信息ID,是在帧头部分的有效数据前导指示位定义的。
(3)帧尾字段
FlexRay帧尾字段只有一个域,一个24位的CRC校验码。这个校验码是由帧头以及有效数据部分生成的,在两个通道中使用相同的CRC校验码生成多项式。
3 、帧位流的编码解码
一个信息帧在物理层传输要进行编码。把一帧本身要传输的信息加上位置标识以及同步等需要的信息编码成一个二进制位流,每一帧以一组位流在物理层由发送结点发出;接收端接收到这些位流进行解码,分解出一帧的信息,提供给链路层。
(1)编码插入序列
编码插入序列是对一帧进行编码时加到帧中的二进制序列,具体有以下几种:
1)传输起始序列(Transmission Start Sequence,TSS):发送结点在开始发送时,首先输出一个连续低位序列,长度可以通过配置设置,表示一个传输开始并建立发送与接收端的路径,接收端结点检测到这个状态,就判定总线由空闲进入忙状态,一个帧的传输过程开始。
2)帧起始序列(Frame Start Sequence,FSS):在TSS之后加入的一个高位,以补偿TSS部分同步的量化误差。
3)字节起始序列(Byte Start Sequence,BSS):BSS包含连续的一个高位和一个低位。发送结点在一帧每一个字节信息(每8位数据)前面都加上BSS,为接收端提供时间同步信息。
4)帧结束序列(Frame End Sequence,FES):一帧所有的信息发出之后,发送结点紧接着发送的连续一个低位一个高位,表示一帧结束。
5)动态段帧尾序列(Dynamic Trailing Sequence,DTS):用于动态段的帧尾,指示发送端微时间片工作点的准确时间。DTS包括先低后高两部分,低的部分可变长,至少保持一个位时间,在下一个微时间片的工作点变高,高的部分固定为一个位时间。发送结点在发送动态段的帧时,紧接FES之后发送DTS。
(2)帧位流编码
传输一个帧的时候,结点按照一定的要求把要发送的信息和插入序列组成一个位流,依次发送到物理层上。这个装配过程就是所谓的编码,基本步骤如下:
1)把一帧的所有信息分成字节;
2)在位流的最前面加入一个TSS;
3)在TSS后面加入FSS;
4)在帧数据的每一个字节前面插入BSS得到扩展字节;
5)按照原来帧信息的数据顺序排列所有扩展字节;
6)计算帧的CRC校验码,并把校验码各个字节加BSS进行字节扩展;
7)在如上形成的位流后面加上一个FES;
8)如果是动态段的帧,再在后面加上一个DTS。
静态段帧和动态段帧的编码图示如图所示。
静态段帧的编码
动态段帧的编码
(3)帧位流解码
对于接收端,在总线空闲时监测到总线上的传输起始序列TSS,表示有帧将要启动传输,这时启动帧接收过程,按照同步机制定时,开始接收后续位流,并按照编码规则进行解码处理。当接收端结点检测到错误的时候,终止通信位流的解码过程,并一直等待总线回到空闲状态。
同步及启动
在FlexRay的通信周期,静态段中使用的是基于TDMA的通信协议,通信媒介的访问是在时间域中各个结点分时进行的。这种方式要求每一个结点都必须保持时间上的一致,并且每一个结点的最大时间偏差在限定的范围之内,才能真正实现时钟同步,并按照这个时间安排发送顺序。所有的结点在时钟同步的前提下才能进行正确的通信。因此,在FlexRay的网络中,有一个概念上的全局时间。每一个结点都通过接收同步帧,得到同步帧中的全局时间,并和自己的本地时间进行比较,然后对自己的本地时间进行调整,以完成整个网络的时钟同步。
1、时钟同步方式
时钟同步的主要任务是确保一个簇中所有结点之间的时间偏差在允许的范围。在FlexRay协议中,每一个结点通过由同步帧传来其他结点的定时信息,进而可以计算出与本地时间(本结点的时间)的偏差,使用分布式时钟同步机制,使其本地时钟同步到所在簇的全局时钟。
A、时钟同步方法
一个FlexRay结点可以使用3种不同的时钟同步方式,一个FlexRay簇的结点的同步方式影响其工作特点。
(1)TT-D时钟同步方法(TT-D synchronization method)
TT-D时钟同步方法是通过2~15个分布冷启动同步结点来实现同步的方法。TT-D同步方法是一个分布算法,可以避免单个结点的故障影响,增强了时钟同步的容错能力。冷启动结点使用TT-D同步方法的簇称为TT-D簇。
(2)TT-L时钟同步方法(TT-L synchronization method)
TT-L时钟同步方法是TT-D时钟同步方法的一个改进算法,其可以只使用一个冷启动结点,这个结点通过发送两个启动帧起到类似TT-D中两个冷启动结点的作用,是通过一个同步时钟结点的本地时钟进行同步的方法。TT-L时钟同步方法的优点是简化了系统复杂性。冷启动结点使用TT-L时钟同步方法的簇称为TT-L簇。
(3)TT-E时钟同步方法(TT-E synchronization method)
TT-E时钟同步方法是通过另外一个FlexRay簇的时钟同步方法。TT-E时钟同步方法的主要作用是把一个FlexRay簇与另一个FlexRay簇进行时钟同步。TT-E时钟同步方法的优点是可以把一个FlexRay簇的调度表与另一个FlexRay簇的调度表配对。使用TT-E可以把一个FlexRay簇分解为子FlexRay簇,避免一个FlexRay簇的结点超出限制,使用更有效利用带宽的FlexRay结构。冷启动结点使用TT-E时钟同步方法的簇称为TT-E簇。
B、时钟的层次结构
(1)全局时间与局部时间
一个FlexRay簇范围公共的时间称为全局时间,FlexRay协议本身没有一个绝对的全局时间,每一个结点有一个从其角度看到的全局时间。
局部时间是一个结点自己的时钟给出的时间,一个结点的局部时间是基于其认知的全局时间的,通过时钟同步算法尽量调节它的局部时间与全局时间一致。一个FlexRay簇的定时精度是簇内任意两个同步结点的局部时间之差。
(2)时间单位层次
在FlexRay簇和结点中,时间单位的层次有周期、宏时钟节拍及微时钟节拍。
时间单位的层次
微时钟直接由通信控制器的振荡器产生,是面向通信控制器的时间单位,也是一个结点里面的最小时间单位。
宏时钟给出的是一个在簇范围同步了的时间,在允许误差范围内整个簇中结点的宏时钟认为是一致的。宏时钟的单位时间(一个节拍)用微时钟节拍数表示,但在一个结点中,不同时间的一个宏时钟节拍包含的微时钟节拍数可能有差异,不同结点之间一个宏时钟节拍的微时钟节拍数也可能有差异。
一个周期包含若干宏时钟节拍,在一个簇中的所有结点中,一个周期的宏时钟节拍数是一致的,并且不同周期包含的宏时钟节拍数也是不变的。任何时候,所有结点的周期计数都是一致的。
C、时钟同步过程
FlexRay的时钟同步包含两个主要的过程。一个是宏时钟产生过程(MTG),其控制宏时钟计数器和周期计数器,并进行频率和相位偏移的校正;另一个是时钟同步过程(CSP),其完成周期开始时的初始化、检测并存储偏差值,以及计算速率和偏移的校正值。这两个过程的定时关系以及与媒体访问的关系如图所示。
FlexRay中允许的最大时钟偏差称为精确度。FlexRay中的时钟偏差包括两部分,一个是相位上的偏差,另一个是频率上的偏差。其中,相位上的偏差指的是在某一个时间的绝对差别。而频率上的偏差是相位偏差随着时间推移的变化。实现时钟同步,是通过相位的更正和频率的更正实现的。FlexRay使用了一种综合的方法,以同时实现相位上的校正和频率上的校正。
为测量本地时钟和全局时钟间的偏差,所有的FlexRay结点要在接收期间检测消息到达的准确时间。因为FlexRay通信周期的静态段是基于TDMA访问的,在每一个静态槽内只有一个特定的结点才能进行发送。所以,通过这个静态部分的定时机制,FlexRay中的结点可以知道消息的实际到达时间。如果消息到达的时间和预期的到达时间不一致,结点就可以测量出实际消息的到达时间和预期到达时间的偏差。这个偏差就是代表了发送结点和接收结点之间的时钟偏差。根据这个测量的值,使用FlexRay的容错中间点算法(Fault-Tolerant Mid-point Algorithm,FTM)计算出每一个结点的更正值。如图所示,FlexRay的频率更正需要使用两个通信周期的测量值。测量值之间的差值是每一个通信周期中的时钟偏差的变化。它们通常用来计算偶数周期结束时的更正值。而相位的更正计算仅仅需要一个通信周期的测量值,一旦结点接收了所有的测量值,就开始进行计算,并且这个计算必须在相位更正前完成。在通信周期的最后,网络空闲向量用来对相位进行调整。相位更正每两个通信周期进行一次。
2、FlexRay启动
为了节省资源,部分节点处于不工作状态时,进入“节电模式”。当这些节点需要再次工作时,就需要被“唤醒”。主机可以在通信信道上传输唤醒模式,当节点接收到唤醒特征符(Wakeup Symbol)后,主机处理器和通信控制器才进行上电。
在通信启动执行之前,整个簇需要被唤醒。启动节点工作需要在所有通道上同步执行。初始一个启动过程的行为被称为冷启动(Cold start),能启动一个起始帧的节点是有限的,它们称作冷启动节点(Cold start Node)。在至少由三个节点组成的簇中,至少要有三个节点被配置为冷启动节点。冷启动节点中,主动启动簇中消息的节点称之为主冷启动节点(Leading Cold start Node),其余的冷启动节点则称之为从冷启动节点(Following Cold start Node)。
当节点被唤醒并完成初始化后,它就可以在相应的主机控制命令发出之后进入启动程序。在非冷启动节点接收并识别至少两个相互通信的冷启动节点前,非冷启动节点一直等待。同时,冷启动节点监控两个通信通道,确定是否有其他的节点正在进行传输。当检测到通信信道没有进行传输时,该节点就成为主冷启动节点。
冷启动尝试以冲突避免操作符(Collision Avoidance Symbol)开始,只有传输CAS的冷启动节点能在最开始的四个周期传输帧。主冷启动节点先在两个通道上发送无格式的符号(一定数量的无效位),然后启动集群。在无格式符号发送完毕后,主冷启动节点启动该节点的时钟,进入第一个通信周期。从冷启动节点可以接收主冷启动节点发送的消息,在识别消息后,从冷启动节点便可确认主冷启动节点发送的消息的时槽位置。然后等待下一个通信周期,当接收到第二个消息后,从冷启动节点便开始启动它们的时钟。根据两条消息的时间间隔,测量与计算频率修正值,尽可能地使从启动节点接近主冷启动节点的时间基准。为减少错误的出现,冷启动节点在传输前需等待两个通信周期。在这期间,其余的冷启动节点可继续接收从主冷启动节点及已完成集群冷启动节点的消息。
从第五个周期开始,其余的冷启动节点开始传输起始帧。主冷启动节点接收第五与第六个周期内其余冷启动节点的所有消息,并同时进行时钟修正。在这个过程中没有故障发生,且冷启动节点至少收到一个有效的起始帧报文对,主冷启动节点则完成启动阶段,开始进入正常运行状态。
非冷启动节点首先监听通信信道,并接收信道上传输的信息帧。若接收到信道上传输的信息帧,便开始尝试融入到启动节点。在接下来的两个周期内,非冷启动节点要确定至少两个发送启动帧的冷启动节点,并符合它们的进度。若无法满足条件,非冷启动节点将退出启动程序。非冷启动节点接收到至少两个启动节点连续的两组双周期启动帧后,开始进入正常运行状态。非冷启动节点进入正常工作状态,比主冷启动节点晚两个周期。
如图所示,描述了正确的启动过程。其中,A是主冷启动节点,B是从冷启动节点,C是非冷启动节点。
FlexRay启动过程
在FlexRay的通信控制器能发送和接收数据信息之前,首先必须对控制器进行配置。为此FlexRay规程定义了一种自动状态,协议操作控制POC并确定命令。起控制作用的微控制器用这些命令通过控制器主机界面去触发状态转换。当控制器接通之后,由协议配置寄存器。首先确定比特率、宏和微时钟的时间和静态、动态段的长度、符号窗和NIT。在FlexRay规程中描述的50多个配置参数只允许在配置状态(Config)中改变,但还没有进行总线通信。接着在微控制器通过中间状态Ready和命令Run释放通信之前,它要对报文存储器进行配置。然后按现存的总线通信,通信控制器独立地进行起动和同步,并积极地参与网络的起动。这是假设它用命令允许冷起动作为冷起动节点之前被配置了。紧随着是同步,通信控制器转换到正常激活状态,在这其中完成数据信息发送和接收的预配置。如果通信控制器这样配置,即它首先处在单时隙模式。通过命令允许所有时隙转换到正常运行,并在所有的配置时隙时允许发送数据。在出现同步错误时,根据错误的难易程度转换到正常被动状态。在该状态下,它只是接收数据信息或处在停止状态。在这个状态,通过新的配置能够重新离开这个状态。根据要求,微控制器能继续通信,使通信控制器转换到准备状态,在这个状态不发送或接收数据信息,而只是识别唤醒模式。从这里微控制器或自己发送唤醒模式或/和通过命令Run重新接收通信。许多FlexRay通信控制器能转换到监视模式。在这个模式下,能接收数据信息和符号,在这种状态不必与时隙和循环扫描同步。这个模式类似于CAN通信控制器的监听或静默模式,它主要是在网络起动期间,为了诊断而采用的。
POC FlexRay通信控制器的状态(简化)
FlexRay与CAN的异同
下表展示了CAN总线与FlexRay总线的异同。
FlexRay协议的通信循环示意图如下