2、LoRaWAN协议基础回顾:MAC层帧结构、Class A/B/C模式、ADR机制,为FOTA做铺垫
好,咱们进入正题。在做FOTA(固件空中升级)之前,有几个LoRaWAN协议的基础概念必须得捋清楚。说白了,FOTA本质上就是通过无线网络把一大包数据拆成小块,然后可靠地发过去。如果你不理解MAC层怎么封装数据、终端怎么跟网关“对话”,那后面做升级方案时肯定会踩坑。
我个人习惯是,先看帧结构,再看工作模式,最后搞懂速率控制。这三件事搞明白了,FOTA的底层逻辑就通了。
2.1 MAC层帧结构:数据是怎么装进“信封”的?
LoRaWAN的MAC层帧结构,你可以想象成一个快递包裹。每一层都有固定的格式,拆开来看其实不复杂。
一个完整的MAC帧,从上到下分三层:
- PHY层(物理层):负责最原始的无线信号收发。我们做应用层开发时基本不碰它。
- MAC层(媒体接入控制层):这是核心。它定义了帧头、帧载荷、以及消息完整性校验。
- 应用层:你的FOTA数据包最终就塞在这里。
MAC层的帧结构长这样:
| 前导码 | PHDR | PHDR_CRC | PHYPayload | CRC |
嗯,这里要注意,PHYPayload才是我们真正关心的部分。它又拆成:
| MHDR | MACPayload | MIC |
- MHDR(MAC头):1个字节,告诉你这个消息类型(比如是上行数据、下行数据、还是加入网络请求)。
- MACPayload:包含帧头(FHDR)、端口(FPort)、以及帧载荷(FRMPayload)。
- MIC(消息完整性码):4个字节,用来校验数据有没有被篡改。
我刚开始做LoRaWAN项目时,总觉得MIC就是个“可有可无”的校验。直到有一次在测试环境中,发现终端上报的数据偶尔会乱码,查了半天才发现是网关那边转发时数据被截断了,MIC校验没通过。从那以后,我再也不敢忽略MIC了。
对于FOTA来说,FRMPayload就是你的升级固件数据。但要注意,LoRaWAN的单个数据包最大载荷是有限的(取决于速率和地区),所以你得把固件拆成很多个小包,一包一包地发。
2.2 Class A/B/C模式:终端什么时候“听”网关说话?
LoRaWAN定义了三种终端工作模式。说白了,就是终端什么时候打开接收窗口,听网关有没有给它发消息。
Class A:最省电,但“被动”
这是所有LoRaWAN终端都必须支持的模式。终端主动发一个上行数据包,然后打开两个短暂的接收窗口(RX1和RX2),等网关回复。如果没等到,那就等下一次上行再听。
我做过一个智能水表项目,用的就是Class A。水表每天上报一次数据,网关在接收窗口里下发指令。这种模式对电池寿命非常友好,一颗电池能用好几年。但缺点也很明显——你没法随时给终端发消息,必须等它先“开口”。
Class B:定时“听”一下
Class B在Class A的基础上,增加了一个定期打开的接收窗口。终端会同步网关发出的“信标”(Beacon),然后按照约定的时间点打开窗口。
这种模式适合那些需要定时同步数据的场景,比如每隔几秒就要检查一下有没有新指令。但代价是功耗比Class A高一些。
Class C:一直“听”,但费电
Class C的终端几乎一直开着接收窗口,只有在发送数据时才短暂关闭。网关随时可以下发数据,延迟极低。
你想想看,这种模式最适合什么场景?对,就是FOTA升级!因为升级过程中,网关需要频繁地向终端发送固件包,如果终端是Class A,那每次都得等它先发一个空包上来,效率太低了。我建议,做FOTA时尽量让终端切换到Class C模式,或者至少用Class B。
核心结论:FOTA升级过程中,终端需要频繁接收数据。Class A模式效率太低,Class C模式最理想。如果终端不支持Class C,那就用Class B,但要做好功耗管理。
2.3 ADR机制:速率自适应,别让数据“飞”丢了
ADR(自适应数据速率)是LoRaWAN里一个非常聪明的机制。它根据终端和网关之间的信号质量,自动调整终端的发射速率和发射功率。
为什么需要ADR?
- 如果信号好,就用高速率(比如DR5),数据包小,传输快,省电。
- 如果信号差,就用低速率(比如DR0),数据包大,传输慢,但更可靠。
ADR的工作流程大致是:
- 终端上报数据时,会携带一些链路质量信息(比如信噪比、信号强度)。
- 网络服务器根据这些信息,计算出最优的速率和功率。
- 服务器通过下行消息,告诉终端:“下次你用这个速率发。”
我曾经在一个大型农场项目中吃过ADR的亏。当时终端部署在开阔地带,信号很好,ADR自动把速率调到了最高。结果一到下雨天,信号衰减严重,数据包大量丢失。后来我手动限制了最高速率,才解决了问题。
避坑指南:做FOTA时,千万不要完全依赖ADR自动调整速率。因为固件升级包通常很大,如果中途信号变差,速率突然降低,可能会导致之前已经发送的数据包需要重传,甚至升级失败。我建议在FOTA过程中,固定使用一个中等速率(比如DR3或DR4),既保证传输速度,又留有一定的抗干扰余量。
2.4 小结:这些基础怎么为FOTA服务?
好了,咱们把这三个基础概念串起来,看看它们跟FOTA的关系:
| 协议基础 | 对FOTA的影响 |
|---|---|
| MAC帧结构 | 固件数据要拆成多个FRMPayload,每个包不能超过最大载荷限制。 |
| Class A/B/C模式 | 推荐使用Class C或Class B,避免Class A的被动等待。 |
| ADR机制 | FOTA过程中建议固定速率,避免因信号波动导致重传风暴。 |
我个人觉得,理解这些基础概念,是做好FOTA方案的第一步。下一章咱们会深入讲FOTA的协议设计,包括怎么分包、怎么确认、怎么处理丢包。嗯,到时候你会发现,今天讲的这些内容,全都会用上。
小提示:如果你手头有LoRaWAN终端,可以先用串口工具抓一下MAC层的原始数据,看看MHDR和MIC是怎么组成的。动手实践一下,比看十遍文档都管用。