三、Introduction on LoRaWAN options
本檔案描述了一種用于可為移動的或固定在一個固定位置的電池供電的終端裝置而優化的LoRaWAN™網絡協定。LORA™是一個由Semtech公司開發的長距離低功耗低通信速率無線調制應用。裝置實作多類包括CLASSA在内的通信模式。LoRaWAN網絡通常部署成星型網絡拓撲結構, 網關中繼終端及後端網絡中央伺服器的資料。網關通過标準IP協定連接配接至網絡伺服器,而終端采用單跳網絡LORA™或FSK與一個或多個網關通信。所有通信一般是雙向的,當然上行通信預計将是主要的流量。各個終端裝置和網關的通信分散在不同的頻率信道和通信速率之中。通信速率将根據通信範圍和消息的持續時間取一個折中值,以不同的速率通信實作互不幹擾。Lora的通信速率範圍從0.3kbps到50kbps。為了最大限度的提高終端裝置的電池壽命和網絡容量,LoRa基礎網絡能管理通信速率和每個終端裝置的RF輸出,也就是說,具備自适應通信速率(ADR)功能。隻要遵守以下規則,終端裝置可能用任何可用的信道、任何可用的通信速率通信:
- [x] 1)終端的每次通信以僞随機的方式改變通信信道。産生的頻率多樣性使系統在幹擾上更具魯棒性。
- [x] 2)終端遵守該子帶規定的最大發送占空比和地方法規。
- [x] 3)終端遵守該子帶規定的最大發射持續時間(或滞留時間)和地方法規。
所有LoRaWAN裝置至少實作了CLASSA的功能。此外,他們還可能實作了本文檔描述的CLASS B,CLASS C或被其他人自定義的功能。
所有多位元組采用的都是小端模式(little endian)和EUI是64位整數,發送為小端模式。
LoRaWAN CLASSA CLASSB CLASSC 區分
雙向終端裝置(CLASSA)
A類的終端裝置允許雙向通信,每一個終端裝置的上行傳輸,跟随兩個短的下行接收視窗。發送時隙的排程基于終端裝置自己的通信需求,該時隙是基于随機時間基礎(ALOHA類型的協定的)上的很小變動。CLASSA适用于超低功耗終端系統的應用,該類應用隻要求終端發送上行傳輸之後,服務端再下行傳輸至終端。從服務端在任何其他時間下行鍊路通信将必須等待直到下一個預定的上行鍊路通信(即每次隻能先上行資料才能收到下行資料)。
帶接收時隙的雙向終端裝置(CLASSB)
B類的終端裝置允許更多的接收時隙。除A類随機接收視窗,B類裝置中在計劃的時間打開額外的接收視窗。為了使終端裝置打開它的接收視窗,在計劃的時間中接收到來自網關的同步信标(Beacon幀)。這允許服務端知道什麼時候終端正在偵聽信号。
最大接收時隙的雙向終端裝置(CLASSC)
C類有近連續打開接收視窗的終端裝置,隻有發射時才關閉接收。CLASSC終端裝置将比CLASS A、CLASS B功耗更大,但CLASS C終端裝置的通信延遲最低。
LoRa數據機的鍊路控制
通過配置寄存器RegOpMode,就能将FSK數據機切換成LoRaTM數據機,切換操作可以在飛行模式(睡眠模式)下進行;LoRa數據機采用專有的調制和解調程式,将擴頻調制與循環糾錯編碼技術結合起來,進而提高了鍊路預算和抗幹擾性。LoRa數據機的配置圖:
LoRa數據機擁有獨立的雙端口資料緩沖FIFO,而且在所有操作模式下均可通過SPI接口通路該通道。標明LoRa調制模式之後,配置寄存器中SX1276/77/78的映射關系發生變化。
RegOpMode寄存器
name | bits | description |
---|---|---|
LongRangeMode | 7bit | 0:FSK/OOK模式 1:LoRa模式 該位僅可在睡眠模式下修改。 |
AccessSharedReg | 6bit | 設定該位,允許在LoRa 模式下通路FSK 寄存器頁面 |
reserved | 5~4bits | 預留 |
LowFrequencyModeOn | 3bit | 通路低頻模式寄存器(從位址0x61開始)0:高頻 1:低頻 |
Mode | 2~0bits | 收發器模式(睡眠、待機等) |
RegOpMode.LongRangeMode進入Lora模式
#define OPMODE_LORA 0x80 //LoRa模式,該位僅可在睡眠模式下修改。
// 進入Lora模式的操作
static void opmodeLora() {
u1_t u = OPMODE_LORA;
#ifdef CFG_sx1276_radio
u |= ; // TBD: sx1276 high freq
#endif
writeReg(RegOpMode, u);
}
RegOpMode.AccessSharedReg
一般情況下僅當器件設定為 LoRa 模式時,才能通路到 LoRa 寄存器(同理, FSK 寄存器僅在 FSK 模式下才能通路);但是如果設定了AccessSharedReg位,則允許在LoRa模式下通路位于位址空間(0x0D:0x3F)的 FSK 寄存器頁面 。
該位在器件處于睡眠模式時工作。為確定之後能夠正常通路 LoRa 寄存器,完成相關設定後清零該位。
RegOpMode.AccessSharedReg=0:通路LoRa寄存器頁面0x0D:0x3F
RegOpMode.AccessSharedReg=1:(在LoRa模式下)通路FSK寄存器頁面0x0D:0x3F
RegOpMode.mode(2~0bits) 進入操作模式
#define OPMODE_SLEEP 0x00 //000:睡眠模式
#define OPMODE_STANDBY 0x01 //001:待機模式
#define OPMODE_FSTX 0x02 //010:頻率合成發送(FSTx)
#define OPMODE_TX 0x03 //011:發送(Tx)
#define OPMODE_FSRX 0x04 //100:頻率合成接收(FSRx)
#define OPMODE_RX 0x05 //101:持續接收(RXCONTINUOUS)
#define OPMODE_RX_SINGLE 0x06 //110:單次接收(RXSINGLE)
#define OPMODE_CAD 0x07 //111:信道活動檢測(CAD)
// 操作進入相應模式
static void opmode (u1_t mode) {
writeReg(RegOpMode, (readReg(RegOpMode) & ~OPMODE_MASK) | mode);
}
opmode(OPMODE_SLEEP);
opmode(OPMODE_STANDBY);
// ...
擴頻因子(SF值)、調制帶寬(BW)、糾錯編碼率(CR)
針對特定的應用,可以通過調整 擴頻因子(SF值)、調制帶寬(BW)及糾錯編碼率(CR) 這三個關鍵設計參數對LoRa調制解技術進行優化。對上述某個或多個參數進行調整之後,可實作在鍊路預算、 抗幹擾性、頻譜占用度及标稱資料速率之間達到平衡。
擴頻因子
LoRaTM擴頻調制技術采用多個資訊碼片來代表有效負載資訊的每個位。擴頻資訊的發送速度稱為符号速率(Rs),而碼片速率與标稱符号速率之間的比值即為擴頻因子,其表示每個資訊位發送的符号數量。
擴頻因子取值
RegModulationCfg2.SF | 擴頻因子(碼片/符号) | LoRa解調器 信噪比(SNR) |
---|---|---|
6 | 64 | -5 dB |
7 | 128 | -7.5dB |
8 | 256 | -10 dB |
9 | 512 | -12.5 dB |
10 | 1024 | -15 dB |
11 | 2048 | -17.5 dB |
12 | 4096 | -20 dB |
因為不同擴頻因子(SpreadingFactor)之間為正交關系,是以必須提前獲知鍊路發
送端和接收端的擴頻因子。另外,還必須獲知接收機輸入端的信噪比。在負信噪比條件下信号也能正常接收, 這改善了LoRa接收機的靈敏度、鍊路預算及覆寫範圍。
擴頻因子寄存器取值在RegModemConfig2寄存器中。
RegModemConfig2寄存器
- [x] RegModemConfig2.SpreadingFactor 取值(SF值):
#define SX1272_MC2_SF7 0x70 //RegModemConfig2.SpreadingFactor=7 128 碼片/符号
#define SX1272_MC2_SF8 0x80 //RegModemConfig2.SpreadingFactor=8 256 碼片/符号
#define SX1272_MC2_SF9 0x90 //RegModemConfig2.SpreadingFactor=9 512 碼片/符号
#define SX1272_MC2_SF10 0xA0 //RegModemConfig2.SpreadingFactor=10 1024 碼片/符号
#define SX1272_MC2_SF11 0xB0 //RegModemConfig2.SpreadingFactor=11 2048 碼片/符号
#define SX1272_MC2_SF12 0xC0 //RegModemConfig2.SpreadingFactor=12 4096 碼片/符号
/* sf_t sf = getSf(LMIC.rps);
enum _sf_t { FSK=0, SF7, SF8, SF9, SF10, SF11, SF12, SFrfu };
SX1272_MC2_SF7 + [0~5]<<4 即可得到SF7、SF8、SF9、SF10、SF11、SF12
*/
mc2 = (SX1272_MC2_SF7 + ((sf-)<<));
if (getNocrc(LMIC.rps) == ) {
mc2 |= SX1276_MC2_RX_PAYLOAD_CRCON;
}
writeReg(LORARegModemConfig2, mc2);
- [x] RegModemConfig2.RxPayloadCrcOn取值:
- 上行資料格式
| 前導碼 | 可選報頭 | 資料有效負載 |
|————|————-|——————-|
|0x34(8bytes)|報頭+報頭_CRC|PayLoad+PayLoad_CRC|
-
下行資料格式
| 前導碼 | 可選報頭 | 資料有效負載 |
|————|————-|:—————–:|
|0x34(8bytes)|報頭+報頭_CRC|PayLoad |
上行、下行報頭CRC及資料有效負載CRC都是晶片自動填充的,并且有時候某一項PayLoad_CRC不是必選項。
//RegModemConfig2.RxPayloadCrcOn = 0: CRC 關閉
//RegModemConfig2.RxPayloadCrcOn = 1: CRC 開啟
#define SX1276_MC2_RX_PAYLOAD_CRCON 0x04
if (getNocrc(LMIC.rps) == ) {
mc2 |= SX1276_MC2_RX_PAYLOAD_CRCON;
}
writeReg(LORARegModemConfig2, mc2);
擴頻因子6(SF6)設定(特定)
![image](http://images.cnblogs.com/cnblogs_com/younining/998024/o_6.RegModemConfig1%e5%af%84%e5%ad%98%e5%99%a8.jpg) 當擴頻因子SF為6時, LoRa數據機的資料傳輸速率最快,是以這一擴頻因子僅在特定情況下使用。使用時,需在SX1276/77/78寄存器上進行以下幾項設定: - [x] 将RegModemConfig2.SpreadingFactor設定為6; - [x] 将報頭設定為隐式模式(即RegModemConfig1.ImplicitHeaderModeOn設定為1);傳輸對時間有苛求的資料時使用隐式報頭。 - [x] 在寄存器位址(0x31)的2至0位中寫入0b101一值;0x31在Lora模式下為預留寄存器,除本情況外不使用。 - [x] 在寄存器位址(0x37)中寫入0x0C一值。0x37在Lora模式下為預留寄存器,除本情況外不使用。
編碼率
LoRaTM數據機采用循環糾錯編碼進行前向錯誤檢測與糾錯,以提高鍊路的魯棒性。使用糾錯編碼之後,會産生額外的傳輸開銷。每次傳輸産生的循環編碼開銷見下表。
編碼率(RegTxCfg1) | 循環編碼率 | 開銷比率 |
---|---|---|
1 | 4/5 | 1.25 |
2 | 4/6 | 1.5 |
3 | 4/7 | 1.75 |
4 | 4/8 | 2 |
前向糾錯能有效提高鍊路的可靠性。由此,編碼率(及抗幹擾性能)可以随着信道條件的變化而變化——可以選擇在報頭中加入編碼率以便接收端能夠解析。
RegModemConfig1.CodingRate 糾錯編碼率
隐式報頭模式下應在接收機上設定該位,以确定預期編碼率。
RegModemConfig1.CodingRate = 001 : 4/5
RegModemConfig1.CodingRate = 010 : 4/6
RegModemConfig1.CodingRate = 011 : 4/7
RegModemConfig1.CodingRate = 100 : 4/8
所有其他值:預留
#define SX1276_MC1_CR_4_5 0x02
#define SX1276_MC1_CR_4_6 0x04
#define SX1276_MC1_CR_4_7 0x06
#define SX1276_MC1_CR_4_8 0x08
// ...
switch( getCr(LMIC.rps) ) {
case CR_4_5: mc1 |= SX1276_MC1_CR_4_5; break;
case CR_4_6: mc1 |= SX1276_MC1_CR_4_6; break;
case CR_4_7: mc1 |= SX1276_MC1_CR_4_7; break;
case CR_4_8: mc1 |= SX1276_MC1_CR_4_8; break;
default:
ASSERT();
}
// ...
// set ModemConfig1
writeReg(LORARegModemConfig1, mc1);
// ...
信号帶寬
增加信号帶寬,可以提高有效資料速率以縮短傳輸時間,但這是以犧牲部分一接收靈敏度為代價。當然,多數國家對允許占用帶寬都設有一定的限制。FSK數據機描述的帶寬是指單邊帶帶寬,而LoRaTM數據機中描述的帶寬則是指雙邊帶帶寬(或全信道帶寬)。LoRaTM數據機規格表中列出了在多數規範限制的帶寬範圍。
帶寬(kHz) | 擴頻因子 | 編碼率 | 标稱比特率(bps) |
---|---|---|---|
7.8 | 12 | 4/5 | 18 |
10.4 | 12 | 4/5 | 24 |
15.6 | 12 | 4/5 | 37 |
20.8 | 12 | 4/5 | 49 |
31.2 | 12 | 4/5 | 73 |
41.7 | 12 | 4/5 | 98 |
62.5 | 12 | 4/5 | 146 |
125 | 12 | 4/5 | 293 |
250 | 12 | 4/5 | 586 |
500 | 12 | 4/5 | 1172 |
注意: 較低頻段(169 MHz)不支援250kHz和500kHz的帶寬。
RegModemConfig1.Bw 信号帶寬
#define SX1276_MC1_BW_125 0x70
#define SX1276_MC1_BW_250 0x80
#define SX1276_MC1_BW_500 0x90
// ...
switch (getBw(LMIC.rps)) {
case BW125: mc1 |= SX1276_MC1_BW_125; break;
case BW250: mc1 |= SX1276_MC1_BW_250; break;
case BW500: mc1 |= SX1276_MC1_BW_500; break;
default:
ASSERT();
}
// ...
// set ModemConfig1
writeReg(LORARegModemConfig1, mc1);
// ...
比特速率、碼片速率和符号速率等區分
經過信源編碼的含有資訊的資料稱為“比特”; 經過信道編碼和交織後的資料稱為“符号”; 經過最終擴頻得到的資料稱為“碼片”。
符号表示約定
- BW表示帶寬(BandWidth)
- SF表示擴頻因子(SpreadingFactor)
- Rs符号速率(Symbol Rate)
- cps碼片速率(chip per-second)
- Rb比特率(Bit Rate)
符号速率(Symbol Rate)
- SymbolRate和BitRate的對應關系要依據調制方式。如是BPSK調制,那麼1bit可以代表0,1兩種資訊,此時BitRate=SymbolRate。如是QPSK調制,4個資訊就需要2bit來表示,此時BitRate=2 SymbolRate。
- 符号速率*擴頻因子=碼片速率。
碼片速率(chip per-second)
- 系統通過擴頻把比特轉換成碼片。碼片相當于模拟調制中的載波作用,是數字信号的載體。
- 一個資料信号(如邏輯1或0)通常要用多個編碼信号來進行編碼,那麼其中的一個編碼信号就稱為一個碼片。
- 碼片數率是指擴頻調制之後的資料數率,用cps表示(chip per-second) 。
LoRa發送參數關系(擴頻因子、碼片速率、符号速率)
- [x] LoRa符号速率
Rs = \frac{BW}{2^{SF}}
發送信号為恒包絡信号。每赫茲每秒發送一個碼片。
-
[x] 擴頻因子
碼片速率=符号速率×擴頻因子
SF = \frac{cps}{{Rs}}