FlexRay总线协议介绍(2)- 帧格式

Overview(概述)

FlexRay帧结构主要有三部分组成,帧头,有效负载,帧尾。

Header Segment(帧头)

5 bytes, 由预留位,有效负载前导码指示位,空帧指示位,同步帧指示位,启动帧指示位,帧ID,有效负载长度,帧头CRC以及周期计数组成。

预留位/Reversed bit(1 bit)
  1. 发送节点需要设置预留位为0;
  2. 接收节点需要忽略预留位

有效负载前导码/Payload preamble indicator(1 bit)

有效载荷前导码指示所传输帧的有效载荷段中是否包含可选向量:

  1. 在静态帧中,指示有效负载开头包含一个网络管理向量。
  2. 在动态帧中,指示有效负载开头包含一个Message ID。

当有效负载前导码设置为0时,则有效负载段既不包含网络管理向量或者Message ID。

当有效负载前导码设置为1时,则有效负载段包含一个网络管理向量(静态帧)或Message ID(动态帧)。

空帧指示位/Null frame indicator(1 bit)

空帧指示位指示这帧是否为空帧:

  1. 当空帧指示位为0,则有效负载不包含有何有效信息。所有数据会默认设置为0.
  2. 当空帧指示位为1,则有效负载包含数据信息。

同步帧指示位/Sync frame indicator(1 bit)

同步帧指示位指示这帧是否为同步帧:

  1. 当同步帧指示位为0,则没有接收节点会考虑将这帧作为同步或者同步相关的任务。
  2. 当同步帧指示位为1,则所有接收节点会使用这帧用来同步,如果它满足其他接收准则:

时钟同步机制会使用同步帧指示位。有几种情况会导致同步帧指示位设置为 1,并随后被时钟同步机制使用。关于节点应如何设置同步帧指示符的详细规定见协议第 5 章和第 8.8 节。

启动帧指示位/Startup frame indicator(1 bit)

启动帧指示位指示这帧是否为启动帧。只有冷启动的节点允许发送启动帧。

  1. 当启动帧指示位为0,则指示该帧不是启动帧。
  2. 当同步帧指示位为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作为网络管理向量。

  1. 长度由参数gNetworkManagementVectorLength在POC:config阶段进行配置。网络中的所有节点这个参数的值必须配置相同。
  2. 该网络管理向量应只在静态帧中被使用。
  3. 发送节点的网络管理向量由主机应用数据写入。CC不知道也没有任何机制可以获取该网络管理向量的信息,基于Oring功能中的CC除外,详细参考协议9.3.3.4.
  4. 负载前导码指示位指示该负载段是否包含网络管理向量。
  5. 一个byte中的msb位优先发送。
  6. 网络管理向量中的LSB字节优先发送。
报文ID/Message ID (16 bit)

动态段中传输的有效负载的前两个字节,可以作为接收节点的过略数据而被识别,称之为Message ID。

  1. Message ID是由应用程序确定的编号,用于标识数据段的内容。
  2. Message ID仅在动态段中被使用。
  3. Message ID长度为16bits。
  4. 对于发送节点,Message ID由主机应用程序写入。
  5. 对于接收节点,帧的存储取决于过滤程序对messag ID的使用。
  6. 是否包含message ID信息由有效负载前导码决定。
  7. Message ID的msb应放在有效负载第一个字节的msb的位置,后续的message ID的bit应按照重要性依次递减排布。

FlexRay Trailer Segment/FlexRay帧尾

FlexRay的帧尾部分是一个单独的场,由24bit CRC组成。

  1. 包含header segment和payload segment
  2. 不同通信通道的initial value应使用不同的值。
  3. Frame CRC的传输方式为msb->lsb
CRC Calculation Details

Frame CRC在发送之前或者接收之后,在CC内部被计算。当CC接收到一帧报文后,会基于收到Header和payload字段计算CRC并于接收到的CRC进行比对。每个通道内CRC的计算是相互独立的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值