LoRaWAN协议中文版 第5章 MAC命令

2020-04-17 12:15:20 浏览数 (1)

前言

这是《LoRaWAN102》的译文,即LoRaWAN协议规范 V1.0.2 版本(2016年7月定稿)。

我正在陆续对协议的各个章节进行翻译,具体其他章节的译文,以及译文之外的代码解析,可点此查看帖子LoRa学习笔记_汇总。

本文作者twowinter,转载请注明作者:http://blog.csdn.net/iotisan/


翻译开始

第5章 MAC命令

对网络管理者而言,有一套专门的MAC命令用来在服务器和终端MAC层之间交互。这套MAC命令对应用程序(不管是服务器端还是终端设备的应用程序)是不可见的。

单个数据帧中可以携带MAC命令,要么在FOpts字段中捎带,要么在独立帧中将FPort设成0后放在FRMPayload里。如果采用FOpts捎带的方式,MAC命令是不加密并且不长度超过15字节。如果采用独立帧放在FRMPayload的方式,那就必须采用加密方式,并且不超过FRMPayload的最大长度。

注意:如果MAC命令不想被窃听,那就必须以独立帧形式放在FRMPayload中。

每个MAC命令是由 1字节CID 跟着一段可能为空的字节序列 组成的。

CID

Command

由谁发送

描述

终端

网关

0x02

LinkCheckReq

x

终端利用这个命令来判断网络连接质量

0x02

LinkCheckAns

x

LinkCheckReq的回复。包含接收信号强度,告知终端接收质量

0x03

LinkADRReq

x

向终端请求改变数据速率,发射功率,重传率以及信道

0x03

LinkADRAns

x

LinkADRReq的回复。

0x04

DutyCycleReq

x

向终端设置发送的最大占空比。

0x04

DutyCycleAns

x

DutyCycleReq的回复。

0x05

RXParamSetupReq

x

向终端设置接收时隙参数。

0x05

RXParamSetupAns

x

RXParamSetupReq的回复。

0x06

DevStatusReq

x

向终端查询其状态。

0x06

DevStatusAns

x

返回终端设备的状态,即电池余量和链路解调预算。

0x07

NewChannelReq

x

创建或修改 1个射频信道 定义。

0x07

NewChannelAns

x

NewChannelReq的回复。

0x08

RXTimingSetupReq

x

设置接收时隙的时间。

0x08

RXTimingSetupAns

x

RXTimingSetupReq的回复。

0x80~0xFF

私有

x

x

给私有网络命令拓展做预留。

表4:MAC命令表

注意:MAC命令的长度虽然没有明确给出,但是MAC执行层必须要知道。因此未知的MAC命令无法被忽略,且前面未知的MAC命令会终止MAC命令的处理队列。所以建议按照LoRaWAN协议介绍的MAC命令来处理MAC命令。这样所有基于LoRaWAN协议的MAC命令都可以被处理,即使是更高版本的命令。


5.2 Link ADR 命令(LinkADRReq, LinkADRAns)

通过 LinkADRReq 命令,NS(网络服务器)可以调整终端的速率。

Size (bytes)

1

2

1

LinkADRReq Payload

DataRate_TXPower

ChMask

Redundancy

Bits

[7:4]

[3:0]

DataRate_TXPower

DataRate

TXPower

所请求的数据速率(DataRate)和发射功率(TXPower)是根据区域规定,体现在LoRaWAN协议中文版_配套文件 地区参数(物理层) 中。命令中的发射功率字段指的是设备可操作的最大发射功率。如果命令中的发射功率高于终端实际发射功率的最大值,终端也要应答成功,这种情况下,将终端的发射功率尽可能提高到最大值。 ChMask 字段指示了上行的可用信道,从最低位bit0表示开始。

Bit#

Usable channels

0

Channel 1

1

Channel 2

..

..

15

Channel 16

表5:信道状态表

ChMask 字段的对应位如果设置为1,则表示对应的信道可以进行上行传输,只要该信道允许终端使用该数据速率。如果对应位设置为0,则表示相应信道不可用。

Bits

7

[6:4]

[3:0]

Redundancy bits

RFU

ChMaskCntl

NbTrans

Redundancy 字段中的 NbTrans 位域,指的是每个上行消息的发送个数,这仅对 “unconfirmed” 消息有作用。对于单帧发送情况相应的默认值为1,有效范围是[1:15]。如果收到 NbTrans == 0,终端需要用默认值。这个位域可以被NS(网络服务器)用来控制节点上行的 Redundancy 从而获得QOS(服务质量)。在重传帧时节点通常会调频,每次重传不用等到接收窗口超时。只要在RX1期间收到下行消息,该上行消息则不再进行任何重传。对于 Class A 设备,RX2时隙的接收也是一样处理。

ChMaskCntl 位域和之前定义的 ChMask 字段有关,它控制了ChMask所指定的16个信道块。也可以对所用信道进行全局的打开或关闭。这个位域的使用是根据区域规定,体现在LoRaWAN协议中文版_配套文件 地区参数(物理层) 中。

NS(网络服务器)可能会在单个下行帧中包含多个 LinkAdrReq 命令。终端为了配置 channel mask ,将会按照下行消息中的命令块的顺序,逐一地处理所有的 LinkAdrReq 消息。 终端可能会接收或者拒绝命令块中所有 channel mask 的控制,在逐个 LinkAdrAns 命令块中体现连续的 Channel Mask ACK 状态,来指示相应的 channel mask 接受与否。 终端在连续命令块时只处理最后一个消息中的 DataRate, TXPower 和 NbTrans 字段。终端需要在每一个 LinkAdrAns 命令中体现 ACK 状态,来指示对这些最终设置的接受与否。

信道频点信息是按地区规定,在第6章中有定义。终端使用 LinkADRAns 命令来应答 LinkADRReq 命令。终端为了配置

Size (bytes)

1

LinkADRAns Payload

Status

Bits

[7:3]

2

1

0

Status bits

RFU

Power ACK

Data rate ACK

Channel mask ACK

LinkADRAns 的 Status 位域按照如下定义:

/b>

Bit = 0

Bit = 1

Channel mask ACK

所发的 channel mask 使能了未定义的信道或者禁用了所有信道。命令被丢弃,终端状态不变。

所发的 channel mask 已成功解析,已按照 mask 设置了当前的信道状态。

Data rate ACK

所请求的数据速率,终端无法识别,或者无法应用在当前信道中。命令被丢弃,终端状态不变。

数据速率成功设置。

Power ACK

所请求的发射功率不能在终端上执行。命令被丢弃,终端状态不变。

功率等级成功设置。

如果这三个位中有任何一位等于0,则命令没有成功,节点保持之前的状态。

5.4 接收窗口参数(RXParamSetupReq,RXParamSetupAns)

5.5 终端状态(DevStatusReq, DevStatusAns)

通过 DevStatusReq 命令,NS(网络服务器)可以获取终端的状态信息。该命令无载荷。一旦终端收到 DevStatusReq 命令,则会回复 DevStatusAns 命令。

Size (bytes)

1

LinkADRAns Payload

Status

Bits

[7:3]

2

1

0

Status bits

RFU

Power ACK

Data rate ACK

Channel mask ACK

5.6 信道的创建和修改(NewChannelReq, NewChannelAns, DlChannelReq, DlChannelAns)


未完待续。

翻译完


0 人点赞