目前国内物联网无线技术中NB-IoT(-130dBm),LTE(-110dBm)和LoRa(-142.5dBm)应用较多。LoRa 的“接收灵敏度”在目前民用无线通信技术中排第一,以常用的 125kHz/SF12为例,它可以达到 -142.5dBm。
Lora数据包由三个部分组成部分:前导码、可选报头、数据有效负载:
前导码:
前导码用于保持接收机与输入的数据流同步。默认情况下,数据包含有12个符号长度的前导码。前导长度是一个可以通过编程来设置的变量,所以前导码的长度可以扩展。可以将前导码寄存器长度设置在6到65536之间来改变发送前导码长度,实际发送前导码的长度范围为6+4至65535+4个符号。接收机会定期执行前导码检测。接收机的前导码长度应与发射机一致。如果前导码长度为未知或可能会发生变化,应将接收机的前导码长度设置为最大值。
报头:
根据所选择的操作模式,可以选用两种报头。在RegModemConfig1寄存器上,通过设定ImplicitHeaderModeOn位选择报头类型。
显式报头模式:
显式报头模式是默认的操作模式。在这种模式下,报头包含有效负载的相关信息,包括:
报头按照最大纠错码(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
有效负载时间等于符号周期乘以有效负载符号数
传输时间或数据包时间等于前导码时间加上有效负载时间。计算公式如下:
LoRa使用信道检测器来检测其他LoRa信号,流程如下图:
信道活动检测模式旨在以尽可能高的功耗效率检测无线信道上的LoRa前导码。在CAD模式下,SX1276/77/78快速扫描频段,以检测LoRa数据包前导码。
在CAD过程中,将会执行以下操作:
信道活动检测时长取决于使用的LoRa调制设置。典型CAD检测时长为LoRa符号周期的倍数。CAD检测时间内,芯片在(2SF+32)/BW秒中处于接收模式,其余时间则处于低功耗状态。
在发送模式下,仅在需要发送数据包数据的时候才会启动射频、PLL和PA模块,可以减少功耗。如下图为数据发送流程:
从上图可以看出,LoRa发送前一直处于待机状态,在初始化Tx模块后,将待发送数据(Payload)写入FIFO,然后切换到发送状态将数据通过LoRa调制成信号发送出去,等到发送完成后,会产生TxDone中断,同时再次切换为待机状态,完成一个发送流程。
需要注意:
LoRa发送数据写入FIFO数据缓存要将数据包数据写入FIFO数据缓存,用户必须:
LoRa接收有两种模式:
如下图数据接收流程:
单一接收模式:
在这种模式下,调制解调器在给定的时间窗口内搜索前导码。如果在该时间窗口结束时还未找到前导码,则芯片会产生RxTimeout中断信号并切换回待机模式。时间窗口长度(以符号计)由RegSymbTimeout寄存器定义,必须为4(调制解调器获取前导码锁的最短时间)到1023个符号。缺省值为5。如果在时间窗口内未发现前导码,则会产生RxTimeout中断信号, 同时芯片切换回待机模式。
在有效负载结束时,如果负载CRC无效,则会产生RxDone中断信号及PayloadCrcError中断信号。然而,即使CRC无效,仍然可以在FIFO数据缓存中写入数据,以便后续进行处理。RxDone中断产生后,芯片切换回待机模式。
当RxDone或RxTimeout中断信号产生时,调制解调器也会自动回到待机模式。因此,只有在数据包到达时间窗口为已知的情况下才会使用RX单一接收模式。而在其他情况下,应使用RX连续模式。
在RX单一模式下,接收到数据包后,应立即关闭PLL和射频模块,以降低功耗。流程如下:
在连续接收模式下,调制解调器会持续扫描信道,以搜索前导码。每当检测到前导码时,调制解调器都会在收到数据包前对该前导码进行检测及跟踪,然后继续等待检测下一前导码。
如果前导码长度超过寄存器RegPreambleMsb和RegPreambleLsb设定的预计值(按照符号周期测量),则前导码会被丢弃,并重新开始前导码搜索。但在这种场景不会产生中断标志。与单一Rx模式相反,在连续Rx模式下,当产生超时中断时,设备不会进入待机模式。这时, 用户必须在设备继续等待有效前导码的同时直接清除中断信号。
注意:被解调字节是按照接收序列写入数据缓存区的。换言之,新数据包的第一个字节会在上一个数据包的最后一个字节之后立即写入。在这种模式下,接收地址指针将不会重置。因此,关联微控制器MCU必须对地址指针进行处理,以保证FIFO数据缓存不会溢出。
在连续模式下,被接收数据包的处理序列如下:
在前面的介绍中CAD,TX,RX都有操作完成中断,例如CadDone中断,TxDone中断,RxDone中断这些中断的配置与RegDioMapping1和RegDioMapping2这两个寄存器有关,具体见下表所示:
在实际操作中可以根据不同的业务配置不同的中断映射方式。
在《LoRa——详细分析影响LoRa传输距离因素》一文中我将详细讲一讲LoRa通信距离的相关问题。