Skip to content

Latest commit

 

History

History
848 lines (734 loc) · 26.4 KB

5 MAC Commands.md

File metadata and controls

848 lines (734 loc) · 26.4 KB

第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的回复。
0x09 TxParamSetupReq x 网络服务器用于设置基于当地规定的终端的最大允许驻留时间和最大EIRP
0x09 TxParamSetupAns x TxParamSetupReq的回复。
0x0A DlChannelReq x 通过从上行链路频率移位下行链路频率(即创建非对称信道)来修改下行链路RX1无线电信道的定义
0x0A DlChannelAns x DlChannelReq的回复。
0x80~0xFF 私有 x x 给私有网络命令拓展做预留。

表4:MAC命令表

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


注意:由网络服务器调整的任何值(例如,RX2、新的或已调整的信道定义)仅在终端设备的下一次加网之前有效。因此,在每个成功加网之后,终端设备将再次使用默认参数,并由网络服务器根据需要重新调整值。

通过LinkCheckReq命令,终端可以知道是否已连接上服务器。该命令没有载荷。

当网络服务器通过一个或者多个网关接收到LinkCheckReq命令时,它会以LinkCheckAns命令进行回复。

Size (bytes) 1 1
LinkCheckAns Payload Margin GwCnt

解调预算(Margin)是一个范围为0~254的8位无符号整数,表示成功接收最新的LinkCheckReq命令的链路预算(单位为dB)。若 Margin 值为"0"则意味着数据帧是在解调水平上进行接收(0 dB或者没有预算),当 Margin 值为"20"时则意味着数据帧到达在解调水平之上20dB的网关。

网关计数(GwCnt)是成功接收最新的LinkCheckReq命令的网关个数。

通过 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 位域按照如下定义:

Bit = 0 Bit = 1
Channel mask ACK 所发的 channel mask 使能了未定义的信道或者禁用了所有信道。命令被丢弃,终端状态不变。 所发的 channel mask 已成功解析,已按照 mask 设置了当前的信道状态。
Data rate ACK 所请求的数据速率,终端无法识别,或者无法应用在当前信道中(不支持任何使能的信道)。命令被丢弃,终端状态不变。 数据速率成功设置。
Power ACK 所请求的发射功率不能在终端上执行。命令被丢弃,终端状态不变。 功率等级成功设置。

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

DutyCycleReq命令被网络协调者用来限制终端的最大总计发射占空比最大总计发射占空比覆盖所有子频段上的发射占空比。

Size (bytes) 1
DutyCycleReq Payload DutyCyclePL
Bits 7:4 3:0
DutyCyclePL RFU MaxDCycle

终端所允许的最大发射占空比为: aggregated duty cycle = 1/(2^MaxDcycle)

MaxDutyCycle的有效范围为[0:15].MaxDutyCycle的值若为0则表示“无发射占空比限制”,除非各地区有对发射占空比进行限制。

RXParamSetupReq命令可以对每个上行消息之后的第二接收窗口(RX2)的频率以及数据速率进行改变。该命令还可以对上行数据速率和RX1下行数据速率的偏移量进行改变。

Size (bytes) 1 3
RXParamSetupReq Payload DLsettings Frequency
Bits 7 6:4 3:0
DLsettins RFU RX1DRoffset RX2DataRate

RX1DRoffset位域设置上行数据速率和RX1下行数据速率的偏移量。默认情况下偏移量为0(意思就是上行数据速率与下行数据速率相等)。偏移量用于考虑一些地区的基站最大功率密度限制和平衡上下行射频链路预算。

RX2DataRate位域定义了第二接收窗口的下行链路数据速率,遵循与LinkADRReq命令相同的规则(例如,0表示DR0/125kHz)。Frequency位域所设置的是第二接收窗口所使用信道的频率,该频率按照与NewChannelReq命令相同的规则进行定义。

终端使用RXParamSetupAns命令对RXParamSetupReq命令进行应答。RXParamSetupAns命令应该添加在所有的上行链路数据帧的Fopt字段中直到终端接收到一个Class A类型的下行链路数据帧。这样就可以保证即使在上行链路帧丢失的情况之下,网络服务器总是可以知道终端所使用的下行链路参数。

RXParamSetupAns命令的载荷为一个字节的状态信息。

Size (bytes) 1
RXParamSetupAns Payload Status

Status各位的含义如下:

Bits 7:3 2 1 0
Status bits RFU RX1DRoffset ACK RX2 Data Rate ACK Channel ACK
Bit = 0 Bit = 1
Channel ACK 终端无法使用请求的频率 RX2时隙信道频率设置成功
RX2 Data rate ACK 终端无法识别请求的数据速率 RX2时隙数据速率设置成功
RX1DRoffset ACK 上行数据速率与RX1下行数据速率的偏移量不在允许的范围之内 RX1DRoffset设置成功

如果3个位的任何一位为0,则RXParamSetupReq命令不成功,节点保持之前的状态。

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

Size (bytes) 1 1
DevStatusAns Payload Battery Margin

报告电池电量(Battery)的编码如下:

Battery Description
0 终端连接到外部电源
1..254 数值表示电池电量,1表示最低,254表示最高
255 终端无法测量电池电量

图8:电池电量码表

Margin是最近一次成功接收DevStatusReq命令的解调信噪比(该值必须是四舍五入到最近的整数值,单位为dB)。它是6位的有符号整数(最小值为 -32,最大值为31)。

Bits 7:6 5:0
Status bits RFU Margin

NewChannelReq命令可以用于修改现有的双向信道或者创建一个新的信道。这个命令设置了新信道的中心频率还有上行数据速率的可用范围:

Size (bytes) 1 3 1
NewChannelReq Payload Chlndex Freq DrRange

信道索引Chlndex是正在创建或者正在修改的信道的索引。根据所使用的区域和频带,LoRaWAN规范强加了所有设备通用的默认信道,该信道不能被NewChannelReq命令修改(具体见章节6)。如果默认信道的个数为N,则默认信道的编号从0~(N-1),并且Chlndex的可接受范围为N~15。一个设备必须至少能处理16个 不同的信道定义。在某些特定的区域,设备可能必须存储超过16个信道定义。

Freq位域是一个24位无符号整数。实际信道频率为(100×Freq),单位为HZ,其中表示低于100MHz的频率数值将会保留供将来使用。Freq可以设置从100MHz~1.67GHz之间的信道频率,但必须以100Hz为单位(因为实际信道频率为(100×Freq))。终端必须检测该频率是否能被射频硬件所使用,若不行则需返回错误。

DrRange位域规定了这个信道所允许的上行数据速率范围。该位域被分为两个4位字段:

Bits 7:4 3:0
DrRange MaxDR MinDR

按照章节5.2所定义的规则,最小数据速率MinDR字段规定了这个信道所允许的最低上行数据速率。例如0表示DR0/125kHz。类似的,最大数据速率MaxDR规定了最高上行数据速率。例如,若DrRange=0x77则表示一个信道只允许50kbps的GFSK;若DrRange=0x50表示一个信道支持DR0/125kHz到DR5/125kHZ的频率范围。

最近定义以及修改的信道被使能之后可以立刻用于通信。RX1的下行频率与上行频率相等。

终端以NewChannelAns命令对NewChannelReq进行应答。NewChannelAns命令的载荷包含了以下信息:

Size (bytes) 1
NewChannelAns Payload Status

Status位有以下含义:

Bits 7:2 1 0
Status RFU Data rate range ok Channel frequency ok
Bit = 0 Bit = 1
Data rate range ok 指定的数据速率超出了终端当前定义的范围 该数据速率与终端能够兼容
Channel frequency ok 终端无法使用该频率 终端能够使用该频率

如果以上两位其中之一为0,则NewChannelReq命令不成功,新的信道将不会产生。

DlChannelReq命令允许服务器在RX1时隙使用不同的下行链路频率。这个命令可以适用于所有支持NewChannelReq命令的地理区域(例如欧盟和中国,但是不适用于美国和澳大利亚,具体详见《LoRaWAN Regional Parameters document [PARAMS]》。

该命令用于设置RX1时隙的下行消息中心频率,如下:

Size (bytes) 1 3
DlChannelReq Payload Chlndex Freq

Chlndex是要修改下行频率的信道的索引。

Freq位域是24位的无符号整数。实际信道频率为(100×Freq),单位为HZ,其中表示低于100MHz的频率数值将会保留供将来使用。终端必须检测该频率是否能被射频硬件所使用,若不行则需返回错误。

终端以DlChannelAns命令对DlChannelReq命令进行应答。DlChannelAns命令在终端没有接收到一个下行数据之前必须添加在所有的上行数据FOpt位域中。这样才能保证在上行数据包丢失的情况之下,网络服务器总是能够知道终端所使用的下行频率。

该命令的载荷有如下信息:

Size (bytes) 1
DlChannelAns Payload Status

Status位有以下的含义:

Bits 7:2 1 0
Status RFU 上行频率可用 信道频率可用
Bit = 0 Bit = 1
Channel frequency ok 终端无法使用该频率 终端无法使用该频率
Channel frequency ok 该信道无法使用此上行频率,只能为已经具有一个有效上行频率的信道设置下行频率 信道的上行频率有效

RXTimingSetupReq命令允许配置TX上行链路发送完毕之后与第一个接收窗口打开之间的延时。第二接收窗口在第一接收窗口打开之后的1秒打开。

Size (bytes) 1
RXTimingSetupReq Payload Settings

Delay位域指定了延时时间。这个位域被分为两个4位字段:

Bits 7:4 3:0
Settings RFU Del

延时时间的单位为秒。Del的值为0时对应的延时时间为1s。

Del Delay[s]
0 1
1 1
2 2
3 3
.. ..
15 15

图11:延时时间映射表

终端用于应答RXTimingSetupReq命令的RXTimingSetupAns命令没有载荷。

RXTimingSetupAns命令在终端没有接收到一个下行数据之前必须添加在所有的上行数据FOpt位域中。这样才能保证在上行数据包丢失的情况之下,网络服务器总是能够知道终端所使用的下行频率。

该命令只需要在特定的可调节地区进行使用。具体请参考《LoRaWAN Regional Parameters document [PARAMS]》。

TxParamSetupReq可以用于通知终端的最大允许驻留时间,换言之,一包数据在空中的最大持续传输时间,以及终端所允许的最大等效全向辐射功率(EIRP)

KevinCao注: EIRP解释:为无线电发射机供给天线的功率与在给定方向上天线绝对增益的乘积。各方向具有相同单位增益的理想全向天线,通常作为无线通信系统的参考天线。EIRP定义为:EIRP=Pt*Gt,它表示同全向天线相比,可由发射机获得的在最大天线增益方向上的 发射功率。Pt表示发射机的发射功率,Gt表示发射天线的天线增益。在无线通信工程中,通常用来衡量干扰的强度,以及发射机发射强信号的能力。

Size (bytes) 1
TxParamSetup payload EIRP_DwellTime

EIRP_DwellTime位域的结构如下所述:

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

TxParamSetupReq命令的[0..3]位是用于表示EIRP的最大值,每个编码值对应的最大EIRP值的映射表如下。这张表中的最大EIRP的值的变化范围由各个地区来进行自行规定。

Coded Value 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位分别定义了上行链路和下行链路的驻留时间,驻留时间的映射编码表如下所示:

Coded Value Dwell Time
0 No Limit
1> 400 ms

当该Mac命令生效时,(因区域而定)终端会以TxParamSetupAns命令对TxParamSetupReq命令进行回复。TxParamSetupAns命令不包含任何载荷。

当在某个区域内是不需要TxParamSetupReq命令时,则终端不会对该命令进行任何处理并且不会进行回复。