目錄預(yù)覽
1.引言
2.LoRaWAN網(wǎng)絡(luò)架構(gòu)
3.創(chuàng)建CubeMX工程
4.移植過程中可能遇到的問題
5.小結(jié)
客戶剛使用STM32WL做LoRa節(jié)點(diǎn)應(yīng)用開發(fā)或測(cè)試過程中,有時(shí)會(huì)遇到LoRa節(jié)點(diǎn)入網(wǎng)失敗的問題。使用STM32WL開發(fā)的LoRa節(jié)點(diǎn)加入的網(wǎng)絡(luò)可能是標(biāo)準(zhǔn)的LoRaWAN網(wǎng)絡(luò)或者是私有的LoRa網(wǎng)絡(luò)。這篇文章會(huì)總結(jié)常見的LoRa節(jié)點(diǎn)入網(wǎng)失敗的問題。考慮到私有LoRa網(wǎng)絡(luò)的多樣性以及無論是私有LoRa網(wǎng)絡(luò)還是標(biāo)準(zhǔn)的LoRaWAN網(wǎng)絡(luò),它們?cè)谌刖W(wǎng)流程中都有許多相近的地方。本文會(huì)選取加入LoRaWAN網(wǎng)絡(luò)失敗的問題進(jìn)行分析。而私有LoRa節(jié)點(diǎn)入網(wǎng)失敗問題則可以參考類似的分析思路。
我們先來簡(jiǎn)單了解一下LoRaWAN網(wǎng)絡(luò)架構(gòu):
如圖一(圖片來源:http://lora-alliance.org/about-lorawan/)LoRaWAN網(wǎng)絡(luò)架構(gòu)一般包含LoRaWAN節(jié)點(diǎn)(DEVICE),LoRaWAN網(wǎng)關(guān)(GATEWAY),LoRaWAN網(wǎng)絡(luò)服務(wù)器(NETWORK SERVER,里面又包含Roaming和JOIN SERVER)以及應(yīng)用服務(wù)器(APPLICATION SERVER)。LoRaWAN節(jié)點(diǎn)通過網(wǎng)關(guān)加入到LoRaWAN網(wǎng)絡(luò)并將數(shù)據(jù)通過網(wǎng)關(guān)轉(zhuǎn)發(fā)到網(wǎng)絡(luò)服務(wù)器和應(yīng)用服務(wù)器。在節(jié)點(diǎn)入網(wǎng)之前,需要完成以下步驟:
注:下面以STM32WL LoRaWAN節(jié)點(diǎn),STM32MP1+ RAK2287網(wǎng)關(guān)以及Loriot網(wǎng)絡(luò)服務(wù)器舉例。
1. 選擇合適的LoRaWAN網(wǎng)絡(luò)服務(wù)器注冊(cè)LoRaWAN網(wǎng)關(guān),注冊(cè)網(wǎng)關(guān)一般需要配置網(wǎng)關(guān)配置網(wǎng)絡(luò)服務(wù)器的地址,端口號(hào),以及網(wǎng)關(guān)地址。如圖二
2. 網(wǎng)關(guān)通過網(wǎng)線或WiFi連接到網(wǎng)絡(luò)服務(wù)器,如圖三顯示網(wǎng)關(guān)和網(wǎng)絡(luò)服務(wù)器連接成功。
3. 獲取STM32WL LoRa節(jié)點(diǎn)DevEUI,AppEUI,AppKey,如圖四。并在網(wǎng)絡(luò)服務(wù)器填入相應(yīng)的節(jié)點(diǎn)DevEUI,AppEUI,AppKey注冊(cè)節(jié)點(diǎn)。如圖五
4. 當(dāng)前面步驟都準(zhǔn)備就緒后,將STM32WL節(jié)點(diǎn)和網(wǎng)關(guān)上電,如果STM32WL節(jié)點(diǎn)和網(wǎng)關(guān)工作頻段一致就可以通過網(wǎng)關(guān)以O(shè)TAA方式正常加入到LoRaWAN網(wǎng)絡(luò)中,如下圖六顯示的STM32WL節(jié)點(diǎn)成功入網(wǎng)的串口log。節(jié)點(diǎn)開始和網(wǎng)絡(luò)服務(wù)器和應(yīng)用服務(wù)器的正常數(shù)據(jù)通信。如圖七所示網(wǎng)絡(luò)服務(wù)器上收到的數(shù)據(jù)。
下面我們從LoRaWAN協(xié)議的角度進(jìn)一步介紹入網(wǎng)過程。LoRaWAN定義的入網(wǎng)流程有兩種:
1. Over-the-Air Activation(OTAA)
2. Activation By Personalization(ABP)
OTAA方式,基于全局唯一標(biāo)識(shí)符,自由加入LoRaWAN網(wǎng)絡(luò),有空中消息握手的過程,可以定期更新安全密鑰(會(huì)話密鑰和派生密鑰)
ABP方式,生產(chǎn)時(shí)存儲(chǔ)共享密鑰,省去空中握手過程,節(jié)點(diǎn)鎖定到特定網(wǎng)絡(luò)。上電后,設(shè)備立即開始工作;跳過加入程序
對(duì)比兩種入網(wǎng)方式,可以知道OTAA方式安全性更高,它后續(xù)用于數(shù)據(jù)加解密的密鑰在空中握手的時(shí)候生成,并且可以定期更新。而ABP方式,它的密鑰在出廠的時(shí)候?qū)懰涝诠?jié)點(diǎn),被破解的風(fēng)險(xiǎn)更大。下圖八中也列出了兩種入網(wǎng)方式節(jié)點(diǎn)配置參數(shù)的區(qū)別。由于OTAA方式更安全,使用較多。從它也可以更清楚了解入網(wǎng)的完整過程,下面會(huì)以O(shè)TAA的方式進(jìn)一步介紹入網(wǎng)的流程。
OTAA的詳細(xì)入網(wǎng)流程如下圖九所示,首先LoRaWAN節(jié)點(diǎn)會(huì)發(fā)送Join Request消息通過網(wǎng)關(guān)給網(wǎng)絡(luò)服務(wù)器,網(wǎng)絡(luò)服務(wù)器收到請(qǐng)求后會(huì)根據(jù)消息里面的DevEUI,AppEUI進(jìn)行驗(yàn)證,驗(yàn)證通過后發(fā)送一個(gè)Join Accept的消息返回給節(jié)點(diǎn)。發(fā)送Join Request請(qǐng)求之前,需要先準(zhǔn)備節(jié)點(diǎn)的三個(gè)參數(shù),也就是前面提到過的DevEUI,AppEUI,AppKey。對(duì)于STM32WL只要節(jié)點(diǎn)有燒寫相應(yīng)的LoRaWAN End node例程的軟件,可以通過串口查看這三個(gè)參數(shù),如圖十所示。在這里需要注意的是節(jié)點(diǎn)端發(fā)送的Join Request消息沒有被加密,只有MIC完整性校驗(yàn)。而收到的Join Accept消息是經(jīng)過加密的,節(jié)點(diǎn)需要使用AppKey解密才能拿到網(wǎng)絡(luò)服務(wù)器下發(fā)的明文消息。節(jié)點(diǎn)會(huì)用Join Accept消息里解析的AppNonce(JoinNonce)和自己本身就有的AppKey,DevNonce一起生成后續(xù)用于數(shù)據(jù)加密的網(wǎng)絡(luò)會(huì)話密鑰NwkSKEY,和應(yīng)用會(huì)話密鑰AppSKey,如圖十一(其中Join EUI就是AppEUI)。這兩個(gè)密鑰分別用于后續(xù)節(jié)點(diǎn)和網(wǎng)絡(luò)服務(wù)器數(shù)據(jù)通信加密,和節(jié)點(diǎn)與應(yīng)用服務(wù)器數(shù)據(jù)通信加密。生成會(huì)話密鑰后,后面就是正常的數(shù)據(jù)傳輸流程。
接上面介紹的入網(wǎng)流程,有時(shí)會(huì)遇到以下入網(wǎng)失敗的情況。它們可以按前面介紹的入網(wǎng)流程的步驟逐一分析,也就是按LoRaWAN節(jié)點(diǎn)——LoRaWAN網(wǎng)關(guān)——LoRaWAN網(wǎng)絡(luò)服務(wù)器之間的通信進(jìn)行分析,檢查是哪個(gè)環(huán)節(jié)導(dǎo)致入網(wǎng)失?。?/span>
1.LoRaWAN網(wǎng)關(guān)——LoRaWAN網(wǎng)絡(luò)服務(wù)器通信失敗,導(dǎo)致節(jié)點(diǎn)入網(wǎng)失敗
入網(wǎng)過程中,網(wǎng)關(guān)的作用是將節(jié)點(diǎn)的Join Request信息轉(zhuǎn)發(fā)給網(wǎng)絡(luò)服務(wù)器,如果網(wǎng)關(guān)和網(wǎng)絡(luò)服務(wù)器通信失敗,節(jié)點(diǎn)會(huì)因?yàn)榫W(wǎng)絡(luò)服務(wù)器沒辦法收到Join Request并對(duì)其進(jìn)行校驗(yàn)而導(dǎo)致入網(wǎng)失敗。一般網(wǎng)關(guān)與網(wǎng)絡(luò)服務(wù)器通信失敗,在網(wǎng)絡(luò)服務(wù)器上會(huì)顯示網(wǎng)關(guān)的處于斷開狀態(tài)。解決方法是先檢查網(wǎng)關(guān)的網(wǎng)絡(luò)連接,比如檢查網(wǎng)關(guān)的網(wǎng)口或WiFi連接是否正常。如果網(wǎng)絡(luò)連接沒問題,如前面介紹,則需要進(jìn)一步檢查網(wǎng)關(guān)注冊(cè)時(shí)網(wǎng)關(guān)配置的網(wǎng)絡(luò)服務(wù)器地址,端口號(hào),以及網(wǎng)關(guān)地址有沒錯(cuò)誤。如果以上兩點(diǎn)確認(rèn)沒問題,網(wǎng)關(guān)和網(wǎng)絡(luò)服務(wù)器一般可以正常通信。
2. LoRaWAN節(jié)點(diǎn)——LoRaWAN網(wǎng)關(guān)通信失敗,導(dǎo)致節(jié)點(diǎn)入網(wǎng)失敗
節(jié)點(diǎn)和網(wǎng)關(guān)通訊失敗又可以分以下幾種情況:
(1)節(jié)點(diǎn)工作頻段和網(wǎng)關(guān)工作頻段不一致,導(dǎo)致通信節(jié)點(diǎn)和網(wǎng)關(guān)通信失敗。這種情況,只能重新配置其中一方的工作頻段,或是修改節(jié)點(diǎn)端或是修改網(wǎng)關(guān)端的工作頻段,使其工作頻段保持一致。需要注意的是即使使用的是同一個(gè)工作頻段,比如EU868或CN470,因?yàn)樵贓U868或CN470里,還會(huì)以868MHZ或470MHZ為中心頻點(diǎn),按使用帶寬劃分很多個(gè)不同的工作頻道,如圖十二,圖十三所示,而具體的工作頻道不一致也會(huì)導(dǎo)致入網(wǎng)失敗。針對(duì)節(jié)點(diǎn)使用STM32WL LoRaWAN End Node例程可以在相應(yīng)的region頭文件里修改工作頻道,比如使用的是CN470,可以在RegionCN470.h里修改節(jié)點(diǎn)端的工作頻道。至于網(wǎng)關(guān),有的可以通過串口AT指令對(duì)其工作頻道進(jìn)行修改。
(2)節(jié)點(diǎn)和網(wǎng)關(guān)的調(diào)制參數(shù)配置不一致,導(dǎo)致其入網(wǎng)失敗。這里調(diào)制參數(shù)包括:BW,SF,CR,LDRO。這種情況解決方法很簡(jiǎn)單,只要把節(jié)點(diǎn)或網(wǎng)關(guān)的參數(shù)修改成一致就能解決,如圖十三顯示網(wǎng)關(guān)的SF7/SF12 BW125KHZ。這里需要注意的是STM32WL LoRaWAN End Node例程中低速優(yōu)化LDRO在設(shè)置SF=11或12時(shí)會(huì)默認(rèn)打開,如果網(wǎng)關(guān)端沒有打開LDRO也會(huì)導(dǎo)致通信失敗。所以在使用SF=11或12時(shí),要檢查L(zhǎng)DRO的設(shè)置。
(3)節(jié)點(diǎn)的RF性能太差導(dǎo)致入網(wǎng)失敗。RF性能差有可能是因?yàn)楣?jié)點(diǎn)沒有接天線,導(dǎo)致通信距離短,或是節(jié)點(diǎn)的RF輸出功率Tx或接收靈敏度本身太差導(dǎo)致通信失敗。第一種的解決辦法,只要把節(jié)點(diǎn)和網(wǎng)關(guān)靠近測(cè)試或加上天線測(cè)試就能解決。第二種情況則需要重新調(diào)試射頻線路的阻抗匹配或者需要重新改版才能解決。這里需要注意的是,STM32WL節(jié)點(diǎn)的工作頻段都是從外部32MHZ晶振信號(hào)倍頻上去的,如果32MHZ晶振精度不滿足要求(一般建議是10ppm)也會(huì)導(dǎo)致靈敏度變差。另一種情況是在使用BGA封裝的型號(hào),且RF Tx功率輸出設(shè)置成22dBm輸出時(shí),PCB容易發(fā)熱導(dǎo)致晶振產(chǎn)生溫漂,進(jìn)而降低32MHZ的精度,導(dǎo)致靈敏度變差。靈敏度變差也容易導(dǎo)致通信失敗。針對(duì)32MHZ晶振的使用,客戶可以參考STM32WL規(guī)格書DS13105,如圖十四,選擇合適的晶振。如果考慮溫漂,可以使用TCXO晶振。
3. LoRaWAN節(jié)點(diǎn)——LoRaWAN網(wǎng)絡(luò)服務(wù)器通信失敗,導(dǎo)致節(jié)點(diǎn)入網(wǎng)失敗。
節(jié)點(diǎn)和網(wǎng)絡(luò)服務(wù)器通信失敗有可能是下面兩種情況:
(1)在網(wǎng)絡(luò)服務(wù)器上注冊(cè)的三個(gè)節(jié)點(diǎn)參數(shù)DevEUI,AppEUI,AppKey,和節(jié)點(diǎn)本身對(duì)應(yīng)的參數(shù)不匹配。如果DevEUI或AppEUI配置不一致,則網(wǎng)絡(luò)服務(wù)器不會(huì)審核通過Join Request請(qǐng)求,不會(huì)下發(fā)Join Accept消息給節(jié)點(diǎn)。如果AppKey不一致,則節(jié)點(diǎn)無法解析節(jié)點(diǎn)下發(fā)的Join Accept數(shù)據(jù),以至于無法取出AppNonce用于生成后續(xù)通信使用的會(huì)話密鑰。從而導(dǎo)致入網(wǎng)失敗。解決辦法是確保節(jié)點(diǎn)和網(wǎng)絡(luò)服務(wù)器端的DevEUI,AppEUI,AppKey三個(gè)參數(shù)一致。
(2)節(jié)點(diǎn)加入網(wǎng)絡(luò)成功后,后續(xù)無法再正常加入網(wǎng)絡(luò)問題:這個(gè)問題的出現(xiàn)一般是因?yàn)镴oin Request中的各個(gè)參數(shù)固定,比如上面節(jié)點(diǎn)的DevEUI,AppEUI是可以固定的值,但DevNonce在每次發(fā)Join Request時(shí),它的值是不一樣的。DevNonce存放的其實(shí)是一個(gè)從零開始的計(jì)數(shù)器的值,在每一次的Join Request這個(gè)計(jì)數(shù)器會(huì)自動(dòng)增加。如果節(jié)點(diǎn)重啟,它的值會(huì)存儲(chǔ)在非易失性NVM存儲(chǔ)器中,而且它會(huì)和AppEUI綁定。對(duì)應(yīng)于同一個(gè)節(jié)點(diǎn)的AppEUI,DevNonce的值不能重復(fù)使用。否則這個(gè)Join Request會(huì)被網(wǎng)絡(luò)服務(wù)器忽略,繼而導(dǎo)致入網(wǎng)失敗。這也是為什么當(dāng)DevNonce的值固定后,第一次入網(wǎng)能成功,而后續(xù)入網(wǎng)會(huì)失敗。
本文簡(jiǎn)單介紹了STM32WL LoRa節(jié)點(diǎn)在LoRaWAN網(wǎng)絡(luò)中的工作框圖以及其入網(wǎng)流程。根據(jù)入網(wǎng)流程和各個(gè)環(huán)節(jié)之間的通信總結(jié)了可能導(dǎo)致入網(wǎng)失敗的因素,并給出了相應(yīng)的解決辦法。
關(guān)注STM32
▽點(diǎn)擊“閱讀原文”,可下載原文檔
原文標(biāo)題:應(yīng)用筆記 | STM32WL LoRa節(jié)點(diǎn)入網(wǎng)失敗問題分析總結(jié)
文章出處:【微信公眾號(hào):STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
單片機(jī)
+關(guān)注
關(guān)注
6043文章
44623瀏覽量
638786 -
STM32
+關(guān)注
關(guān)注
2272文章
10925瀏覽量
357708
原文標(biāo)題:應(yīng)用筆記 | STM32WL LoRa節(jié)點(diǎn)入網(wǎng)失敗問題分析總結(jié)
文章出處:【微信號(hào):STM32_STM8_MCU,微信公眾號(hào):STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論