LoRa无线sx1278&LoraWan协议剖析

来源:CSDN

1、整体结构

 

双向传输终端(Class A): Class A 的终端在每次上行后都会紧跟两个短暂的下行接收窗口,以此实现双向传输。传输时隙是由终端在有传输需要时安排,附加一定的随机延时(即ALOHA协议)。这种Class A 操作是最省电的,要求应用在终端上行传输后的很短时间内进行服务器的下行传输。服务器在其他任何时间进行的下行传输都得等终端的下一次上行。

划定接收时隙的双向传输终端(Class B): Class B 的终端会有更多的接收时隙。除了Class A 的随机接收窗口,Class B 设备还会在指定时间打开别的接收窗口。为了让终端可以在指定时间打开接收窗口,终端需要从网关接收时间同步的信标 Beacon。这使得服务器可以知道终端正在监听。

最大化接收时隙的双向传输终端(Class C): Class C 的终端基本是一直打开着接收窗口,只在发送时短暂关闭。Class C 的终端会比 Class A 和 Class B 
更加耗电,但同时从服务器下发给终端的时延也是最短的。

2、接收窗口

说明:

(1) 第一接收窗口的信道,数据速率和启动。

第一接收窗口 RX1 使用的频率和上行频率有关,使用的速率和上行速率有关。RX1 是在上行调制结束后的 RECEIVE_DELAY1 秒打开。上行和 RX1 时隙下行速率的关系是按区域规定,详细描述在[LoRaWAN地区参数]文件中。默认第一窗口的速率是和最后一次上行的速率相同。

(2)第二接收窗口的信道,数据速率和启动

第二接收窗口 RX2 使用一个固定可配置的频率和数据速率,在上行调制结束后的 RECEIVE_DELAY2 秒打开。频率和数据速率可以通过 MAC 命令设置。默认的频率和速率是按区域规定,详细描述在[LoRaWAN地区参数]文件中。

(3)接收窗口的持续时间

接收窗口的长度至少要让终端射频收发器有足够的时间来检测到下行的前导码。

(4)接收方在接收窗口期间的处理

如果在任何一个接收窗口中检测到前导码,射频收发器需要继续激活,直到整个下行帧都解调完毕。如果在第一接收窗口检测到数据帧,且这个数据帧的地址和MIC校验通过确认是给这个终端,那终端就不必开启第二个接收窗口。

(5) 网络发送消息给终端

如果网络想要发一个下行消息给终端,它会精确地在两个接收窗口的起始点发起传输。

(6)接收窗口的重要事项

终端在第一或第二接收窗口收到下行消息后,或者在第二接收窗口阶段,不能再发起另一个上行消息。

3、数据帧格式

MHDR中有MType字段

4、终端入网

为了加入LoRaWAN网络,每个终端需要初始化及激活。

终端的激活有两种方式,一种是空中激活 Over-The-Air Activation (OTAA),当设备部署和重置时使用; 另一种是独立激活 Activation By Personalization (ABP),此时初始化和激活这两步就在一个步骤内完成。

OTAA方式激活:

(1)应用ID(AppEUI) 
AppEUI是一个类似IEEE EUI64的全球唯一ID,标识终端的应用提供者。 
APPEUI在激活流程开始前就存储在终端中。

(2)终端 ID (DevEUI) 
DevEUI 是一个类似IEEE EUI64的全球唯一ID,标识唯一的终端设备。

(3)应用密钥(AppKey) 
AppKey 是由应用程序拥有者分配给终端,很可能是由应用程序指定的根密钥来衍生的,并且受提供者控制。当终端通过空中激活方式加入网络,AppKey用来产生会话密钥NwkSKey和AppSKey,会话密钥分别用来加密和校验网络层和应用层数据。DevNonce 2字节的随机数,用于生成随机的AppSKey和NwkSKey

 

激活后,终端会存储如下信息:设备地址(DevAddr),应用ID(AppEUI),网络会话密钥(NwkSKey),应用会话密钥(AppSKey)。

NwkSKey被终端和网络服务器用来计算和校验所有消息的MIC,以保证数据完整性。也用来对单独MAC的数据消息载荷进行加解密。

AppSKey被终端和网络服务器用来对应用层消息进行加解密。当应用层消息载荷有MIC时,也可以用来计算和校验该应用层MIC。

5、收发数据帧

 

· 帧头中 自适应数据速率 的控制(ADR, ADRACKReq in FCtrl)

LoRa网络允许终端采用任何可能的数据速率。LoRaWAN协议利用该特性来优化固定终端的数据速率。这就是自适应数据速率(Adaptive Data Rate (ADR))。当这个使能时,网络会优化使得尽可能使用最快的数据速率。

如果ADR的位字段有置位,网络就会通过相应的MAC命令来控制终端设备的数据速率。如果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,因为无法帮助提高链路距离。

· 消息应答位及应答流程(ACK in FCtrl)

收到confirmed类型的消息时,接收端要回复一条应答消息(应答位ACK要进行置位)。如果发送者是终端,网络就利用终端发送操作后打开的两个接收窗口之一进行回复。如果发送者是网关,终端就自行决定是否发送应答。 
应答消息只会在收到消息后回复发送,并且不重发。

· 帧挂起位(FPending in FCtrl 只在下行有效)

帧挂起位(FPending)只在下行交互中使用,表示网关还有挂起数据等待下发,需要终端尽快发送上行消息来再打开一个接收窗口。

每个终端有两个计数器跟踪数据帧的个数,一个是上行链路计数器(FCntUp),由终端在每次上行数据给网络服务器时累加;另一个是下行链路计数器(FCntDown),由服务器在每次下行数据给终端时累计。 网络服务器为每个终端跟踪上行帧计数及产生下行帧计数。 终端入网成功后,终端和服务端的上下行帧计数同时置0。 每次发送消息后,发送端与之对应的 FCntUp 或 FCntDown 就会加1。 接收方会同步保存接收数据的帧计数,对比收到的计数值和当前保存的值,如果两者相差小于 MAX_FCNT_GAP (要考虑计数器滚动),接收方就按接收的帧计数更新对应值。如果两者相差大于 MAX_FCNY_GAP 就说明中间丢失了很多数据,这条以及后面的数据就被丢掉。

· 帧可选项(FOptsLen in FCtrl, FOpts) 
FCtrl 字节中的FOptsLen位字段描述了整个帧可选项(FOpts)的字段长度。

FOpts字段存放MAC命令,最长15字节,。

如果FOptsLen为0,则FOpts为空。在FOptsLen非0时,则反之。如果MAC命令在FOpts字段中体现,port0不能用(FPort要么不体现,要么非0)。

MAC命令不能同时出现在FRMPayload和FOpts中,如果出现了,设备丢掉该组数据。

端口字段(FPort)

如果帧载荷字段不为空,端口字段必须体现出来。端口字段有体现时,若FPort的值为0表示FRMPayload只包含了MAC命令; FPort的数值从1到223(0x01..0xDF)都是由应用层使用。 FPort的值从224到255(0xE0..0xFF)是保留用做未来的标准应用拓展。

6、MAC指令

中国 470-510MHz 默认设置

中国 470-510MHz 频段对以下参数提供了一些推荐值。

7、程序异常重传

(1)Uplink Timing Diagram for Confirmed Data Messages 

(2)Downlink Timing for Frame-Pending Messages 

 

(3)Data-Rate Adaptation during Message Retransmissions 

When an end-device attempts the transmission of a “confirmed’ frame toward the network it expects to receive an acknowledgement in one of the subsequent reception slot. In the absence of the acknowledgement it will try to re-transmit the same data again. This re transmission happens on a new frequency channel, but can also happen at a different datarate (preferable lower) than the previous one. It is strongly recommended to adopt the following re-transmission strategy.
The first transmission of the “confirmed” frame happens with a data rate DR 

终端对掉网的判断:由于网络没有广播信道,因此终端对掉网的判断条件就是多次
发包不成功。
a) 当采用确认帧发送时,多次发送数据失败,认为网络掉网,需要重新发起网络
注册流程;目前认为掉网的条件是通过 SF12 在各信道发包一次均不成功;
b) 如果发送失败,功率如果是非最大功率,需要先将功率调到最大功率;
c) 如果发送失败,且功率也是最大功率,则每失败 2 次则调低 1 级速率;
d) 如果速率已经调到最低,且在各信道发包 1 次均失败,则认为掉网;
e) 当采用非确认帧发送时,需要通过 ADRACKReq 机制来判断是否掉网 

8、CLAA修改

(1)CLAA模式

CLAAModeA :CLAA定义的基站工作模式 ,上 下行 同 频 , 482 ~500M
CLAAModeB :CLAA定义的基站工作模式 ,上 下行 同 频 , 470 ~490M
CLAAModeC :CLAA定义的基站工作模式 ,上 下行 同 频 , 490 ~510M
CLAAModeD :CLAA定义的基站工作模式,上下行异频,上行480~490M,

下行500~506M
CLAAModeE :CLAA定义的基站工作模式,上下行异频,上行470~480M,

下行490~496M 

当终端具有多种工作信道模式时,各模式缺省优先级如下: CLAAModeD >
CLAAModeB > CLAAModeE > CLAAModeC > CLAAModeA;终端按照优先
级依次找网;
当网络注册成功后,当前工作信道模式提升为最高优先级,后续掉网后优先采
用该工作信道模式来找网,如果找网失败,再继续降级工作信道模式,重新找。 

(2)CLAA信道设置

 

中国 470-510MHz 信道频率

在中国,无线电管理局SRRC规定了这个频段用于民用表计应用。

470频段需要按照如下信道规划进行部署:

上行 – 从0到95共96个信道,带宽为125KHz,速率从DR0到DR5,使用编码率4/5,从470.3MHz按200KHz递增到489.3KHz

下行 – 从0到47共48个信道,带宽为125KHz,速率从DR0到DR5,使用编码率4/5,从500.3MHz按200KHz递增到509.7KHz。 

CLAAModeD 采用收发异频方式,收发信道均采用 125KHz 带宽。
480M~490M 定义为上行频段,共定义了 48 个 125KHz 信道,中心频点分别为480.3M~489.7M;信道编码为 0~47;
500M~506M 定义为下行频段,共定义了 30 个 125KHz 信道,中心频点分别为500.1M~505.9M;信道编码为 0~29;其中 0~23 个信道作为 ClassA 模式的下行数据发送信道, 24~29 信道作为 ClassB/C 模式的数据发送信道; 

这 48 个信道分为 5 组,每组 2M,前 4 组有 10 个信道,最后 1 组有 8 个信道,每组中有 1 个为缺省信道 

对于 RX2 的缺省信道,选择 12 信道, 502.5MHz。
对于 RX1 的下行信道确定,采用上行信道取余数方法:

下行信道号 = 上行信道号 Mode 24 

 

JoinAccept 消息结构:为了让 EndNode 能快速获取网络信道信息,这里修改下
JoinAccept 的消息结构,删除 CFList 参数,增加信道信息参数 

CHMap 参数指示当前各信道的激活情况,其中 CHMap 从前向后共 6 个 Byte,每个Bit 对应 1 个信道, 0 表示未激活, 1 表示激活: 

CHMap[0]:指示信道 0~7 


CHMap[5]:指示信道 40~47

 

(3)CLAA新增的MAC指令

 

1、CN470M~ 510M 新增 UpdateChInfo MAC 命令定义 

当网络遇到干扰,会进行频率迁移,由于 LoRaGW 有多个信道,按照目前技术实
现,可以进行 4 个信道一起迁移,其他信道依然正常,这时可以通过非迁移信道通知终端,更新网络信道信息 

UpdateChInfo 命令由网络发起请求,终端回应答: 

这样带来一个问题就是对于应用来说,不同 SF 下发包不好控制,因此准备统一下应用
数据帧长。
按照上面能力,将应用层帧长统一为 220;
这样对于 SF7/8 来说,无需分包;对于 SF9 来说,最大为 2 包;对于 SF10/11/12 来
说,最大为 5 包。
因此对于 SF9/10/11/12 下需要实现 SAR 的功能。 

考虑到要同时兼容不支持 SAR 的 Lora 终端,因此不能修改 PayLoad 内容,准备在
Option 中增加帧类型信息: SAR。

当 FHDR 的 Option 头出现 SAR 信息后,表示这是一个 SAR 帧,如果没有出现,表示是一个通常的 LoRa 完整帧。

4、CN470M~ 510M 对 CSMA-CA 算法的实现规范 

LoRaWAN 标准中,终端的信道接入方法是纯 ALOHA 机制,终端不进行信道检测,直接发送,这样随着终端数量增多或发送包数量增多时,多个终端的包在信道上发生碰撞的概率就大大增加。 

为了解决信道争抢问题,目前 WLAN 已经实现了 CSMA-CA 技术, CLAA 借鉴这种机制,要求 CLAA 终端也实现类似的 CSMA-CA 技术,降低信道冲突概率,提高网络信道利用率。
CSMA-CA 算法分两步,第 1 步是对信道进行检测,检测信道忙闲,当信道空闲时进行发送;第 2 步是在信道忙时进行延时退避,延时到后再检测,如果检测还忙,则退避时间加倍。
因此 CSMA-CA 算法主要有两点,一是信道占用检测算法,目前 LoRa 支持 CAD 检测,检测速度较快,可以在 2 Symbol 周期内检测出信道是否占用,检出成功概率大概在 95%以上。二是时间退避算法,计算需要退避的时间周期。
目前业界对 CSMA-CA 研究了多种算法:非坚持,坚持, P-坚持,时延分优先级等;
差异主要是在遇到冲突和空闲的动作上, CLAA 为了简化,先采用非坚持 CSMA-CA 算法。 

CSMA-CA 退避延时算法调整命令: CSMABPDelayAdjust MAC 命令 

说明:LPWA物联网应用站(LPWAP.com)通过公开互联网收集、整理并转载有关LPWA物联网应用解决方案,以供广大LPWA应用开发者和爱好者共同学习交流和参考运用到实际生产生活中。本站所有转载的文章、图片、音频、视频等资料的版权归版权所有人所有并衷心感谢您的付出,由于本站采纳的非本站原创文章及图片等内容无法一一联系确认版权者,如果本网所选内容的文章原创作者认为其作品不宜放在本站,请及时通过以下留言功能通知我们采取适当措施,避免给双方造成不必要的经济损失。如果您希望保留文章在本站,但希望文章末尾提供对作者的致谢或者产品、网站交换链接的,也请将需求写入以下留言栏中,谢谢您的支持。让我们共同努力,打造万物互联的未来美好生活!

您的留言或需求: