前言
这是《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)
未完待续。