您的位置:首页 > 大数据 > 物联网

LoRaWAN 规范 1.0 (章节5)

2016-07-08 11:31 453 查看
最近在做LoRa, LoRaWAN协议略微复杂,边读边翻译,现在把部分关键的翻译分享给各位做物联网的同行。

当然里面掺杂了一些我的个人笔记,希望对大家有所帮助。

如果哪里有问题,欢迎应各位留言或者邮件指正。

翻译很辛苦,转载请注明出处和源链接

英文原文链接: 《LoRaWAN Specification 1R0》

LoRaWAN版本历史及协议格式说明

翻译原文链接:

LoRaWAN 规范 1.0 (章节2~4)

LoRaWAN 规范 1.0 (章节5)

LoRaWAN 规范 1.0 (章节6)

LoRaWAN 规范 1.0 (章节7)

LoRaWAN 规范 1.0 (章节10~13)

声明

本文翻译版本已更新至LoRaWAN 1.0.2

5 MAC Commands

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

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

注意:

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

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

CID命 令终端发送网关发送简介
0x02LinkCheckReq×用于终端验证网络连接
0x02LinkCheckAns×回应验证请求, 同时包含终端接收质量相关的估算的信号功率
0x03LinkADRReq×请求终端改变数据率、传输功率、接收率或者信道
0x03LinkADRAns×LinkRateReq的应答
0x04DutyCycleReq×设置设备的最大总发射占空比
0x04DutyCycleAns×DutyCycleReq的应答
0x05RXParamSetupReq×设置接收时隙相关参数
0x05RXParamSetupAns×RXSetupReq的应答
0x06DevStatusReq×请求终端状态
0x06DevStatusAns×返回终端装填,即电量和解调情况
0x07NewChannelReq×创建或修改无线电信道
0x07NewChannelAns×NewChannelReq的应答
0x08RXTimingSetupReq×设置接收时隙的时间
0x08RXTimingSetupAns×RXTimingSetupReq的应答
0x09TxParamSetupReqx网络服务器用它来设置终端设备停留时间的最大值和最大EIRP(等效全向辐射功率),与地域相关
0x09TxParamSetupAnsxTxParamSetupReq命令的回复
0x0ADlChannelReqx通过将下行频率与上行频率进行偏移,来修改下行R1的无线信道(即:创建不对称信道)
0x0ADlChannelAnsxDlChannelReq命令的回复
0x80 ~ 0xFFProprietary××保留命令
注:

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

注:

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

5.1 链路检查 (LinkCheckReq和LinkCheckAns)

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

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

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


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

link margin参考:Link margin

5.2 速率自适应
LinkADRReq
LinkADRAns

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

大小(字节)121
LinkADRReq PayloadDataRate_TXPowerChMaskRedundancy
大小(位 bits)[7:4][3:0]
DataRate_TXPowerDataRateTXPower
数据速率(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:信道状态表

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


第几位7[6:4][3:0]
Redundancy bitsRFUChMaskCntlNbTrans
冗余(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 。对于 DataRate、TXPower 和 NbTrans ,因为它们是全局性设置(后面的值会覆盖前面的值),所以终端设备只按照命令中的最后一条LinkADRReq执行。同样,对于这些,终端设备也会为它们在 LinkAdrAns 中各自设置相同的 ACK,来指明它们最终被接受了还是被拒绝了。

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

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

大小(字节)1
LinkADRAns PayloadStatus
大小(位)[7:3]210
Status bitsRFUPower ACKData rate ACKChannel mask ACK
LinkADRAns Status释义如下:

表6:
LinkADRAns
状态位定义

字段01
Channel mask ACK要使用的信道未定义;或信道掩码想关闭所有信道。忽略该命令,终端状态不改变设置成功
Data rate ACK要使用的速率未定义;或者在指定的通道掩码下,不支持该数据速率(所有在用的信道都不支持该速率)。命令被忽略,终端状态不改变设置成功
Power ACK终端未定义该功率等级。命令被忽略,终端状态不改变设置成功
以上三个字段任意一个是0,命令就会执行失败,节点保持之前的状态不变。

5.3 终端的发射占空比(
DutyCycleReq
DutyCycleAns

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

大小(字节)1
DutyCycleReq PayloadDutyCyclePL
Bits7:43:0
DutyCyclePLRFUMaxDCycle
终端允许的发射占空比的最大值:

总发射占空比=12MaxDCycle

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

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

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

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

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

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

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

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

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

payload
只有一个字节:

大小(字节)1
RX2SetupAns PayloadStatus
Status位结构如下:

第几位7:3210
Status bitsRFURX1DRoffset ACKRX2 Data rate ACKChannel ACK
表 7: RX2SetupAns 的 status 含义

字段01
Channel ACK(对于终端)频率不可用
RX2
信道设置成功
RX2 Data rate ACK(对于终端)未知的数据速率
RX2
数据速率设置成功
RX1DRoffset ACK
RX1
上行/下行数据速率的偏移不在可用范围
设置成功
3个中的任何一个是
0
,命令都会执行失败并保持之前的状态。

5.5 终端状态(
DevStatusReq
,
DevStatusAns

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

大小(字节)11
DevStatusAns payloadBatteryMargin
电池电量(Battery)上报的数据编码如下:

表8:电池电量编码

电量说明
0终端在使用外接电源
1..254电池电量,1是最小值,254是最大值
255终端设备无法获取电池电量
余量(Margin)是最近一次接收成功 DevStatusReq 命令的解调信噪比,其值(四舍五入)取整,单位dB。余量值是一个有符号整型,长度6个比特位,最小值 -32,最大值31。

占位(bits)7:65:0
StatusRFUMargin

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

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

大小(字节)131
NewChannelReq payloadChIndexFreqDrRange
信道索引(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:43:0
DrRangeMaxDRMinDR
根据章节5.2的定义,最小数据速率(MinDR)字段指定此信道最低数据速率,例如:0 表示指定 DR0/125 kHz。与之类似,最大数据速率指定最高数据速率。例如:
DrRange = 0x77
表示信道只能使用 50kbps GFSK,
DrRange = 0x50
表示数据速率范围是DR0 / 125 kHz 到 DR5 / 125 kHz。

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

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

大小(字节)1
NewChannelAns PayloadStatus
状态(Status)含义如下:

大小(bits)7:210
Status
RFU
Data rate range ok
Channel frequency ok
字段01
Data rate range ok数据速率范围超出终端当前所允许的范围终端兼容该数据速率范围
Channel frequency ok终端无法使用该频率可以使用
两者之中有一个是0,就表示命令执行失败,不会创建信道。

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

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

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

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

Payload包含以下信息:

大小(字节)1
DlChannelAns PayloadStatus
Status含义如下:

Bits7:210
StatusRFUUplink frequency existsChannel frequency ok
01
Channel frequency ok设备无法使用该频率
Uplink frequency exists该信道的上行频率未定义,下行频率只能给有效上行频率的信道设置

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

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

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

大小(bits)7:43:0
SettingsRFUDel
延迟单位是秒(s),Del=0 表示1秒:

Del延迟(秒)
01
11
22
33
1515
终端设备回复RXTimingSetupAns,并且不携带payload。

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

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

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

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

大小(bits)7:43:0
SettingsRFUDel
延迟单位是秒(s),Del=0 表示1秒:

Del延迟(秒)
01
11
22
33
1515
终端设备回复RXTimingSetupAns,并且不携带payload。

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

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

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

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

大小(字节)1
TxParamSetup payloadEIRP_DwellTime
EIRP_DwellTime字段的结构如下:

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

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

编码值驻留时间
0无限制
1400 ms
该命令执行后,终端设备回复TxParamSetupAnsTxParamSetupAns不携带任何负载数据。如果在一个对此没有要求的地域使用该命令,设备不执行,并且不回复。

PS

看到有些伙伴提问问题,由于本人的CSDN一般不在线。

为了方便交流,附个邮箱,有问题或者想法的朋友可以




本文由 qingchuwudi 译制,除非另有声明,在不与原著版权冲突的前提下,本作品采用知识共享署名 3.0 中国大陆许可协议进行许可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息