第2章:LoRaWAN协议基础

好,咱们直接进入正题。这一章讲的是LoRaWAN协议的基础知识。说实话,很多初学者一上来就急着搭服务器,结果连设备为什么连不上都搞不清楚。我个人习惯是,先把协议栈的骨架摸清楚,后面遇到问题才能快速定位。

2.1 LoRaWAN协议栈:从物理层到应用层

LoRaWAN的协议栈其实不复杂。它分三层:物理层、MAC层和应用层。

  • 物理层:就是LoRa射频那一套。负责把数据变成无线电波发出去。这一层跟LoRaWAN协议本身关系不大,你只要知道它工作在ISM频段就行,比如中国是470-510MHz。
  • MAC层:这是核心。负责信道接入、重传、加密、确认等等。说白了,设备怎么发数据、什么时候发、发完怎么确认,都是MAC层说了算。
  • 应用层:这一层处理的是业务数据。比如传感器上报的温度值、开关状态。应用层的数据会被MAC层封装成帧,再通过物理层发出去。

我在项目中遇到过有人把应用层和MAC层搞混,结果配置参数时死活找不到对应的字段。嗯,这里要注意:MAC层处理的是“怎么发”,应用层处理的是“发什么”

2.2 MAC层与应用层:帧结构详解

MAC层的帧结构,我建议你记住几个关键字段就行。不用死记硬背,但得知道它们的作用。

字段 长度 说明
MHDR 1字节 消息类型(上行/下行/确认等)
DevAddr 4字节 设备短地址,网络内唯一
FCtrl 1字节 控制标志位,比如确认请求、ADR使能
FCnt 2字节 帧计数器,防止重放攻击
FPort 1字节 应用端口号,1-223用于应用数据
FRMPayload 可变 应用层数据,加密传输
MIC 4字节 消息完整性校验码

你想想看,一个上行数据包,从传感器采集到温度,经过应用层封装,再到MAC层加上这些头部,最后通过LoRa射频发出去。整个过程就像寄快递——应用层是货物,MAC层是快递单。

重点提醒:FCnt字段很容易被忽略。我曾经遇到过设备重启后FCnt归零,服务器却还在用旧值校验,结果所有数据都被丢弃了。解决办法是服务器端开启FCnt重置检测,或者设备端保存FCnt到非易失存储。

2.3 设备类别:Class A / B / C

LoRaWAN定义了三种设备类别。说白了,就是设备什么时候能收数据、什么时候能发数据。

  • Class A:最省电。设备主动发完数据后,会短暂打开两个接收窗口。窗口一关,设备就继续睡觉。服务器想下发数据?等设备下次上报吧。
  • Class B:在Class A基础上,增加了定期接收窗口。设备会同步网关的 Beacon 信号,在约定的时间点打开接收窗口。适合需要定时下行的场景,比如智能路灯。
  • Class C:几乎一直开着接收窗口。功耗最大,但服务器随时可以下发数据。适合有持续供电的设备,比如工业网关。

我个人的建议是:能用Class A就别用Class B,能用Class B就别用Class C。为什么?因为功耗差距太大了。我在一个智慧农业项目里,客户非要Class B,结果电池撑不过一个月。后来改成Class A,配合合理的上报间隔,电池用了两年。

小技巧:如果你不确定设备该用哪一类,先按Class A设计。后期需要下行时,再通过MAC命令切换到Class B或C。LoRaWAN协议支持动态切换,不用重新烧录固件。

2.4 数据速率与ADR机制

数据速率(DR)决定了你的设备能传多快、传多远。LoRaWAN里,数据速率越低,传输距离越远,但空中时间越长,功耗也越大。

ADR(自适应数据速率)机制,说白了就是网络服务器帮你自动调整速率。设备上报时带上信噪比和信号强度,服务器根据这些数据判断链路质量,然后下发指令调整速率。

举个例子:设备离网关很近,信号很强。服务器就会把速率调高,让设备发得快一点、省点电。如果设备在角落,信号弱,服务器就把速率调低,保证数据能传过来。

注意:ADR不是万能的。移动设备或者信道变化快的场景,ADR反而可能帮倒忙。我曾经在一个车载追踪项目里,设备在高速移动,ADR还没来得及调整,设备就已经跑远了。最后只能关闭ADR,固定使用最低速率。

ADR的典型配置参数如下:

参数 说明 建议值
ADR_ACK_LIMIT 未收到下行确认时,尝试次数上限 64
ADR_ACK_DELAY 达到上限后,等待确认的帧数 32
ADR_ACK_TIMEOUT 超时后,设备自动降低速率 2

嗯,这里要注意:ADR只适用于静态或准静态设备。如果你的设备会移动,或者部署在信号不稳定的环境,建议手动固定速率。

好了,这一章的内容就这些。协议栈、帧结构、设备类别、ADR机制,这四个点搞清楚了,后面搭建服务器时你就能理解为什么有些参数要那样配。下一章我们开始动手,从零搭建一个LoRaWAN网络服务器。