LoRa——LoRa无线技术分析

一、概述

目前国内物联网无线技术中NB-IoT(-130dBm),LTE(-110dBm)和LoRa(-142.5dBm)应用较多。LoRa 的“接收灵敏度”在目前民用无线通信技术中排第一,以常用的 125kHz/SF12为例,它可以达到 -142.5dBm。

二、信道活动检测(CAD)

Lora数据包由三个部分组成部分:前导码、可选报头、数据有效负载:

LoRa使用信道检测器来检测其他LoRa信号,流程如下图:

信道活动检测模式旨在以尽可能高的功耗效率检测无线信道上的LoRa前导码。在CAD模式下,SX1276/77/78快速扫描频段,以检测LoRa数据包前导码。

在CAD过程中,将会执行以下操作:

  • PLL被锁定。
  • 无线接收机从信道获取数据的LoRa前导码符号。在此期间的电流消耗对应指定的Rx模式电流。
  • 无线接收机及PLL被关闭,调制解调器数字处理开始执行。
  • 调制解调器搜索芯片所获取样本与理想前导码波形之间的关联关系。建立这样的关联关系所需的时间仅略小于一个符号          周期。在此期间,电流消耗大幅度减少。
  • 完成计算后,调制解调器产生CadDone中断信号。如果关联成功,则会同时产生CadDetected信号。
  • 芯片恢复到待机模式。
  • 如果发现前导码,清除中断,然后将芯片设置为Rx单一或连续模式,从而开始接收数据。

信道活动检测时长取决于使用的LoRa调制设置。下图针对特定配置显示了典型CAD检测时长,该时长为LoRa符号周期的倍数。CAD检测时间内,芯片在(2SF+32)/BW秒中处于接收模式,其余时间则处于低功耗状态。

前导码发送所需时间计算如下:

https://img-blog.csdn.net/20180715102909562?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE1MzkxODg5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70

Rs为速率,BW为带宽,SF表示扩频因子,Ts为发一个symbol的时间,Rs为速率,Tpreamble发送前导码所需的总时间,npreamble表示已设定的前导码长度大小,Tsym为发每个preamble symbol的时间。

三、LoRa数据发送

在发送模式下,仅在需要发送数据包数据的时候才会启动射频、PLL和PA模块,可以减少功耗。如下图为数据发送流程:

从上图可以看出,LoRa发送前一直处于待机状态,在初始化Tx模块后,将待发送数据(Payload)写入FIFO,然后切换到发送状态将数据通过LoRa调制成信号发送出去,等到发送完成后,会产生TxDone中断,同时再次切换为待机状态,完成一个发送流程。

需要注意:

  1. 静态配置寄存器只有在睡眠、待机模式才可写。
  2. LoRa的FIFO只有在待机模式下才可写。
  3. 通过发送Tx模式请求,开始数据的发送。
  4. 发送操作完成后,可手动将设备设为睡眠模式,或者重新向FIFO写入数据,以便稍后再次进行Tx操作。

LoRa发送数据写入FIFO数据缓存要将数据包数据写入FIFO数据缓存,用户必须:

  1. FifoPtrAddr设置为FifoTxPtrBase
  2. PayloadLength字节写入FIFO (RegFifo)。

四、LoRa数据接收

LoRa接收有两种模式:

  • 单一接收
  • 连续接收

如下图数据接收流程:

单一接收模式:

在这种模式下,调制解调器在给定的时间窗口内搜索前导码。如果在该时间窗口结束时还未找到前导码,则芯片会产生RxTimeout中断信号并切换回待机模式。时间窗口长度(以符号计)由RegSymbTimeout寄存器定义,必须为4(调制解调器获取前导码锁的最短时间)到1023个符号。缺省值为5。如果在时间窗口内未发现前导码,则会产生RxTimeout中断信号, 同时芯片切换回待机模式。

在有效负载结束时,如果负载CRC无效,则会产生RxDone中断信号及PayloadCrcError中断信号。然而,即使CRC无效,仍然可以在FIFO数据缓存中写入数据,以便后续进行处理。RxDone中断产生后,芯片切换回待机模式。

RxDoneRxTimeout中断信号产生时,调制解调器也会自动回到待机模式。因此,只有在数据包到达时间窗口为已知的情况下才会使用RX单一接收模式。而在其他情况下,应使用RX连续模式。

在RX单一模式下,接收到数据包后,应立即关闭PLL和射频模块,以降低功耗。流程如下:

  1. FifoAddrPtr设置为FifoRxBaseAddr
  2. 静态配置寄存器在睡眠模式、待机模式或FSRx模式下均可写入数据。
  3. 通过选择RX单一操作模式,可以启动单一数据包接收操作。
  4. 接收机等待接收有效前导码。接收到有效前导码后,接收通路增益即刻被设定。随后将接收到由ValidHeader中断信号表示的有效显式报头后,开始数据包接收。数据包接收完毕后,产生RxDone中断信号。最后,芯片自动恢复到待机模式,以减少功耗。
  5. 应检查接收机状态寄存器PayloadCrcError,以保证数据包有效负载的完整性。
  6. 如果接收到有效的数据包,则应该读取FIFO数据缓存中的数据(见下文的有效负载数据提取)。如果后续需要触发单一数据包接收过程,则应该重选RX单一操作模式,以便再次启动接收程序——务必将SPI指针(FifoAddrPtr)重新调整到缓存的接收基地址(FifoRxBaseAddr)。

在连续接收模式下,调制解调器会持续扫描信道,以搜索前导码。每当检测到前导码时,调制解调器都会在收到数据包前对该前导码进行检测及跟踪,然后继续等待检测下一前导码。

如果前导码长度超过寄存器RegPreambleMsbRegPreambleLsb设定的预计值(按照符号周期测量),则前导码会被丢弃,并重新开始前导码搜索。但在这种场景不会产生中断标志。与单一Rx模式相反,在连续Rx模式下,当产生超时中断时,设备不会进入待机模式。这时, 用户必须在设备继续等待有效前导码的同时直接清除中断信号。

注意:被解调字节是按照接收序列写入数据缓存区的。换言之,新数据包的第一个字节会在上一个数据包的最后一个字节之后立即写入。在这种模式下,接收地址指针将不会重置。因此,关联微控制器MCU必须对地址指针进行处理,以保证FIFO数据缓存不会溢出。

在连续模式下,被接收数据包的处理序列如下:

  1. 在睡眠或待机模式下,选择RXCONT模式。
  2. 收到有效报头之后,紧接着会产生RxDone中断。芯片一直处于RXCONT模式,等待下一个LoRaTM数据包。
  3. 检查PayloadCrcError标志,以验证数据包完整性。
  4. 如果数据包被正确接收,则可以读取FIFO数据缓存。
  5. 接收过程(步骤2-4)可重复,或在需要的情况下可退出接收机操作模式。

五、LoRa数字IO引脚中断映射

在前面的介绍中CAD,TX,RX都有操作完成中断,例如CadDone中断,TxDone中断,RxDone中断这些中断的配置与RegDioMapping1和RegDioMapping2这两个寄存器有关,具体见下表所示:

在实际操作中可以根据不同的业务配置不同的中断映射方式。

发布了15 篇原创文章 · 获赞 21 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_42092278/article/details/104461810