LoRa 有两种数据包格式:显式和隐式。
LoRa 数据包包含:Preamble(前导码)、Header(可选类型的报头)、Payload(数据有效负载)
前导码用于保持接收机与输入的数据流同步。默认情况下,数据包含有12个符号长度的前导码。前导长度是一个可以通过编程来设置的变量,所以前导码的长度可以扩展。例如,在接收密集型应用中,为了缩短接收机占空比,可缩短前导码的长度。然而,前导码的最小允许长度就可以满足所有通讯需求。对于希望前导码是固定开销的情况,可以将前导码寄存器长度设置在6到65536之间来改变发送前导码长度,实际发送前导码的长度范围为6+4至65535+4个符号。这样几乎就可以发送任意长的前导码序列。
接收机会定期执行前导码检测。因此,接收机的前导码长度应与发射机一致。如果前导码长度为未知或可能会发生变化,应将接收机的前导码长度设置为最大值。
报头
根据所选择的操作模式,可以选用两种报头。在RegModemConfig1寄存器上,通过设定ImplicitHeaderModeOn位选择报头类型。
显式报头模式
显式报头模式是默认的操作模式。在这种模式下,报头包含有效负载的相关信息,包括:
- 以字节数表示的有效负载长度;
- 前向纠错码率;
- 是否打开可选的16位负载CRC。
报头按照最大纠错码(4/8)发送。另外,报头还包含自己的CRC,使接收机可以丢弃无效的报头。
隐式报头模式
在特定情况下,如果有效负载长度、编码率及CRC为固定或已知,则比较有效的做法是通过调用隐式报头模式来缩短发送时间。这种情况下,需要手动设置无线链路两端的有效负载长度、错误编码率及CRC。
注意:如果将扩频因子SF设定为6,则只能使用隐式报头模式。
低数据速率优化
由于扩频因子较高时数据包的发送时间可能较长,因此可以选择在数据包发送和接收期间提高传输对频率变化的鲁棒性。有效数据速率较低时,可通过LowDataRateOptimize位提高LoRa链路的鲁棒性。当单个符号传输时间超过16毫秒时,必须使用LowDataRateOptimize位。注意:发射机和接收机的LowDataRateOptimize位设置必须一致。
有效负载
数据包有效负载是一个长度不固定的字段,而实际长度和纠错编码率CR则由显式模式下的报头指定或者由隐式模式下在寄存器的设置来决定。另外,还可以选择在有效负载中包含CRC码。
传输时间
如果已知扩频因子(SF)、编码率(CR)及信号带宽(BW),可以使用以下公式计算出单个LoRaTM数据包的总传输时间。根据符号速率定义,可以很容易地得出符号速率。
LoRa数据包时间等于前导码时间和数据包传输时间之和。前导码的长度可通过以下公式计算:
其中,npreamble 表示已设定的前导码长度,其值来自寄存器上的RegPreambleMsb和RegPreambleLsb位。有效负载时间取决于所使用的报头模式。可以通过以下公式计算有效负载的符号数。
公式中各符号的具体含义如下:
- PL表示有效负载的字节数;
- SF表示扩频因子;
- 使用报头时,H=0;没有报头时,H=1。
- 当LowDataRateOptimize位设置为1时,DE=1;否则DE=0
- CR表示编码率,取值范围为1-4
有效负载时间等于符号周期乘以有效负载符号数
传输时间或数据包时间等于前导码时间加上有效负载时间。计算公式如下:
实际等于:
Tpacket = Tpre + payloadSymNb*Tpay
文章内容摘取自SX1278中文手册