2、LoRa与LoRaWAN协议栈详解:物理层(CSS调制)、MAC层(Class A/B/C)、应用层
好,咱们这一章来啃一块硬骨头——LoRa和LoRaWAN的协议栈。很多朋友刚接触时容易搞混,以为LoRa就是LoRaWAN。其实不是的。我打个比方:LoRa就像是你家铺的马路,LoRaWAN则是这条路上的交通规则。路修得再好,没有规则照样堵成一锅粥。
咱们从下往上,一层一层拆开来看。
2.1 物理层:CSS调制,LoRa的独门绝技
物理层是LoRa最核心的东西。它用的调制技术叫CSS,全称是Chirp Spread Spectrum,中文叫线性调频扩频。
说白了,就是把一个信号在频率上“拉长”。你想想看,原本一个窄带信号,能量集中在一个点上,很容易被干扰。CSS把它展宽到整个频段上,就像把一滴墨水滴到一大盆水里——虽然浓度低了,但你更容易找到它。
我个人习惯把CSS理解成“用时间换灵敏度”。LoRa能做到-148dBm的接收灵敏度,靠的就是这个。我在项目中遇到过最夸张的一次,一个节点放在地下室的管道井里,网关在楼顶,直线距离超过2公里,居然还能稳定通信。当时我同事都不信,直到看到数据包才服气。
这里有几个关键参数,我列个表方便你对照:
| 参数 | 说明 | 我的经验值 |
|---|---|---|
| 扩频因子(SF) | SF7~SF12,值越大灵敏度越高,但速率越慢 | 室内用SF9,室外空旷用SF7 |
| 带宽(BW) | 125kHz、250kHz、500kHz | 默认125kHz,兼容性最好 |
| 编码率(CR) | 4/5到4/8,纠错能力递增 | 4/5够用,干扰大时用4/8 |
2.2 MAC层:Class A/B/C,三种活法
MAC层决定了节点怎么跟网关“说话”。LoRaWAN定义了三种设备类型,我管它们叫“三种活法”。
Class A:最省电,但最被动
Class A是所有LoRaWAN设备必须支持的。它的工作方式很简单:节点主动发一个上行数据包,然后打开两个短暂的接收窗口(RX1和RX2),等网关回复。如果没有回复,那就等下次节点再发数据时再说。
我做过一个温湿度监测项目,传感器每10分钟上报一次数据,用的就是Class A。电池用了两年没换过。为什么省电?因为节点平时都在睡觉,只有发送时才醒一下。
Class B:定时“查岗”
Class B在Class A的基础上,增加了定时的接收窗口。网关会发送一个信标(Beacon),节点同步时间后,在固定的时间点打开接收窗口。
这就像你每天定时查邮件,而不是等别人打电话给你。Class B适合那些需要网关主动下发指令的场景,比如远程开关控制。但代价是功耗比Class A高一些,因为节点要定期醒来听信标。
Class C:随时待命
Class C的设备几乎一直在监听。除了发送数据的时候,其他时间接收窗口都是打开的。说白了就是“随时在线”。
这种模式适合那些需要实时响应的设备,比如执行器、报警器。但功耗也最大,通常需要市电供电。我在做智能路灯项目时,路灯控制器用的就是Class C,因为要随时接收开关指令。
三种模式怎么选?我一般这样判断:
- 电池供电、数据上报为主 → Class A
- 需要定时接收指令、电池供电 → Class B
- 需要实时响应、有稳定电源 → Class C
2.3 应用层:数据长什么样?
应用层其实很简单,就是定义数据包的格式。LoRaWAN的应用层数据是加密的,使用AES-128算法。你想想看,物理层负责传,MAC层负责管,应用层就负责“说什么”。
一个典型的应用层数据包长这样:
// 假设我们要上报温度25.6°C,湿度68%
// 原始数据:25.6, 68
// 编码后:0x01 0x00 0x64 0x02 0x00 0x44
// 解释:
// 0x01 - 温度传感器ID
// 0x00 0x64 - 温度值256(实际25.6 * 10)
// 0x02 - 湿度传感器ID
// 0x00 0x44 - 湿度值68
我个人习惯用“小端序+缩放因子”的方式编码。比如温度保留一位小数,就乘以10再转成整数。这样既节省空间,又保证精度。
🔑 核心要点: LoRaWAN应用层数据最大只有51字节(DR0速率下)。所以编码要精打细算,能用一个字节绝不用两个。我见过有人把JSON直接塞进去,结果一个包都发不完——这是典型的“用互联网思维做物联网”,要不得。
2.4 分层架构:为什么这么设计?
LoRaWAN的分层架构,说白了就是“各司其职”。物理层管信号,MAC层管通信规则,应用层管数据内容。每一层只关心自己的事,不越界。
这样做的好处很明显:
- 解耦: 你换物理层芯片,MAC层和应用层不用动
- 复用: 同一套MAC层可以跑不同的应用
- 安全: 应用层加密,就算物理层被截获,数据也读不懂
我记得有一次帮客户排查问题,发现节点能入网但数据全是乱码。查了半天,原来是应用层加密密钥配错了。这就是分层的好处——问题定位很快,直接锁定应用层,不用去翻物理层的寄存器。
嗯,这一章内容不少。你先把CSS调制和三种Class的区别吃透,后面实战搭建网关时,这些知识会反复用到。下一章咱们开始动手,先看看LoRa网关的硬件选型。