LORAWAN中文.docx
- 文档编号:10536811
- 上传时间:2023-02-21
- 格式:DOCX
- 页数:60
- 大小:480.39KB
LORAWAN中文.docx
《LORAWAN中文.docx》由会员分享,可在线阅读,更多相关《LORAWAN中文.docx(60页珍藏版)》请在冰豆网上搜索。
LORAWAN中文
LoRaWAN规范1.0(2~8章)
2IntroductiononLoRaWANoptions
2.1LoRaWANClasses
∙终端双向通讯(A类)
∙低功耗,先发送后接收,发送和接收交替进行。
终端只有再发送数据后才能接收处理服务器发送来的数据,发送数据不受接收数据的限制。
收发比=1:
1
∙具有接收时隙的终端双向通讯(B类)
∙同样是先发送后接收,不同的是每次发送后按照一定时间间隔启动接收窗口,接收多条数据。
时间间隔从网关获取,以便服务器知晓终端接收消息的时刻。
收发比=1:
N
∙最大接收时隙的终端双向通讯(C类)
∙打开接收窗口的时间间隔很小,几乎不间断的接收消息。
比A和B更耗能,但和服务器交互的延迟低。
2.2规范
∙高级类的附加功能向下兼容低级类。
所有LoRaWAN终端必须实现A类的功能。
∙注意:
本规范手册中:
物理消息格式、MAC消息格式以及A类和其它高级类都具备的东西,只在本手册的A类部分介绍。
3PhysicalMessageFormats
∙LoRa中区分上行和下行的术语。
3.1上行链路消息
∙上行链路消息由终端发送经过一个或多个网关中转到达网络服务器。
∙它使用的LoRa无线分组显性模式由物理头(PHDR)和它的CRC(PHDR_CRC)校验组成。
负载的一致性(发送和接收的数据完全一致,不仅仅是完整)由CRC保证。
UplinkPHY:
3.2下行链路消息
∙下行链路消息由网络服务器发送给终端设备,每条消息对应的终端设备是唯一确定的,而且只通过一个网关中转。
∙下行链路消息由物理头(PHDR)和这个头的CRC(PHDR_CRC)组成。
下行链路消息:
3.3接收窗口
设备终端每次发送数据(上行传输)后打开两个短接收窗口(shortreceivewindows)。
接收窗口的启动时间是配置好的时间周期,该时间在最近一条上行传输比特数据的结尾。
4MACMessageFormats
LoRa所有的上下行链路消息都会包含PHY负载,该负载以单字节MAC头为开始,MAC头后面是MAC负载,结尾是4字节的消息一致码(MIC)。
4.1MACLayer(PHYPayload)
MACPayload字段长度M的最大值见第六章。
4.2MACHeader(MHDRfield)
MAC头中包含消息类型(MType)和帧编码所遵循的LoRaWAN规范的主版本号(Major)。
RFU是保留位。
4.2.1Messagetype(MTypebitfield)
LoRaWAN自定义了六个独特的MAC消息类型:
joinrequest,joinaccept,unconfirmeddataup/down,以及confirmeddataup/down
MType
Description
备注
000
JoinRequest
无线激活过程使用,具体见章节6.2
001
JoinAccept
无线激活过程使用,具体见章节6.2
010
UnconfirmedDataUp
接受者不必回应
011
UnconfirmedDataDown
接受者不必回应
100
ConfirmedDataUp
接受者必须回应
101
ConfirmedDataDown
接受者必须回应
110
RFU
保留
111
Proprietary
用来实现自定义格式的消息,交互的设备之间必须有相同的处理逻辑,不能和标准消息互通
4.2.1.1Join-requestandjoin-acceptmessages
已经添加上表的到备注
4.2.1.2Datamessages
消息数据既能传输MAC命令又能传输应用数据,甚至可以一起发送。
不同消息类型用不同的方法保证一致性,下面会介绍这一点。
4.2.2Majorversionofdatamessage(Majorbitfield)
Majorbits
Description
00
LoRaWANR1
01..11
RFU(保留)
∙注意:
主版本号指明激活过程中(inthejoinprocedure)使用的消息格式(章节6.2)和MACPayload前4字节(第4章)。
终端要为每个不同的主版本号实现不同子版本的消息格式。
终端使用的主版本号应当提前发送给网络服务器,可以作为其它消息的一部分捎带发送,如,设备个性化信息。
4.3MACPayloadofDataMessages(MACPayload)
MAC荷载,也就是所谓的“数据帧”,包含:
帧头(FHDR)、可配置的端口字段(FPort)以及可配置的帧负载字段(FRMPayload)
4.3.1Frameheader(FHDR)
FHDR由:
终端短址(DevAddr)、一个帧控制字节(FCtrl)、2字节的帧计数器(即帧大小,FCnt)和最多15个字节的配置(FOpts,用来传输MAC命令)组成。
4.3.1.1帧头中的自适应数据速率控制(ADR,ADRACKReqinFCtrl)
LoRa网络对终端的数据速率没有任何限制。
LoRaWAN协议通过该特性调整优化静态终端(相对移动终端来讲)的数据速率,即自适应数据速率(AdaptiveDataRate(ADR))。
ADR可用时,网络会为其优化来使用尽可能快的数据速率。
移动终端在移动过程中会快速切换无线广播环境,该过程中进行数据速率管理没什么实际意义,此时移动终端应使用已经修正过的默认数据速率。
设置ADR之后,网络通过MAC命令控制终端的数据速率。
如果没有设置ADR,网络会无视收到的信号的质量,不对终端的数据速率做任何调整。
终端或网络用不用ADR要根据需求决定。
不过,只要条件允许就应该开启ADR,这样可以延长终端的电池寿命并充分利用网络带宽。
注意:
哪怕移动终端在大多数时间下都是不移动的。
因此终端可以根据它自己移动状态请求网络通过ADR进行数据速率优化。
如果终端的数据速率经过服务器优化比默认值大,那节点就要定期检查保证服务器能够收到上传的数据。
终端上行的帧号每增加一次(重复发送不增加帧号)的同时,ADR_ACK_CNT+1。
ADR_ACK_DELAY(这么长)时间之内收到下行消息:
ADR_ACK_CNT=0(重置)。
否则ADR_ACK_CNT继续根据前面规则处理。
ADR_ACK_CNT>=ADR_ACK_LIMIT(一共用时:
ADR_ACK_LIMIT+ADR_ACK_DELAY)就切换到更低的数据速率上(无线广播范围的距离更长)重复上述过程,每次终端设备达到ADR_ACK_LIMIT就会再次降低自己的数据速率。
如果设备使用默认的数据速率就不需要设置ADRACKReq,这种情况下任何操作都不会改善连接范围(增加连接距离)。
在此期间的下行数据不需设置ACK位,因为终端在等待接收期间收到任何应答都表示网关还能接收来自该设备的上行数据。
∙注意:
为了让网络对下行链路给出最佳的调度方案,不要要求对ADR请求立刻做出应答,要给网络留足时间。
∙注意:
上行传输时,如果ADR_ACK_CNT>=ADR_ACK_LIMIT并且当前数据速率比设备的最小数据速率高,就要设置ADRACKReq,其它情况下不需要。
4.3.1.2消息确认位和确认流程 (ACKinFCtrl)
收到confirmed类型的消息时,接收者要回复一条确认消息(ACK,通过设置确认位实现)。
如果发送者是终端,网络就把消息发送到该终端打开的接收窗口。
如果发送者是网关,终端就自行决定发送确认消息的传输方式。
确认消息只会在收到消息以后作为响应发送,并且不重发。
∙注意:
为了尽量简化终端处理、减少状态,一旦收到需要确认的消息要立刻发送确认消息,确认消息要简单直接(最好发空消息)。
4.3.1.3重传机制(Retransmissionprocedure)
∙如果终端设备发送一条需要确认的消息后没有收到响应,终端就会重新发送这条消息。
不同设备间的消息重传的次数和每次的时间可能不同,当然这些也可以通过网络服务器调节。
∙注意:
18章给出了一些确认机制的时间
∙注意:
如果设备重传次数到限制后还没收到确认消息,就会降低自身的数据传输速率来增加连接距离再次尝试连接。
这种条消息的重传或者放弃是由终端决定的。
∙注意:
如果网络服务器重传次数达到限制后还没有收到确消息,在没有收到设备的消息之前会认为无法与终端建立连接(终端不可达)。
这种消息的重传或者放弃是由服务器决定的。
∙注意:
上面提到的重传期间的数据速率回归机制在18.4有详细介绍
4.3.1.4帧挂起位(FPendinginFCtrl,downlinkonly)
∙帧挂起位(FPending)只在下行交互中使用,表示网关还有数据挂起等待发送。
此时需要终端尽快发送上行消息来再打开一个接收窗口。
FPending的详细用法在18.3。
4.3.1.5计数器(FCnt)
∙每个终端有两个计数器:
上行链路计数器(FCntUp),由终端产生并维护,记录发往服务器的帧数量;下行链路计数器(FCntDown),由服务器产生并维护,记录服务器发往终端的帧数量(此处与我们当前的设备服务器与设备的交互中的messageid作用相同,都是为了保证消息收发一致)。
终端加入服务器成功以后,终端和服务端的帧号同时置0。
之后每次其中一方发送消息后,与之对应的FCntUp或FCntDown就会加1。
接收方会同步保存接收数据的的帧号,对比收到的增加过的值和当前保存的值,如果两者之差小于MAX_FCNT_GAP(要考虑号码归零,即号码达到最大值后重新从0开始),接收方就与收到的数据保持同步(更新成收到的值)。
如果两者之差大于MAX_FCNY_GAP就说明中间丢失了很多数据然后就会丢掉这条数据。
PS4翻译更正如下:
∙LoRaWAN的帧计数器有16位和32位两种长度,两者有所不同:
16bits时,其值可以直接作为FCnt使用(反之亦然),此时有需要的话通过在前面填充0(值为0)字节(来补足);32bits时,FCnt对应计数器的16个最低有效位(2个低字节)。
上行数据使用上行FCnt,下行数据使用下行FCnt。
一个节点在上行FCnt的一次循环内,如果不是消息重传,上行传输数据使用的FCnt不能重复。
∙PS:
注释掉原文的直译,原文说法有问题。
∙FCnt的一次循环指的是:
从1到达最大值,0x1~0xFFFF(因为LoRaWAN中的FCnt字段是2个字节)。
∙原文档中所谓的“相同的的应用会话密钥和网络会话密钥”就是没有重新入网,重新入网FCnt重新计算,是FCnt循环计数的一种特殊情况。
当计数器使用32位时,FCnt字段只发送32bits中的16个最低有效位。
此时服务器需要通过观察传输的数据来自己维护16个最高有效位。
4.3.1.6帧配置(FOptsLeninFCtrl,FOpts)
∙帧配置长度(FOptsLen)位于帧的FCtrl部分,表示FOpts的总长度。
FOpts搭载到数据帧中发送的MAC命令最长15字节,详细的MAC命令见4.4。
如果帧配置长度FOptsLen=0,FOpts为空; 如果FOpts不为空(里面是MACommand)
,端口号要么省略,要么是一个非零值(具体看下面)。
∙MAC命令不能同时出现在payload(负载)和帧配置项中。
4.3.2端口字段Portfield(FPort)
∙负载(payload)不为空的时候端口号(port)也不能是空。
此时port=0表示FRMPayload中只有MAC命令(详情见章节4.4)。
FPort值的可用范围是:
1~223(0x01~0xDF),224~255(0xE0~0xFF)为保留值,方便以后扩展。
∙N是应用负载的字节数,N的取值范围见第7节
N≤M-1-(FHDR的字节长度)
∙其中M是MAC的最大有效荷载长度。
4.3.3MAC帧负载据加密(FRMPayload)
∙如果帧数据中包含payload,要先对FRMPayload进行加密,再计算消息的一致码(MIC)。
∙加密方案使用基于IEEE802.15.4/2006AnnexB[IEEE802154]的AES加密,秘钥长度128位。
默认情况下,所有FPort的加/解密都在LoRaWAN层完成;如果FPorts不为0,加/解密可以在LoRaWAN层之上完成。
4.3.3.1LoRaWAN加密
∙加密秘钥K取决于消息的FPort:
FPort
K
备注
0
NwkSKey
网络密钥
1..255
AppSKey
应用密钥
表3,FPort列表
∙加密字段:
pld=FRMPayload
∙采用分组加密,算法位每条消息数据定义一个块的序列,序列分为k块,k=ceil(len(pld)/16) (向上取整),每组用Ai表示,i=1…k,每块结构如下:
字节数
1
4
1
4
4
1
1
Ai
0x01
4×0x00
Dir
DevAddr
FCntUp或FCntDown
0x00
i
∙Dir字段:
上行帧为0,下行帧为1。
对Ai加密,得到Si:
∙通过分割对payload进行加解密:
4.3.3.2EncryptionabovetheLoRaWANlayer
∙对于选定的端口(FPort不能是0,因为0表示MAC命令),如果LoRaWAN前面的一些层给LoRaWAN的FRMPayload是加密过的,LoRaWAN就把FRMPayload从MACPayload转发给应用,并且转发过程中不做任何改动。
4.4MessageIntegrityCode(MIC)
对整个消息进行MIC计算(AES签名算法CMAC),需要加密的消息包括以下字段:
msg=MHDR|FHDR|FPort|FRMPayload
len(msg)表示消息的字节长度。
MIC算法参考RFC4493:
∙B0定义如下:
字节数
1
4
1
4
4
1
1
B0
0x49
4×0x00
Dir
DevAddr
FCntUp或FCntDown
0x00
len(mgs)
Dir字段:
上行帧为0,下行帧为1
5MACCommands
网络管理时会在网络服务器和终端MAC层之间传输一系列MAC命令。
一帧数据中可以包含任何MAC命令,MAC命令既可以放在FOpts中,也可以放在FRMPayload中,但不能同时在两个字段携带MAC命令。
MAC命令放在FRMPayload时,FPort=0。
放在FOpts的命令不加密(原因:
加密Payload,对整个数据签名),也不能超过15个字节(2^4-1)。
放在FRMPayload的MAC命令长度不能超过FRMPayload的最大值。
∙注意:
不想被别人截获的命令要放到FRMPayload,并单独发送该数据帧
∙一条mac命令由一个命令ID(CID,一个字节),和特定的命令序列组成,命令序列可以是空。
命令ID
命令
终端发送
网关发送
简介
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的应答
0x80
0xFF
Proprietary
×
×
保留命令
∙注:
MAC命令长度没有明确给出来,这就需要MAC执行端通过某种方式隐性获得。
因为无法忽略不明的MAC命令,而且一旦遇到不明的MAC命令,就会导致处理MAC命令队列的进程终止。
因此,建议参考使用LoRaWAN规范中的MAC命令。
这样的话,所有当前版本LoRaWAN规范中实现的MAC命令都可以被更高版本的规范兼容处理。
5.1链路检查LinkCheckReq和LinkCheckAns
终端使用LinkCheckReq命令对链路进行有效性检查,该命令不含payload。
网络服务器收到网关(一个或多个)转发过来的LinkCheckReq数据后回复一条 LinkCheckAns命令。
大小(字节)
1
1
LinkCheckAnsPayload
Margin
GwCnt
Margin(解调幅度)是最近一条被成功收到的 LinkCheckReq 命令的链路预算(单位dB),是一个8位(bits)无符号整型,范围[0,254]。
值为 0 表示在解调(信号强度)的下限上收到了数据,值20表示网关在比解调下限高出 20dB 的信号强度上收到了数据。
255是保留值。
GwCnt是最近一次成功收到LinkCheckReq的网关的数量。
linkmargin参考:
Linkmargin
5.2速率自适应LinkADRReq和LinkADRAns
服务器通过发送 LinkADRReq 命令让终端设备进行速率自适应。
大小(字节)
1
2
1
LinkADRReqPayload
DataRate_TXPower
ChMask
Redundancy
大小(位bits)
[7:
4]
[3:
0]
DataRate_TXPower
DataRate
TXPower
数据速率(DataRate)和TX输出功率(TXPower),两者和地理区域相关,编码参考第7章。
信道掩码(ChMask)通过对相应的最低有效位填0来对上行信道进行编码,信道列表如下:
表5:
信道状态表
第几位
可用信道
0
Channel1
1
Channel2
..
..
15
Channel16
ChMask中某位是1,表示该位对应的上行信道可用;如果是0,则表示对应的上行信道不可用。
终端设备当前使用的信道要设为1(不知道是我不会断句,还是官方文档这里说的不明白)。
第几位
7
[6:
4]
[3:
0]
Redundancybits
保留
ChMaskCntl
NbRep
冗余(Redundancy)位中,NbRep表示每条上行消息被重复收到的次数,仅用于 unconfirmed 类型的上行消息。
默认值为 1 ,有效范围[1:
15]。
如果终端设备收到NbRep==0,则使用默认值。
服务器使用该字段控制节点上行数据冗余,以得到给定的服务质量。
终端在重传时的调频照常执行,每次重发以后等待接收数据,直到接收窗口过期。
信道掩码控制(ChMaskCntl)字段控制上面ChMask的位掩码的解释。
当网络上信道的实现超过16个,该字段必须是一个非0值。
用它来控制ChMask使用哪16个信道,还可以用它来全局性的打开或关闭所欲使用指定调制方式的信道。
该字段的具体使用和地域相关,具体见第7章。
信道频率也和地域有关,具体定义见第6章。
终端收到LinkADRReq后回复LinkADRAns命令。
大小(字节)
1
LinkADRAnsPayload
Status
大小(位)
[7:
3]
2
1
0
Statusbits
RFU
PowerACK
DatarateACK
ChannelmaskACK
LinkADRAnsStatus释义如下:
表6:
LinkADRAns状态位定义
字段
(字段值=)0
(字段值=)1
*ChannelmaskACK*
要使用的信道未定义。
忽略该命令,终端状态不改变
设置成功
*DatarateACK*
终端未定义或者不支持该速率(可用信道不支持该速率)。
命令被忽略,终端状态不改变
设置成功
*PowerACK*
终端未定义该功率等级。
命令被忽略,终端状态不改变
设置成功
以上三个字段任意一个是0,命令就会执行失败,而节点也保持之前的状态不变。
5.3终端的发射占空比(DutyCycleReq 和 DutyCycleAns)
DutyCycleReq,网络协调员使用该命令来限制终端设备的总发射占空比的最大值。
总发射占空比指所有子频带的发射占空比。
大小(字节)
1
DutyCycleReqPayload
MaxDCycle
终端允许的发射占空比的最大值:
总发射占空比=12MaxDCycle
MaxDutyCycle有效范围[0:
15]。
在没有区域调节设置占空比限制的情况下,使用0表示“占空比没有限制”。
值为255时要求终端设备立刻转为静默状态,等价于远程关闭终端。
终端收到DutyCycleReq后回复DutyCycleAns, DutyCycleAns不包含任何payload。
5.4接收窗口相关参数(RXParamSetupReq,RXParamSetupAns)
对于每一次的上发,通过下发RXParamSetupReq命令,可以修改第二个接收窗口(RX2)使用的频率和数据率。
还可以使下行RX1数据率相对上行数据率偏移。
大小(字节)
1
3
RX2SetupReqPayload
DLsettings
Frequency
第几位
7
6:
4
3:
0
DLsettings
RFU
RX1DRoffset
RX2DataRate
RX1DRoffset用来设置终端设备上行和下行第一个接收窗口(RX1)数据速率之间的偏移,默认值是0。
设置偏移是因为基站所在区域的功率密度可能会有上限,还可以用来平衡上行和下行的无线链路预算。
RX2DataRate定义第二个接收窗口使用的数据速率,用法和 LinkADRReq一样(例如,0表示DR0/125kHz)。
Frequency是第二个接收窗口使用的信道频率,其频率编码规则的定义见NewChannelReq命令。
终端设备回复RXParamSetupAns,其pay
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LORAWAN 中文