FiRa标准UWB MAC实现(一)——FiRa设备类型及测距框架

15 篇文章 0 订阅

在FiRa标准中,MAC的基本数据框架基于IEEE 802.15.4-2020标准,在IEEE保证之上,增加了基于块的测距模式的调度,整体实现也比较复杂,这里先简单进行粗略的框架介绍,后续陆续进行相对完整的讲解。

1. FiRa中的设备类型及角色

在FiRa标准的规范中,将设备分为了Controller、Controlee两种类型(device_type);
从设备的角色来分,又分为Initiator以及Responder两种(device_role)。

因此,对于一个FiRa设备而言,可以有四种类型,如下图:

  • Controller + Initiator
  • Controlee + Responder
  • Controller + Responder
  • Controlee + Initiator
    设备类型
    其中,关于设备类型的含义:
  • 控制器,通过发送控制消息来定义和控制测距流程。
  • 受控端,根据控制器发送的消息来执行测距的流程。

关于设备角色的含义:

  • Initiator,通过发送RFRAME测距初始消息(Ranging initiation message, RIM),开始一个测距流程,可以理解为测距流程的发起者。
  • Responder,发送响应消息,应答Initiator发送的RIM消息。

  在FiRa MAC中的调度模式采用:time-scheduled-based ranging(基于时间调度的测距),测距设备由控制器进行调度,不同的设备在不同的时隙发送相对应的UWB消息,包含:测距帧(RFRAME)或测量报告。

  基于时间调度的模式下,FiRa中引入了测距块(ranging block)、测距轮(ranging round)以及测距时隙(slot)的概念,在接下来将对基于块的测距模式进行讲解。

2.基于块的测距模式

  对于基于块的测距模式而言,首先要理解其构成框架:每个会话中的测距分为了多个块(Block),在每个块内有分为若干测距轮(Ranging Round),而每个测距轮内又拆分为更小的测距时隙(Slot)单元。正常情况下,测距过程将在每个块的固定测距轮之内完成。

  基于块的模式,连续测距轮之间的时间是固定的。控制器应在第一个测距块(Block索引为0)的第一个测距轮(Round索引为0)中启动测距会话。(不论Hopping模式与否,都应从Block 0的Round Index 0开启测距)

  为了应对复杂环境中的冲突等考虑,FiRa规范在此基础之上,增加了跳频(Round Hopping)的设计,以便能够在运行过程中动态避开冲突。

  这一机制的实现,如要通过引入Round Hopping,设计了相关的Hopping序列规则,这样在测距中的多方都能够形成先验知识,能够实现有效的同步。

2.1 Round Hopping

  轮次跳转是FiRa设备调到不同的测距轮,以便在下一个测距块中成功执行测距的一个特性。
FiRa设备在下一个测距块中要使用的RR有Hoppoing序列决定。

2.2 Hopping序列

S ( B l o c k I n d e x , S e s s i o n I D , N R o u n d ) = ( ( A E S ( B l o c k I n d e x , S e s s i o n I D ) & 0 x F F F F ) ∗ N R o u n d ) > > 16 S(BlockIndex, SessionID, N_{Round}) = \\[6pt] ((AES(BlockIndex, SessionID) \& 0xFFFF) *N_{Round}) >> 16 S(BlockIndex,SessionID,NRound)=((AES(BlockIndex,SessionID)&0xFFFF)NRound)>>16

N R o u n d N_{Round} NRound代表一个测距块中的Ranging Round的数量。

  AES算法应使用AES-128的ECB模式。BlockIndex、SessionID都用零填充到左边以达到AES块大小的要求,分别用于明文和密钥。

注意,BlockIndex为AES的明文,SessionID为AES的密钥。

AES之后的结果与上0xFFFF,然后乘以 N R o u n d N_{Round} NRound

跳变序列确定测距块中的Ranging Round的Round Index,当跳变模式启用时需要使用Round Index。

区块索引0(即测距会话中的第一个测距区块)无论是否使能Round Hopping都始终为0。

示例
BlockIndex为1(即当前测距会话的第二个测距块),SessionID为0x10203,每个测距块内有4个RR,在AES处理时都需要在左侧补充0:

  • BlockIndex : 0x0000_0000_0000_0000_0000_0000_0000_0001
  • SessionID : 0x0000_0000_0000_0000_0000_0000_0001_0203

通过AES函数处理之后,得到:0x3170_1ba5_ee72_4e1b_5fbf_d519_1c3d_77de,
与0xFFFF执行与操作后得到:0x77de, 乘以RR数量4,得到:0x0001_df78,
右移16bit之后,得到S的值为0x1。

连续的BlockIndex 2/3/4的S的值为0,3和1。
这意味着,对于测距块0,1,2,3,4,测距轮的索引分别为:0,1,0,3,1,如图所示:
在这里插入图片描述

2.3 Block Striding

块跨步功能可用于跳过测距块。当不需要频繁测距时,测距设备可以通过跳过测距块来降低功耗。

步幅长度指示在下一次测距之前将跳过多少测距块。如果步幅长度为N,当前的BlockIndex为M,则下一个测距块索引为:M+N+1。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萝卜D大哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值