3. LoRaWAN协议栈详解
好,咱们进入第三章。这一章我打算把LoRaWAN协议栈的核心内容拆开揉碎了讲。说实话,很多工程师在调LoRa的时候,往往只关注物理层的收发,对协议栈的理解不够深。结果出了问题,抓耳挠腮半天找不到原因。我个人觉得,搞懂协议栈,比单纯调射频参数要重要得多。
3.1 LoRaWAN网络架构:终端、网关、网络服务器
先看整体架构。LoRaWAN的网络模型其实很简单,就三个角色:终端节点(End Device)、网关(Gateway)、网络服务器(Network Server)。
- 终端节点:就是你的传感器、水表、追踪器。它只管发数据,或者听网关的指令。
- 网关:说白了就是个“数据搬运工”。它不解析数据,只负责把终端的射频信号转成IP包,发给网络服务器。
- 网络服务器:这是大脑。它负责去重、解密、确认、下发指令,还管着ADR(自适应速率)。
这里有个容易误解的地方。很多人以为网关会处理数据,其实不会。网关就是个透明桥接。我在项目中遇到过客户,非要在网关上做数据解析,结果把整个网络搞乱了。记住,网关只转发,不处理。
3.2 Class A / B / C 模式区别
LoRaWAN定义了三种终端工作模式。你想想看,为什么要有三种?因为不同的应用场景,对功耗和实时性的要求完全不同。
| 模式 | 特点 | 下行时机 | 典型功耗 |
|---|---|---|---|
| Class A | 上行后开两个接收窗口 | 上行后1s/2s | 最低(电池可用数年) |
| Class B | 定时开接收窗口(信标同步) | 固定时隙 | 中等 |
| Class C | 持续监听下行 | 随时 | 最高(需供电) |
Class A 是默认模式,也是我最常用的。终端发完数据后,会在1秒和2秒后打开两个接收窗口。如果服务器有下行数据,就在这两个窗口里发。嗯,这里要注意:如果终端不发数据,服务器是没法主动下行的。所以Class A适合传感器上报类的场景。
Class B 我用的不多,但有个案例让我印象深刻。曾经有个客户要做路灯控制,要求服务器能随时下发开关指令。Class A显然不行,Class C又太费电。最后用了Class B,通过网关广播信标,终端定时醒来听指令。效果不错,但信标同步的调试确实费了些功夫。
Class C 最简单,终端几乎一直在听。适合有持续供电的设备,比如网关本身、或者一些工业控制器。但要注意,Class C的功耗是Class A的几百倍,电池供电的设备千万别用。
3.3 Join流程:OTAA vs ABP
终端要入网,有两种方式:OTAA(空中激活)和ABP(个性化激活)。
OTAA 是推荐的方式。流程是这样的:
- 终端发送Join Request,包含DevEUI、AppEUI、DevNonce。
- 网络服务器验证后,回复Join Accept,包含DevAddr、NwkSKey、AppSKey。
- 终端保存这些密钥,之后就可以正常通信了。
我个人习惯用OTAA。为什么呢?因为每次入网都会生成新的会话密钥,安全性高。而且DevNonce是随机数,可以防止重放攻击。我在项目中遇到过有人用固定的DevNonce,结果服务器一直拒绝入网。查了半天才发现是随机数生成器没初始化。
ABP 就简单粗暴了。终端出厂时就把DevAddr、NwkSKey、AppSKey写死在固件里。上电就能发数据,不需要入网流程。但缺点也很明显:密钥泄露了就得换设备。而且如果网络服务器重启,终端可能还在用旧的帧计数器,导致数据被丢弃。
3.4 MAC命令与数据速率自适应(ADR)
LoRaWAN协议栈里有一组MAC命令,用于网络服务器和终端之间的控制信息交换。比如LinkCheckReq/Ans、LinkADRReq/Ans、DevStatusReq/Ans等。这些命令是隐式携带在数据帧里的,不需要额外开销。
其中最重要的就是 ADR(自适应数据速率)。ADR的作用是动态调整终端的发射速率和功率,以达到最优的通信效果。说白了,就是让终端在信号好的时候用高速率(SF7),信号差的时候用低速率(SF12)。
ADR的工作流程大致如下:
- 终端上报数据时,网关会记录接收到的信号强度(RSSI)和信噪比(SNR)。
- 网络服务器根据这些信息,计算出一个合适的速率和功率。
- 服务器通过LinkADRReq命令下发给终端。
- 终端收到后,调整自己的参数。
这里有个坑。我曾经在项目中遇到过,终端在室内信号很差,但ADR一直把速率往高了调。结果数据包全丢了。后来发现是网关上报的RSSI不准,导致服务器误判。所以,ADR依赖的是准确的信号质量数据。如果你的网关部署位置不好,或者天线有问题,ADR反而会帮倒忙。
另外,ADR还有一个“收敛时间”的概念。服务器不会一次把速率调到目标值,而是逐步调整。每次调整后,会等待一段时间,观察通信是否稳定。这个时间通常是几个数据包周期。所以,如果你刚部署了一批设备,别急着看ADR效果,给它一点时间。
嗯,这一章的内容就到这里。LoRaWAN协议栈其实还有很多细节,比如帧格式、加密方式、重传机制等。但我觉得先把网络架构、模式选择、入网流程和ADR这几个核心概念搞明白,后面再深入就容易多了。下一章我会讲具体的硬件设计和射频调试,到时候再聊。