谷动谷力

 找回密码
 立即注册
查看: 1044|回复: 0
打印 上一主题 下一主题
收起左侧

应用笔记 | STM32WL LoRa节点入网失败问题分析总结

[复制链接]
跳转到指定楼层
楼主
发表于 2023-10-8 18:08:49 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
应用笔记 | STM32WL LoRa节点入网失败问题分析总结
关键字:STM32WL,LoRaWAN,入网,OTAA


目录预览
1.引言
2.LoRaWAN网络架构
3.创建CubeMX工程
4.移植过程中可能遇到的问题
5.小结

01
前言
客户刚使用STM32WL做LoRa节点应用开发或测试过程中,有时会遇到LoRa节点入网失败的问题。使用STM32WL开发的LoRa节点加入的网络可能是标准的LoRaWAN网络或者是私有的LoRa网络。这篇文章会总结常见的LoRa节点入网失败的问题。考虑到私有LoRa网络的多样性以及无论是私有LoRa网络还是标准的LoRaWAN网络,它们在入网流程中都有许多相近的地方。本文会选取加入LoRaWAN网络失败的问题进行分析。而私有LoRa节点入网失败问题则可以参考类似的分析思路。

02
LoRaWAN网络结构
我们先来简单了解一下LoRaWAN网络架构:


如图一(图片来源:http://lora-alliance.org/about-lorawan/)LoRaWAN网络架构一般包含LoRaWAN节点(DEVICE),LoRaWAN网关(GATEWAY),LoRaWAN网络服务器(NETWORK SERVER,里面又包含Roaming和JOIN SERVER)以及应用服务器(APPLICATION SERVER)。LoRaWAN节点通过网关加入到LoRaWAN网络并将数据通过网关转发到网络服务器和应用服务器。在节点入网之前,需要完成以下步骤:

注:下面以STM32WL LoRaWAN节点,STM32MP1+ RAK2287网关以及Loriot网络服务器举例。

1. 选择合适的LoRaWAN网络服务器注册LoRaWAN网关,注册网关一般需要配置网关配置网络服务器的地址,端口号,以及网关地址。如图二


2. 网关通过网线或WiFi连接到网络服务器,如图三显示网关和网络服务器连接成功。


3. 获取STM32WL LoRa节点DevEUI,AppEUI,AppKey,如图四。并在网络服务器填入相应的节点DevEUI,AppEUI,AppKey注册节点。如图五


4. 当前面步骤都准备就绪后,将STM32WL节点和网关上电,如果STM32WL节点和网关工作频段一致就可以通过网关以OTAA方式正常加入到LoRaWAN网络中,如下图六显示的STM32WL节点成功入网的串口log。节点开始和网络服务器和应用服务器的正常数据通信。如图七所示网络服务器上收到的数据。


03
LoRaWAN入网流程
下面我们从LoRaWAN协议的角度进一步介绍入网过程。LoRaWAN定义的入网流程有两种:

1. Over-the-Air Activation(OTAA)
2. Activation By Personalization(ABP)

OTAA方式,基于全局唯一标识符,自由加入LoRaWAN网络,有空中消息握手的过程,可以定期更新安全密钥(会话密钥和派生密钥)

ABP方式,生产时存储共享密钥,省去空中握手过程,节点锁定到特定网络。上电后,设备立即开始工作;跳过加入程序

对比两种入网方式,可以知道OTAA方式安全性更高,它后续用于数据加解密的密钥在空中握手的时候生成,并且可以定期更新。而ABP方式,它的密钥在出厂的时候写死在节点,被破解的风险更大。下图八中也列出了两种入网方式节点配置参数的区别。由于OTAA方式更安全,使用较多。从它也可以更清楚了解入网的完整过程,下面会以OTAA的方式进一步介绍入网的流程。


OTAA的详细入网流程如下图九所示,首先LoRaWAN节点会发送Join Request消息通过网关给网络服务器,网络服务器收到请求后会根据消息里面的DevEUI,AppEUI进行验证,验证通过后发送一个Join Accept的消息返回给节点。发送Join Request请求之前,需要先准备节点的三个参数,也就是前面提到过的DevEUI,AppEUI,AppKey。对于STM32WL只要节点有烧写相应的LoRaWAN End node例程的软件,可以通过串口查看这三个参数,如图十所示。在这里需要注意的是节点端发送的Join Request消息没有被加密,只有MIC完整性校验。而收到的Join Accept消息是经过加密的,节点需要使用AppKey解密才能拿到网络服务器下发的明文消息。节点会用Join Accept消息里解析的AppNonce(JoinNonce)和自己本身就有的AppKey,DevNonce一起生成后续用于数据加密的网络会话密钥NwkSKEY,和应用会话密钥AppSKey,如图十一(其中Join EUI就是AppEUI)。这两个密钥分别用于后续节点和网络服务器数据通信加密,和节点与应用服务器数据通信加密。生成会话密钥后,后面就是正常的数据传输流程。


04
入网失败常见问题总结

接上面介绍的入网流程,有时会遇到以下入网失败的情况。它们可以按前面介绍的入网流程的步骤逐一分析,也就是按LoRaWAN节点——LoRaWAN网关——LoRaWAN网络服务器之间的通信进行分析,检查是哪个环节导致入网失败:

1.LoRaWAN网关——LoRaWAN网络服务器通信失败,导致节点入网失败

入网过程中,网关的作用是将节点的Join Request信息转发给网络服务器,如果网关和网络服务器通信失败,节点会因为网络服务器没办法收到Join Request并对其进行校验而导致入网失败。一般网关与网络服务器通信失败,在网络服务器上会显示网关的处于断开状态。解决方法是先检查网关的网络连接,比如检查网关的网口或WiFi连接是否正常。如果网络连接没问题,如前面介绍,则需要进一步检查网关注册时网关配置的网络服务器地址,端口号,以及网关地址有没错误。如果以上两点确认没问题,网关和网络服务器一般可以正常通信。

2. LoRaWAN节点——LoRaWAN网关通信失败,导致节点入网失败

节点和网关通讯失败又可以分以下几种情况:

(1)节点工作频段和网关工作频段不一致,导致通信节点和网关通信失败。这种情况,只能重新配置其中一方的工作频段,或是修改节点端或是修改网关端的工作频段,使其工作频段保持一致。需要注意的是即使使用的是同一个工作频段,比如EU868或CN470,因为在EU868或CN470里,还会以868MHZ或470MHZ为中心频点,按使用带宽划分很多个不同的工作频道,如图十二,图十三所示,而具体的工作频道不一致也会导致入网失败。针对节点使用STM32WL LoRaWAN End Node例程可以在相应的region头文件里修改工作频道,比如使用的是CN470,可以在RegionCN470.h里修改节点端的工作频道。至于网关,有的可以通过串口AT指令对其工作频道进行修改。


(2)节点和网关的调制参数配置不一致,导致其入网失败。这里调制参数包括:BW,SF,CR,LDRO。这种情况解决方法很简单,只要把节点或网关的参数修改成一致就能解决,如图十三显示网关的SF7/SF12 BW125KHZ。这里需要注意的是STM32WL LoRaWAN End Node例程中低速优化LDRO在设置SF=11或12时会默认打开,如果网关端没有打开LDRO也会导致通信失败。所以在使用SF=11或12时,要检查LDRO的设置。

(3)节点的RF性能太差导致入网失败。RF性能差有可能是因为节点没有接天线,导致通信距离短,或是节点的RF输出功率Tx或接收灵敏度本身太差导致通信失败。第一种的解决办法,只要把节点和网关靠近测试或加上天线测试就能解决。第二种情况则需要重新调试射频线路的阻抗匹配或者需要重新改版才能解决。这里需要注意的是,STM32WL节点的工作频段都是从外部32MHZ晶振信号倍频上去的,如果32MHZ晶振精度不满足要求(一般建议是10ppm)也会导致灵敏度变差。另一种情况是在使用BGA封装的型号,且RF Tx功率输出设置成22dBm输出时,PCB容易发热导致晶振产生温漂,进而降低32MHZ的精度,导致灵敏度变差。灵敏度变差也容易导致通信失败。针对32MHZ晶振的使用,客户可以参考STM32WL规格书DS13105,如图十四,选择合适的晶振。如果考虑温漂,可以使用TCXO晶振。



3. LoRaWAN节点——LoRaWAN网络服务器通信失败,导致节点入网失败。

节点和网络服务器通信失败有可能是下面两种情况:

(1)在网络服务器上注册的三个节点参数DevEUI,AppEUI,AppKey,和节点本身对应的参数不匹配。如果DevEUI或AppEUI配置不一致,则网络服务器不会审核通过Join Request请求,不会下发Join Accept消息给节点。如果AppKey不一致,则节点无法解析节点下发的Join Accept数据,以至于无法取出AppNonce用于生成后续通信使用的会话密钥。从而导致入网失败。解决办法是确保节点和网络服务器端的DevEUI,AppEUI,AppKey三个参数一致。

(2)节点加入网络成功后,后续无法再正常加入网络问题:这个问题的出现一般是因为Join Request中的各个参数固定,比如上面节点的DevEUI,AppEUI是可以固定的值,但DevNonce在每次发Join Request时,它的值是不一样的。DevNonce存放的其实是一个从零开始的计数器的值,在每一次的Join Request这个计数器会自动增加。如果节点重启,它的值会存储在非易失性NVM存储器中,而且它会和AppEUI绑定。对应于同一个节点的AppEUI,DevNonce的值不能重复使用。否则这个Join Request会被网络服务器忽略,继而导致入网失败。这也是为什么当DevNonce的值固定后,第一次入网能成功,而后续入网会失败。

05
小结
本文简单介绍了STM32WL LoRa节点在LoRaWAN网络中的工作框图以及其入网流程。根据入网流程和各个环节之间的通信总结了可能导致入网失败的因素,并给出了相应的解决办法。


+10
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|深圳市光明谷科技有限公司|光明谷商城|Sunshine Silicon Corpporation ( 粤ICP备14060730号|Sitemap

GMT+8, 2024-12-27 14:54 , Processed in 0.155804 second(s), 42 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表