一、概述

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

二、LoRa关键参数 

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

 

前导码:

前导码用于保持接收机与输入的数据流同步。默认情况下,数据包含有12个符号长度的前导码。前导长度是一个可以通过编程来设置的变量,所以前导码的长度可以扩展。可以将前导码寄存器长度设置在6到65536之间来改变发送前导码长度,实际发送前导码的长度范围为6+4至65535+4个符号。接收机会定期执行前导码检测。接收机的前导码长度应与发射机一致。如果前导码长度为未知或可能会发生变化,应将接收机的前导码长度设置为最大值。

报头:

根据所选择的操作模式,可以选用两种报头。在RegModemConfig1寄存器上,通过设定ImplicitHeaderModeOn位选择报头类型。

显式报头模式:

显式报头模式是默认的操作模式。在这种模式下,报头包含有效负载的相关信息,包括:

  1. 以字节数表示的有效负载长度;
  2. 前向纠错码率;
  3. 是否打开可选的16位负载CRC。

报头按照最大纠错码(4/8)发送。另外,报头还包含自己的CRC,使接收机可以丢弃无效的报头。

隐式报头模式:

在特定情况下,如果有效负载长度、编码率及CRC为固定或已知,则比较有效的做法是通过调用隐式报头模式来缩短发送时间。这种情况下,需要手动设置无线链路两端的有效负载长度、错误编码率及CRC。

注意:如果将扩频因子SF设定为6,则只能使用隐式报头模式,下面将详细解释扩频因子。

LoRa调制解调:

LoRa调制解调技术(下面简称LoRa)采用专有的调制和解调程序,将扩频调制与循环纠错编码技术结合起来,与传统的调制技术(FSK或OOK)相比,这种技术扩大了无线通讯链路的覆盖范围,提高了链路的鲁棒性。具有更强的抗干扰性。对同信道GMSK干扰信号的抑制能力达到20dB,所以LoRa用于频谱使用率较高的频段和混合通讯网络,方便在网络中原有的调制方案失败时扩大覆盖范围。开发人员通过调整扩频因子、调制带宽和编码率这三个关键设计参数对LoRa进行优化,可在链路预算、抗干扰性、频谱占用度及标称数据速率之间达到平衡。

扩频因子:

LoRa扩采用多个信息码片来代表有效负载信息的每个位。扩频信息的发送速度称为符号速率(Rs),而码片速率与标称符号速率之间的比值即为扩频因子,其表示每个信息位发送的符号数量。负信噪比条件下信号也能正常接收,提高了的灵敏度、链路预算及覆盖范围。但是不同扩频因子之间为正交关系,因此发送端和接收端的扩频因子必须一致。

由上表可以看出当扩频因子为12时在-20dB还能收到数据包,说明扩频因子越大灵敏度越高,发送速度越慢。

编码率:

LoRa采用循环纠错编码进行前向错误检测与纠错,但会产生传输开销。每次传输产生的数据开销如下:

编码率越大前向纠错越强,链路抗干扰性越强,但是传输开销将会加大,进而加大传输时间。

信号带宽:

由信号频谱图可以观察到一个信号所包含的频率成分。把一个信号所包含谐波的最高频率与最低频率之差,即该信号所拥有的频率范围,定义为该信号的带宽。信号的频率变化范围越大,信号的带宽就越宽。

上表可以看出增加信号带宽,发送标称比特率越大,说明增加信号带宽可以有效提高数据速率以缩短传输时间,但会有弊端将会降低接收灵敏度,缩短传输距离。

介绍完了关于LoRa的三个关键参数和作用,从中可以发现它们三个均与发送时间都有一定关系,这种关系下面我们就用数字量化出来。

通过以下公式计算出LoRa符号速率Rs:

注:BW表示带宽,SF表示扩频因子

传输时间:

扩频因子(SF)、编码率(CR)及信号带宽(BW),可以使用以下公式计算出单个LoRa数据包的总传输时间。根据符号速率定义,可以很容易地得出符号周期。

LoRa数据包时间等于前导码时间和数据包传输时间之和。前导码的长度可通过以下公式计算:

npreamble 表示已设定的前导码长度,其值来自寄存器上的RegPreambleMsb和RegPreambleLsb位。有效负载时间取决于所使用的报头模式。可以通过以下公式计算有效负载的符号数。

公式中各符号的具体含义如下:

  • PL表示有效负载的字节数;

  • SF表示扩频因子;

  • 使用报头时,H=0;没有报头时,H=1。

  • 当LowDataRateOptimize位设置为1时,DE=1;否则DE=0

  • CR表示编码率,取值范围为1-4

有效负载时间等于符号周期乘以有效负载符号数

传输时间或数据包时间等于前导码时间加上有效负载时间。计算公式如下:

 

三、信道活动检测(CAD)

 

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

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

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

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

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

四、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这两个寄存器有关,具体见下表所示:

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

《LoRa——详细分析影响LoRa传输距离因素》一文中我将详细讲一讲LoRa通信距离的相关问题。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐