FiRa MAC层相关定义,整体基于IEEE 802.15.4z协议标准框架,在此基础之上增加了测距应用的调度等考虑。
1.基于块的测距模式
对于基于块的测距模式而言,首先要理解其划分:每个会话中的测距分为了多个块,在每个块内有分为若干测距轮(Ranging Round),而每个测距轮内又拆分为更小的测距时隙单元。正常情况下,测距过程将在每个块的固定测距轮之内完成。
基于测距块的模式下,连续测距轮之间的平均时间是固定的。控制器应在第一个测距块(Block索引为0)的第一个测距轮(Round索引为0)中启动测距会话。
为了应对复杂环境中的冲突等考虑,FiRa规范在此基础之上,增加了跳频的设计,以便能够在运行过程中动态避开冲突。
这一机制的实现,如要通过引入Round Hopping,设计了相关的Hopping序列规则,这样在测距中的多方都能够形成先验知识,能够实现有效的同步。
1.1 Round Hopping
轮次跳转是FiRa设备调到不同的测距轮,以便在下一个测距块中成功执行测距的一个特性。FiRa设备在下一个测距块中要使用的RR有Hoppoing序列决定。
1.2 Hopping序列
S(BlockIndex, SessionID, N_{Round}) = \\[6pt] ((AES(BlockIndex, SessionID) \& 0xFFFF) *N_{Round}) >> 16S(BlockIndex,SessionID,NRound)=((AES(BlockIndex,SessionID)&0xFFFF)∗NRound)>>16
N_{Round}NRound代表一个测距块中的Ranging Round的数量。
FiRa中,Hopping序列基于AES针对BlockIndex、会话ID进行处理获得。AES功能应使用AES-128的ECB模式。BlockIndex、SessionID都用零填充到左边以达到AES块大小的要求,分别用于明文和密钥。
AES之后的值与0xFFFF,然后乘以N_{Round}。
跳变序列确定RR的Round Index,当跳变模式启用时需要使用Round Index。
区块索引0(即测距会话中的第一个测距区块)无论是否使能Round Hopping都始终为0。也就意味着,BlockIndex之前可能不会开始跳变?
示例
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。
1.3 Block Striding
另外,还引入了块跨步功能,该功能可用于跳过测距块。当不需要频繁测距时,测距设备可以通过跳过测距块来降低功耗。
步幅长度指示在下一次测距之前将跳过多少测距块。如果步幅长度为N,当前的BlockIndex为M,则下一个测距块索引为:M+N+1。