目录
LinkCheckAns) 13
5.2连接ADR命令 (LinkADRReq, LinkADRAns) 13
(DutyCycleReq, DutyCycleAns) 16
(RXParamSetupReq, RXParamSetupAns ) 16
(DevStatusReq, DevStatusAns) 18
5.6创建/修改信道 (NewChannelReq, NewChannelAns, DlChannelReq,
DlChannelAns) 19
(RXTimingSetupReq, RXTimingSetupAns) 22
TxParamSetupAns) 23
LoRa所有上下行链路消息都会携带PHY载荷,PHY载荷以1字节MAC帧头(MHDR)开始,紧接着MAC载荷(MACPayload),最后是4字节的MAC校验码(MIC)。
射频PHY层:
PreamblePHDRPHDR_CRCPHYPayloadCRC
图5.射频PHY结构(注意 CRC只有上行链路消息中存在)
PHY载荷:
MHDRMACPayloadMIC
或者
MHDRJoin-RequestMIC
或者
MHDRJoin-ResponseMIC
图6.PHY载荷结构
MAC载荷:
FHDR(Frame Header)FPortFRMPayload
FHDR(见4.3.1章节):
DevAddrFCtrlFCntFOpts
图8.帧头结构
Size (bytes)11..M4
PHYPayloadMHDRMACPayloadMIC
MACPayload字段的最大长度M,在第6章有详细说明。
Bit#7..54..21..0
MHDR bitsMTypeRFUMajor
MAC头中指定了消息类型(MType)和帧编码所遵循的LoRaWAN规范的主版本号(Major)。
LoRaWAN定义了六个不同的MAC消息类型:join request,
join accept, unconfirmed data up/down, 以及 confirmed data
up/down 。
MType描述
000Join Request
001Join Accept
010Unconfirmed Data Up
011Unconfirmed Data Down
100Confirmed Data Up
101Confirmed Data Down
110RFU
111Proprietary
表1.MAC消息类型
4.2.1.1 Join-request and join-accept 消息
join-request和join-accept都是用在空中激活流程中,具体见章节6.2
4.2.1.2 Data messages
Data messages 用来传输MAC命令和应用数据,这两种命令也可以放在单个消息中发送。
Confirmed-data message
接收者需要应答。
Unconfirmed-data message
接收者则不需要应答。
Proprietary messages
用来处理非标准的消息格式,不能和标准消息互通,只能用来和具有相同拓展格式的消息进行通信。
不同消息类型用不同的方法保证消息一致性,下面会介绍每种消息类型的具体情况。
Major位字段描述
00LoRaWAN R1
01..11RFU
注意:Major定义了激活过程中(join procedure)使用的消息格式(见章节6.2)和MAC Payload的前4字节(见第4章)。终端要根据不同的主版本号实现不同最小版本的消息格式。终端使用的最小版本应当提前通知网络服务器。
MAC载荷,也就是所谓的“数据帧”,包含:帧头(FHDR)、端口(FPort)以及帧载荷(FRMPayload),其中端口和帧载荷是可选的。
FHDR是由终端短地址(DevAddr)、1byte帧控制字节(FCtrl)、2byte帧计数器(FCnt)和用来传输MAC命令的帧选项(FOpts,最多15个byte)组成。
Size(bytes)4120..15
FHDRDevAddrFCtrlFCntFOpts
FCtrl在上下行消息中有所不同,
下行消息如下:
Bit#7654[3..0]
FCtrl bitsADRRFUACKFPendingFOptsLen
上行消息如下:
Bit#7654[3..0]
FCtrl bitsADRADRACKReqACKRFUFOptsLen
4.3.1.1 帧头中 自适应数据速率 的控制(ADR,ADRACKReq in FCtrl)
LoRa网络允许终端采用任何可能的数据速率。LoRaWAN协议利用该特性来优化固定终端的数据速率[if !supportAnnotations][J1][endif] 。这就是自适应数据速率(Adaptive Data Rate
(ADR))。当这个使能时,网络会优化使得尽可能使用最快的数据速率。
移动的终端由于射频环境的快速变化,数据速率管理就不再适用了,应当使用固定的数据速率。
如果ADR的位字段有置位,网络就会通过相应的MAC命令来控制终端设备的数据速率。如果ADR位没有设置,网络则无视终端的接收信号强度,不再控制终端设备的数据速率。ADR位可以根据需要通过终端及网络来设置或取消。不管怎样,ADR机制都应该尽可能使能,帮助终端延长电池寿命和扩大网络容量。
注意:即使是移动的终端,可能在大部分时间也是处于非移动状态。因此根据它的移动状态,终端也可以请求网络使用ADR来帮助优化数据速率。
如果终端被网络优化过的数据速率高于自己默认的数据速率,它需要定期检查下网络仍能收到上行的数据。每次上行帧计数都会累加(是针对于每个新的上行包,重传包就不再增加计数),终端增加 ADR_ACK_CNT 计数。如果累计ADR_ACK_LIMIT次上行(ADR_ACK_CNT >= ADR_ACK_LIMIT)都没有收到下行回复,它就得置高ADR应答请求位(ADRACKReq)。 网络必须在规定时间内回复一个下行帧,这个时间是通过ADR_ACK_DELAY来设置,上行之后收到任何下行帧就要把ADR_ACK_CNT的计数重置。当终端在接收时隙中的任何回复下行帧的ACK位字段不需要设置,表示网关仍在接收这个设备的上行帧。如果在下一个ADR_ACK_DELAY上行时间内都没收到回复(例如,在总时间ADR_ACK_LIMIT+ADR_ACK_DELAY之后),终端必须切换到下一个更低速率,使得能够获得更远传输距离来重连网络。终端如果在每次ADR_ACK_LIMIT到了之后依旧连接不上,就需要每次逐步降低数据速率。如果终端用它的默认数据速率,那就不需要置位ADRACKReq,因为无法帮助提高链路距离。
注意:不要ADRACKReq立刻回复,这样给网络预留一些余量,让它做出最好的下行调度处理。
注意:上行传输时,如果 ADR_ACK_CNT >= ADR_ACK_LIMIT 并且当前数据速率比设备的最小数据速率高,就要设置 ADRACKReq,其它情况下不需要。
4.3.1.2 消息应答位及应答流程(ACK in FCtrl)
收到confirmed类型的消息时,接收端要回复一条应答消息(应答位ACK要进行置位)。如果发送者是终端,网络就利用终端发送操作后打开的两个接收窗口之一进行回复。如果发送者是网关,终端就自行决定是否发送应答。应答消息只会在收到消息后回复发送,并且不重发。
注意:为了让终端尽可能简单,尽可能减少该状态,即在收到confirmation类型需要确认的数据帧,需要立即发送一个严格的应答数据帧。或者终端会延迟发送应答,在它下一个数据帧中再携带。
4.3.1.3 重传流程
当需要应答却没收到应答时就会进行重发,重发的个数由终端自己定,可能每个终端都不一样,这个参数也可以由网络服务器来设置调整。
注意:一些应答机制的示例时序图在第18章中有提供。
注意:如果终端设备重发次数到达了最大值,它可以降低数据速率来重连。至于后面是否再重发还是说丢弃不管,都取决于终端自己。
注意:如果网络服务器重发次数到达了最大值,它就认为该终端掉线了,直到它再收到终端的消息。一旦和终端设备的连接出现问题时,要不要重发都取决于网络服务器自己。
注意:在重传期间的数据速率回退的建议策略在章节18.4中有描述。
4.3.1.4 帧挂起位(FPending in FCtrl 只在下行有效)
帧挂起位(FPending)只在下行交互中使用,表示网关还有挂起数据等待下发,需要终端尽快发送上行消息,然后终端再打开一个接收窗口。
FPending的详细用法在章节18.3。
4.3.1.5 帧计数器(FCnt)
每个终端有两个计数器跟踪数据帧的个数,一个是上行链路计数器(FCntUp),由终端在每次上行数据给网络服务器时累加;另一个是下行链路计数器(FCntDown),由服务器在每次下行数据给终端时累计。 网络服务器为每个终端跟踪上行帧计数及产生下行帧计数。 终端入网成功后,终端和服务端的上下行帧计数同时置0。 每次发送消息后,发送端与之对应的 FCntUp 或 FCntDown 就会加1。 接收方会同步保存接收数据的帧计数,对比收到的计数值和当前保存的值,如果两者相差小于 MAX_FCNT_GAP (要考虑计数器滚动),接收方就按接收的帧计数更新对应值。如果两者相差大于 MAX_FCNY_GAP 就说明中间丢失了很多数据,这条以及后面的数据就被丢掉。
LoRaWAN的帧计数器可以用16位和32位两种,节点上具体执行哪种计数,需要在带外通知网络侧,告知计数器的位数。如果采用16位帧计数,FCnt字段的值可以使用帧计数器的值,此时有需要的话通过在前面填充0(值为0)字节来补足;如果采用32位帧计数,FCnt就对应计数器32位的16个低有效位(上行数据使用上行FCnt,下行数据使用下行FCnt)。
终端在相同应用和网络密钥下,不能重复用相同的FCntUp数值,除非是重传。
4.3.1.6 帧可选项(FOptsLen in
FCtrl, FOpts)
FCtrl
字节中的FOptsLen位字段描述了整个帧可选项(FOpts)的字段长度。
FOpts字段存放MAC命令,最长15字节,详细的MAC命令见章节4.4。
如果FOptsLen为0,则FOpts为空。在FOptsLen非0时,则不为空。如果MAC命令在FOpts字段中体现,port0不能用(FPort要么不体现,要么非0)。
MAC命令不能同时出现在FRMPayload和FOpts中,如果出现了,设备丢掉该组数据。
如果帧载荷字段不为空,端口字段必须体现出来。端口字段有体现时,若FPort的值为0表示FRMPayload只包含了MAC命令;具体见章节4.4中的MAC命令。 FPort的数值从1到223(0x01..0xDF)都是由应用层使用。 FPort的值从224到255(0xE0..0xFF)是保留用做未来的标准应用拓展。
Size(bytes)7..230..10..N
MACPayloadFHDRFPortFRMPayload
N是应用程序载荷的字节个数。N的有效范围具体在第7章有定义。
N应该小于等于:
N <= M - 1 - (FHDR
长度)
M
是MAC载荷的最大长度。
如果数据帧携带了载荷,FRMPayload必须要在MIC计算前进行加密。加密机制是采用IEEE802.15.4/2006的AES128算法。
默认的,加密和加密由LoRaWAN层来给所有的FPort来执行。如果加密/解密由应用层来做更方便的话,也可以在LoRaWAN层之上给特定FPorts来执行,除了端口0。具体哪个节点的哪个FPort在LoRaWAN层之外要做加解密,必须要和服务器通过out-of-band信道来交互(见第19章)。
4.3.3.1 LoRaWAN加密
密钥K根据不同的FPort来使用:
FPortK
0NwkSKey
1..255AppSKey
具体加密是这样:
pld = FRMPayload
对于每个数据帧,算法定义了一个块序列Ai,i从1到k,k = ceil(len(pld) / 16):
Size(bytes)1414411
Ai0x014x 0x00DirDevAddrFCntUp or FCntDown0x00i
方向字段(Dir)在上行帧时为0,在下行帧时为1.
块Ai通过加密,得到一个由块Si组成的序列S。
Si = aes128_encrypt(K, Ai) for i = 1..k
S = S1 | S2 | .. | Sk
通过异或计算对payload进行加解密:
4.3.3.2 LoRaWAN层之上的加密如果LoRaWAN之上的层级在已选的端口上(但不能是端口0,这是给MAC命令保留的)提供了预加密的FRMPayload给LoRaWAN,LoRaWAN则不再对FRMPayload进行修改,直接将FRMPayload从MACPayload传到应用层,以及从应用层传到MACPayload。
消息检验码要计算消息中所有字段。
msg = MHDR | FHDR | FPort | FRMPayload
MIC是按照[RFC4493]来计算:
cmac =aes128_cmac(NwkSKey, B0| msg)
MIC = cmac[0..3]
块B0的定义如下:
Size(bytes)1414411
B00x494x 0x00DirDevAddrFCntUp or FCntDown0x00len(msg)
方向字段(Dir)在上行帧时为0,在下行帧时为1。
对网络管理者而言,需要有一套专用的MAC命令用在服务器和终端MAC层之间交互。这套MAC命令对应用程序(不管是服务器端还是终端设备的应用程序)是不可见的。
单个数据帧中可以携带MAC命令,要么在FOpts字段中捎带,要么在独立帧中将FPort设成0后放在FRMPayload里。如果采用FOpts携带的方式,MAC命令是不加密并且不长度超过15字节。如果采用独立帧放在FRMPayload的方式,那就必须采用加密方式,并且不超过FRMPayload的最大长度。
注意:如果MAC命令不想被窃听,那就必须以独立帧形式放在FRMPayload中。
每个MAC命令是由 1字节CID 跟着一段可能为空的字节序列组成的。
CIDCommand发送端描述
终端网关
0x02LinkCheckReq√终端利用这个命令来判断网络连接质量
0x02LinkCheckAns√LinkCheckReq的回复。包含接收信号强度,告知终端接收质量[if !supportAnnotations][J2][endif]
0x03LinkADRReq√向终端请求改变数据速率,发射功率,重传率以及信道[if !supportAnnotations][J3][endif]
0x03LinkADRAns√LinkADRReq的回复。
0x04DutyCycleReq√向终端设置发送的最大占空比。[if !supportAnnotations][J4][endif]
0x04DutyCycleAns√DutyCycleReq的回复。
0x05RXParamSetupReq√向终端设置接收时的参数。[if !supportAnnotations][J5][endif]
0x05RXParamSetupAns√RXParamSetupReq的回复。
0x06DevStatusReq√向终端查询其状态。
0x06DevStatusAns√返回终端设备的状态,即电池余量和链路解调预算。[if !supportAnnotations][J6][endif]
0x07NewChannelReq√创建或修改 1个射频信道 定义。[if !supportAnnotations][J7][endif]
0x07NewChannelAns√NewChannelReq的回复。
0x08RXTimingSetupReq√设置接收时隙的时间。[if !supportAnnotations][J8][endif]
0x08RXTimingSetupAns√RXTimingSetupReq的回复。
0x09TxParamSetupReq √通过NS设置终端节点的最大停留(dwell time)时间和EIRP最大有效发射功率(基于地区规则)[if !supportAnnotations][J9][endif]
0x09TxParamSetupAns√ TxParamSetupReq的回复
0x0ADlChannelReq √通过上行与下行的频偏量修改定义的下行RX1的信道[if !supportAnnotations][J10][endif]
0x0ADlChannelAns√ DlChannelReq的回复
0x80~0xFF私有√√给私有网络命令拓展做预留。
表4:MAC命令表
注意:MAC命令的长度虽然没有明确给出,但是MAC执行层必须要知道。因此未知的MAC命令无法被忽略,且前面未知的MAC命令会终止MAC命令的处理队列。所以建议按照LoRaWAN协议介绍的MAC命令来处理MAC命令。这样所有基于LoRaWAN协议的MAC命令都可以被处理,即使是更高版本的命令。
注意:通过NS调整任何值(如,RX2,创建或调整信道的设置)保持有效,直到终端节点重新Join。因此在每一个节点成功入网后,节点使用默认缺省参数,并且根据需要,由NS(网络服务器)重新调整参数。
5.1 连接检查命令(LinkCheckReq, LinkCheckAns)
使用LinkCheckReq命令,可以检查一个终端的网络连接情况,这个命令没有负载字节。
当通过一个或多个网关传达LinkCheckReq命令时,需要有LinkCheckAns命令回复。
Size (bytes) 11
LinkCheckAns Payload Margin GwCnt
射频调制边界(Margin)是一个8位无符号整数,范围是0~254,Margin值的含义是指最后一次接收到LinkCheckReq命令时的dB值。“0”代表通信架构的调制层级(0 dB或没有边界),当值为“20”时,代表网关层级到达20 dB以上。“255”是默认缺省设置。
网关数量(GwCnt)是指成功接收LinkCheckReq命令的网关数量。
5.2 连接ADR命令 (LinkADRReq, LinkADRAns)[if !supportAnnotations][J11][endif]
使用LinkADRReq命令,NS请求一个终端节点执行自适应速率模式。
Size (bytes) 121
LinkADRReq PayloadDataRate_TXPowerChMaskRedundancy
DataRate_TXPower字节含义如下:
Bits[7:4][3:0]
DataRate_TXPower DataRateTXPower
请求的数据速率(DataRate)和发射功率(TXPower)是根据区域差异和指定的LoRaWAN地区参数文档制定。发射功率是指设备传输数据时最大的功率。当一个终端节点收到一条命令让发射功率超过它自身的能力范围时,终端按自身能力最大范围设定。信道掩码(ChMask)为上行通道编译成可用的信道,同将bit 0连接至LSB(最低有效位):
Bit# Usable channels
0Channel 1
1Channel 2
....
15Channel 16
一个数据位在ChMask区域里被置位为1,意味着如果这个信道允许数据速率使用在终端,则通信信道可以被用作上行通信。一个数据位复位为0,意味着应该回避该通信信道。
Bits 7[6:4][3:0]
Redundancy bits RFU(预留)ChMaskCntlNbTrans
在冗余位中,NbTrans的值是指每一次上行报文的重复次数(即单条上行报文发送时,重复发送的次数),这种方式适用于“unconfirmed”的上行结构,且有效范围为[1:15]。NbTrans为0代表接收的终端应使用默认缺省值。这个区域可通过网络管理员去控制节点上行的冗余,用来获得更优质网络服务。[if !supportAnnotations][J12][endif] 终端可以在重复的网络传输时进行跳频,它会等待每次重复,直至接收窗口时间关闭。不论何时,一次下行报文都可以在RX1的时间窗口接收,同时它会停止相同时间内的上行报文。对于class A的终端设备,RX2同样可以接收。
信道掩码控制(ChMaskCntl)区域是之前已定义ChMask 的控制。[if !supportAnnotations][J13][endif] 它可以控制16个通道的ChMask应用,也可以通过特定调制方法全局的打开或关闭全部的通道。这些使用需要遵守当地规则,查看当地的LoRaWAN地区参数文档[PARAMS]。
网络服务器在单一的下行报文时,可能包括多个LinkAdrReq命令。为了配置终端的信道掩码,终端将会处理所有连续的LinkAdrReq报文,在现有的下行报文序列中,作为单独的命令发出。终端节点可以接受或拒绝所有的信道掩码控制,并且在每一次LinkAdrAns报文中,可以为每一条命令提供一样的信道掩码ACK状态标识。终端设备将最后一条报文中,处理数据速率(DataRate),发送功率(TXPower)和重复次数(NbTrans),同时此次设置将管理终端的全局状态。不论接受或拒绝最终的设置,在每次LinkAdrAns报文中,终端设备将反馈统一的ACK。
信道频率每个地区都有差异,详情请见第6章。一个终端将通过LinkADRReq去应答LinkADRReq命令。
Size (bytes) 1
LinkADRAns Payload Status
Status字节含义如下:
Bits [7:3]210
Status bits RFUPower ACKData rate ACKChannel mask ACK
LinkADRAns bits有如下含义:
Bit = 0Bit = 1
Channel mask ACK
发送的信道掩码未定义或失效;
命令被丢弃,节点状态不会改变
信道掩码成功设置
Data rate ACK 数据速率是未知的,或设备信道不支持;命令被丢弃,节点状态不会改变数据速率成功设置
Power ACK 命令被丢弃,节点状态不会改变功率等级成功设置
如果这3个bits中,任意一个为0,则命令失效,节点保持原有状态。
5.3 终端发射占空比 (DutyCycleReq, DutyCycleAns)
DutyCycleReq 命令是终端网络通信中,一个周期中,允许发射的最大传输时间。
Size (bytes) 1
DutyCycleReq Payload DutyCyclePL
DutyCyclePL bits有如下含义:
Bits 7:43:0
DutyCyclePL RFUMaxDCycle
终端最大的工作周期为:[if !vml]
[endif]
MaxDutyCycle有效范围是[0 : 15]。如果值为0,则代表没有占空比的限制。
终端设备使用DutyCycleAns回复DutyCycleReq命令。DutyCycleReq MAC不包含数据负载。
5.4 接收窗口参数(RXParamSetupReq, RXParamSetupAns )
RXParamSetupReq 命令可以为第二个接收窗口(RX2)后的每一个上行数据改变频率和数据速率的设置。同时RXParamSetupReq也可以设置上行和RX1窗口下行数据速率的偏差量。
Size (bytes) 13
RXParamSetupReq Payload DLsettingsFrequency
DLsettings bits有如下含义:[if !supportAnnotations][J14][endif]
Bits 76:43:0
DLsettings RFURX1DRoffset RX2DataRate
RX1DRoffset区域设置的是终端第一个接收窗口(RX1)上行数据速率和下行数据速率的偏差量。[if !supportAnnotations][J15][endif] 默认缺省设置为0。这个偏差通常可以为某一区域平衡上下行连接边界的最大功率负载。
RX2DataRate区域设置的是终端第二个接收窗口(RX2)下行的数据速率,DR的值与约定LinkADRReq命令一致(0代表DR1/125kHZ)。Frequency的区域用来设置第二个接收窗口信道的频率,凭借这个频率可以定义NewChannelReq命令。
RXParamSetupAns命令通常使用在终端对RXParamSetupReq命令的ACK(acknowledge)应答。应该在终端的所有上行包的FOpt区域添加RXParamSetupAns命令,直至遇到Class A的下行包。[if !supportAnnotations][J16][endif] 这样可以保证即使在上行丢包的情况下,网络也会知道下行参数是否应用到终端。
数据负载仅包含一个状态字节。
Size (bytes) 1
RXParamSetupAns Payload Status
这个状态字(Status)包含如下说明。
Bits7:3210
Status bits RFURX1DRoffset ACKRX2 Data rate ACKChannel ACK
Bit = 0Bit = 1
Channel ACK 请求的信道频率没有被使用信道频率已成功设置在RX2
RX2 Data rate ACK 数据速率设置对终端是未知请求数据速率已成功设置在RX2
RX1DRoffset ACK 上/下行的偏移量超出RX1的允许范围RX1数据速率偏移量已成功设置
如果这3个bits中,任意一个为0,则命令失效,节点保持原有状态。
5.5 终端设备状态(DevStatusReq, DevStatusAns)
网络服务器可使用DevStatusReq命令请求一个终端的状态信息。DevStatusReq命令没有数据负载。如果一个终端接收到DevStatusReq命令,终端应使用DevStatusAns回复。
Size (bytes) 11
DevStatusAns Payload BatteryMargin
电池电量(Battery)包含以下信息:
Battery Description
0终端连接着外接电源
1..254电源电量,1(Min)-254(Max)
255未读出电量数据
边界(Margin)是指最近一次成功接收到DevStatusReq命令的信噪比。它是有符号整数,占用6个bit,范围是-32到31。
5.6 创建/修改信道 (NewChannelReq, NewChannelAns, DlChannelReq, DlChannelAns)
NewChannelReq命令可以修改已存在或新创建信道的参数。NewChannelReq命令可以设置新信道的中心频点,也可以设置这个信道上行数据速率的范围:
Size (bytes) 131
NewChannelReq Payload ChIndexFreqDrRange
信道序号(ChIndex)是创建或修改信道的序号。依照地区和频带使用波段,LoRaWAN协议强制使用规定信道,则全部设备必须与其一致,不可通过NewChannelReq命令修改(参见第6章)。若默认信道数目为N,信道Index从0到N-1,则可接受范围ChIndex是N到15。[if !supportAnnotations][J17][endif] 一个设备必须能够处理至少16个不同的信道。在其他地区内,设备可能还将必须设置定义超过16个信道。
频率(Freq)区域是一个24位无符号整数。实际信的频率(Hz)的值是Freq的100倍,且100 MHz以下作为将来扩展的预留。同时可每隔100 Hz设置100MHz到1.67GHz的信道频率。Freq为0则无法设置。同时也必须检查终端设备的硬件是否支持这一频率,否则将返回错误值。
数据速率(DrRange)区域是指该信道允许的上行数据速率(DR)。这段区域有2个4-bits的索引:
Bits 7:43:0
DrRange MaxDRMinDR
根据协议5.2章节规定的最小数据速率 (MinDR)部分,指定了信道允许的最低上行数据速率。如,0代表DR0 / 125 kHz。同样,最大数据速率(MaxDR)也定义了最高上行数据速率。例如,DrRange = 0x77代表这个信道只有50 kbpsGFSK[if !supportAnnotations][J18][endif] 可用[if !supportAnnotations][J19][endif] ,DrRange = 0x50代表信道支持DR0 / 125 kHz到DR5 / 125 kHz。
新定义或修改过的信道可以立即使用进行通信。RX1下行频率与上行频率相同。
终端设备可用NewChannelAns命令回复NewChannelReq命令。NewChannelAns负载报文包括如下内容:
Size (bytes) 1
NewChannelAns Payload Status
状态位(Status)代表如下含义:
Bits7:210
Status RFUData rate range ok
(数据速率状态位 )
Channel frequency ok
(信道频率状态位)
Bit = 0Bit = 1
Data rate range ok 设置的数据速率范围超过当前设备可设置范围数据速率范围与终端设备兼容
Channel frequency ok 设置频率不可用频率已设置
如果这2个bits中,任意一个为0,则命令失效,且不会创建新的信道。
DlChannelReq命令可以连接不同的RX1下行频率。该命令应用在支持NewChannelReq命令的地区(如欧盟和中国,而美国、澳洲则不适用)。
该命令设置RX1下行的中心频点,如下:
Size (bytes) 13
DlChannelReq Payload ChIndexFreq
信道索引(ChIndex)修改下行频率的信道序号。
频率(Freq)区域是一个24 bits的无符号整数。频率(Freq)区域是一个24位无符号整数。实际信的频率(Hz)的值是Freq的100倍,且100 MHz以下作为将来扩展的预留。终端设备必须检查硬件是否支持该频率,否则将返回错误值。
终端设备使用DlChannelAns命令来回复DlChannelReq命令。应该在终端的所有上行包的FOpt区域添加DlChannelReq命令,直至遇到Class A的下行包。这样可以保证即使在上行丢包的情况下,网络也会知道下行参数是否应用到终端。
数据负载包含如下信息:
Size (bytes) 1
DlChannelAns Payload Status
状态位(Status)代表如下含义:
Bits7:210
Status RFUUplink frequency exists
(上行频率状态)
Channel frequency ok
(信道频率状态)
Bit = 0Bit = 1
Channel frequency
ok
该频率设备不可用该频率可用
Uplink frequency exists 该信道未定义该上行频率,下行频率仅可设置一个有效上行频率[if !supportAnnotations][J20][endif] 上行频率有效
5.7 设置收发时延(RXTimingSetupReq, RXTimingSetupAns)
RXTimingSetupReq命令允许配置接收和发送间的时间间隔,该值决定终端在发送(TX)上行数据后,与第一个接收窗口打开的延时。第二个接收窗口会在第一个接收窗口关闭1秒后打开。
Size (bytes) 1
RXTimingSetupReq Payload Settings
延时(Delay)区域是指间隔时间。该区域包含2个4-bit索引:
Bits 7:43:0
Settings RFUDel
该延时以秒为单位。Del 0映射1秒。
Del Delay [s]
01
11
22
33
....
1515
终端设备可用RXTimingSetupAns命令回复RXTimingSetupReq命令,且没有数据负载。
应该在终端的所有上行包的FOpt区域添加DlChannelReq命令,直至遇到Class A的下行包。这样可以保证即使在上行丢包的情况下,网络也会知道下行参数是否应用到终端。
TxParamSetupAns)
该MAC命令仅适用部分可用地区。请参考LoRaWAN区域参数[PARAMS]文档。
TxParamSetupReq命令被用在告知终端最大的停留时间(dwell time)[if !supportAnnotations][J21][endif] 。例如,一个数据包在空中的最大连续传输时间,以及终端允许的最大有效同性辐射功率(Effective Isotropic Radiated Power ,EIRP)。
Size (bytes) 1
TxParamSetup payload EIRP_DwellTime
该结构中的EIRP_DwellTime是指:
Bits 7:6543:0
MaxDwellTime RFUDownlinkDwellTimeUplinkDwellTimeMaxEIRP
TxParamSetupReq命令的第0-3位用在最大EIRP值,对应关系如下表。表中EIRP值不得大于当地区域要求的极限值。
Coded Value0123456789101112131415
Max EIRP (dBm)8101213141618202124262729303336
EIRP的最大值要与设备的最大发射功率一致。设备一般不要求传输功率,但应不超过指定的EIRP值。
Bit 4和Bit 5定义了上下行各自的最大停留时间(dwell time),如下表:
Coded Value Dwell Time
0No Limit
1400 ms [if !supportAnnotations][J22][endif]
终端设备可用TxParamSetupAns命令回复TxParamSetupReq命令,且TxParamSetupAns命令没有数据负载。
当该MAC命令在当地区域禁止使用,则设备不应处理该MAC命令,且不发送ACK(acknowledgement)。
[if !supportAnnotations]
[endif]
[if !supportAnnotations]
[endif][if !supportAnnotations][endif]
[if !supportAnnotations][J1][endif]DR0 <-> SF12
DR1 <-> SF11
DR2 <-> SF10
DR3 <-> SF9
DR4 <-> SF8
DR5 <-> SF7
[if !supportAnnotations]
[endif]
[if !supportAnnotations]
[endif][if !supportAnnotations][endif]
[if !supportAnnotations][J2][endif]通过MAC命令查看当前环境的RSSI,SNR等
[if !supportAnnotations]
[endif]
[if !supportAnnotations]
[endif][if !supportAnnotations][endif]
[if !supportAnnotations][J3][endif]通过MAC命令设置DR,TXPower(发射功率)
[if !supportAnnotations]
[endif]
[if !supportAnnotations]
[endif][if !supportAnnotations][endif]
[if !supportAnnotations][J4][endif]通过MAC命令设置发送的占空比
占空比是指一个周期内,设备可用于通信的时间。
例如:占空比设为0.01,是指100 s内,仅可以使用1 s。
[if !supportAnnotations]
[endif]
[if !supportAnnotations]
[endif][if !supportAnnotations][endif]
[if !supportAnnotations][J5][endif]通过MAC命令设置终端节点的接收参数
[if !supportAnnotations]
[endif]
[if !supportAnnotations]
[endif][if !supportAnnotations][endif]
[if !supportAnnotations][J6][endif]通过MAC命令查询终端节点的剩余电量,链路预算
[if !supportAnnotations]
[endif]
[if !supportAnnotations]
[endif][if !supportAnnotations][endif]
[if !supportAnnotations][J7][endif]通过MAC命令创建和修改射频信道
[if !supportAnnotations]
[endif]
[if !supportAnnotations]
[endif][if !supportAnnotations][endif]
[if !supportAnnotations][J8][endif]通过MAC命令设置节点接收时隙参数
[if !supportAnnotations]
[endif]
[if !supportAnnotations]
[endif][if !supportAnnotations][endif]
[if !supportAnnotations][J9][endif]通过MAC命令设置停留时间和有效全向发射功率
EIRP=TXPower-Loss+Gain
[if !supportAnnotations]
[endif]
[if !supportAnnotations]
[endif][if !supportAnnotations][endif]
[if !supportAnnotations][J10][endif]通过MAC命令设置或修改RX1的信道
[if !supportAnnotations]
[endif]
[if !supportAnnotations]
[endif][if !supportAnnotations][endif]
[if !supportAnnotations][J11][endif]DR0 <-> SF12
DR1 <-> SF11
DR2 <-> SF10
DR3 <-> SF9
DR4 <-> SF8
DR5 <-> SF7
[if !supportAnnotations]
[endif]
[if !supportAnnotations]
[endif][if !supportAnnotations][endif]
[if !supportAnnotations][J12][endif]即不使用NBTrans上行报文重复发送,但可以用在其他功能,如“confirmed“的上行结构,提高网络服务质量。
[if !supportAnnotations]
[endif]
[if !supportAnnotations]
[endif][if !supportAnnotations][endif]
[if !supportAnnotations][J13][endif]CHMaskCntl是每一组Channel的组号,每一组内有16个信道(频点),而在组内进行单独控制时,可使用Channel Mask控制。
[if !supportAnnotations]
[endif]
[if !supportAnnotations]
[endif][if !supportAnnotations][endif]
[if !supportAnnotations][J14][endif]RX1DROffset 0 1 2 3 4 5
UL: DL DL DL DL DL DL
DR0 :DR0 DR0 DR0 DR0 DR0 DR0
DR1 :DR1 DR0 DR0 DR0 DR0 DR0
DR2 :DR2 DR1 DR0 DR0 DR0 DR0
DR3 :DR3 DR2 DR1 DR0 DR0 DR0
DR4 :DR4 DR3 DR2 DR1 DR0 DR0
DR5 :DR5 DR4 DR3 DR2 DR1 DR0
[if !supportAnnotations]
[endif]
[if !supportAnnotations]
[endif][if !supportAnnotations][endif]
[if !supportAnnotations][J15][endif]查看《LoRaWAN_Regional_Parameters_v1_0-20161012_1397_1.pdf》,可设置上行与下行的DR偏移量,即若使用DROffset=5时,上行使用DR5(SF7),对应下行映射为DR0(SF12)
[if !supportAnnotations]
[endif]
[if !supportAnnotations]
[endif][if !supportAnnotations][endif]
[if !supportAnnotations][J16][endif]原文:TheRXTimingSetupAns commandshould be added in the FOpt field of all uplinks until a class A downlink isreceived by the end-device.
[if !supportAnnotations]
[endif]
[if !supportAnnotations]
[endif][if !supportAnnotations][endif]
[if !supportAnnotations][J17][endif]假设默认可用5个信道(频点),则默认信道的Index为0-4,那么创建新的信道(频点)Index的范围在5-15。所以说,后文又提到硬件设备至少要支持16个信道。
[if !supportAnnotations]
[endif]
[if !supportAnnotations]
[endif][if !supportAnnotations][endif]
[if !supportAnnotations][J18][endif]高斯频移键控GFSK - Gauss frequency Shift Keying ,是在调制之前通过一个高斯低通滤波器来限制信号的频谱宽度。
[if !supportAnnotations]
[endif]
[if !supportAnnotations]
[endif][if !supportAnnotations][endif]
[if !supportAnnotations][J19][endif]GFSK是一种射频调制方式,50kbps是网络速度。
[if !supportAnnotations]
[endif]
[if !supportAnnotations]
[endif][if !supportAnnotations][endif]
[if !supportAnnotations][J20][endif]原文:the downlink frequency can only be set for a channel
that already has a valid uplink frequency .
[if !supportAnnotations]
[endif]
[if !supportAnnotations]
[endif][if !supportAnnotations][endif]
[if !supportAnnotations][J21][endif]停留时间(dwell time)[if !supportAnnotations][J21][endif]是指网关或节点在发送数据时,允许的最大发送时间。因为有些地区对发送时间有限制。例如,不允许终端的发包时间超过2秒。
[if !supportAnnotations]
[endif]
[if !supportAnnotations]
[endif][if !supportAnnotations][endif]
[if !supportAnnotations][J22][endif]也就是说,dwell time是不可配的,要么不开启,要么只能设置成40ms
[if !supportAnnotations]
[endif]