第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网络服务器。