4. LoRaWAN激活方式:OTAA与ABP激活流程

聊到LoRaWAN,有个绕不开的话题——终端设备怎么“入网”?

说白了,就是你的传感器节点第一次跟网关打招呼,得有个身份认证的过程。LoRaWAN给了两种方式:OTAA(空中激活)和ABP(个性化激活)。

我个人习惯把OTAA叫做“正规军”,ABP叫做“特种兵”。为什么这么讲?往下看你就明白了。

4.1 OTAA:空中激活流程

OTAA全称是Over-The-Air Activation。设备每次上电,都要跟网络服务器“握手”一次,拿到会话密钥后才能干活。

我在项目中遇到过好几次,客户说“设备连不上网”,结果一查,是OTAA流程里Join-Request发出去没收到回复。嗯,这里要注意,OTAA依赖网络覆盖和信号质量。

4.1.1 激活流程

  1. 设备上电,读取预置的DevEUI、AppEUI、AppKey。
  2. 设备构造Join-Request消息,通过网关发往网络服务器。
  3. 网络服务器验证AppEUI和DevEUI,用AppKey解密消息。
  4. 验证通过后,服务器返回Join-Accept消息。
  5. 设备从Join-Accept中提取DevAddrNwkSKeyAppSKey
  6. 设备进入“已激活”状态,开始正常收发数据。

核心要点:OTAA每次激活都会生成新的会话密钥。安全性高,但流程稍慢。

4.2 ABP:个性化激活流程

ABP全称是Activation By Personalization。设备出厂前,就把DevAddr、NwkSKey、AppSKey直接写死在固件里。

你想想看,这就像给设备办了张“永久饭卡”,不用每次吃饭前都去充值。好处是上电就能用,坏处是密钥泄露了就很麻烦。

我曾经在一个水表项目里用过ABP,因为水表装在井盖下面,信号本来就差,再走OTAA流程,经常超时。换成ABP后,问题就解决了。

4.2.1 激活流程

  1. 设备出厂前,由生产工具生成DevAddrNwkSKeyAppSKey
  2. 这些参数写入设备固件,同时也在网络服务器上注册。
  3. 设备上电后,直接用DevAddr作为身份标识,用NwkSKey加密网络层数据。
  4. 不需要Join-Request/Join-Accept交互,直接发送上行数据。

警告:ABP模式下,如果设备更换网络服务器,必须重新烧录密钥。否则设备无法入网。

4.3 Join-Request与Join-Accept消息结构

这两个消息是OTAA流程的核心。我建议你把它们的结构背下来,调试的时候会经常用到。

4.3.1 Join-Request消息

字段 长度(字节) 说明
AppEUI 8 应用标识符,类似“应用ID”
DevEUI 8 设备标识符,全球唯一
DevNonce 2 随机数,防止重放攻击
MIC 4 消息完整性校验码

消息总长度:8 + 8 + 2 + 4 = 22字节

DevNonce这个字段,我踩过坑。有一次设备反复入网失败,抓包发现DevNonce重复了。原来代码里没做随机数种子初始化,每次上电都生成一样的值。服务器一看,直接拒绝。

4.3.2 Join-Accept消息

字段 长度(字节) 说明
AppNonce 3 服务器生成的随机数
NetID 3 网络标识符
DevAddr 4 设备短地址
DLSettings 1 下行参数设置
RxDelay 1 接收窗口延迟
CFList(可选) 0或16 信道频率列表
MIC 4 消息完整性校验码

消息总长度:3 + 3 + 4 + 1 + 1 + (0或16) + 4 = 16字节或32字节

小技巧:调试时可以用串口打印Join-Accept的原始字节,对照表格逐字段解析。我习惯用十六进制转储,一眼就能看出问题。

4.4 DevEUI / AppEUI / AppKey 的作用

这三个参数是LoRaWAN设备的“身份证”和“钥匙”。

  • DevEUI:设备唯一标识,类似MAC地址。全球唯一,由芯片厂商分配。我建议你在采购模组时,让供应商提供DevEUI列表,方便批量管理。
  • AppEUI:应用唯一标识,用于区分不同的应用场景。比如智能水表和智能电表,AppEUI不同,服务器就能区分数据该路由到哪个应用平台。
  • AppKey:应用密钥,用于派生会话密钥。OTAA模式下,服务器用AppKey解密Join-Request,并生成NwkSKey和AppSKey。

说白了,DevEUI是“你是谁”,AppEUI是“你属于哪个项目”,AppKey是“你的密码”。

我曾经见过一个项目,所有设备用了相同的AppKey。结果一台设备被破解,整个网络都暴露了。嗯,这个坑希望大家别踩。

4.5 知识体系图

下面这张图展示了OTAA和ABP的核心流程对比,以及各参数的关系。我画图时习惯把关键路径标红,方便记忆。

LoRaWAN激活方式对比图 OTAA 空中激活 1. 设备上电,读取DevEUI/AppEUI/AppKey 2. 发送Join-Request(22字节) 3. 服务器验证,返回Join-Accept 4. 提取DevAddr/NwkSKey/AppSKey 5. 设备激活成功,开始通信 ABP 个性化激活 1. 出厂预置DevAddr/NwkSKey/AppSKey 2. 设备上电,直接使用预置密钥 3. 无需Join流程,直接发送数据 4. 服务器根据DevAddr识别设备 5. 设备直接进入工作状态 OTAA:安全性高,适合移动设备 | ABP:响应快,适合固定设备

4.6 选型建议

到底用OTAA还是ABP?我个人的经验是:

  • 电池供电、移动设备:用OTAA。每次换位置重新激活,安全性好。
  • 市电供电、固定位置:用ABP。省去激活流程,降低功耗。
  • 批量生产:优先OTAA。密钥管理方便,不用每个设备单独烧录。

总结:OTAA是“每次进门刷脸”,ABP是“直接刷工卡”。没有绝对的好坏,看场景选。


公众号:蓝海资料掘金营,微信deep3321