版本管理
目录
5.1 连接检查命令(LinkCheckReq, LinkCheckAns) 13
5.2 连接ADR命令 (LinkADRReq, LinkADRAns) 13
5.3 终端发射占空比 (DutyCycleReq, DutyCycleAns) 16
5.4 接收窗口参数 (RXParamSetupReq, RXParamSetupAns ) 16
5.5 终端设备状态 (DevStatusReq, DevStatusAns) 18
5.6 创建/修改信道 (NewChannelReq, NewChannelAns, DlChannelReq, DlChannelAns) 19
5.7 设置收发时延 (RXTimingSetupReq, RXTimingSetupAns) 22
5.8 终端传输参数(TxParamSetupReq, TxParamSetupAns) 23
第4章 MAC帧格式
前言
LoRa所有上下行链路消息都会携带PHY载荷,PHY载荷以1字节MAC帧头(MHDR)开始,紧接着MAC载荷(MACPayload),最后是4字节的MAC校验码(MIC)。
射频PHY层:
Preamble |
PHDR |
PHDR_CRC |
PHYPayload |
CRC |
图5.射频PHY结构(注意 CRC只有上行链路消息中存在)
PHY载荷:
MHDR |
MACPayload |
MIC |
或者
MHDR |
Join-Request |
MIC |
或者
MHDR |
Join-Response |
MIC |
图6.PHY载荷结构
MAC载荷:
FHDR(Frame Header) |
FPort |
FRMPayload |
FHDR(见4.3.1章节):
DevAddr |
FCtrl |
FCnt |
FOpts |
图8.帧头结构
4.1 MAC层(PHYPayload)
Size (bytes) |
1 |
1..M |
4 |
PHYPayload |
MHDR |
MACPayload |
MIC |
MACPayload字段的最大长度M,在第6章有详细说明。
4.2 MHDR帧头
Bit# |
7..5 |
4..2 |
1..0 |
MHDR bits |
MType |
RFU |
Major |
MAC头中指定了消息类型(MType)和帧编码所遵循的LoRaWAN规范的主版本号(Major)。
4.2.1 消息类型(MType位字段)
LoRaWAN定义了六个不同的MAC消息类型:join request, join accept, unconfirmed data up/down, 以及 confirmed data up/down 。
MType |
描述 |
000 |
Join Request |
001 |
Join Accept |
010 |
Unconfirmed Data Up |
011 |
Unconfirmed Data Down |
100 |
Confirmed Data Up |
101 |
Confirmed Data Down |
110 |
RFU |
111 |
Proprietary |
表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 用来处理非标准的消息格式,不能和标准消息互通,只能用来和具有相同拓展格式的消息进行通信。
不同消息类型用不同的方法保证消息一致性,下面会介绍每种消息类型的具体情况。
4.2.2 数据消息的主版本(Major位字段)
Major位字段 |
描述 |
00 |
LoRaWAN R1 |
01..11 |
RFU |
注意:Major定义了激活过程中(join procedure)使用的消息格式(见章节6.2)和MAC Payload的前4字节(见第4章)。终端要根据不同的主版本号实现不同最小版本的消息格式。终端使用的最小版本应当提前通知网络服务器。
4.3 MAC载荷(MACPayload)
MAC载荷,也就是所谓的“数据帧”,包含:帧头(FHDR)、端口(FPort)以及帧载荷(FRMPayload),其中端口和帧载荷是可选的。
4.3.1 帧头(FHDR)
FHDR是由终端短地址(DevAddr)、1byte帧控制字节(FCtrl)、2byte帧计数器(FCnt)和用来传输MAC命令的帧选项(FOpts,最多15个byte)组成。
Size(bytes) |
4 |
1 |
2 |
0..15 |
FHDR |
DevAddr |
FCtrl |
FCnt |
FOpts |
FCtrl在上下行消息中有所不同,
下行消息如下:
Bit# |
7 |
6 |
5 |
4 |
[3..0] |
FCtrl bits |
ADR |
RFU |
ACK |
FPending |
FOptsLen |
上行消息如下:
Bit# |
7 |
6 |
5 |
4 |
[3..0] |
FCtrl bits |
ADR |
ADRACKReq |
ACK |
RFU |
FOptsLen |
4.3.1.1 帧头中 自适应数据速率 的控制(ADR, ADRACKReq in FCtrl)
LoRa网络允许终端采用任何可能的数据速率。LoRaWAN协议利用该特性来优化固定终端的数据速率[J1] 。这就是自适应数据速率(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立刻回复,这样给网络预留一些余量,让它做出最好的下行调度处理。