LoRaWAN协议

article/2025/3/16 8:07:24
LoRaWAN协议定义了使用LoRa的MAC层规范,处在协议应用层与物理层中间的实现规范。LoRa没有开放的规范化物理层协议,而LoRa物理模块的接口上很多参数都可以进行配置,LoRaWAN同时对一些数据发送格式做了相应的限制。
物理层消息结构
上行带有CRC,而下行没有。


层间组包格式

简要参数说明:DevAddr 为设备地址(包含网络地址信息),Fport复用port域,如果为0表示有效负载为MAC命令,此时FOptsLen为0;FOptsLen:options长度为,FCnt为帧计数;MIC加密完整性检查包含MHDR和FHDR FPort和 FRMPayload;MType为消息类型,指示上下行消息及是否是需要Confirm的消息,如果是confirmed消息则需要回复ACK。Major是LoRaWAN的版本号;ADR 和 ADRAckReq提供服务端用于自适应数据速率控制;ACK确认最新的帧信息;FOpts用于在发送数据时同时携带MAC Command;CID为MAC 命令ID,Args为命令参数;FRMPayload为使用key长128比特AES加密的有效数据。MAC header的最小长度为13字节,最大为28字节;上行没有目标地址,而下行没有源地址。上图不是协议上原始的消息结构图,协议结构图如下,对于每个元素的细节展开参考规范LoRaWAN-v1.1.pdf RFU 填充为0,需要省略的单元MType亦即message type依赖在相应版本Major下的消息类型。FPort如果payload不为空,则FPort必须存在如果FRMPayload只有MAC commands则此域为0。1-223用于上层应有端口,224用于MAC协议测试,225-255留给后续协议扩展。

三种终端类型
三种终端类型,classA、classB、classC,其耗能和数据延时比较如下,而classB和classC的终端可支持组播方式。

ClassA类型终端收发方式如下: 在上行发送后,Receive_Dealy误差+/-20微秒时刻进行下行接收,如果网络在RX1和RX2都发送给同一终端数据,则需要发送同帧数据。终端如果在RX1成功接收到检查成功的数据,则不可再在RX2继续接收数据。RX1的频率和速率和上行发送的频率和速率满足一定的函数关系式(在相关流程中说明),在缺省情况下第一个窗口的数据传输速率和上行发送相同,第二个窗口则采用固定可配置的频率和速率,可以通过MAC Command进行配置。窗口长度至少足够检测下行的preamble,如果检测到下行的preamble,则需要接收到相应frame解调结束。网络需要在RX1或RX2窗口边界才能开始发起数据。终端在前一次上行发送成功后如果没有正确解码到下行数据并且RX2窗口仍未超时的情况下,不可再次出发上行发送。

ClassB类型的终端,在支持CLassA类型的接收方式之外,还需周期性监测网络下行的ping slot,而为了实现周期性的同步,引入beacon来携带时间信息,终端可以利用beacon(beacon周期性128秒进行发送,ping slot周期可配置)进行时、频估计,并作出相应调整。ping slot和Beacon的时序关系如下,Beacon由网关周期性发送。Beacon携带4个字节时间信息,单位为秒(Sunday 6th of January 1980 的0点开始计时),同时携带还有GwSpecific及CRC等。ClassA、ClassB转换通过ClassB比特位来进行。ClassB: 设置为1时,告诉网络服务器端,设备切换到ClassB模式。而在ClassA模式下,为保证能够尽快接收到下行数据,引入Frame Pending bit Fpending inFCtrl只用在下行,表示下行仍有数据发送,需要终端尽快发送上行以打开下行接收窗口。Beacon丢失后可以维持2小时,此时终端根据自身条件维护时间,在此种情况,需要扩展ping和beacon的接收窗口来补偿频率及时间补漂移。对于移动中的终端,GwSpecific 可以携带GPS坐标信息,由于classB需要网关发送ping消息,网络需要知道距离终端最近的网关位置。两种方式来保证设备部丢失:周期性上行发送以或是小区变化时的上行发送,前者不需要检测gateway specific,而后者需要通过此ID来判断小区变化。beacon和ping slot亦可使用跳频发送。

Beacon的周期性发送方式及时序关系如下,DeviceTimeReq可以用于请求网络时间,加快Beacon的发现过程。


ClassC模式的工作流程如下,支持ClassC的终端需要支持ClassA,不需支持classB,ClassC终端在发送时刻以外尽可能长时间处在下行接收状态。ClassA和ClassC的模式转换通过MAC命令来进行(DeviceModeInd 和 DeviceModeCnf)。

消息类型
消息类型,message type的类型如下,消息中主要指示负载数据类型或者Join流程消息类型。

Conifrmed Data需要接收端进行相应数据包的ACK应答,而Uncofirmed则是无应答要求数据。Joint / Rejoint程序用于OTA激活程序处理。数据消息可以传输MAC指令或应用层数据(可合并一起发送)。Confirmed消息是需要进行ACK确认的消息。Proprietary专用消息可用于非标准消息,但必须和标准消息不冲突,当终端或服务端不能识别相应消息时刻,可以选择丢弃该消息。
Joint request包含JoinEUI DevEUI和DevNonce(2个字节,上电时值为0,每次发送Joint-request值加一,掉电时需要保留在NVM中non-volatile memory),网络跟踪DevNonce值的变化,如果没有改变的Joint-Request将作为无效消息丢弃。Joint-Request消息无需加密。
Join-accept如果网络允许设备接入则会回复这条消息。使用跳频技术的随机接入,Join-Accept接收和ClassA下行接收类似,不过RX1和RX2的delay为JOIN_ACCEPT_DELAY1和JOIN_ACCEPT_DELA2由物理层特性定义。在join-accept成功后,需要发送RekeyInd、RekeyConf进行交互开启新的加密模式。如果不允许终端接入,则网络不会给终端任何回复。joint-accept中包含信息:JoinNonce、NetID、DevAddr、DLSettings、RxDelay、CFList。home_NetID为设备归属网络的ID,属于NetID一类。DLsettings包含OptNeg,指示网络为1.0或是1.1,unset为1.0版本,set为1.1及其后续版本,包含RX1DRoffset(第一个接收窗和上行速率关系),和RX2Data rate(速率大小索引)。JoinNonce用来获取FNwkSIntKey,SNwkSIntKey, NwkSEncKey、AppSKey。JoinNonce每次处理Join-accept则加一。Join-Nonce需要一直累加,并且终端判断该值不大于存储值时认为消息无效。NetID24比特,当为私人或实验网络时,分配地址如下:

Rejoin的流程和Join-request类似,同样回复join-accept。JoniReqType分为0xFF Join-request,0x00Rejoin-request type0,0x01 Rejoi、n-request type1,0x02:Rejon-request type2。Rejon-accept用于网络间的切换,维持或改变设备在已有网络上的地址。Rejoin-request,0包含NetID+DevEUI,重置所有无线相关参数。type1包含JoinEUI+DevEUI,作用和Joint-request类似,type3包含NetID+DevEUI,维护或改变设备地址,seesion秘钥,帧号等,无线资源参数不变化。
设备激活
Join流程的作用是用于终端激活,终端激活的作用,是当设备刚开始工作时完成在相应网络初始化的过程,没有显式定义的去激活过程,只能通过应用层处理。在终端接入LoRaWAN网络进行有效服务之前,需要进行激活。激活的方式有两种OTAA(Over-The-Air-Activation)和ABP(Activation By Personalization)。激活过程需要完整一些信息确认,DevAddr占用32比特,7bit用于指示网络,25比特指示终端在网络中的地址ID。得到的NwkKey、AppKey是用于产生终端完整保护及数据加密key的基础,LoRaWAN采用AES128比特算法作为数据加密基础。激活的流程参考

Join处理流程

加密及数据完整性保护
LoRaWAN为了提高数据的安全性、可靠性,提供了加密和完整性保护MIC。Device root keys (AppKey & NwkKey) 为IEEE 802.15.4 中AES-128比特的密钥,在OTAA模式下,NwkKey 用来产生FNwkSIntKey,SNwkSIntKey和NwkSEncKey,而AppKey用来产生AppSKey。在v1.0版本中AppSKey亦是由NwkKey产生的。只支持ABP模式的设备不需要NwkKey和Appkey。JSIntKey和JSEncKey也是从NwkKey来得到,前者用于Rejoin-Request type1和对应Join-Accept回复的MIC,后者用于加密Rejoin-Request触发的Join-Accept。在激活之后,终端可以得到的信息: DevAddr NwkSEncKey SNwkSIntKey FNwkSIntKey及AppSKey。DevAddr用于指示终端在当前网络中的身份,由于AddrPrefix和NwkAddr组成,AddrPrefix由网络服务器身份NetID获取。DevAddr共占用32比特,其中有7:24比特用来表示AddrPrefix,其他表示NwkAddr。AddrPrefix有Lora联盟分配,私有网络和实验网络可以用7比特b0000000和b0000001表示。如果使用OTAA方式,需要采用join程序进行交互,joint-request用于发起请求,而join-accept用于网络应答,同时终端可以得到NwKkey和AppKey,在ABP模式下不需要通过Join流程来完成信息交互,设备端本身存有所需的DevAddr、FNwkSIntKey, SNwkSIntKey, NwkSEncKey 和AppSKey。OTAA模式下需要终端携带JointEUI、DevEUI,前者是网络中设备标识,而后者是设备全球唯一标识。当ABP模式设备接入网络时,首先应当触发ResetInd/ResetCnf流程。而在OTAA模式设备上需要完成Joint程序后出发RekeyInd、RekeyConf流程(只在OTA模式及1.1的网络中支持,用于确认密钥更新)。Key的产生过程在V1.0和V1.1中略有差别,具体参考如下
V1.0版本中的产生方式

V1.1版本中的产生方式

MAC Command处理
LoRaWAN的MAC命令提供了有效定制终端参数的方式,如LinkCheckReq可以用于终端测试其连接情况,其他的命令都是提供服务端使用,这些命令可以用于控制的终端的数据速率、功率输出、数据重传次数,接收周期、接收窗口等配置参数;同时还有一些命令可以用于请求终端报告电池、接收质量等相关信息。MAC指令可以作为有效的数据内容携带在FRMPayLoad里面同时FPort设置为0,也可以与数据共存,放置在FOpts中,此种情况下最长15字节。每个ID(command identifer)占用1个字节。MAC指令按照接收顺序处理回复,同一帧收到的MAC指令必须在同一帧内进行回复。优先发送MAC指令回复在FOpts和FRMPayload,如果超过FRMPayload长度,则只发送可发长度,网络服务端将对为回复的MAC指令进行重新发送。网络计算MAC指令回复内容FRMPayload Size的方式:在ADR为0是认为最大FRMPayload为最低速率,ADR比特为1时网络认为最大Payload size为上次上行发送速率对应的大小。设备只对接收到的MAC命令做一次回复,如果消息丢失,网络需要重发命令。网络在接收到新的上行而没有对MAC命令回复时决定是否需要重发命令,由于RxParamSetupReq、RxTimingSetup和DlChannelReq影响下行信道参数,他们的ACK方式有所不同。网络需要在RX1、RX2窗口回复终端的MAC命令,如果终端没有收到回复,则自主调度重传机制。
MAC命令交互及功能


ClassB增加

ClassC增加

自适应速率控制 ADR(Adaptive data rate control)
如果上行ADR设置为1,则网络可以通过MAC命令进行速率和发送功率的控制,否则网络不会尝试改变速率或发送功率,但可能改变信道和数据重复次数。如果下行ADR设置为1只表明网络处于可以进行ADR控制的状态。如果下行ADR比特位0,在移动的终端则需要reset上行ADR比特,按照自身策略进行速率控制,而静止的终端则忽略此状态,进行正常ADR控制。LinkADRReqMAC指令可以用于调整速率和功率。终端发送功率默认为最大值或当地允许的最大值,如果网络终端的速率大于缺省的速率或者发送功率小于缺省的功率,终端需要周期确认网络能够收到上行帧。为了实现这个功能,引入ADR_ACK_CNT计数器,如果发送次数(重复传输不计算在内,只考虑新的数据传输)超过门限设置ADR_ACK_LIMIT时仍未收到下行的任何数据,则需要设置ADRACKReq比特位,网络需要在ADR_ACK_DELAY帧长时间内做出回复,下行接收到数据,则复位ADR_ACK_CNT计数器。如果在ADR_ACK_LIMIT + ADR_ACK_DELAY时间内网络没有回复,终端需要通过回复缺省配置功率和降低速率的方式重新连接,当ADR_ACK_DELAY超时时速率一步步进行降低,如果一直到达最低速率都未能重新获得连接,终端需要重新恢复功率、速率、频点信道初始配置。当速率和功率和缺省值相等时,表示无法提升连接性能,此时ADRACKReq不应使用,三个条件可触发此流程: 速率高于缺省速率、配置功率小于缺省功率或是目前配置的可用信道为缺省可用信道的子集。
数据的ACK与重传
当数据为Confirmed模式需要ACK的时候,网关需要在终端上行打开的下行周期进行发送,而终端则可自行调度,ACK只针对最新收到的数据进行。在没有收到ACK的情况,服务端采用新的帧号进行发送。而上行confirmed 和unconfirmed帧都是重传NbTrans次,除非收到下行有效传输。重传次数可以由网络根据不同的Qos配置,重传间可以使用跳频,而重传间隔各个终端可以自行决定。而设备收到ACK时需要停止相应帧的重复传输。对于uncofirmed数据,ClassA在RX1或RX2收到有效数据则停止重复发送,calssB&C在RX1收到数据时停止重复发送。NbTrans上行传输次数,对confirmed和unconfirmed消息都采用,缺省值为1,有效范围1-15,如果接收到的配置值为0,则保持现有值不变。
FCnt: Frame counter,在LoRaWAN1.1版本设备需要维护三个计数器,而在1.0之前版本只需要两个,差别在于原来计数分上行下行两个FCntUp和FCntDown,而在1.1后的版本采用单独的NFCntDown用于MAC交互的port0和Fport未存在的时刻,而AFCntDown用于其他port,逻辑上NFCntDown由网络服务端维护,AFCntDown由应用服务器端维护。在OTAA模式下,当成共处理Joint-accept时刻,将Frame Counter全部reset到0,而在ABP设备上初始为0,在设备存货周期内都不会重置,甚至掉电也需维持。计数器总共32比特,而发送在消息中的FCnt只有最后16比特,设备对于重复的数据只需ACK一次。
关于信道配置
参考LoRaWAN-Regional-Parameters-v1.1rA.PDF,由于ISM属于非授权公共免费频谱,但需要满足一定的限制条件,各个频率及地区限制以及相适应的物理参数在文档中做了详细的说明。
名词解释
FNwkSIntKey: Forwarding Network session integrity key
SNwkSIntKey: Serving Network session integrity key
NwkSEncKey: Network session encryption key v1.0中mac payload的MIC和加密key相同。
AppSKey: Application session key ()用于应用层服务端和设备端的数据加密。
Session Context 分为Network Session和Application Session,network session上下文包括信息F/SNwkSIntKey、NwkSEncKey 、FCntUp 、FCntDwn (LW 1.0) or NFCntDwn (LW 1.1)、DevAddr。Application session上下文包括:AppSKey 、FCntUp 、FCntDown (LW 1.0) or AFCntDwn (LW 1.1)。
OTAA: Over-The-Air Activationvia
ABP: Activation By Personalization
MIC: message integrity code

http://chatgpt.dhexx.cn/article/HKsPAPsW.shtml

相关文章

【LoRaWAN协议的扩展与衍生】

文章目录 LoRaWAN协议的扩展与衍生一、LoRaWAN中继Relay协议1.Relay协议强制需求2.Relay入网及数据交互流程3.唤醒方式 二、阿里巴巴D2D协议1.场景要求2.协议机制3.D2D的特点 三、智能家居YoLink协议1.YoLink通信协议架构及特点2.YoLink网络通信模式3.D类设备的唤醒和控制4.YoL…

什么是LoRa?

1.LoRa概述: 智能物联网应用改善了我们的生活方式,并且正在解决城市和社区面临的一些挑战:气候变化,污染控制,自然灾害预警和生命急救。企业也通过改进运营和效率以降低成本获取效益。这种无线射频技术正在应用到汽车…

物联网Lora组网方式及私有协议的应用

本篇文章全程干货,可能有点枯燥, 如果耐心看完,保证不会让大家失望! 文章内容都是无际单片机编程团队的几年实战经验,全网独家。 本课程不仅适用于Lora技术,FSK、zigbee、OOK等无线通讯都可以支持,大家可…

LoRaWAN网络协议与LoRa私有协议相比有哪些优势

物联网很多应用现在都普遍用了LoRa技术的芯片,然而没有使用LoRaWan网络协议。经过调查发现,没有使用LoRaWAN网络协议的原因有:应用点数少、规模小,有的是因为LoRaWAN成本高,技术要求高,短时间内无法掌握&am…

LoRa协议说明

ClassA 所有终端设备需实现Class A物理层Uplink Message由终端设备经过一个或多个网关发送至网络服务端 UplinkMessage使用LoRa无线报文的显示模式,即包含PHDR和PHDR_CRC头。整个报文的完整性由CRC检验码保证。PHDR,PHDR_CRC和负载的CRC字段均自动由无线射频收发器插…

LoRa协议在Arduino上的应用——原理及代码分析(二)

目录 LoRa调制与解调模式代码分析主程序开始发包Packet Structure数据传输时间重置FIFO地址与payload长度结束发包中断源 ReceiverparsePacket是否存在数据包数据读取RSSI 前述文章链接在此~~ LoRa协议在Arduino上的应用——原理及代码分析(一). LoRa调…

【从0到1搭建LoRa物联网】12、LoRa网关与平台通讯协议

系列文章: 【从0到1搭建LoRa物联网】1、LoRa物联网的架构 【从0到1搭建LoRa物联网】2、终端设备开发方式 【从0到1搭建LoRa物联网】3、国产LoRa终端ASR6505软硬件 【从0到1搭建LoRa物联网】4、国产LoRa终端ASR6505普通GPIO 【从0到1搭建LoRa物联网】5、国产LoRa终端…

物联网LoRa系列-11:LoRa终端--基于物理层协议的PingPong应用程序的软件架构

至此,我们已经搭建好LoRa终端的软硬件开发环境,接下来,将解构和实现LoRa终端的应用程序。 LoRa终端的应用程序,(1)可以直接基于LoRa的物理层协议(LoRa芯片实现);&#x…

自有协议的LoRa模块应用

LoRa主要是由SemTech公司开发并拥有专利的物理层的调制技术。基于LoRa,LoRa联盟也开发和开放了的LoRaWAN的协议,用于组建网络和实现应用。Ali在LoRaWAN基础上又开发了LPWAN的物联网应用平台,这些都需要遵从专有的LoRa芯片,专门协议…

LoRa协议在Arduino上的应用——原理及代码分析(一)

目录 LoRa简介硬件设备源码分析Sender 两种调制方式 LoRa简介 详细的LoRaWAN协议解析在这里 本文主要介绍LoRa在Arduino上的实现过程,从而学习LoRa协议的实现。 硬件设备 包括传统的GFSK调制技术以及LoRa(远程)扩频技术 这里说一下啥叫LoR…

物联网LoRa系列-25:LoRa终端--LoRaWAN协议简介与LoRa WAN终端软件选择

前言: 从本篇文章开始: 从通信节点的角度度看,将从Lra终端对点对通信转到LoRa终端与LoRa网关的通信、LoRa终端与LoRa云服务器的通信; 从协议栈的角度看,将从物理层上升到LoRa的MAC层, 即LoRaWAN&#xf…

lora三层服务器协议,LoRa以及LoRa包含的几种协议

为何LoRa成为“一夜爆红”的新技术呢?一定是因为它具有非常显著的特点: 长距离:1~20km 节点数:万级,甚至百万级 电池寿命:3~10年 数据速率3~50kbps LoRa作为一种无线技术,基于Sub-GHz的频段使其更易以较低功耗远距离通信,可以使用电池供电或者其他能量收集的方式供电。…

Lora如何组网?有哪些简单的Lora组网协议?

我从事物联网设计10余年,对无线通讯技术的ASK、FSK、Zigbee、Z-Wave、NB-Iot、Lora及LoraWan等都有一些或多或少的接触。 其中Lora无线通讯技术对我影响比较深刻,了解也相对比较透彻。 我在2016年接触的Lora无线通讯技术,但是,在…

什么是LoRa协议?

1 开场白 这篇文章给读者分享LoRa和LoRaWAN相关的技术简介, Low-Power, Wide-Area Networks(LPWAN)为实现数十亿的万物互联设备而生, LoRaWAN专为LPWAN网络优化更长的电池寿命,更长的距离和更低的代价。 [欢迎大家关注公众号:LoRa万物互联,获取更多LoRa资讯] 2 LoRa是什…

物联网LoRa系列-2:LoRa系统架构与协议栈详解

主要内容 1. 什么是Lora? 2. LoRa的主要特点? 3. LoRa的系统架构? 4. LoRa终端节点的网络连接方式? 5. LoRa终端节点的三种工作模式? 6. LoRa的协议栈? 1. 什么是LoRa LoRa是semtech公司创建的低功耗…

LoRa协议

注意:本页提供的信息来自LoRa™Alliance于2015年1月发布的LoRaWAN Specification V1.0。LoRa联盟负责随时更改规格,恕不另行通知。RF Wireless World不对任何与此相关的问题负责。请参阅LoRa Alliance(https://www.lora-alliance.org&#xf…

用命令:tar -zxvf,解压tar.gz包失败的问题解决。

问题描述: 主机上,使用tar -zxvf 解压tar.gz包的时候,出现以下错误: gzip: stdin: not in gzip format tar: Child returned status 1 tar: Error is not recoverable: exiting now 问题办法: 开门见山,…

Liunx tar -zxvf 命令解压失败

使用tar -zxvf 命令解压mysql.tar报错 [rootiZ2ze8f0mv6pvfs1n3rpgaZ mysql]# tar -zxvf mysql.tar gzip: stdin: not in gzip format tar: Child returned status 1 tar: Error is not recoverable: exiting now 解决方案 去掉z参数,使用 tar -xvf 解压正常 […

tar -zxvf是什么意思

先上DJ,先上DJ 含义:使用gzip工具(-z)解压(-x)由参数-f指定的文件,并显示压缩过程中详细信息(-v) 参数含义tarLinux压缩/解压缩命令-z代表gzip,使用gzip工具…

word标题设置级别

想要这样子: 点击标题1,标题1前面就带有级别. 新建word是这样的,没有带级别: 转自:https://blog.csdn.net/xtggbmdk/article/details/82591717 选择多级列表菜单 “2”级的右侧选“标题2” .在标题3的右侧选择标题3