摘要
因项目的需要而接触Lora,为什么会有Lora这样一门技术呢,大多应用在什么样的场景中?故此学习了一番,通过查找各方资源,总结了一下,如若有什么错误的地方,望各位读者批评指正。
简介
LoRa是什么?LoRa是LongRange的简称,是应用在物联网的低功耗广域网的一种传输技术。具有远距离通讯、低功耗等特点,代价就是传输速率,速率越低,传输的距离就会越远。基于线性调频扩频技术,保持了FSK调制相同的低功耗特性,额外增加了通信距离。因此使用LoRa技术,能够以低的发射功率获得更远的传输距离。
1、应用举例
LoRa是美国Semtech公司采用和推广的一种基于扩频技术的超远距离无线技术。主要在全球免费频段运行,包括433/470/868/915MHz。由于LoRa技术具有远距离、低功耗、低成本、多节点的特性。多数应用在智能建筑、智慧城市等应用领域。
例如智能水表的应用就很好的利用了LoRa技术。
下面就来介绍一下智能水表的抄表,大致分为三个部分:水表、LoRa模块、网关。
水表的功能是正转流量统计、倒转流量统计、磁干扰检测、应急关阀和无线传输数据。LoRa模块通过与水表的对接将水表采集的数据进行转发。LoRa网关的主要工作是接收服务指令,对水表进行管理、数据采集以及上传,主要作用是用于读取水表数据,水表收到抄表指令后会将采集的数据返回到网关中,网关再将数据返回到服务器,从而实现无线抄表的流程。大致的通讯过程见下图(引用)。
2、工作频段
LoRa在中国部署的最佳免费频段有两个:CN779-787(最大发射功率仅10dBm)、CN470-510(最大发射功率可达17dBm)。
96路上行,470.3 MHz 每 200 kHz递增一个到 489.3 MHz,SF7~SF12 4/5 48路下行,500.3 MHz 每 200 kHz递增一个到 509.7 MHz,SF7~SF12 4/5
3、扩频技术
由于LoRa采用了线性扩频技术,不同传输速率的通信之间不会互相干扰。网络服务器通过一种速率自适应ADR方案控制终端设备的传输速率。
Chirp的特点是信号的频率以一定的规律变化,而FSK的信号只会在两个频点切换。Chirp的信号时域图如下(引用):
这种线性扩频技术能极大限度地共享相同的频道资源。每套系统都具有与众不同的扩展序列来减少来自其他设备的干扰,只有具有与发射者相同扩展序列的接收者才可以重组或压缩扩频传输信号来获得其中加载的有效信息。即使是多套扩频设备使用同一个频道在同一地区进行信号传输,只要采用不同的扩频序列,就不会相互干扰。
LoRa调制的核心思想是使用这种频率的变化的模式来调制基带信号,Chirp变化的速率称之为扩频因子。扩频因子越大,传输的距离越远,代价是数据速率。
4、数据通讯
LoRaWAN网络架构是一个典型的星形拓扑结构,在这个网络架构中,LoRa网关是一个透明传输的中继,连接终端设备和服务器。
4.1入网过程
LoRa设备支持两种入网方式,OTAA(Over-The-Air Activation)无线激活和ABP(Activation By Personaliztion)手动激活。
OTAA入网:
入网的过程中涉及两类消息,join-request、join-accept;
join-request入网请求由终端设备发起,在设备发起请求前,需要配置好设备的三要素(AppEUI、DevEUI、AppKey),由服务端开发商提供,其中AppEUI是应用的EUI,DevEUI是节点的长地址,AppKey服务器与终端设备事先存好,用于对join-accept消息解密使用。
入网请求消息格式如下:
| MHDR | APPEUI | DevEUI | DevNonce | MIC |
| ----- | ------ | ------ | -------- | ----- |
| 1字节 | 8字节 | 8字节 | 2字节 | 4字节 |
消息中的另外两个字段MHDR是数据包头,包含了消息的类型,从包头中可以知道这是一个join-request消息。DevNone是一个设备端产生的随机数,每次入网请求的时候这个随机数都会改变,保存在服务器中,防止重放机制,当检测到某次的值在历史值中会判定为发生安全问题,就会拒绝本次的join请求。
同意入网请求消息格式如下:
| MHDR | AppNonce | NetID | DevAddr | DLSettings | RxDelay | CFList |
| ----- | -------- | ----- | ------- | ---------- | ------- | -------- |
| 1字节 | 3字节 | 3字节 | 4字节 | 1字节 | 1字节 | 0/16字节 |
服务器收到join-request入网请求的消息后在服务器端会产生一个随机的AppNone,与NetID、DevAddr一起通过join-accept消息下发给终端设备。 注意的是下行的join-accept消息数据是加密的,需要存于终端与服务器两边的AppKey对其进行解密。 保存在服务端的DevNone与解密后的AppNone和NetID经过加密计算后产生NwkSkey和AppSkey两个会话密钥,用于网络通信的安全。 另外,DLSettings字段是设置RX1和RX2的下行接收串口的速率的,CFList是网络的频率信道列表选项。
ABP入网:
ABP入网是将DevAddr、NwkSkey和AppSkey直接存放在终端设备中,跳过了join-accept的过程。相对安全性比较低。
4.2数据收发
入网成功后,终端设备就可以向服务器进行数据的收发,支持的数据帧类型有两种Confirmed与Unconfirmed,前者需要应答,后者不需要应答。
在数据帧头中含有自适应数据速率控制字段ADR,ADR被置位,网络就会通过对应的MAC命令来控制设备的数据速率。ADR位可以通过终端以及网络来设置或取消。能帮助终端延长电池寿命和扩大网络容量。
终端发送confirmed类型的消息,接收端收到消息后需要回复一条ACK应答消息,且ACK置位。
在下行的数据消息中有个帧挂起位FPending,帧挂起位为1表示网关还有挂起数据等待下发,需要终端尽快发送上行数据来打开一个接收窗口。
每个终端设备都有两个计数器,一个上行链路计数器(由终端在每次上行数据给网络服务器时累加)和一个下行链路计数器(由服务器每次下行数据给终端设备时累加)。设备入网成功后,帧计数器都会置0。每次发送消息后,FCntUp或FCntDown都会加1,接收方会同步保存数据的帧计数。
5、物理帧结构
LoRa的数据报文分为两种:上行数据报文与下行数据报文。上行的数据报文是从节点设备将传感器数据经过网关传到服务端。下行是将服务端的配置经过网关传输到设备中,下行仅仅是作为一种回复。
下面分别是上行数据报文与下行数据报文:
Uplink PHY:
| Preamble | PHDR | PHDR_CRC | PHYPayload | CRC |
| -------- | ---- | -------- | ---------- | ---- |
Downlink PHY:
| Preamble | PHDR | PHDR_CRC | PHYPayload |
| -------- | ---- | -------- | ---------- |
图3:上下行报文
其中Preamble前导码的值为0x34; PHYPayload是用户数据段; 其他的字段由lora radio硬件填充;
Radio PHY layer:
图4:Radio PHY layer
CRC:CRC校验位,保护数据的有效性,只出现在上行消息中 ;
PHDR:LoRa物理帧头; PHDR_CRC:报头校验码; PHYPayload:用户数据段
MAC层(PHYPayload)
图5:MAC层
MHDR:MAC头; MACPayload的长度与区域有关。 MIC:消息一致码
MAC头(MHDR)
图6:MAC头
MType表示消息类型; RFU:预留字段; Major:表示的是LoRaWAN主版本号;
消息类型有以下几种:
MACPayload
图7:MACPayload
Fport:端口,Fport=0表示的是FRMPayload中只有MAC命令。 FRMPayload:负载数据。 FHDR:帧头
FHDR由终端短址DevAddr、FCtrl控制字段、FCnt报文计数器、以及用来传输MAC命令的配置字段Fopts组成。Fopts(0--15Bytes)。
FHDR
图8:FHDR
上行报文的控制字段FCtrl:
下行报文的控制字段FCtrl:
ADR:数据自适应速率,等于1表示会根据环境对网络速率进行优化,等于0,表示自使用关闭,需要用户配置好。 ADRACKReq:ADR请求响应位,如果 ADR_ACK_LIMIT (ADR_ACK_CNT >=ADR_ACK_LIMIT)次上行之后没有收到下行回复,就会设置ADR 请求响应位(将 ADRACKReq 设为1)。 ACK:消息确认位。 FPending:只出现在下行的消息中,表示帧挂起,网关有数据等待下发。 FOptslen:表示的是FOpts的实际长度,等于0,表示FOpts字段为空,不等于0,表示FOpts中存放的是MAC指令。MAC指令是不能同时出现在FOpts与FRAMPayload中的。 RFU:Class B与Class A上行数据报文一样,使用了未使用的RFU字段。
协议详解
上行报文MACPayload:
图9:上行报文MACPayload
入网请求Join-Request:
图10:Join-Request
下行报文MACPayload:
图11:下行MACPayload
同意入网Join-accept:
图12:Join-accept
6、终端设备类型
图13:设备类型
A类设备的上下行传输:
图14:A类设备工作模型
双向通信终端设备,允许双向通信,每一个终端设备上行传输的时候会伴随着两个下行的接收窗口,终端设备的传输槽是基于其自身通信需求,其微调是基于一个随机的时间基准(ALOHA协议),开窗时间误差要求为+/- 20us。A类设备的功耗最低,设备在上行数据的时候,服务器能迅速地进行下行通信。任何时候,服务器的下行数据通信都只能在上行数据之后。
B类设备的上下行传输:
备工作模型
具有预设接收槽的双向通信终端设备,在预设时间中开放多余的接收窗口,为了实现这一目的,设备会同步从网关接收beacon信号,通过Beacon将基站与模块的时间进行同步。能使服务器知晓终端设备正在接收数据。
C类设备的上下行传输:
图16:C类设备工作模型
具有最大接收槽的双向通信终端设备,持续性的开放接收窗口,只在传输时关闭。
7、参考资源
参考文献:
[1]. 《lorawantm_specification_-v1.1.pdf》
[2]. 《lorawan_regional_parameters_v1.0.3reva_0.pdf》
图表来源:
文章来源:芯片开放社区
文章链接:https://occ.t-head.cn/community/post/detail?spm=a2cl5.14300636.0.0.1b87180flWxVN5&id=656805496396709888