物联网LoRa系列-25:LoRa终端--LoRaWAN协议简介与LoRa WAN终端软件选择
前言:
從本篇文章開始:
從通信節(jié)點(diǎn)的角度度看,將從Lra終端對點(diǎn)對通信轉(zhuǎn)到LoRa終端與LoRa網(wǎng)關(guān)的通信、LoRa終端與LoRa云服務(wù)器的通信;
從協(xié)議棧的角度看,將從物理層上升到LoRa的MAC層, 即LoRaWAN;
從軟件項(xiàng)目的角度看,將由pingpong程序轉(zhuǎn)向Class A-Class C程序。
本文主要探討,LoRa WAN終端與網(wǎng)關(guān)通信所需要知道的一些宏觀技術(shù)點(diǎn)。
1. 軟件工程文件的轉(zhuǎn)型
默認(rèn)的PingPong軟件工程不再使用,必須轉(zhuǎn)到Class A和 Class C的軟件工程項(xiàng)目。
主要原因是模擬的PingPong應(yīng)用程序發(fā)送的物理層的裸幀,沒有MAC層的頭,不符合LoRaWAN網(wǎng)關(guān)的設(shè)置規(guī)范,會被LoRa網(wǎng)管直接丟棄。
2. LoRa與LoRaWAN
LoRa:低功耗無線通信技術(shù)
是一種低功耗遠(yuǎn)程無線通信技術(shù), 它是由法國一家公司Cycleo研發(fā)一種創(chuàng)新的半導(dǎo)體技術(shù)-LoRa,后面被美國一家公司Semtech(升特)收購.后續(xù)由Semtech公司基于這個LoRa技術(shù),開發(fā)一種套LoRa通信芯片解決方案. LoRa后續(xù)通過LoRa聯(lián)盟來開始覆蓋推廣普及。因此狹義的LoRa主要是指LoRa射頻層與LoRa物理層。
LoRaWAN:LoRa廣域網(wǎng)
LoRaWAN是基于LoRa遠(yuǎn)距離無線通信技術(shù)設(shè)計(jì)的一套廣域網(wǎng)協(xié)議,包括MAC層通訊協(xié)議和網(wǎng)絡(luò)系統(tǒng)架構(gòu)。
如果按協(xié)議分層來說,LoRaWAN重點(diǎn)在MAC層,LoRa重點(diǎn)在物理層。
當(dāng)然,廣義上的LoRa也包括LoRaWAN。
3. LoRaWAN與LoRa MAC層
應(yīng)該說,LoRaWAN(LoRa廣域網(wǎng))的概念比LoRa MAC層更廣。LoRaWAN不僅僅包括LoRa MAC層協(xié)議,還包括LoRa應(yīng)用層和LoRa的整個網(wǎng)絡(luò)架構(gòu)。
4. LoRAN(LoRa廣域網(wǎng))的網(wǎng)絡(luò)架構(gòu)
LoRaWAN的網(wǎng)絡(luò)實(shí)體分為四個部分: 終端節(jié)點(diǎn)、網(wǎng)關(guān)、LoRaWAN服務(wù)器和用戶服務(wù)器。
- End Node: 終端節(jié)點(diǎn)一般是各類傳感器,進(jìn)行數(shù)據(jù)采集,開關(guān)控制等 。
- Gateway: LoRa網(wǎng)關(guān),對收集到的節(jié)點(diǎn)數(shù)據(jù)進(jìn)行封裝轉(zhuǎn)發(fā) 。
- NetworkServer: 主要負(fù)責(zé)上下行數(shù)據(jù)包的完整性校驗(yàn)。
- ApplicationServer: 主要負(fù)責(zé)OTAA設(shè)備的入網(wǎng)激活,應(yīng)用數(shù)據(jù)的加解密 。
- CustomerServer: 從AS中接收來自節(jié)點(diǎn)的數(shù)據(jù),進(jìn)行業(yè)務(wù)邏輯處理,通過AS提供的API接口向節(jié)點(diǎn)發(fā)送數(shù)據(jù)。
后續(xù)的幾篇文章,依然把重點(diǎn)放在終端節(jié)點(diǎn)上,但終端節(jié)點(diǎn)的軟件協(xié)議需支持LoRa MAC層協(xié)議和應(yīng)用層協(xié)議,而不僅僅是物理層協(xié)議。這樣的LoRa終端,稱為LoRaWAN終端。
5. LoRaWAN終端設(shè)備分類
根據(jù)協(xié)議規(guī)定有, LoWAN的終端分為Class A/B/C 三類終端設(shè)備,這三類設(shè)備基本覆蓋了物聯(lián)網(wǎng)所有的應(yīng)用場景。
CLASSA/B/C的應(yīng)用和區(qū)別可見下表:
6. LoRa物理層的幀結(jié)構(gòu)
遵循此層的消息格式,可以實(shí)現(xiàn)LoRa終端點(diǎn)對點(diǎn)的通信。
這個結(jié)構(gòu)需要深入探究,因?yàn)檫@涉及到LoRa終端之間是否能夠通信、LoRa終端是否能夠與LoRa進(jìn)行通信的關(guān)鍵。
物理層的幀結(jié)構(gòu)是有LoRa的射頻芯片完成的,軟件治只能設(shè)置模式。
(1)Preamble:用于保持接收機(jī)與發(fā)射機(jī)的數(shù)據(jù)流同步。
Preamble的每個符號是0和1的交替,即0101
LoRa SX1261/2 芯片默認(rèn)的符號個數(shù)是12,即0101 0101 0101,LoRaWAN中默認(rèn)的符號符號個數(shù)是8,即0101 0101。
前導(dǎo)長度是一個可以通過編程來設(shè)置的變量,所以前導(dǎo)碼的長度可以擴(kuò)展。接收機(jī)的前導(dǎo)碼長度應(yīng)與發(fā)射機(jī)一致。如果前導(dǎo)碼長度為未知或可能會發(fā)生變化,應(yīng)將接收機(jī)的前導(dǎo)碼長度設(shè)置為最大值。????接收的前導(dǎo)碼小于還是大于發(fā)射機(jī)?
注意:這里的長度的單位是bit,而不是byte。即多少位。
(2)物理層頭的類型
LoRa物理層幀的頭包括兩種模式,顯性模式和隱形模式。這是由程序設(shè)定的。
隱性模式:沒有物理幀的頭部信息,即Preamble之后,直接是MAC層的幀。因此這種模式,物理層Payload的長度必須是確定的、固定的,且需要通信的雙方事先約定好,如果實(shí)際數(shù)據(jù)幀的長度不足預(yù)定的長度,需要添加填充域。
顯性模式:包含物理層的幀頭部分。LoRaWAN使用的是顯性模式,
(3)顯性模式下物理層的P_Header:
包含的信息
- Payload的字節(jié)數(shù):
軟件通過如下的寄存器告訴射頻芯片,需要發(fā)送的物理層的payload的長度:
數(shù)據(jù)凈荷的最大長度為255字節(jié)。
在隱性模式下,需要通信雙方約定數(shù)據(jù)凈荷的長度。
發(fā)送端,一旦已發(fā)送的數(shù)據(jù)幀的長度等于設(shè)定的長度,就停止發(fā)送,添加CRC.
接受端,一旦接收到的數(shù)據(jù)幀的長度等于設(shè)定的長度,就停止接收,檢查CRC.
因此,如果發(fā)送的數(shù)據(jù)幀的長度與接收端的預(yù)先設(shè)定不一致,就會導(dǎo)致出錯。
在顯性模式下,不需要通信雙方約定數(shù)據(jù)凈荷的長度。
發(fā)送端,paylaod的實(shí)際數(shù)據(jù)長度,會添加到P_Header中,并通過此域把數(shù)據(jù)凈荷的長度信息傳遞給接收端。
接收端,從P_Header中獲取數(shù)據(jù)凈荷的長度,并根據(jù)此長度域進(jìn)行數(shù)據(jù)凈荷的接收。
增加了通信雙方的適應(yīng)性。
- 數(shù)據(jù)凈荷的前向糾錯碼的編碼率CR(Coding Rate)
FEC編碼的冗余部分允許接收方檢測可能出現(xiàn)在信息任何地方的有限個差錯,并且通常可以糾正這些差錯而不用重傳。
FEC使接收方有能力糾正錯誤而不需要反向請求數(shù)據(jù)重傳,不過這是以一個固定的更高轉(zhuǎn)發(fā)的帶寬為代價的。
因此FEC被應(yīng)用在重傳開銷巨大或者不可能重傳的情況下,比如單向通信鏈接的時候以及以多路廣播的形式傳送數(shù)據(jù)給多個接收方時。FEC信息通常被添加到大量存儲設(shè)備中,以保障受損數(shù)據(jù)的恢復(fù)。FEC也被廣泛應(yīng)用在調(diào)制解調(diào)中。
添加的冗余比特越多,就糾錯的能力越強(qiáng),但需要的帶寬就越大,因此冗余編碼率會影響信息傳輸所需要的帶寬。
冗余編碼率是通過軟件設(shè)定的:
4/5表示:有效數(shù)據(jù)是4比特,編碼后是5比特。編碼率為0.8,或者說溢碼率是1.25.
注意:
糾錯編碼是LoRa modem的功能,不是物理幀頭的設(shè)置。
在隱性模式下,沒有物理層的幀頭信息,只能通過通信雙方人為的約定,如果通信雙方設(shè)置不一樣,這會導(dǎo)致譯碼錯誤。
在顯性模式下,有物理層的幀頭信息承載發(fā)送端端的糾錯編碼的編碼率。接收端就可以根據(jù)此域?qū)?shù)據(jù)凈荷進(jìn)行糾錯性解碼。不需要通信雙方提前人為約定了。
增加了通信雙方的適應(yīng)性。
- 是否打開Payload CRC。
對Payload的CRC校驗(yàn),2個字節(jié)。這個CRC是由射頻芯片計(jì)算和添加,不是由軟件來完成的。
但是否需要添加CRC是由軟件設(shè)置的,即Payload CRC的使能是由軟件控制的。
需要添加CRC是由軟件設(shè)置的,即Payload CRC的使能是由軟件控制的。
在隱性模式下,沒有物理層的幀頭信息,就需要通信雙方約定,數(shù)據(jù)幀最后的2個字節(jié)是否是CRC。
在顯性模式下,可以通過物理層的幀頭,傳遞此信息,不需要人為的預(yù)先約定。
增加了通信雙方的適應(yīng)性。
(4)P_Header CRC
對Header域進(jìn)行單獨(dú)的CRC校驗(yàn),確保物理層幀頭部的正確性,當(dāng)然,不包括Preamble。
在隱性模式下,不需要該域,因?yàn)殡[性模式下,沒有物理層的幀頭信息,因此就沒有物理層幀頭的CRC.
在顯性模式下,是由LoRa的射頻芯片自動添加的,軟件不可設(shè)置。
(5)Payload:
物理層的真正發(fā)送的數(shù)據(jù),在LoRaWAN協(xié)議中,該payload就是LoRaWAN的MAC層幀。
(6)Payload CRC:
對Payload的CRC校驗(yàn),2個字節(jié)。這個CRC是由射頻芯片計(jì)算和添加,不是由軟件來完成的。
7. LoRaWAN MAC層的幀結(jié)構(gòu)
遵循此層的消息格式,可以實(shí)現(xiàn)LoRa終端與網(wǎng)關(guān)之間的通信(網(wǎng)關(guān)路由合法的LoRaWAN的消息凈荷)
MAC層的幀結(jié)構(gòu)是由LoRaWAN Class A-C的終端軟件程序完成的。整個MAC的幀作為物理層幀的payload存在。
MAC有MAC層的幀頭MHDR+MAC payload + MIC組成。
(1)MHDR:MAC層的幀頭(7..0)
- MType:LoRa消息的類型(7..5)
LoRa消息的類型分類:
a) Join request和Join Accept:是終端請求加入到LoRa網(wǎng)絡(luò)中的消息。
b) Unconfirmed Data up & down:這種是單向,不需確認(rèn)的消息, 沒有確認(rèn)與超時重發(fā)機(jī)制。
c) confirmed Data up & down:這種消息是需要確認(rèn)回復(fù)的,如果沒有回復(fù),就會啟動超時重發(fā)
注意:
收到confirmed類型的消息時,接收者要回復(fù)一條設(shè)置了確認(rèn)位的消息(ACK 設(shè)為1)。
如果發(fā)送者是終端,網(wǎng)絡(luò)就把確認(rèn)消息發(fā)送到該終端打開的接收窗口。
如果發(fā)送者是網(wǎng)關(guān),確認(rèn)消息的發(fā)送由終端就自行判斷。
d) RFU, Proprietary:保留或自定義
- RFU(Reserved for future use):保留域(4..2)
- Major:協(xié)議版本(1..0)
(2)MAC payload:MAC層凈荷
MAC凈荷,就是LoRa WAN各種類型消息的實(shí)體。
(3)MIC:一致性校驗(yàn)碼(安全性加密功能)
LoRaWAN中的MIC是CMAC的四個最低有效字節(jié),這一點(diǎn)在LoRaWAN協(xié)議中有說明:
The MIC is calculated as follows [RFC4493]:
msg = MHDR | FHDR | FPort | FRMPayload
cmac = aes128_cmac(NwkSKey, B 0 | msg)
MIC = cmac[0..3]
?CMAC則是AES中的一個算法,開發(fā)人員直接調(diào)用AES庫函數(shù)即可,而AES在openssl中有實(shí)現(xiàn)。
7. LoRaWAN協(xié)議層的消息結(jié)構(gòu)
遵循此層的消息格式,可以實(shí)現(xiàn)LoRa終端與LoRa服務(wù)器之間的通信。
所謂LoRaWAN協(xié)議層的消息,在上圖中,就是指“數(shù)據(jù)幀”
LoRaWAN協(xié)議層的消息組成:
(1)FHDR
- DevAddr:4字節(jié)的終端設(shè)備的地址
表明該消息的終端標(biāo)識(雙向,LoRa不需要設(shè)備地址)
- FCTR:1個字節(jié)的消息控制
- FCnt:
- FOpts:消息操作類型
(2)FPort:上層應(yīng)用程協(xié)議類型,類似與TCP/IP協(xié)議中的端口號。
0:表示FRMPayload中只有MAC命令。
1…223(0x01…0xDF)范圍內(nèi)的FPort由應(yīng)用指定;
FPort = 224 專門為LoRaWAN Mac層測試協(xié)議服務(wù)。
(3)FRM Payload:應(yīng)用層協(xié)議數(shù)據(jù)。
8. LoRaWAN消息交互
參考:
LoRa WAN的官方協(xié)議
LoRa WAN協(xié)議中文翻譯:https://legacy.gitbook.com/book/twowinter/lorawan-specification_zh_cn/details
LoRa及LoRaWAN簡介: LoRa及LoRaWAN簡介_o倚樓聽風(fēng)雨o的博客-CSDN博客_lorawan
總結(jié)
以上是生活随笔為你收集整理的物联网LoRa系列-25:LoRa终端--LoRaWAN协议简介与LoRa WAN终端软件选择的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 重学java基础第二十五课:数据类型
- 下一篇: [react] create-react