LoRa入門!一文看懂LoRa Class A B C三個(gè)模式的區(qū)別
在了解LoRa Class A B C三個(gè)模式之前,我們先來了解一下LoRa和LoRaWAN。LoRaWAN是為L(zhǎng)oRa遠(yuǎn)距離通信網(wǎng)絡(luò)設(shè)計(jì)的一套通訊協(xié)議和系統(tǒng)架構(gòu)。
LoRa協(xié)議架構(gòu)圖
LoRaWAN是為L(zhǎng)oRa遠(yuǎn)距離通信網(wǎng)絡(luò)設(shè)計(jì)的一套通訊協(xié)議和系統(tǒng)架構(gòu)。
LoRaWAN 網(wǎng)絡(luò)架構(gòu)
可以看到一個(gè)LoRaWAN網(wǎng)絡(luò)架構(gòu)中包含了終端、基站、NS(網(wǎng)絡(luò)服務(wù)器)、應(yīng)用服務(wù)器這四個(gè)部分。基站和終端之間采用星型網(wǎng)絡(luò)拓?fù)?,由于LoRa的長(zhǎng)距離特性,它們之間得以使用單跳傳輸。在終端部分官方列了6個(gè)典型應(yīng)用,有個(gè)細(xì)節(jié),你會(huì)發(fā)現(xiàn)終端節(jié)點(diǎn)可以同時(shí)發(fā)給多個(gè)基站?;緞t對(duì)NS和終端之間的LoRaWAN協(xié)議數(shù)據(jù)做轉(zhuǎn)發(fā)處理,將LoRaWAN數(shù)據(jù)分別承載在了LoRa射頻傳輸和Tcp/IP上。
LoRa的架構(gòu)和手機(jī)差不多:終端+基站的模式。LoRa都是星形網(wǎng)絡(luò),沒有mesh網(wǎng)絡(luò)。LoRa設(shè)備要通過網(wǎng)關(guān)的4G、Wifi、網(wǎng)線等接入公網(wǎng)。其中“LoRa模塊+網(wǎng)關(guān)+數(shù)據(jù)中轉(zhuǎn)傳輸”部分,已經(jīng)有大量成熟解決方案。 MCU連接LoRa網(wǎng)絡(luò),跟連接2G和NB-IoT網(wǎng)絡(luò)的方式是類似的,重新照著模塊AT指令寫一遍就好了。如果上FreeRTOS之類的小系統(tǒng),大部分網(wǎng)關(guān)廠家有參考代碼可以直接搬過來用。
LoRa實(shí)際應(yīng)用的幾個(gè)參數(shù):
市區(qū)普通場(chǎng)景用NB-IoT足夠了,山里的牧場(chǎng)、科考隊(duì)之類的用LoRa比較好,范圍足夠大。功耗上看多久上報(bào)一次數(shù)據(jù),1000mAh的電池支撐LoRa定位器工作幾個(gè)月肯定沒問題。都用上LoRa了,相信數(shù)據(jù)發(fā)送頻率和數(shù)據(jù)量都不會(huì)有多大的,所以容量、速度這些參考一下即可。
傳輸距離:市區(qū)2~5公里,郊區(qū)15公里。
工作電流:僅射頻收發(fā)器,睡眠時(shí)0.2uA,接收時(shí)10mA,發(fā)送時(shí)120mA@+20dBm,20mA@+7dBm,發(fā)送時(shí)的工作電流與發(fā)射功率有關(guān)。
節(jié)點(diǎn)容量:上萬(tens of thousands),與節(jié)點(diǎn)的數(shù)據(jù)發(fā)送頻率有關(guān)。
速率:中國,250bits/s ~ 11kbits/s(LoRa調(diào)制),50kbits/s(FSK調(diào)制),LoRa調(diào)制最大速率相當(dāng)于串口9600波特率,F(xiàn)SK調(diào)制最大速率相當(dāng)于串口57600波特率。
頻譜:中國,779MHz ~ 787MHz。
Class ABC三個(gè)模式,高效利用LoRa
Class A 上下行的時(shí)序圖,目前接收窗口RX1一般是在上行后1秒開始,接收窗口RX2是在上行后2秒開始。終端有數(shù)據(jù)了,就上報(bào),順便收一下服務(wù)器下發(fā)的指令。終端沒數(shù)據(jù)的時(shí)候,服務(wù)器下發(fā)不了指令。適合用在智能井蓋、智能垃圾桶、傳感器等場(chǎng)景,你可以幾天才發(fā)一個(gè)數(shù)據(jù)上去,非常省電。
Class C 和 A 基本是相同的,只是在 Class A 休眠的期間,它都打開了接收窗口RX2。幾乎隨時(shí)都可以接收數(shù)據(jù)。只干活不睡覺,功耗自然就高了??紤]到10mA級(jí)別的接收電流,不是長(zhǎng)供電的設(shè)備最好別用這個(gè)模式。)
Class B 的時(shí)隙則復(fù)雜一些,它有一個(gè)同步時(shí)隙beacon,還有一個(gè)固定周期的接收窗口ping時(shí)隙。如這個(gè)示例中,beacon周期為128秒,ping周期為32秒。(實(shí)際上就跟NB-IoT的eDRX模式差不多,隔幾十秒收一個(gè)數(shù)據(jù)。其他時(shí)候都在休眠。功耗低、服務(wù)器下發(fā)數(shù)據(jù)延時(shí)也不大。適合定位器、開關(guān)等場(chǎng)景。既不用接電,也能夠“還算及時(shí)”的控制設(shè)備。
Class B用的最多,也最復(fù)雜,技術(shù)細(xì)節(jié):
終端和基站約定一個(gè)時(shí)間下發(fā)數(shù)據(jù),終端和基站依靠beacon信號(hào)校對(duì)時(shí)間,確保約定的時(shí)間不會(huì)錯(cuò)位。下文的節(jié)點(diǎn)是終端設(shè)備、NS是數(shù)據(jù)服務(wù)器、網(wǎng)關(guān)就是LoRa基站)
ClassB的目的是使得節(jié)點(diǎn)具有在預(yù)定時(shí)間打開接收窗口(稱之為ping slot)的能力。一個(gè)支持ClassB的網(wǎng)絡(luò),所有的網(wǎng)關(guān)都必須同步發(fā)送beacon。
NS選擇哪個(gè)網(wǎng)關(guān)來發(fā)起下行,基于節(jié)點(diǎn)的最后一次上行的RSSI,因此,節(jié)點(diǎn)在移動(dòng)并檢測(cè)到收到的beacon(節(jié)點(diǎn)可以識(shí)別出收到的beacon來自于哪個(gè)網(wǎng)關(guān))發(fā)生變化時(shí),節(jié)點(diǎn)必須發(fā)起一次上行(通常發(fā)一個(gè)空的上行幀)強(qiáng)迫NS更新NS下行路由(NS->某網(wǎng)關(guān)->節(jié)點(diǎn))。
節(jié)點(diǎn)工作在Class B之前,下面信息必須告訴NS:節(jié)點(diǎn)ping-slot默認(rèn)周期、DR(數(shù)據(jù)速率)、頻道。
同一網(wǎng)絡(luò),所有網(wǎng)關(guān)發(fā)送beacon是同時(shí)的,這來源于GPS時(shí)間的唯一性。節(jié)點(diǎn)是有可能“收到”多個(gè)網(wǎng)關(guān)的beacon。
所有節(jié)點(diǎn)都以Class A入網(wǎng)。節(jié)點(diǎn)的應(yīng)用軟件可決定切換到Class B。
1.節(jié)點(diǎn)應(yīng)用層請(qǐng)求LoRaWAN層切換到Class B。節(jié)點(diǎn)的LoRaWAN層搜索beacon并返回結(jié)果(BEACON_LOCKED或者BEACON_NOT_FOUND)。LoRaWAN層可使用DeviceTimeReq MAC指令加快beacon搜索過程。
2.一旦進(jìn)入Class B模式,節(jié)點(diǎn)所有上行幀的FCTRL_ClassB(FCTRL域中位Class B)都置1,從而告知NS本節(jié)點(diǎn)已進(jìn)入Class B模式。節(jié)點(diǎn)MAC層將自動(dòng)在每個(gè)beacon和ping時(shí)間窗打開接收。節(jié)點(diǎn)成功收到beacon后,LoRaWAN層會(huì)把beacon內(nèi)容和RSSI傳給應(yīng)用層;節(jié)點(diǎn)在ping slot成功收到下行后,處理方法同Class A下行。LoRaWAN層在組織beacon和ping時(shí)會(huì)考慮最大可能時(shí)鐘偏差。
3.移動(dòng)節(jié)點(diǎn)必須周期通知NS更新下行路由,通常是發(fā)送一個(gè)空的上行幀。比周期發(fā)送更高效的辦法是,應(yīng)用層檢測(cè)到beacon內(nèi)容變化時(shí)主動(dòng)發(fā)起上行。當(dāng)然,節(jié)點(diǎn)需要在beacon接收和此上行之間增加一個(gè)0-120s的隨機(jī)延遲(以防止多個(gè)移動(dòng)節(jié)點(diǎn)同時(shí)發(fā)上行引起系統(tǒng)性沖突)。
4.任意時(shí)刻,NS可通過PingSlotChannelReq MAC指令修改節(jié)點(diǎn)的ping 頻率和速率。
5.任意時(shí)刻,節(jié)點(diǎn)可修改ping周期:首先必須臨時(shí)結(jié)束Class B操作(上行FCTRL_ClassB清0)并發(fā)送PingSlotInfoReq指令到NS,NS對(duì)此命令回復(fù)ACK之后,節(jié)點(diǎn)可使用新的ping周期重新開始進(jìn)入Class B操作。
6.一段時(shí)間節(jié)點(diǎn)未收到beacon之后,節(jié)點(diǎn)MAC層必須通知應(yīng)用層當(dāng)前MAC已切換到Class A。同時(shí),LoRaWAN層也不再設(shè)置上行FCTRL_ClassB。應(yīng)用層可以周期性嘗試切回Class B(重新從上述第1步即搜索beacon開始)。
收不到Beacon怎么辦?多收一會(huì)
LoRa終端和LoRa基站之間的時(shí)間同步,是LoRa比NB更省電的核心要素。NB不需要同步,是因?yàn)镹B終端會(huì)定期向服務(wù)器發(fā)心跳。LoRa一旦約定好了時(shí)間,基站就默認(rèn)設(shè)備一定會(huì)在那個(gè)時(shí)間點(diǎn)接收,所以需要嚴(yán)格的時(shí)間同步。Beacon則是時(shí)間同步的最關(guān)鍵的地方。
節(jié)點(diǎn)由ClassA切換到ClassB之前必須收到beacon,進(jìn)入ClassB之后還需要周期搜索/接收beacon,從而同步時(shí)鐘。Class B節(jié)點(diǎn)可能臨時(shí)收不到beacon,此時(shí)節(jié)點(diǎn)要逐漸加寬beacon和ping的接收窗。如果收到beacon后2小時(shí)收不到新的beacon,節(jié)點(diǎn)需使用內(nèi)部時(shí)鐘保持同步。使用溫度傳感器可以進(jìn)一步降低節(jié)點(diǎn)內(nèi)部時(shí)鐘晶振的誤差。
Beacon周期內(nèi)部的時(shí)序
兩個(gè)連續(xù)beacon起點(diǎn)之間時(shí)間差稱之為beacon周期。
Beacon周期128s,減去5.12s,剩余122.88s為ping可用時(shí)間。122.88s=4096*30ms
Guard time是給上一次ping用的,保證ping完成后才能進(jìn)行beacon發(fā)送。
beacon reserved是給beacon用的,保證beacon完成后才能進(jìn)行ping發(fā)送。