4. Thread网络基础与终端入网
Thread 是面向低功耗物联网设备的 IPv6 网状网络协议,运行在 IEEE 802.15.4 物理层之上。对 nRF 终端开发者而言,理解 Thread 的网络参数、入网流程以及 MLE/CoAP 调试手段,是让设备稳定接入并长期驻网的前提。本节围绕三个核心问题展开:网络用什么参数标识、终端如何一步步成为子节点或休眠终端、出问题时如何用 MLE 与 CoAP 观察和定位。
一、Thread 网络参数:PAN ID、信道与扩展 PAN ID
Thread 网络由几个关键参数唯一标识。最基础的是 PAN ID(Personal Area Network ID),它是一个 16 位值,用于在同一信道上区分不同网络,例如 0x1234。PAN ID 相同且信道相同的两个网络会互相干扰,因此部署时通常由边界路由器统一分配。比 PAN ID 更严格的是 扩展 PAN ID(Extended PAN ID,8 字节),它才是 Thread 网络的全局唯一标识,即使两个网络碰巧用了相同的 PAN ID 和信道,扩展 PAN ID 不同也不会被误认为同一网络。
信道决定射频工作在 2.4 GHz 的哪个频点。IEEE 802.15.4 在 2.4 GHz 定义了 11~26 共 16 个信道,Thread 默认使用信道 11~26,其中信道 11~14 与 Wi-Fi 信道 1 重叠较多,实际部署常优先选择 15、20、25、26 等相对干净的信道。nRF52840 的 802.15.4 射频支持全部这些信道,切换信道只需修改网络参数并重新入网。
此外还有 网络密钥(Network Key)、主密钥(Master Key)、Mesh-Local 前缀 和 网络名称。网络密钥用于 802.15.4 层加密,主密钥用于派生网络密钥,Mesh-Local 前缀(如 fd00:0db8::/64)决定设备在网内的 IPv6 地址段。这些参数必须与网络内其他节点一致,否则 MLE 层无法完成认证。
二、终端作为子节点或休眠终端的入网流程
Thread 终端按角色分为 Router、REED(Router-Eligible End Device)、FED(Full End Device)、MED(Minimal End Device)和 SED(Sleepy End Device)。nRF 终端通常配置为 MED 或 SED:MED 保持射频常开、由父节点转发,SED 则周期性休眠,只在轮询时唤醒接收下行数据。
入网过程从 MLE Discovery 开始。终端在目标信道上发送 MLE Discovery Request,边界路由器或已入网节点回复 Discovery Response,其中携带扩展 PAN ID、网络名称、信道和允许入网标志。终端据此选定网络,随后发送 MLE Parent Request,请求成为子节点。父节点回复 Parent Response,终端从中选择信号质量最好的父节点,再发送 Child ID Request 完成认证与地址分配。认证通过后,终端获得 16 位 RLOC16 和 IPv6 地址,正式成为子节点。
对于 SED,入网后还需配置轮询周期。nRF Connect SDK 中可通过 ot-ctl pollperiod 设置,例如 ot-ctl pollperiod 1000 表示每 1000 ms 唤醒一次接收父节点缓存的下行帧。轮询周期越长越省电,但下行延迟越大,需要根据业务权衡。
三、MLE 与 CoAP 调试
MLE(Mesh Link Establishment)负责邻居发现、链路质量评估和父节点选择,是入网阶段最值得观察的协议。调试时可用 nRF Sniffer 抓取 802.15.4 帧,过滤 MLE 消息,观察 Discovery Request/Response、Parent Request/Response 的交互顺序和 RSSI 值。若终端反复发送 Parent Request 却收不到 Response,通常说明信道不匹配、网络密钥错误或父节点未开放入网。
CoAP 在 Thread 中用于地址查询、诊断和固件升级。常用诊断命令包括:
ot-ctl state # 查看当前角色(child/router/leader)
ot-ctl childtable # 查看子节点列表与 RLOC16
ot-ctl parentinfo # 查看父节点信息与链路质量
ot-ctl neighbor table # 查看邻居表
ot-ctl diag start # 启动诊断
ot-ctl diag get
当终端显示 state: child 且 parentinfo 中有有效 RLOC16 和 RSSI 时,说明入网成功。若 state 长期为 detached,应依次检查信道、PAN ID、网络密钥和扩展 PAN ID 是否与网络一致,再用 Sniffer 确认 MLE 交互是否完整。
ot-ctl scan 确认目标信道上有网络存在,再核对网络密钥。MLE 层失败往往不是代码问题,而是参数不一致。四、关键参数速查
| 参数 | 示例值 | 作用 |
|---|---|---|
| PAN ID | 0x1234 | 同信道区分网络 |
| 扩展 PAN ID | 8 字节 | 全局唯一网络标识 |
| 信道 | 15 | 2.4 GHz 频点选择 |
| 网络密钥 | 128 bit | 802.15.4 加密 |
| 轮询周期 | 1000 ms | SED 休眠与唤醒节奏 |
掌握这些参数和流程后,终端入网就不再是黑盒。实际开发中建议先用 ot-ctl 手动入网验证参数,再固化到固件中,配合 Sniffer 和 MLE 日志定位问题,能显著缩短调试周期。