UWB MAC协议--jianqiang.xue
- 一、测距交换序列
- (一)Pre-POLL请求消息及其参数
- (二)Final_Data 消息及其参数
一、测距交换序列
本节详细介绍了DK MAC协议,用于在响应者设备的发起者和每个响应者之间进行三包交换的双向测距。图20-5展示了MAC协议中发起者和NResponderK\N^{K}_{Responder}\,NResponderK响应者在第(s+1)个测试会话中的UWB消息流,在第(i+1)个测试模块中有NSlotPerRoundK\N^{K}_{SlotPerRound} \ NSlotPerRoundK 插槽。
虽然图中所示的MAC协议是根据相对于发起者时钟和时间基准的MAC时间轴进行的,但本协议应根据20.3节中所述的相应响应者-设备的时间基准进行。NResponderK\N^{K}_{Responder}\,NResponderK UWB测距数据包到NSlotPerRoundK\N^{K}_{SlotPerRound} \ NSlotPerRoundK 槽位的映射如表20-2所示。
表20-2:槽位到UWB测距报文的映射关系。
槽位索引 | 标记 | STS数据包格式 | 发送者 |
---|---|---|---|
0 | Pre-POLL | SP0 : 数据帧 | 发起者 |
1 | POLL | SP3 : 参考帧 | 发起者 |
1+1 | Response_0 | SP3 : 参考帧 | 回应者 |
1+1 | Response_1 | SP3 : 参考帧 | 回应者 |
… | … | SP3 : 参考帧 | 回应者 |
… | … | SP3 : 参考帧 | 回应者 |
1 + NResponderK\N^{K}_{Responder}\,NResponderK | Responder_ NResponderK\N^{K}_{Responder}\,NResponderK-1 | SP3 : 参考帧 | 回应者 |
1 + NResponderK\N^{K}_{Responder}\,NResponderK + 1 | 结束 | SP3 : 参考帧 | 发起者 |
1 + NResponderK\N^{K}_{Responder}\,NResponderK + 2 = NPacketsK\N^{K}_{Packets}\,NPacketsK | 结束-数据 | SP0 : 数据帧 | 发起者 |
1 + NResponderK\N^{K}_{Responder}\,NResponderK + 3 | 槽位未使用 | N/A | N/A |
… | 槽位未使用 | N/A | N/A |
NSlotPerRoundK\N^{K}_{SlotPerRound}\,NSlotPerRoundK -1 | 槽位未使用 | N/A | N/A |
在正常工作模式下(即发起者和响应者都处于活跃的测距会话中),MAC协议序列如下:
- 发起方发送的第一个数据包是一个名为Pre-POLL消息的数据包。注意,如上所述,当启动或恢复一个测距会话时,默认情况下,在测距块0的第0轮开始测距。第一个报文是SP0报文。其有效载荷应包括:
- UWB_Session_ID^k:当前测距会话ID。
- STS_Index^k:(i,Round_Idx(i),POLL):后续POLL消息的STS索引。
- i:测试会话当前块索引
- Hop_Flag^k(i):跳变设置从以前的测距交换。如果当前测距周期是测距会话启动或恢复后的第一次测距周期未,则设置为 0。注意,当跳变模式设置为“自适应跳变”时,接收端才会分析该字段。
- Round_Idx^k(i): (i+1)第(i+1)个范围块的舍入索引,该索引在前一个范围交换(第i个范围块)的Final_Data数据包中设置。如果当前测距周期是已启动或恢复的测距会话中的第一轮,则 Round_Idx^k(i=0)设置为“0”。
(一)Pre-POLL请求消息及其参数
Pre-POLL消息及其参数的定义如表20-3和表20-4所示。表20-4中列出的所有参数值都应采用小端序格式编码。
表20-3:Pre-POLL请求消息及其参数。
UWB MAC 消息 | UWB MAC 消息ID | 参数 |
---|---|---|
Pre-POLL | 1 | UWB_Session_ID, Poll_STS_Index, Ranging_Block, Hop_Flag, Round_Index |
表20-4 Pre-Poll Message中的参数定义。
参数 | 长度(bytes) | 值 | 描述 |
---|---|---|---|
UWB_Session_ID | 4 | 0 - (2^32-1) | UWB测距会话ID |
Poll_STS_Index | 4 | 0 - (2^32-1) | 后续POLL消息的STS索引 |
Ranging_Block | 2 | 0-65535 | 会话当前测距模块的索引 |
Hop_Flag | 1 | 0:无跳变 1:跳变 | 对于没有跳变配置,该字段始终为0。对于连续跳变配置,该字段始终为1(除了在启动或恢复一个跳变会话后索引为0的第一个跳变模块)。 |
Round_Index | 2 | 0-65535 | 周期内计数索引,从前一个测距模块中的测距交换设置的当前测距模块的范围舍入索引。这个字段在第一个量程块中被设置为0,我们总是从量程0开始。 |
- 从UWB^ {K}_ {time0}开始测量一段时间的T^ {K}_ {Slot}后,发起者开始发送POLL消息。这应该是一个SP3类型的包(见第21节)。经过一段时间后,发起方开始发送POLL消息。这应该是一个SP3类型的包(见第21节)。
- 每个响应者l (l = 0,…,N^{k}_{Responder} -1)将在其专用的响应槽中发送响应数据包。
- 每条消息应作为SP3类型的报文发送。STS使用的索引与上面第2步中发送的POLL消息相关(参见第20.6节)。
- 如果任何一个响应器在当前范围内没有收到发起者发出的POLL消息,该响应器在专用响应槽内不得发送。
- 如果启动器已经接收到至少一个有效的响应:
- 在(N ^k _Responder + 2)个槽后,发起者将发送它的结束消息。这个数据包是一个SP3数据包,它完成了飞行时间测量。如果没有收到有效的响应,启动器可以选择发送它的结束消息和下面的结束数据包。在跳过结束消息和结束数据包报文的情况下:
- 如果自适应跳变模式是主动的,则启动器和应答器的跳变模式都将被触发。
- 对于跳过的最终数据包,帧计数器值不应增加。
- 在(N ^k _Responder + 3)个槽位后,发起方通过向响应设备发送[结束数据包]报文完成测距交换。该报文为SP0类型报文,有效数据应包括以下内容:
- UWB_Session_ID^k:当前测距会话ID。
- i:测试会话 当前模块索引
- Hop_Flag^k(i+1):在测距模块i+1中使用跳变。注意,只有当跳变配置设置为自适应跳变时,该字段才相关。
- Round_Idx^k(i):在量程模块i+1中,下一个量程交换的量程整数索引。
- STS_Index^k:(i,Round_Idx(i),POLL):前面结束消息的STS索引。
- Final Time Stampk ^k (i): 结束消息的时间戳。这个时间戳将被计算为发起者POLL消息的RMARKER和发起者结束消息的RMARKER之间的差值
- NRxResponses\N_{RxResponses}\,NRxResponses:当前测距交换中接收到的响应数。
[Time_Stamps^s(l)]:所有应答者的所有测距测量时间戳N ^k _Responder,其有效的测距响应已在启动器接收到。在没有收到有效响应的情况下,发起者可以额外添加响应者的时间戳数据。有效数据的大小取决于添加的时间戳数据的数量。每个响应者的时间戳数据应包括以下字段:- Responder_Index l, l = 0, 1,…, N^k _Responder - 1对应于响应器槽位l(测距内槽位索引2+l)。
- 第(l+1)个响应器的时间戳响应器值。时间戳值应计算为发起者POLL消息的RMARKER与第(l+1)个响应者响应消息的RMARKER之间的差值(详见第21.6节)。如果没有从响应方收到有效响应,但为该响应方添加了时间戳数据,则时间戳值应设置为0。
- Ranging_Timestamp_Uncertainty_Responder parameter (测距时间戳不确定性响应器参数).
- 在收到有效响应的情况下,Ranging_Status_Responder参数设置为0x0 (success),否则该参数设置为表20-7所示的值之一,以显示错误的原因。
- 在(N ^k _Responder + 2)个槽后,发起者将发送它的结束消息。这个数据包是一个SP3数据包,它完成了飞行时间测量。如果没有收到有效的响应,启动器可以选择发送它的结束消息和下面的结束数据包。在跳过结束消息和结束数据包报文的情况下:
(二)Final_Data 消息及其参数
[结束数据包]消息及其参数的定义如表20-5和表20-6所示。
表20-5:Final_Data消息及其参数。
UWB MAC 消息 | UWB MAC 消息ID | 参数 |
---|---|---|
Final_Data | 2 | UWB_Session_ID, Ranging_Block, Hop_Flag, Round_Index, Final_STS_Index, Ranging_Timestamp_FINAL_TX, Number_Ranging_Responders, Responder_Index, Ranging_Timestamp_Responder_l, Ranging_Timestamp_Uncertainty_Responder_l, Ranging_Status_Responder_l, … |
表20-6:Final_Data消息中的参数定义。
参数 | 长度(bytes) | 值 | 描述 |
---|---|---|---|
UWB_Session_ID | 4 | 0 - (2^32-1) | UWB测距会话ID |
Ranging_Block | 2 | 0-65535 | 会话:当前测距模块的索引 |
Hop_Flag | 1 | 0:无跳变 1:跳变 | 对于没有跳变配置,该字段始终为0。对于连续跳变配置,该字段始终为1(除了在启动或恢复一个跳变会话后索引为0的第一个跳变模块)。 |
Round_Index | 2 | 0-65535 | 周期内计数索引,从前一个测距模块中的测距交换设置的当前测距模块的范围舍入索引。这个字段在第一个量程块中被设置为0,我们总是从量程0开始。 |
todo P423