來吧,一篇文章把LoRa無線技術喫透吧——LoRa無線技術分析

一、概述

目前國內物聯網無線技術中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通信距離的相關問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章