目录
1、什么是LoRa和LoRaWAN
1.1 LoRa和LoRaWAN的区别
1.2 LoRa扩频技术介绍
1.2.1 什么是扩频技术
1.2.2 扩频技术的作用
1.2.3 扩频技术常用术语介绍
1.3 LoRaWAN帧结构
1.4 硬件方案介绍
1.4.1 终端设备方案
1.4.2 网关方案
2、LoRaWAN网络架构
3、LoRaWAN终端设备分类
4、LoRaWAN终端设备入网
4.1 OTAA(Over-The-Air Activation)
4.2 ABP(Activation by Personalization)
5、LoRaWAN终端设备数据传输
5.1 数据上下行介绍
5.2 数据传输的一些基本规定
6、ADR机制介绍
6.1 什么是ADR
6.2 ADR有什么用
6.3 ADR如何工作
7、CAD机制介绍
7.1 空中唤醒技术
7.2 CAD工作原理
7.2.1 CAD工作流程
7.2.2 CAD周期计算
7.2.3 前导码时间计算
8、MAC命令介绍
9、区域参数
LoRa是低功耗广域网通信技术中的一种,是Semtech公司专有的一种基于扩频技术的超远距离无线传输技术。 LoRaWAN是为LoRa远距离通信网络设计的一套通讯协议和系统架构。它是一种媒体访问控制(MAC)层协议。
LoRa = PHY Layer
LoRaWAN = MAC Layer
通过注入一个更高频信号将基带信号扩展到更宽的频带,它的基本特点是其传输信息所用信号的带宽远大于信息本身的带宽。
根据香农公式:C = B × log2(1 + S/N)。 式中,C是信道容量,单位为比特每秒(bps),它是在理论上可接受的误码率(BER)下所允许的最大数据速率;B是要求的信道带宽,单位是Hz;S/N是信号噪声功率比。C表示通信信道所允许的信息量,也表示了所希望得到的性能。 从上式可以看出,通过提高信号带宽(B)可以维持或提高通信的性能(C),甚至信号的功率可以低于噪底(表现为抗干扰强、传输更远)。
带宽(BandWidth)
每个信道的上限频率和下限频率之差。增加BW,可以提高有效数据速率以缩短传输时间,但是以牺牲部分接受灵敏度为代价。增加带宽为什么会牺牲信号灵敏度?
SNR(信噪比)
信号和噪声的比值,计量单位是dB,其计算方法是10lg(PS/PN)。根据计算公式可知,SNR小于0时表示信号功率小于噪声功率,SNR大于0时表示信号功率大于噪声功率。
RSSI(接收信号强度指示)
即接收灵敏度(单位为dBm)。在纯净环境下,RSSI值与距离是一个非线性曲线的关系,所以路测时在一定距离内RSSI值有参考价值,过距离后基本没有参考价值。
扩频因子(SF)
扩频调制技术采用多个信息码片来代表有效负载信息的每个位。扩频信息的发送速度称为符号速率(Rs),而码片速率与标称符号速率之间的比值即为扩频因子,其表示每个信息位发送的符号数量。Rs = BW/2^SF。
编码率(CR)
编码率,是数据流中有用部分的比例。也就是说,如果编码率是k/n,则对每k位有用信息,编码器总共产生n位的数据,其中n-k是多余的。LoRa采用循环纠错编码进行前向错误检测与纠错。
EIRP(Effective Isotropic Radiated Power)
有效全向辐射功率。在LoRa上,每个地区规定的最大EIRP值是不一样的,EIRP = P(LoRa芯片发送功率) + G(天线增益) – Loss(损耗)。
LoRa有两种包格式,显性模式和隐形模式。显性模式下有Header部分,隐形模式没有。
Preamble:用于保持接收机与输入的数据流同步。默认是12个符号长度,LoRaWAN中使用8个符号长度。前导长度是一个可以通过编程来设置的变量,所以前导码的长度可以扩展。接收机的前导码长度应与发射机一致。如果前导码长度为未知或可能会发生变化,应将接收机的前导码长度设置为最大值。可以通过设置前导码值进行地址过滤,实现分组通信。
Header:包含的信息有,Payload的字节数、编码率、是否打开Payload CRC。LoRaWAN中使用显性模式,隐形模式下这三个内容需要手动在通讯的两端配置。
Payload:真正发送的数据。
Payload CRC:对Payload的CRC校验,2个字节。
注意:收到confirmed类型的消息时,接收者要回复一条设置了确认位的消息(ACK 设为1)。如果发送者是终端,网络就把确认消息发送到该终端打开的接收窗口。如果发送者是网关,确认消息的发送由终端就自行判断。
注意:
帧挂起位(FPending):只在下行交互中使用,表示网关还有数据挂起等待下发,此时要求终端尽快发送上行消息从而再打开接收窗口接收数据。
FPort:0表示FRMPayload中只有MAC命令。1…223(0x01…0xDF)范围内的FPort由应用指定; FPort = 224 专门为LoRaWAN Mac层测试协议服务。
网关采用SX1301+SX1255/57的方案
SX125X是射频前端芯片,它负责I/Q(In-phase / Quadrature,同相正交数字信号)和无线电模拟信号之间的转换。1255支持的频段为400~510M,1257为862~1020M。
SX1301由2个MCU和ASIC(ApplicationSpecific Integrated Circuit,专用集成电路)的组成。主要部件包括:
射频MCU:该MCU通过SPI总线连接2片SX125x,主要负责实时自动增益控制、射频校准和收发切换。
数据MCU:该MCU负责分配8个LoRa调制解调器给多个通道,它仲裁数据包的机制包括速率、通道、射频和信号强度。
IF0~IF7通道:它们的带宽固定为125kHz,每个通道可以设置中心频率,每个通道可以接收SF7~SF12共6种速率的LoRa信号。理论上可以同时处理6*8=48个终端的上行数据,但是它只有8路LoRa解调器,所以一个通道(IF0~IF7)接收了6个正交数据包,解调器也只负责处理其中一个。
IF8通道:带宽支持125 / 250 / 500kHz,用于基站之间的高速通信。
IF9通道:收发(G)FSK信号,LoRaWAN在欧洲地区使用了该通道。
LoRaWAN的网络实体分为四个部分: 终端节点、网关、LoRaWAN服务器和用户服务器。
End Node: 终端节点一般是各类传感器,进行数据采集,开关控制等 。
Gateway: LoRa网关,对收集到的节点数据进行封装转发 。
NetworkServer: 主要负责上下行数据包的完整性校验。
ApplicationServer: 主要负责OTAA设备的入网激活,应用数据的加解密 。
CustomerServer: 从AS中接收来自节点的数据,进行业务逻辑处理,通过AS提供的API接口向节点发送数据。
根据协议规定有 Class A/B/C 三类终端设备,这三类设备基本覆盖了物联网所有的应用场景。CLASSA/B/C的应用和区别可见下表
入网请求包格式
入网接收包格式
这种方法比较简单粗暴,直接配置 DevAddr,NwkSKey,AppSKey 这三个LoRaWAN最终通讯的参数,不再需要join流程。在这种情况下,这个设备是可以直接发应用数据的。
这是Class A 上下行的时序图,目前接收窗口RX1一般是在上行后1秒开始,接收窗口RX2是在上行后2秒开始。
Class C 和 A 基本是相同的,只是在 Class A 休眠的期间,它都打开了接收窗口RX2
Class B 的时隙则复杂一些,它有一个同步时隙beacon,还有一个固定周期的接收窗口ping时隙。如这个示例中,beacon周期为128秒,ping周期为32秒
LoRa网络允许终端设备逐一使用所有可用的数据速率。LoRaWAN协议根据该特性对静态终端的数据速率进行调整优化,这就是数据速率自适应(ADR)。
ADR可用时,网络会对速率进行优化,使其使用的数据速率尽可能快。这样可以延长终端的电池寿命、充分利用网络带宽。
如果终端的数据速率经过网络优化比最低速率大,那节点就要定期检查保证服务器仍然能够收到上传的数据。
终端上行的帧计数器每递增一次(重传时计数器不递增)的同时,设备的 ADR_ACK_CNT 计数器也递增。如果 ADR_ACK_LIMIT (ADR_ACK_CNT >= ADR_ACK_LIMIT)次上行之后没有收到下行回复,就会设置 ADR 请求响应位(将 ADRACKReq 设为1)。此时要求网络在接下来的 ADR_ACK_DELAY 次上行之内做出响应,在任何一次上行后收到下行数据,节点都会重置计数器 ADR_ACK_CNT。在此期间的下行数据不需设置ACK位,因为终端在等待接收期间收到任何应答都表示网关还能接收来自该设备的上行数据。如果在接下来 ADR_ACK_DELAY 次之内(比如:总共发送次数 ADR_ACK_LIMIT + ADR_ACK_DELAY)没有收到回复,就切换到更低的数据速率上,以获得更远的射频传输距离,并重复上述过程。终端设备每达到 ADR_ACK_DELAY 就会再次降低自己的数据速率。如果设备正在使用默认的数据速率就不再设置 ADRACKReq ,这种情况下传输距离已经最大,任何操作都不会有改善。
在无线传感网络设计中,往往大部分的无线收发机节点都需要低功耗处理。为了降低功耗,只有通过减少无用的工作时间。在大多数的物联网应用中,无线通信时,射频部分大多数时间都处在接收状态,也是主要的能量消耗所在。而当在整个无线网络中数据量较少,但是节点又要随时准备接收数据。理想状态是,当有数据需要接收时,节点处于接收状态,无信息接收时,节点处于睡眠状态,这就需要空中唤醒技术。
空中唤醒从现象上看,好像是发射机把接收机从睡眠中唤醒,实则不然,其实是接收机周期性自动醒来,查看空中有没有呼叫信号,如果没有,则继续睡眠;如果有,则被唤醒进入接收状态。因此,在空中没有呼叫信号时,接收机平均功耗较低。
但是如何发现呼叫信号,传统的做法是通过设定RSSI阈值来判断,只有信号强度足够时才认为有效,唤醒节点,否则相反。随着扩频调制技术的应用,人们在确定可能低于接收机底噪声的信号是否已经使用信道时,面临重重挑战。这种情况下,使用RSSI无疑是行不通的。为了解决这个问题,可使用信道活动检测器来检测信号。
从机设置好频率和扩频因子,开启CAD模式,当有匹配(相同的频率和扩频因子)的信号到来时,就会产生CADDetect中断,CADDone也会产生(无论是否有信号到来,都会产生CADDone中断)。如果检测到CADDetect中断说明有信号要接收,从机切换成接收模式接收数据,否则清除中断标志,等待下次检测。
发送方的前导码时间要大于CAD整个周期,这样才能保证接收方正常接收数据。CAD接收时间:Trec=(2^SF+32)/BW,整个CAD周期:Tcad=1.85*Trec。
Tpreamble=(Npreamble+4.25)*Tsym
Tsym=1/Rs
Rs=BW/(2^SF)
当BW=125kHz,SF=7,Tpreamble=12.544ms
网络管理时会在网络服务器和终端MAC层之间传输一系列MAC命令。MAC层命令对应用、应用服务器以及终端设备上的应用永不可见。
一帧数据中可以包含任何MAC命令序列,MAC命令既可以放在FOpts中和正常数据一起发送;也可以放在FRMPayload中单独发送,此时FPort = 0,但不能同时在两个字段携带MAC命令。放在FOpts中的MAC命令不加密,并且不能超过15个字节。放在FRMPayload中的MAC命令必须加密,同时不能超过FRMPayload的最大长度。
一条MAC命令由一个字节的命令ID(CID)和特定的命令序列组成,命令序列可以是空。常见命令如下表所示
注意:第一个接收窗口(RX1)使用的频率、数据速率与上行传输时使用的频率、数据速率存在映射关系。第二个窗口根据每个地区定义有一个默认值,可以通过MAC命令修改。