跳转到主要内容

LoRa数据包结构分析及数据传输时间的计算

<p>LoRa有两种数据包格式:显示和隐式&nbsp;</p>

<p>其中显示数据包的报头较短,主要包含字节数、编码率及是否使用CRC等信息。</p>

<p>LoRa数据包包含:</p>

<ul>
<li>Preamble(前导码)</li>
<li>Header(可选类型的报头)</li>
<li>Payload(数据有效负载)</li>
</ul>

<p>如下图:&nbsp;</p>

<p><img alt="LoRa数据包" data-entity-type="file" data-entity-uuid="12483c43-9367-48ae-a09d-84d6fe505456" src="/sites/default/files/inline-images/LoRa%E6%95%B0%E6%8D%AE%E5%8C%85.png" /></p>

<h3 id="1preamble">1、Preamble</h3>

<p>前导码用于保持接收机与输入的<strong>数据流同步</strong>。。作用是<strong>提醒接收芯片</strong>,<strong>即将发送的是有效信号</strong>,注意接收,以免丢失有用信号,当前导码发送完毕后,会立即发送有效数据。。</p>

<p>默认Preamble数据size为12个符号长度,长度可以根据实际应用扩展(内部变量)。。例如:在接收密集型应用中,为了<strong>缩短接收机占空比</strong>,可以缩短前导码长度。。实际发送前导码长度范围为6+4 ~ 65535 +4个符号。。。</p>

<p>LoRa的接收机会定期检测前导码。。因此接收和发射端前导码长度需一致,如果未知,应将接收机的前导码长度设置为最大值。</p>

<h3 id="2header">2、Header</h3>

<p>可以通过操作模式,选择<strong>显示/隐式</strong>两种Header类型:在RegModemConfig1寄存器上,通过设定ImplicitHeaderModeOn选择。</p>

<h4 id="21-显式报头模式"><a name="t3" target="_blank"></a><strong>2.1 显式报头模式</strong></h4>

<p>LoRa默认都为显式Header模式,在这种模式下,Header会包含Payload的相关信息,包括:</p>

<ul>
<li>Payload长度(byte)</li>
<li>前向纠错编码率</li>
<li>是否使用CRC(16位)</li>
</ul>

<p>Header按照最大纠错码(4/8)发送,另外Header还包含自己的CRC,接收机可以先Check该项以丢弃无效Header数据包。。</p>

<h4 id="22-隐式报头模式"><a name="t4" target="_blank"></a><strong>2.2 隐式报头模式</strong></h4>

<p>在特定情况下,如果Payload长度、编码率以及CRC为固定值或已知,则可以通过隐式Header模式来缩短发送时间。。该情况下 ,需要手动设置无线链路两端的Payload长度、错误编码率以及CRC。。。</p>

<p>注意:如果扩频因子SF设为6,则只能使用隐式报头模式</p>

<h3 id="3payload">3、Payload</h3>

<p>数据包有效负载Payload是一个长度不固定的字段,实际长度和编码率CR则可以由显式Header模式下的报头制定或者由隐式模式下在寄存器的设置来决定。。另外,还可以选择在Payload中包含CRC。。。Payload是在FIFO中读写。。。</p>

<h3 id="4数据传输时间的计算">4、数据传输时间的计算</h3>

<p>由上一节&nbsp;<a href="http://murata.eetrend.com/article/2017-10/1000907.html">http://murata.e…; 可以得出Rs,则单个LoRa数据包的符号周期Ts:</p>

<p>Ts=1/Rs</p>

<p>其中,LoRa数据包总传输时间,等于前导码传输时间Tpre+数据包传输时间Tpay。前导码传输时间即为:</p>

<p>Tpre = (Npre+4.25)Tpay</p>

<p>其中,Npre表示已设定的前导码长度,(可以读取RegPreambleMsb和RegPreambleLsb寄存器得到),Payload有效负载的时间Tpay取决于所使用的报头模式。。。</p>

<p>计算Payload符号数的公式如下:&nbsp;</p>

<p><img alt="计算Payload符号数的公式" data-entity-type="file" data-entity-uuid="c4f9c43a-7146-4e83-8f03-2e478cc668ea" src="/sites/default/files/inline-images/%E8%AE%A1%E7%AE%97Payload%E7%AC%A6%E5%8F%B7%E6%95%B0%E7%9A%84%E5%85%AC%E5%BC%8F.png" /></p>

<p>因此,总传输时间实际为:</p>

<p>Tpacket = Tpre + payloadSymNb*Tpay</p>

<p>文章来源:<a href="http://blog.csdn.net/howiexue">HowieXue的博客</a></p&gt;