LoRaWAN 规范1.0 (章节10~13)

10 B类模式的上行数据帧

除了帧头中FCtrl字段的保留(RFU)位,B类和A类的上行数据帧一样。B类使用A类中没有使用的RFU位:

第几位 7 6 5 4 3…0
FCtrl ADR ADRACKReq ACK ClassB FOptsLen

上行数据中的 ClassB 位设为1,来告诉网络服务器:设备已经转换为B类模式,已经准备在照预定时间接收下行ping。

下行数据的 FPending 位意义不变,仍然表示服务器上有等待发送给设备的消息。如果下行数据使用该标记,设备应当按照A类的规范来接收数据。

11 下行Ping帧格式(B类)

11.1 物理层帧格式

和A类下行帧格式一致,不过可能要按照不同的信道频率规划。

11.2 单播和组播MAC消息

消息可以是单播,也可以是组播。给一个终端设备单独发送消息使用单播,给多个终端设备发送使用组播。组播时属于同一组的设备必须使用相同的组播地址和加密密钥。LoRaWAN B类规范并没有指定这些,这就是说要远程设置组播的组,或者安全地分发组播需要的密钥相关的信息。这些信息必须要设置,要么在节点手动激活的时候一起配置,要么通过应用层配置(远程)。

  • 11.2.1单播的MAC消息格式

    单播时的,下行Ping的MAC负载(MAC payload)遵循A类规范,终端设备处理数据的方式完全相同。同时也使用相同的帧计数器,无论下行数据使用B类的 ping slot 还是使用A类的 “piggy-back” slot,计数器都会增加。

  • 11.2.2组播的MAC消息格式

    组播帧和单播帧的格式只有一些微小差别:

    • 禁止携带MAC命令,不论在FOpt还是在payload(port=0):因为组播和单播的验证稳健性不同。
    • ACKADRACKReq 必须为0,MType必须使用不需要回复的类型(Unconfirmed Data Down)。
    • 此处的FPending表示还有组播数据需要发送。一旦使用,下一次组播的接收时隙会发送一个数据帧;如果不使用,下一个组播可以带数据也可以不带数据。当接收时隙冲突时,终端可以用它来评估优先级。

12 信标捕获和追踪

终端设备由A类切换到B类之前要先接收一次网络的信标,来校正它的内部时序。终端设备进入B类模式以后,为了关闭和网络时间不一致(时基发生漂移)的内部时钟,要定期搜寻、接收网络信标。使用B类的终端有时可能会接收不到信标(超出网关连接范围、有干扰等等),
这种情况下终端设备就必须逐步扩大其信标的范围,而且 ping slots 的接收窗口也要考虑到内部时钟漂移的情况。

注:
例如,一个设备,其内部时钟精度 10ppm ,那么每个信标周期就可能会漂移 +/-1.3ms。

10ppm——每秒误差百万分之十秒,表示一天会有 10×24×60×60=0.864s的误差。

12.1 最小无信标操作时间

设备在没有信标的情况下,会维持B类模式2小时(距最后一次收到信标120分钟),这种临时的没有信标的B类操作称作“无信标”操作,这些操作都依赖终端设备自身的时钟计时。

在无信标期间,为了适应终端可能出现的时钟漂移,单播、组播和信标的接收时隙必须要逐步扩大。

无信标操作

12.2 建立在接收上的无信标操作扩展

在120分钟“无信标”期间,终端接收到任何信标,都会重置“无信标”时间(重新从0计算)。终端设备会通过接收到的信标来修正时间漂移,并重置接收时隙的时间长度。

12.3 时间漂移最小化

终端设备可以使用信标(如果可以的话)的精度周期性的校准它们的内部时钟,并降低内部时钟频率的误差。由于定时振荡器的时间偏移与温度相关,并且可以计算出来,因此可以通过使用温度传感器进一步降低时间漂移。

13 B类下行时隙时间

13.1 定义

为保证B类终端设备操作成功,必须要在精确的时间点开启接收时隙,该时间点与基础信标有关。本节会详细介绍这些时间。

两个信标起点之间的时间间隔称作信标周期。信标以 BEACON_RESERVED 的起点作为数据传输的起始时刻。每个信标的前面都有一段守护时间,守护时间内部不会有任何 ping slot。守护时间的时间长度和所允许的最长帧在空中的传输时间一致,以此来保证守护时间之前任何时刻开始的下行数据都能被接收完,并且不会和接收信标发生冲突。ping slot的可用时间范围:从信标预留时间的结束时刻开始,到下一个信标守护时间的起始时刻结束。

图13: 信标时间示意图

表35:信标时间

名称 时间长度
Beacon_period 128 s
Beacon_reserved 2.120 s
Beacon_guard 3.000 s
Beacon-window 122.880 s

信标在空中传输的时间远远小于信标为网络管理广播帧预留的时间。
信标窗口时间间隔分成 215=4096 个时长为 30ms 的ping slots(ping时隙),这些时隙从第0个开始,至4095个结束。
终端设备一旦使用第 N 个时隙,就必须精确的在信标起始之后的第 Ton 秒打开接收窗口,其中Ton计算方法如下:

Ton=beacon_reserved+N×30

N是时隙索引(第N个时隙),单位ms。

最后一个ping slot在上次信标开始之后的第 beacon_reserved+4095×30ms=124970 ms 或者 下次信标开始之前的第 3030ms 打开。

13.2 随机时隙

为了避免系统冲突和 over-hearing (不确定是窃听还是过载,不过根据LoRWAN的功能推断这里应该是过载),使用随机的时隙索引,并且每个信标期间都要变化。

参数如下:

DevAddr 设备单播或组播网络地址,32位
pingNb 每个信标周期内的ping slot数量。必须是2的指数倍: 2k 其中 1k7
pingPeriod Period of the device receiver wake-up expressed in number of slots:212pingNb
pingOffset offset是个随机值,每次信标周期开始时通过计算获得。范围: 0~(pingPeriod – 1)
beaconTime 该时间在BCNPayload中,Time of the immediately preceding beacon frame 紧接在信标帧前面的时间
slotLen 一个ping slot的时长:30ms

为了校准(对齐)接收时隙,每个信标周期终端设备和服务器都会重新计算一个伪随机偏移。随机数生成使用AES加密算法,密钥全部由0组成:

Key = 16 x 0x00
Rand = aes128_encrypt(Key, beaconTime | DevAddr | pad16
pingOffset = (Rand[0] + Rand[1]x 256) modulo pingPeriod
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

本信标周期内使用的缝隙:

pingOffset + N x pingPeriod 其中 N=[0:pingNb-1]
  • 1
  • 1

节点在以下时间点打开接收缝隙:

缝隙 开启时刻
缝隙 1 Beacon_reserved + pingOffset x slotLen
缝隙 2 Beacon_reserved + (pingOffset + pingPeriod) x slotLen
缝隙 3 Beacon_reserved + (pingOffset + 2 x pingPeriod) x slotLen
缝隙 n Beacon_reserved + (pingOffset + (n-1) x pingPeriod) x slotLen

如果终端设备同时提供一个单播以及一个或多个组播缝隙,那么在一个新的信标周期开始时,要进行多次这种计算。为单播地址计(节点网络地址:DevAddr)算一次,为每个组播地址计算一次。

单播和组播的 缝隙 冲突时,终端设备的接收器优先处理组播。如果多个组播接收缝隙冲突,上次FPending标记位非0的优先处理。

使用随机化方案来避免单播时隙和组播时隙之间系统级别的冲突。如果在某个信标周期出现冲突,下一个信标周期几乎没有发生冲突的可能性。


知识共享许可协议 本文由 qingchuwudi 译制,除非另有声明,在不与原著版权冲突的前提下,本作品采用知识共享署名 3.0 中国大陆许可协议进行许可。

说明:LoRa应用学习站通过公开互联网收集、整理并转载有关LoRa及物联网应用解决方案,以供广大LoRa应用开发者和爱好者共同学习交流和参考运用到实际生产生活中。本站所有转载的文章、图片、音频、视频等资料的版权归版权所有人所有并衷心感谢您的付出,由于本站采用的非本站原创文章及图片等内容无法一一联系确认版权者,如果本网所选内容的文章原创作者认为其作品不宜放在本站,请及时通过以下留言功能通知我们采取适当措施,避免给双方造成不必要的经济损失。如果您希望保留本文在LoRa学习站,但希望文章末尾提供对作者的致谢或者产品、网站交换链接的,也请将需求写入以下留言栏中,谢谢您的支持。让我们共同努力,打造万物互联的未来美好生活!

您的留言或需求: