全面拆解和构建5G物联网-25:LoRa终端--LoRaWAN协议简介与LoRa WAN终端软件选择

前言:

从本篇文章开始:

从通信节点的角度度看,将从Lra终端对点对通信转到LoRa终端与LoRa网关的通信、LoRa终端LoRa云服务器的通信;

从协议栈的角度看,将从物理层上升到LoRa的MAC层, 即LoRaWAN;

从软件项目的角度看,将由pingpong程序转向Class A-Class C程序。

本文主要探讨,LoRa WAN终端与网关通信所需要知道的一些宏观技术点。


1. 软件工程文件的转型

默认的PingPong软件工程不再使用,必须转到Class A和 Class C的软件工程项目。

主要原因是模拟的PingPong应用程序发送的物理层的裸帧,没有MAC层的头,不符合LoRaWAN网关的设置规范,会被LoRa网管直接丢弃。


2. LoRa与LoRaWAN

LoRa:低功耗无线通信技术

是一种低功耗远程无线通信技术, 它是由法国一家公司Cycleo研发一种创新的半导体技术-LoRa,后面被美国一家公司Semtech(升特)收购.后续由Semtech公司基于这个LoRa技术,开发一种套LoRa通信芯片解决方案. LoRa后续通过LoRa联盟来开始覆盖推广普及。因此狭义的LoRa主要是指LoRa射频层与LoRa物理层。

LoRaWAN:LoRa广域网

LoRaWAN是基于LoRa远距离无线通信技术设计的一套广域网协议,包括MAC层通讯协议和网络系统架构。

如果按协议分层来说,LoRaWAN重点在MAC层,LoRa重点在物理层。

当然,广义上的LoRa也包括LoRaWAN。


3. LoRaWAN与LoRa MAC层

应该说,LoRaWAN(LoRa广域网)的概念比LoRa MAC层更广。LoRaWAN不仅仅包括LoRa MAC层协议,还包括LoRa应用层和LoRa的整个网络架构。


4. LoRAN(LoRa广域网)的网络架构

LoRaWAN的网络实体分为四个部分: 终端节点、网关、LoRaWAN服务器和用户服务器。

  • End Node: 终端节点一般是各类传感器,进行数据采集,开关控制等 。
  • Gateway: LoRa网关,对收集到的节点数据进行封装转发 。
  • NetworkServer: 主要负责上下行数据包的完整性校验。
  • ApplicationServer: 主要负责OTAA设备的入网激活,应用数据的加解密 。
  • CustomerServer: 从AS中接收来自节点的数据,进行业务逻辑处理,通过AS提供的API接口向节点发送数据。

后续的几篇文章,依然把重点放在终端节点上,但终端节点的软件协议需支持LoRa MAC层协议和应用层协议,而不仅仅是物理层协议。这样的LoRa终端,称为LoRaWAN终端。


5. LoRaWAN终端设备分类

根据协议规定有, LoWAN的终端分为Class A/B/C 三类终端设备,这三类设备基本覆盖了物联网所有的应用场景。

CLASSA/B/C的应用和区别可见下表:


6. LoRa物理层的帧结构

遵循此层的消息格式,可以实现LoRa终端点对点的通信。

这个结构需要深入探究,因为这涉及到LoRa终端之间是否能够通信、LoRa终端是否能够与LoRa进行通信的关键。

物理层的帧结构是有LoRa的射频芯片完成的,软件治只能设置模式。

(1)Preamble:用于保持接收机发射机的数据流同步。

Preamble的每个符号是0和1的交替,即0101

LoRa SX1261/2 芯片默认的符号个数是12,即0101 0101 0101,LoRaWAN中默认的符号符号个数是8,即0101 0101。

前导长度是一个可以通过编程来设置的变量,所以前导码的长度可以扩展。接收机的前导码长度应与发射机一致。如果前导码长度为未知或可能会发生变化,应将接收机的前导码长度设置为最大值。????接收的前导码小于还是大于发射机?

注意:这里的长度的单位是bit,而不是byte。即多少位。

(2)物理层头的类型

LoRa物理层帧的头包括两种模式,显性模式和隐形模式。这是由程序设定的。

隐性模式:没有物理帧的头部信息,即Preamble之后,直接是MAC层的帧。因此这种模式,物理层Payload的长度必须是确定的固定的,且需要通信的双方事先约定好,如果实际数据帧的长度不足预定的长度,需要添加填充域。

显性模式:包含物理层的帧头部分。LoRaWAN使用的是显性模式,

(3)显性模式下物理层的P_Header

包含的信息

  • Payload的字节数:

软件通过如下的寄存器告诉射频芯片,需要发送的物理层的payload的长度:

数据净荷的最大长度为255字节。

在隐性模式下,需要通信双方约定数据净荷的长度。

发送端,一旦已发送的数据帧的长度等于设定的长度,就停止发送,添加CRC.

接受端,一旦接收到的数据帧的长度等于设定的长度,就停止接收,检查CRC.

因此,如果发送的数据帧的长度与接收端的预先设定不一致,就会导致出错。

在显性模式下,不需要通信双方约定数据净荷的长度。

发送端,paylaod的实际数据长度,会添加到P_Header中,并通过此域把数据净荷的长度信息传递给接收端。

接收端,从P_Header中获取数据净荷的长度,并根据此长度域进行数据净荷的接收。

增加了通信双方的适应性。

  • 数据净荷的前向纠错码的编码率CR(Coding Rate)

FEC编码的冗余部分允许接收方检测可能出现在信息任何地方的有限个差错,并且通常可以纠正这些差错而不用重传。

FEC使接收方有能力纠正错误而不需要反向请求数据重传,不过这是以一个固定的更高转发的带宽为代价的。

因此FEC被应用在重传开销巨大或者不可能重传的情况下,比如单向通信链接的时候以及以多路广播的形式传送数据给多个接收方时。FEC信息通常被添加到大量存储设备中,以保障受损数据的恢复。FEC也被广泛应用在调制解调中。

添加的冗余比特越多,就纠错的能力越强,但需要的带宽就越大,因此冗余编码率会影响信息传输所需要的带宽。

冗余编码率是通过软件设定的:

4/5表示:有效数据是4比特,编码后是5比特。编码率为0.8,或者说溢码率是1.25.

注意:

纠错编码是LoRa modem的功能,不是物理帧头的设置。

在隐性模式下,没有物理层的帧头信息,只能通过通信双方人为的约定,如果通信双方设置不一样,这会导致译码错误。

在显性模式下,有物理层的帧头信息承载发送端端的纠错编码的编码率。接收端就可以根据此域对数据净荷进行纠错性解码。不需要通信双方提前人为约定了。

增加了通信双方的适应性。

  • 是否打开Payload CRC。

对Payload的CRC校验,2个字节。这个CRC是由射频芯片计算和添加,不是由软件来完成的。

但是否需要添加CRC是由软件设置的,即Payload CRC的使能是由软件控制的。

需要添加CRC是由软件设置的,即Payload CRC的使能是由软件控制的。

在隐性模式下,没有物理层的帧头信息,就需要通信双方约定,数据帧最后的2个字节是否是CRC。

在显性模式下,可以通过物理层的帧头,传递此信息,不需要人为的预先约定。

增加了通信双方的适应性。

(4)P_Header CRC

对Header域进行单独的CRC校验,确保物理层帧头部的正确性,当然,不包括Preamble。

在隐性模式下,不需要该域,因为隐性模式下,没有物理层的帧头信息,因此就没有物理层帧头的CRC.

在显性模式下,是由LoRa的射频芯片自动添加的,软件不可设置。

(5)Payload

物理层的真正发送的数据,在LoRaWAN协议中,该payload就是LoRaWAN的MAC层帧。

(6)Payload CRC

对Payload的CRC校验,2个字节。这个CRC是由射频芯片计算和添加,不是由软件来完成的。


7. LoRaWAN MAC层的帧结构

遵循此层的消息格式,可以实现LoRa终端与网关之间的通信(网关路由合法的LoRaWAN的消息净荷)

MAC层的帧结构是由LoRaWAN Class A-C的终端软件程序完成的。整个MAC的帧作为物理层帧的payload存在。

MAC有MAC层的帧头MHDR+MAC payload + MIC组成。

(1)MHDR:MAC层的帧头(7..0)

  • MType:LoRa消息的类型(7..5)

LoRa消息的类型分类:

a) Join request和Join Accept:是终端请求加入到LoRa网络中的消息。

b) Unconfirmed Data up & down:这种是单向,不需确认的消息, 没有确认与超时重发机制。

c) confirmed Data up & down:这种消息是需要确认回复的,如果没有回复,就会启动超时重发

注意:

收到confirmed类型的消息时,接收者要回复一条设置了确认位的消息(ACK 设为1)。

如果发送者是终端,网络就把确认消息发送到该终端打开的接收窗口。

如果发送者是网关,确认消息的发送由终端就自行判断。

d) RFU, Proprietary:保留或自定义

  • RFU(Reserved for future use):保留域(4..2)
  • Major:协议版本(1..0)

(2)MAC payload:MAC层净荷

MAC净荷,就是LoRa WAN各种类型消息的实体。

(3)MIC:一致性校验码(安全性加密功能)

LoRaWAN中的MIC是CMAC的四个最低有效字节,这一点在LoRaWAN协议中有说明:

The MIC is calculated as follows [RFC4493]:

msg = MHDR | FHDR | FPort | FRMPayload
cmac = aes128_cmac(NwkSKey, B 0 | msg)

MIC = cmac[0..3]

 CMAC则是AES中的一个算法,开发人员直接调用AES库函数即可,而AES在openssl中有实现。

7. LoRaWAN协议层的消息结构

遵循此层的消息格式,可以实现LoRa终端与LoRa服务器之间的通信。

所谓LoRaWAN协议层的消息,在上图中,就是指“数据帧”

LoRaWAN协议层的消息组成:

(1)FHDR

  • DevAddr:4字节的终端设备的地址

表明该消息的终端标识(双向,LoRa不需要设备地址)

  • FCTR:1个字节的消息控制

  • FCnt:
  • FOpts:消息操作类型

(2)FPort:上层应用程协议类型,类似与TCP/IP协议中的端口号。

0:表示FRMPayload中只有MAC命令。

1…223(0x01…0xDF)范围内的FPort由应用指定;

FPort = 224 专门为LoRaWAN Mac层测试协议服务。

(3)FRM Payload:应用层协议数据。

8. LoRaWAN消息交互


参考:

LoRa WAN的官方协议

LoRa WAN协议中文翻译:https://legacy.gitbook.com/book/twowinter/lorawan-specification_zh_cn/details

LoRa及LoRaWAN简介: https://blog.csdn.net/silent123go/article/details/100109149

猜你喜欢

转载自blog.csdn.net/HiWangWenBing/article/details/108270054