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
⚠️ 避坑指南: 我曾经在项目里为了追求最远距离,把SF设成了12。结果数据包一个要传将近2秒,节点电池三天就耗光了。后来改成SF9,距离只少了20%,电池却撑了半年。记住:不是SF越大越好,要平衡。

2.2 MAC层:Class A/B/C,三种活法

MAC层决定了节点怎么跟网关“说话”。LoRaWAN定义了三种设备类型,我管它们叫“三种活法”。

Class A:最省电,但最被动

Class A是所有LoRaWAN设备必须支持的。它的工作方式很简单:节点主动发一个上行数据包,然后打开两个短暂的接收窗口(RX1和RX2),等网关回复。如果没有回复,那就等下次节点再发数据时再说。

我做过一个温湿度监测项目,传感器每10分钟上报一次数据,用的就是Class A。电池用了两年没换过。为什么省电?因为节点平时都在睡觉,只有发送时才醒一下。

💡 小技巧: 如果你做电池供电的设备,优先选Class A。我习惯把上报间隔设在5~15分钟之间,既保证数据实时性,又不会太耗电。

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网关的硬件选型。