Overview(概述)
FlexRay帧结构主要有三部分组成,帧头,有效负载,帧尾。
Header Segment(帧头)
5 bytes, 由预留位,有效负载前导码指示位,空帧指示位,同步帧指示位,启动帧指示位,帧ID,有效负载长度,帧头CRC以及周期计数组成。
预留位/Reversed bit(1 bit)
- 发送节点需要设置预留位为0;
- 接收节点需要忽略预留位
有效负载前导码/Payload preamble indicator(1 bit)
有效载荷前导码指示所传输帧的有效载荷段中是否包含可选向量:
- 在静态帧中,指示有效负载开头包含一个网络管理向量。
- 在动态帧中,指示有效负载开头包含一个Message ID。
当有效负载前导码设置为0时,则有效负载段既不包含网络管理向量或者Message ID。
当有效负载前导码设置为1时,则有效负载段包含一个网络管理向量(静态帧)或Message ID(动态帧)。
空帧指示位/Null frame indicator(1 bit)
空帧指示位指示这帧是否为空帧:
- 当空帧指示位为0,则有效负载不包含有何有效信息。所有数据会默认设置为0.
- 当空帧指示位为1,则有效负载包含数据信息。
同步帧指示位/Sync frame indicator(1 bit)
同步帧指示位指示这帧是否为同步帧:
- 当同步帧指示位为0,则没有接收节点会考虑将这帧作为同步或者同步相关的任务。
- 当同步帧指示位为1,则所有接收节点会使用这帧用来同步,如果它满足其他接收准则:
时钟同步机制会使用同步帧指示位。有几种情况会导致同步帧指示位设置为 1,并随后被时钟同步机制使用。关于节点应如何设置同步帧指示符的详细规定见协议第 5 章和第 8.8 节。
启动帧指示位/Startup frame indicator(1 bit)
启动帧指示位指示这帧是否为启动帧。只有冷启动的节点允许发送启动帧。
- 当启动帧指示位为0,则指示该帧不是启动帧。
- 当同步帧指示位为1, 则指示该帧为启动帧。
在冷启动节点的同步帧中,启动帧指示位只能是1,因此启动帧必为同步帧,同步帧指示位也同样会设置为1。
Frame ID/帧ID (11 bits)
帧ID定义了由哪个slot发送这帧,也称为Slot ID。在同一个通信周期内,一个frame ID每个通道上只能被使用一次。在每个cluster上,每个帧都被分配了一个唯一的ID。范围为1 ~ 2047。ID =0 是无效的帧ID。帧ID传输方式为msb ->lsb。
有效负载/Payload length (7 bits)
有效负载用于指示负载段的长度,单位为word,长度范围从0到cPayloadLengthMax, 即有效负载的长度为2x cPayloadLengthMax bytes。
在一个通信周期内的静态段中,所有帧是固定等长的。有效负载的长度被设置为gPayloadLengthStatic。
在一个通信周期内的动态段中,不同帧的长度是可变的。在特定的动态段中,每个通信周期的动态段的帧长度也可能会变化。最终,有效负载的长度在配置的通道上也是可变的。
有效负载的传输方式为msb->lsb。
头部CRC/Header CRC(11 bits)
Header CRC的计算从同步帧指示位开始到有效负载长度结束。该CRC在offline mode下计算并通过配置提供给CC。之后接收节点CC在收到一帧信息后会计算出CRC并与配置中的CRC进行比对。
用于生成Header CRC 的寄存器初始化向量应为 0x01A。
CRC计算时,布局仍为从同步帧指示位到有效负载长度依次按顺序输入。
所有节点传输header CRC的方式为msb->lsb。
周期计数/Cycle count(6 bits)
周期计数指示发送节点为当前哪个cycle计数内,由参数vCycleCounter定义。
节点应先传输周期计数的msb, 再发送lsb。
FlexRay payload segment/FlexRay负载段(0-254 bytes)
FlexRay负载段包含0到254个bytes的数据(0-127 words)。因为Payload Length的单位是word, 所以负载段的数据都是偶数字节。数据段则分别为Data0(byte0), Data1(byte1)…按顺序发送。
动态段中payload的前两个字节可以作为Message ID使用,允许接收节点过滤或者引导该字段的内容。负载前导码指示位指示该负载段是否包含Message ID。
静态段中payload的0-12个字节可以作为网络管理向量使用。负载前导码指示位指示该负载段是否包含网络管理向量。网络管理向量的长度由参gNetworkManagement-VectorLength(0-12bytes)在POC:config阶段进行配置并且无法在其他状态下改变。
从Payload Data0开始,节点应优先传输每个字节的msb位。
网络管理向量/NMVector
在静态段中可以在负载中选择一定数量的bytes作为网络管理向量。
- 长度由参数gNetworkManagementVectorLength在POC:config阶段进行配置。网络中的所有节点这个参数的值必须配置相同。
- 该网络管理向量应只在静态帧中被使用。
- 发送节点的网络管理向量由主机应用数据写入。CC不知道也没有任何机制可以获取该网络管理向量的信息,基于Oring功能中的CC除外,详细参考协议9.3.3.4.
- 负载前导码指示位指示该负载段是否包含网络管理向量。
- 一个byte中的msb位优先发送。
- 网络管理向量中的LSB字节优先发送。
报文ID/Message ID (16 bit)
动态段中传输的有效负载的前两个字节,可以作为接收节点的过略数据而被识别,称之为Message ID。
- Message ID是由应用程序确定的编号,用于标识数据段的内容。
- Message ID仅在动态段中被使用。
- Message ID长度为16bits。
- 对于发送节点,Message ID由主机应用程序写入。
- 对于接收节点,帧的存储取决于过滤程序对messag ID的使用。
- 是否包含message ID信息由有效负载前导码决定。
- Message ID的msb应放在有效负载第一个字节的msb的位置,后续的message ID的bit应按照重要性依次递减排布。
FlexRay Trailer Segment/FlexRay帧尾
FlexRay的帧尾部分是一个单独的场,由24bit CRC组成。
- 包含header segment和payload segment
- 不同通信通道的initial value应使用不同的值。
- Frame CRC的传输方式为msb->lsb
CRC Calculation Details
Frame CRC在发送之前或者接收之后,在CC内部被计算。当CC接收到一帧报文后,会基于收到Header和payload字段计算CRC并于接收到的CRC进行比对。每个通道内CRC的计算是相互独立的。