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