4. LPWAN载荷限制:LoRaWAN最大载荷与占空比限制,数据包结构解析
各位同学,咱们今天聊点实在的。LPWAN 里最让人头疼的,不是协议有多复杂,而是——你发出去的数据,到底能装多少东西?
我刚开始做 LoRaWAN 项目时,就踩过这个坑。满心欢喜写好了应用层代码,结果一算,载荷超了,数据包发不出去。嗯,那感觉,就像你打包好了行李,结果箱子太小,塞不进去。
所以这节课,咱们就把 LoRaWAN 的载荷限制、占空比限制,还有数据包结构,彻底掰扯清楚。
4.1 LoRaWAN 数据包结构:从物理层到应用层
先看一张图,这是我个人习惯用的数据包结构拆解。你想想看,一个 LoRaWAN 数据包,从天线发出去,到网关收到,中间经历了多少层封装?
从这张图你能看到,一个 LoRaWAN 数据包,从物理层到应用层,层层嵌套。说白了,你真正能用的应用层数据,只是最里面那一小块。
4.2 最大载荷限制:不是你想发多少就发多少
LoRaWAN 的最大载荷,取决于两个因素:数据速率(DR) 和 区域规范。
我记得有一次,客户要求终端设备每 5 秒上报一次数据,我一看,数据量还挺大。结果一查表,在 SF12 下,最大载荷才 51 字节。嗯,那肯定不行。后来只能把数据拆成两包,或者降低扩频因子。
下面这张表,是我从 LoRaWAN 1.0.4 规范里摘出来的,你直接拿去用。
| 数据速率(DR) | SF / BW | 最大载荷(字节) | 典型应用场景 |
|---|---|---|---|
| DR0 | SF12 / 125kHz | 51 | 超远距离,低速率 |
| DR1 | SF11 / 125kHz | 51 | 远距离,低速率 |
| DR2 | SF10 / 125kHz | 51 | 中等距离 |
| DR3 | SF9 / 125kHz | 115 | 中等距离,较高速率 |
| DR4 | SF8 / 125kHz | 222 | 近距离,高速率 |
| DR5 | SF7 / 125kHz | 222 | 最近距离,最高速率 |
4.3 占空比限制:别把信道占满了
占空比限制,说白了就是:你发完一包数据,得等多久才能发下一包?
LoRaWAN 的占空比限制,通常由当地法规决定。比如 EU868 频段,占空比限制是 1%。什么意思呢?
假设你发一包数据,空中传输时间(ToA)是 100ms。那么,你至少得等:
等待时间 = ToA / 占空比 - ToA
= 100ms / 0.01 - 100ms
= 9900ms
≈ 10 秒
也就是说,你发完一包,得等 10 秒才能发下一包。如果你强行多发,网关会直接丢弃你的数据包,甚至可能被罚款(嗯,真的会罚款)。
4.4 数据包结构实战:如何计算有效载荷
好了,理论讲完了,咱们来点实战。假设你要设计一个温湿度传感器,上报温度(2 字节)、湿度(2 字节)、电池电压(2 字节),总共 6 字节。
你想想看,这 6 字节能直接发吗?不行。因为还有 MAC 层的开销。
咱们来算一笔账:
- MHDR:1 字节(固定)
- FHDR:至少 7 字节(DevAddr 4B + FCtrl 1B + FCnt 2B)
- FPort:1 字节
- FRMPayload:你的 6 字节数据(加密后还是 6 字节)
- MIC:4 字节
所以,总 MACPayload 大小 = 7 + 1 + 6 = 14 字节。加上 MHDR 和 MIC,总 MAC 层大小 = 1 + 14 + 4 = 19 字节。
在 DR0(SF12)下,最大载荷是 51 字节。19 字节远小于 51 字节,所以完全没问题。
4.5 避坑指南:我踩过的那些坑
做 LoRaWAN 项目这几年,我踩过不少坑。分享几个典型的:
- 坑一:忽略 FOpts 的长度。FHDR 中的 FOpts 字段,最多可以带 15 字节的 MAC 命令。如果你不小心把 FOpts 填满了,FHDR 就变成 22 字节了。我曾经因为这个,导致载荷超限,查了半天才找到原因。
- 坑二:占空比计算错误。有些同学只算了上行数据的占空比,忘了下行数据(比如网关的确认帧)也会占用占空比。嗯,这个坑我踩过两次。
- 坑三:不同区域的载荷限制不同。我有个项目,从 EU868 迁移到 US915,结果发现同样的数据包,在 US915 下发不出去。后来一查,US915 的载荷限制更严格。
4.6 总结:记住这三点就够了
好了,这节课的内容就这些。我帮你总结一下:
- 数据包结构:物理层 → MAC 层 → 应用层,层层嵌套。你真正能用的,只是最里面的 FRMPayload。
- 最大载荷:取决于数据速率和区域规范。SF12 下最多 51 字节,SF7 下最多 222 字节。
- 占空比限制:EU868 是 1%,发完一包得等至少 99 倍的时间才能发下一包。
记住这三点,你的 LoRaWAN 项目就不会在载荷和占空比上翻车。下一节课,咱们聊聊数据压缩——怎么在有限的载荷里塞进更多的数据。
公众号:蓝海资料掘金营,微信deep3321