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中文手冊