LoRaWAN 规范 1.0.2 (章节5)

5 MAC Commands

网络管理时会在网络服务器和终端MAC层之间传输一系列MAC命令。MAC层命令对应用、应用服务器以及终端设备上的应用永不可见。

一帧数据中可以包含任何MAC命令序列,MAC命令既可以放在FOpts中和正常数据一起发送;也可以放在FRMPayload中单独发送,此时FPort = 0,但不能同时在两个字段携带MAC命令。放在FOpts中的MAC命令不加密,并且不能超过15个字节。放在FRMPayload中的MAC命令必须加密,同时不能超过FRMPayload的最大长度。

注意:

不想被别人截获破解的命令要放到FRMPayload中单独发送

一条MAC命令由一个字节的命令ID(CID)和特定的命令序列组成,命令序列可以是空。

CID 命 令 终端发送 网关发送 简介
0x02 LinkCheckReq ×   用于终端验证网络连接
0x02 LinkCheckAns   × 回应验证请求, 同时包含终端接收质量相关的估算的信号功率
0x03 LinkADRReq   × 请求终端改变数据率、传输功率、接收率或者信道
0x03 LinkADRAns ×   LinkRateReq的应答
0x04 DutyCycleReq   × 设置设备的最大总发射占空比
0x04 DutyCycleAns ×   DutyCycleReq的应答
0x05 RXParamSetupReq   × 设置接收时隙相关参数
0x05 RXParamSetupAns ×   RXSetupReq的应答
0x06 DevStatusReq   × 请求终端状态
0x06 DevStatusAns ×   返回终端装填,即电量和解调情况
0x07 NewChannelReq   × 创建或修改无线电信道
0x07 NewChannelAns ×   NewChannelReq的应答
0x08 RXTimingSetupReq   × 设置接收时隙的时间
0x08 RXTimingSetupAns ×   RXTimingSetupReq的应答
0x09 TxParamSetupReq   x 网络服务器用它来设置终端设备停留时间的最大值和最大EIRP(等效全向辐射功率),与地域相关
0x09 TxParamSetupAns x   TxParamSetupReq命令的回复
0x0A DlChannelReq   x 通过将下行频率与上行频率进行偏移,来修改下行R1的无线信道(即:创建不对称信道)
0x0A DlChannelAns x   DlChannelReq命令的回复
0x80 ~ 0xFF Proprietary × × 保留命令

注:

MAC命令长度不固定,这就要求MAC命令执行端必须隐式获知。因为无法忽略不明的MAC命令,而且一旦遇到不明的MAC命令,就会导致处理MAC命令队列的进程终止。因此,建议遵循首先对MAC命令进行说明的LoRaWAN规范。这样的话,所有当前版本LoRaWAN规范中实现的MAC命令都可以被更高版本的规范兼容处理。

注:

终端设备所有被网络服务器调整过的内容(例如:RX2,新创建或调整过的信道)仅在下次入网前有效。因此,终端设备每次重新入网之后都会使用默认参数配置,而网络服务器则根据需要对这些值重新调整。

5.1 链路检查 (LinkCheckReqLinkCheckAns

终端使用LinkCheckReq命令检查与网络的连通性,该命令不含荷载(payload)。

网络服务器收到(一个或多个)网关转发过来的LinkCheckReq后回复一条LinkCheckAns命令。

大小(字节) 1 1
LinkCheckAns Payload Margin GwCnt

Margin(解调余量)是最近一条被成功收到的 LinkCheckReq 命令的链路预算(单位dB),是一个8位(bits)无符号整型,范围 [0,254]。值为 0 表示在解调的下限(0dB或者没有余量)上收到了数据,值20表示网关在比解调下限高出 20 dB 的信号强度上收到了数据。255是保留值

GwCnt是最近一次成功收到 LinkCheckReq 的网关的数量。

link margin参考:Link margin

5.2 速率自适应 LinkADRReqLinkADRAns

网络服务器通过发送 LinkADRReq 命令对终端设备速率进行调整。

大小(字节) 1 2 1
LinkADRReq Payload DataRate_TXPower ChMask Redundancy

大小(位 bits) [7:4] [3:0]
DataRate_TXPower DataRate TXPower

数据速率(DataRate)以及TX输出功率(TXPower)和地理区域相关,参考《LoRaWAN地域相关参数手册》(《LoRaWAN Regional Parameters document》)。命令中的TX输出功率指的是设备可以使用的最大发射功率。指定一个能够使用的比当前在使用的更高的功率的命令执行成功后,此时,终端设备将使用尽可能大(不超过命令设置以及物理允许的范围)的功率回复确认消息。信道掩码(ChMask)通过对最低有效位相应的位置填0来对上行信道的可用性进行编码,信道列表如下:

对应原文:
An end-device will acknowledge as successful a command which specifies a higher transmit power than it is capable of using and should, in that case, operate at its maximum possible power.

表5:信道状态表

第几位 可用信道
0 Channel 1
1 Channel 2
.. ..
15 Channel 16

ChMask中某位是1,表示启用该位对应的上行信道(用来进行上行传输的信道),只有终端设备当前使用的数据速率可以在该信道上使用时,该信道才可以使用;如果是0,则表示对应的上行信道不可用。终端设备当前使用的信道要设为1

第几位 7 [6:4] [3:0]
Redundancy bits RFU ChMaskCntl NbTrans

冗余(Redundancy)位中,NbTrans表示每条上行消息重复发送的次数,仅用于 unconfirmed 类型的上行消息。默认值为1,表示每帧只上传一次。有效范围 [1:15]。终端设备收到NbTrans == 0时仍然使用默认值。网络管理员通过控制节点的上行冗余来保证给定的服务质量。终端设备在重传期间照常跳频,每次重传后也会等待接收数据,直到接收窗口过期。在RX1短暂窗口期间的任一时刻接收到下行消息都会停止该消息的重传。对于A类来说,RX2情况与RX1相同。

信道掩码控制(ChMaskCntl)字段负责控制ChMask的掩码位。当网络上信道的实现超过16个,该字段必须是一个非0值。用它来控制ChMask使用哪16个信道,还可以用它来全局性的打开或关闭指定调制方式的所有信道。该字段的具体使用和地域相关,具体见《LoRaWAN地域相关参数手册》。

网络服务器可能会在一条下行消息中包含多个LinkAdrReq命令。终端设备为了配置信道掩码,会按照命令在下行消息中的出现的顺序处理所有LinkAdrReq消息。对于命令中的这些ChMaskCntl,终端设备要么全部接受要么全部拒绝,同时为它们的 LinkAdrAns 设置相同的 Channel Mask ACK 。对于 DataRateTXPowerNbTrans ,因为它们是全局性设置(后面的值会覆盖前面的值),所以终端设备只按照命令中的最后一条LinkADRReq执行。同样,对于这些,终端设备也会为它们在 LinkAdrAns 中各自设置相同的 ACK,来指明它们最终被接受了还是被拒绝了。

信道频率与地域有关,具体见第六章。

终端收到 LinkADRReq 后回复 LinkADRAns 命令。

大小(字节) 1
LinkADRAns Payload Status

大小(位) [7:3] 2 1 0
Status bits RFU Power ACK Data rate ACK Channel mask ACK

LinkADRAns Status释义如下:

表6:LinkADRAns状态位定义

字段 0 1
Channel mask ACK 要使用的信道未定义;或信道掩码想关闭所有信道。忽略该命令,终端状态不改变 设置成功
Data rate ACK 要使用的速率未定义;或者在指定的通道掩码下,不支持该数据速率(所有在用的信道都不支持该速率)。命令被忽略,终端状态不改变 设置成功
Power ACK 终端未定义该功率等级。命令被忽略,终端状态不改变 设置成功

以上三个字段任意一个是0,命令就会执行失败,节点保持之前的状态不变。

5.3 终端的发射占空比(DutyCycleReqDutyCycleAns

DutyCycleReq,网络协调员使用该命令来限制终端设备的总发射占空比的最大值。总发射占空比指所有子频带的发射占空比。

大小(字节) 1
DutyCycleReq Payload DutyCyclePL

Bits 7:4 3:0
DutyCyclePL RFU MaxDCycle

终端允许的发射占空比的最大值:

=12MaxDCycle

MaxDutyCycle有效范围[0:15]。在没有区域调节设置占空比限制的情况下,使用 0 表示“占空比没有限制”,有区域限制的除外。

注意,下面这条在LoRaWAN1.0.2中被删除:

值为 255 时要求终端设备立刻转为静默状态,等价于远程关闭终端。

终端收到DutyCycleReq后回复DutyCycleAnsDutyCycleAns不包含任何payload。

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

通过下发RXParamSetupReq命令,可以修改第二个接收窗口(RX2)使用的频率和数据速率。该命令还可以修改下行RX1数据速率,使下行RX1的速率相对上行进行偏移。

大小(字节) 1 3
RX2SetupReq Payload DLsettings Frequency

第几位 7 6:4 3:0
DLsettings RFU RX1DRoffset RX2DataRate

RX1DRoffset 用来设置终端设备上行和下行第一个接收窗口(RX1)数据速率之间的偏移,默认值是0。基站在某些地域有最大功率密度限制,所以使用偏移,并且还可以用来均衡上行和下行的无线链路预算。

RX2DataRate 定义第二个接收窗口使用的数据速率,用法和 LinkADRReq 一样(例如,0 表示 DR0/125kHz)。Frequency 是第二个接收窗口使用的信道频率,其频率编码规则的定义见 NewChannelReq 命令。

终端设备回复 RXParamSetupAns。终端设备在没有收到基于A类的下行数据前,会在所有上行数据的 FOpt 中携带 RXParamSetupAns,直到收到一次基于A类的下行数据。这样可以保证及时上行链路存在丢包的情况,网络也总能知道终端设备使用的下行链路参数。

payload只有一个字节:

大小(字节) 1
RX2SetupAns Payload Status

Status位结构如下:

第几位 7:3 2 1 0
Status bits RFU RX1DRoffset ACK RX2 Data rate ACK Channel ACK

表 7: RX2SetupAns 的 status 含义

字段 0 1
Channel ACK (对于终端)频率不可用 RX2信道设置成功
RX2 Data rate ACK (对于终端)未知的数据速率 RX2数据速率设置成功
RX1DRoffset ACK RX1上行/下行数据速率的偏移不在可用范围 设置成功

3个中的任何一个是0,命令都会执行失败并保持之前的状态。

5.5 终端状态(DevStatusReq, DevStatusAns

服务器通过发送 DevStatusReq 获取一个终端设备的状态,该命令没有payload。终端收到 DevStatusReq 之后回复DevStatusAns

大小(字节) 1 1
DevStatusAns payload Battery Margin

电池电量(Battery)上报的数据编码如下:

表8:电池电量编码

电量 说明
0 终端在使用外接电源
1..254 电池电量,1是最小值,254是最大值
255 终端设备无法获取电池电量

余量(Margin)是最近一次接收成功 DevStatusReq 命令的解调信噪比,其值(四舍五入)取整,单位dB。余量值是一个有符号整型,长度6个比特位,最小值 -32,最大值31。

占位(bits) 7:6 5:0
Status RFU Margin

5.6 创建或修改信道(NewChannelReq, NewChannelAns

NewChannelReq命令要么用来修改已有信道的参数,要么创建一个新的信道。该命令设置新信道的中心频率,以及在该信道上行传输的数据速率范围。

大小(字节) 1 3 1
NewChannelReq payload ChIndex Freq DrRange

信道索引(ChIndex)是新信道或者待修改信道的索引值。LoRaWAN规范中已经为不同的地域和频段内置了默认信道,这些信道存在所有的设备上,而且不能通过NewChannelReq(见第6章)进行修改。如果默认的信道数量是N,那默认的信道就是 0 ~ N-1,而 ChIndex 可用范围就是 N ~ 15。终端设备至少要能处理 16 个不同的信道。在某些地域终端允许存储超过16个信道。

频率(Freq)是一个 24bits 无符号整型,实际信道频率是 100 × Freq Hz(笔记:按这个说法,433.1MHz 服务器发送的数据是 4331000),其中100MHz以下的值留待未来使用。通过这种方法可以以 100 Hz为步长,使用 100MHz~1.67GHz 之间任意的信道频率。 Freq == 0表示不使用该信道。终端设备必须对频率进行检查,保证它的射频硬件支持将要使用的频率,否则返回错误。

数据速率范围(DrRange)指明此信道的数据速率范围。该字由两个4位长的索引组成:

大小(bits) 7:4 3:0
DrRange MaxDR MinDR

根据章节5.2的定义,最小数据速率(MinDR)字段指定此信道最低数据速率,例如:0 表示指定 DR0/125 kHz。与之类似,最大数据速率指定最高数据速率。例如:DrRange = 0x77表示信道只能使用 50kbps GFSK,DrRange = 0x50表示数据速率范围是DR0 / 125 kHz 到 DR5 / 125 kHz。

创建或修改的信道一旦设置成功,可以马上用来通信。RX1的下行频率与其上行频率相同。

终端回复NewChannelAns命令,其payload如下:

大小(字节) 1
NewChannelAns Payload Status

状态(Status)含义如下:

大小(bits) 7:2 1 0
Status RFU Data rate range ok Channel frequency ok
字段 0 1
Data rate range ok 数据速率范围超出终端当前所允许的范围 终端兼容该数据速率范围
Channel frequency ok 终端无法使用该频率 可以使用

两者之中有一个是0,就表示命令执行失败,不会创建信道。


DlChannelReq允许服务器将一个不同的下行频率和RX1关联起来。所有支持 NewChannelReq 的地域也适用于 DlChannelReq (比如欧洲、中国,但美国和澳大利亚不可以,具体见《LoRaWAN地域相关参数》)

该命令会设置下行RX1的中心频率:

大小(字节) 1 3
DlChannelReq Payload ChIndex Freq

频率(Freq)是一个 24bits 无符号整型,实际信道频率是 100 × Freq Hz,其中100MHz以下的值留待未来使用。通过这种方法可以以 100 Hz为步长,使用 100MHz~1.67GHz 之间任意的信道频率。 Freq == 0表示不使用该信道。终端设备必须对频率进行检查,保证它的射频硬件支持将要使用的频率,否则返回错误。

终端设备回复DlChannelAns。终端设备在没有收到下行数据前,会在所有上行数据的 FOpt 中携带 DlChannelAns,直到收到一次下行数据。这样可以保证及时上行链路存在丢包的情况,网络也总能知道终端设备使用的下行频率。

Payload包含以下信息:

大小(字节) 1
DlChannelAns Payload Status

Status含义如下:

Bits 7:2 1 0
Status RFU Uplink frequency exists Channel frequency ok

0 1
Channel frequency ok 设备无法使用该频率
Uplink frequency exists 该信道的上行频率未定义,下行频率只能给有效上行频率的信道设置

5.7 Rx和Tx之间的延迟(RXTimingSetupReq,RXTimingSetupAns

RXTimingSetupReq用来配置上行传输结束(一帧数据发送完成的时刻)到打开第一个接收窗口之间的时间间隔。第二个接收窗口比第一个晚1秒打开。

大小(字节) 1
RXTimingSetupReq Payload Settings

延迟(Delay)字段指定时间间隔,由两个4位的索引组成:

大小(bits) 7:4 3:0
Settings RFU Del

延迟单位是秒(s),Del=0 表示1秒:

Del 延迟(秒)
0 1
1 1
2 2
3 3
15 15

终端设备回复RXTimingSetupAns,并且不携带payload。

终端设备在没有收到下行数据前,会在所有上行数据的 FOpt 中携带 RXTimingSetupAns,直到收到一次下行数据。这样可以保证及时上行链路存在丢包的情况,网络也总能知道终端设备使用的下行参数。

5.7 Rx和Tx之间的延迟(RXTimingSetupReq,RXTimingSetupAns

RXTimingSetupReq用来配置上行传输结束(一帧数据发送完成的时刻)到打开第一个接收窗口之间的时间间隔。第二个接收窗口比第一个晚1秒打开。

大小(字节) 1
RXTimingSetupReq Payload Settings

延迟(Delay)字段指定时间间隔,由两个4位的索引组成:

大小(bits) 7:4 3:0
Settings RFU Del

延迟单位是秒(s),Del=0 表示1秒:

Del 延迟(秒)
0 1
1 1
2 2
3 3
15 15

终端设备回复RXTimingSetupAns,并且不携带payload。

终端设备在没有收到下行数据前,会在所有上行数据的 FOpt 中携带 RXTimingSetupAns,直到收到一次下行数据。这样可以保证及时上行链路存在丢包的情况,网络也总能知道终端设备使用的下行参数。

5.8 终端发射参数(TxParamSetupReq,TxParamSetupAns)

该MAC命令只在需要监管的区域执行,参考《LoRaWAN地域相关参数手册》。

TxParamSetupReq命令可以用来通知终端设备其允许的最大驻留时间,比如:一个数据包在空中持续传输的最大时间,以及所允许的设备最大的EIRP(有效全向辐射功率)。

大小(字节) 1
TxParamSetup payload EIRP_DwellTime

EIRP_DwellTime字段的结构如下:

Bits 7:6 5 4 3:0
MaxDwellTime RFU DownlinkDwellTime UplinkDwellTime MaxEIRP

TxParamSetupReq的 [0:3] bits用来编码 Max EIRP值,见下表:

编码值 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Max EIRP(dBm) 8 10 12 13 14 16 18 20 21 24 26 27 29 30 33 36

设备无线传输的最大功率即为EIRP的最大值。设备不必使用该功率进行传输,可也不能超过该EIRP。第4、第5位定义上、下行链路最大的驻留时间 ,编码如下:

编码值 驻留时间
0 无限制
1 400 ms

该命令执行后,终端设备回复TxParamSetupAnsTxParamSetupAns不携带任何负载数据。如果在一个对此没有要求的地域使用该命令,设备不执行,并且不回复。


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

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

您的留言或需求: