1. 简介

Google 的 OpenThread (OT) 是 Thread 的开源实现。Google 发布了 OpenThread,以便开发者广泛使用 Google Nest 产品中使用的网络技术,从而加快开发适用于智能互联家居和商业建筑应用的产品。凭借窄平台抽象层和低内存占用,OpenThread 具有高度的可移植性。它同时支持系统芯片 (SoC) 和网络协处理器 (NCP) 设计。
Thread 规范定义了一种基于 IPv6 的可靠、安全且低功耗的无线设备到设备通信协议,适用于住宅和商业建筑应用。
Texas Instruments 已为 SimpleLink™ CC27xx 设备系列实现 OpenThread。GitHub 上的 ot-ti 代码库包含在 Texas Instruments SimpleLink Connected MCU 上运行 OpenThread 所需的平台驱动程序和示例应用。CC2745R10-Q1 是 TI SimpleLink CC27xx 系列中一款汽车级(符合 AEC-Q100 标准)、通过 Thread 认证的 IEEE 802.15.4 无线 MCU。
此 Codelab 介绍了如何使用 LP-EM-CC2745R10-Q1 LaunchPad 评估板和 ot-ti 代码库开始开发 OpenThread 应用。下图显示了此 Codelab 中使用的硬件设置,包括一个 OT 边界路由器 (OTBR) 和两个 Thread 全 Thread 设备 (FTD)。

学习内容
- 如何设置 Texas Instruments ot-ti 构建环境。
- 如何构建 OpenThread CLI 二进制文件并将其刷写到 LP-EM-CC2745R10-Q1 板。
- 如何使用 ot-br-posix 将 Raspberry Pi 设置为 OpenThread 边界路由器 (OTBR)。
- 如何在 OTBR 上创建 Thread 网络。
- 将设备带外调试到 Thread 网络。
- 如何使用 ping 命令验证节点之间的 Thread 通信。
2. 前提条件
硬件
- 3 个 LP-EM-CC2745R10-Q1 LaunchPad 板:一个配置为连接到边界路由器的 RCP,两个配置为完整 Thread 设备 (FTD)。
CC2745R10-Q1 是 TI SimpleLink CC27xx 系列中一款汽车级(符合 AEC-Q100 标准)Thread 认证的 IEEE 802.15.4 无线 MCU。LP-EM-CC2745R10-Q1 是对应的 LaunchPad 评估模块,支持 RCP、FTD、MTD 和 NCP Thread 角色。LP-EM-CC2340R5 LaunchPad 上的 CC2340R5 是一款内存较低的选项,只能用作 RCP。不支持 FTD、MTD 或 NCP 角色。如果您将 LP-EM-CC2340R5 替换为板 1 (RCP),则两个 FTD 板必须仍为 LP-EM-CC2745R10-Q1。 - 3 个 LP-XDS110ET 调试探针:每个 LaunchPad 板一个,用于通过 USB 进行编程和调试。
LP-XDS110ET 是一款单独的 USB 调试探头,LP-EM 规格的 LaunchPad 需要使用该探头。它包含用于功耗分析的 EnergyTrace 支持。LP-XDS110 是一种低成本替代方案,可提供相同的编程和调试功能,但不包含 EnergyTrace。作为另一种替代方案,您可以使用带有板载 XDS110 调试探针(例如 LAUNCHXL-CC26X2R1)的 LaunchPad 完全取代 LP-EM 板和单独的调试探针。如需了解详情,请参阅 LaunchPad 调试连接指南。 - 3 根 micro-USB 线,用于连接 LaunchPad 板和调试探针并为其供电。
- Raspberry Pi 4B 或更高版本,搭载 Raspberry Pi OS,通过以太网连接到互联网。此设备将配置为 OT 边界路由器主机。

- Linux 或 macOS 主机系统,至少具有 2 个 USB 端口且可访问互联网。构建环境需要与 Bash 兼容的 shell。Windows 用户应使用 WSL2(适用于 Linux 的 Windows 子系统 2)搭配 Ubuntu。
- 至少一根以太网网线,用于将 Raspberry Pi 连接到互联网。或者,您也可以将 Raspberry Pi 连接到 Wi-Fi,并使用
wlan0作为基础架构接口 - 详情请参阅 OTBR 设置步骤。
软件
- TI ot-ti 代码库:https://github.com/TexasInstruments/ot-ti
- GNU ARM Embedded Toolchain 12.2(由引导脚本自动安装)
- SysConfig 1.27.0(由引导脚本自动安装)
- TI UniFlash:用于将固件刷写到 LaunchPad 板
- ot-br-posix:https://github.com/openthread/ot-br-posix
- 串行终端,例如 PuTTY (Windows)、minicom (Linux) 或 screen (macOS/Linux)
3. 硬件设置
此 Codelab 使用三个 LP-EM-CC2745R10-Q1 板:
- 主板 1 (RCP):运行
ot-rcp固件。通过 USB 连接到 Raspberry Pi,作为边界路由器的无线电协处理器。 - 主板 2 (FTD 1):以完整 Thread 设备身份运行
ot-cli-ftd固件。 - 主板 3 (FTD 2):以完整 Thread 设备身份运行
ot-cli-ftd固件。

通过 micro-USB 将每个 LaunchPad 连接到主机。USB 连接通过板载 XDS110 调试探针提供电源和调试/编程功能。
每个 LP-EM-CC2745R10-Q1 在通过 USB 连接时显示为两个虚拟串行端口:一个用于 XDS110 调试接口,另一个用于应用 UART。打开串行控制台时,请连接到应用/用户 UART 端口,而不是辅助数据端口。

4. 代码库设置和构建
ot-ti 构建系统使用 CMake,并且需要 Bash shell。本部分中的所有命令均在 Linux 或 macOS 主机(或 Windows 上的 WSL2)上运行。
1. 克隆存储库
$ git clone https://github.com/TexasInstruments/ot-ti.git $ cd ot-ti $ git submodule update --init
2. 运行引导脚本
引导脚本会安装所需的依赖项,包括 GNU ARM 工具链和 SysConfig:
$ ./script/bootstrap
引导加载程序脚本需要 cmake、git、wget 和标准 build 工具。在 Ubuntu/Debian 上,使用以下命令安装必备项:sudo apt-get install -y cmake git make wget tar ninja-build
3. 为 LP_EM_CC2745R10_Q1 构建固件
为 LP-EM-CC2745R10-Q1 板构建所有固件映像:
$ ./script/build LP_EM_CC2745R10_Q1
LP_EM_CC2745R10_Q1 build 目标对应于 CC27xx SimpleLink 系列中的 CC2745R10-Q1 设备(Arm Cortex-M33F 核心)。如需查看所有受支持的板,请运行不带参数的 ./script/build。
成功构建后,ELF 二进制文件位于 build/bin/ 中:
$ ls build/bin/ ot-cli-ftd.out ot-cli-mtd.out ot-ncp-ftd.out ot-rcp.out
此 Codelab 中使用的两张图片如下所示:
ot-rcp.out:边框路由器板的无线电协处理器固件。ot-cli-ftd.out:两个 FTD 板的完整 Thread 设备 CLI 固件。
可选的 Minimal Thread 设备:如果您想探索休眠的终端设备,而不是 Full Thread 设备,可以在 Board 2 和 3 上刷写 ot-cli-mtd.out 来代替 ot-cli-ftd.out。MTD 不会路由 Thread 流量,并且可以进入低功耗睡眠状态,因此非常适合电池供电的应用。本 Codelab 中的 Thread 网络形成步骤对于这两种设备类型都是相同的。
可选的网络协处理器 (NCP):ot-ncp-ftd.out 二进制文件实现了 NCP 架构,其中 OpenThread 堆栈在设备上运行,主机处理器通过 Spinel 协议驱动它。NCP 用法不在本 Codelab 的范围内,请参阅 NCP 自述文件了解详情。
5. 刷写固件
使用 TI UniFlash 将 ELF 映像刷写到 LaunchPad 板。
使用 UniFlash 刷写
- 打开 UniFlash。由于具有自动设备检测功能,已连接的 LaunchPad 板会显示在 Detected Devices 下。如果系统未自动检测到您的板,请点击 New Configuration,选择
LP-EM-CC2745R10-Q1目标,然后选择 XDS110 USB 调试探针。
- 选择主板 1(将刷写
ot-rcp.out),然后点击开始。 - 点击浏览按钮,然后导航到
ot-ti/build/bin/ot-rcp.out。
- 点击 Load Image 以刷写固件。日志区域会显示进度并确认完成情况。
- 针对面板 2 和面板 3 重复执行第 2 步到第 4 步,并为每个面板选择
ot-ti/build/bin/ot-cli-ftd.out。
替代方案:使用 Code Composer Studio (CCS) 进行刷写
Code Composer Studio 可用作 UniFlash 的替代方案,此外还提供完整的调试环境:
- 下载并安装 Code Composer Studio。
- 使用 XDS110 调试器为 LP-EM-CC2745R10-Q1 创建目标连接 (CCXML)。请参阅 CCS 用户指南:手动方法。
- 按照 CCS 用户指南:手动启动中的说明启动无项目调试会话。
- 连接到 Arm Cortex-M33 核心,然后点击 Load 加载 ELF 映像。
默认 CCXML 配置使用 2 线 cJTAG 来匹配默认的 LP-EM-CC2745R10-Q1 跳线配置。通过 JTAG 进行编程后,请对电路板进行电源循环,以清除启动时暂停标志。
6. 对 HSM 进行编程
CC2745R10-Q1 包含一个硬件安全模块 (HSM),必须先对其进行配置,然后才能运行 Thread 或其他安全应用固件。如果您的 LP-EM-CC2745R10-Q1 板尚未完成 HSM 编程,请立即完成此步骤。
使用 UniFlash 对 HSM 进行编程:
- 打开 UniFlash,然后从 Detected Devices 中选择 LP-EM-CC2745R10-Q1 板。
- 前往 HSM 编程面板,然后加载 HSM 固件映像,如下所示。

- 按照屏幕上的提示完成 HSM 配置。该操作会记录在 UniFlash 输出控制台中。
如需了解完整的 HSM 编程流程(包括 SimpleLink 低功耗 F3 SDK 中的所需固件映像路径),请参阅 TI 资源管理器中的 CC2745R10-Q1 快速入门指南。
7. 固件摘要
此时,应已刷写所有三个板:
- 板 1:
ot-rcp.out:断开与主机之间的连接,并通过 USB 连接到 Raspberry Pi。 - 主板 2:
ot-cli-ftd.out:保持与主机连接。 - 主板 3:
ot-cli-ftd.out:保持与主机连接。
您的硬件设置将如下图所示。板 1 连接到 Raspberry Pi,作为 OTBR 的无线电协处理器,而板 2 和 3 仍连接到主机,用于串行控制台访问。

8. 为 ot-cli-ftd 设备设置串行控制台
LP-EM-CC2745R10-Q1 通过 USB 以 921600 波特的速率公开应用 UART。
使用以下设置,为每个 FTD 板打开一个连接到应用 UART COM 端口 (Windows) 或 /dev/ttyACM* 设备 (Linux/macOS) 的串行终端:
参数 | 值 |
速度(波特) |
|
数据位 |
|
停止位 |
|
对等 |
|
流控制 |
|
提示(Linux/macOS):在插入电路板之前和之后运行 ls /dev/ttyACM*,并记下出现的条目,以确定正确的设备节点。每个 LP-EM-CC2745R10-Q1 会创建两个条目:编号较小的端口是 XDS110 调试 UART,编号较大的端口是应用 UART。例如,如果电路板创建了 /dev/ttyACM0 和 /dev/ttyACM1,请使用 /dev/ttyACM1。
提示(Windows):打开设备管理器,在插入开发板后,在端口 (COM 和 LPT) 下查找两个新的 COM 端口。XDS110 调试数据端口通常会先显示,请使用第二个(编号较高的)COM 端口作为应用控制台。
在终端中按 Enter 键,获取 OpenThread CLI 提示符 (>)。如需查看可用命令的完整列表,请参阅 OpenThread CLI 参考文档。验证 FTD 是否正常运行:
> state disabled Done

您将不会为 RCP 板设置串行控制台。Raspberry Pi 上的 OTBR 直接与 RCP 通信。在下一步中,您将 Raspberry Pi 配置为 OpenThread 边界路由器。
9. 将 Raspberry Pi 设置为边界路由器
OTBR 基于 ot-br-posix(开源 OpenThread 边界路由器项目)构建。边界路由器在 Raspberry Pi 上运行,并通过 USB 使用 Board 1 (RCP) 作为其 802.15.4 无线电。
Raspberry Pi 设置
- 使用 Raspberry Pi Imager 将 Raspberry Pi OS(64 位 Lite 或桌面版)刷写到 SD 卡。
- 启动 Raspberry Pi 并打开终端(通过 SSH 或直接打开)。
- 更新软件包管理器并升级已安装的软件包:
$ sudo apt-get update $ sudo apt-get upgrade -y
在继续操作之前,请在更新后重启 Raspberry Pi:sudo reboot
将板 1 (RCP) 连接到 Raspberry Pi
通过 micro-USB 将板 1(已刷入 ot-rcp)连接到 Raspberry Pi。连接后,验证设备节点是否显示:
$ ls /dev/ttyACM* /dev/ttyACM0 /dev/ttyACM1
RCP 板的应用 UART 通常为 /dev/ttyACM1(XDS110 调试 UART 为 /dev/ttyACM0)。请检查应用 UART 是否在后续步骤中启动 OTBR 代理时做出响应,以验证哪个端口是应用 UART。如果连接了其他 USB 串行设备,设备节点编号可能会有所不同。相应地调整 OTBR 配置中的路径。
构建并安装 ot-br-posix
在 Raspberry Pi 上,克隆并构建 ot-br-posix:
$ git clone https://github.com/openthread/ot-br-posix.git $ cd ot-br-posix $ ./script/bootstrap
运行设置脚本,将以太网接口指定为主干(基础设施)接口:
$ INFRA_IF_NAME=eth0 ./script/setup
eth0 是有线以太网接口的典型名称。如果您是通过 Wi-Fi 而不是以太网连接 Raspberry Pi,请将 eth0 替换为 wlan0(并确保 Pi 已连接到您的 Wi-Fi 网络)。使用 ip link show 验证有效接口名称。
设置脚本从源代码构建 ot-br-posix,安装 otbr-agent 和 otbr-web 系统服务,并配置网络堆栈。此过程在 Raspberry Pi 4B 上通常需要 10-20 分钟。
配置 OTBR 代理
修改 OTBR 代理配置文件,以指定 RCP 设备路径和波特率:
$ sudo nano /etc/default/otbr-agent
找到 OTBR_AGENT_OPTS 行,并将其更新为引用 RCP 应用 UART:
OTBR_AGENT_OPTS="-I wpan0 -B eth0 spinel+hdlc+uart:///dev/ttyACM1?uart-baudrate=921600"
如果您的 Raspberry Pi 是通过 Wi-Fi 连接的,请将 eth0 替换为 wlan0。
OTBR_AGENT_OPTS="-I wpan0 -B wlan0 spinel+hdlc+uart:///dev/ttyACM1?uart-baudrate=921600"
LP-EM-CC2745R10-Q1 RCP 应用 UART 以 921600 波特的速率运行。验证设备路径(本例中为 /dev/ttyACM1)是否与 RCP 板的应用 UART 匹配。
重启 OTBR 代理以应用配置:
$ sudo systemctl restart otbr-agent $ sudo systemctl enable otbr-agent
验证代理是否正在运行:
$ sudo systemctl status otbr-agent
与 RCP 节点互动
使用 ot-ctl 工具与 RCP 节点通信:
$ sudo ot-ctl state disabled Done
您可以监控 OTBR 代理日志,以查看连接和状态消息:
$ sudo journalctl -u otbr-agent -f
(可选)OTBR Web 界面可在 http:// 中找到,并提供 Thread 网络的图形视图。
如需停止或重启 OTBR 代理,请执行以下操作:
$ sudo systemctl stop otbr-agent $ sudo systemctl start otbr-agent
此时,您应该有三个有效控制台:
- 主机上板 2 (
ot-cli-ftd 1) 的串行终端。 - 主机上主板 3 (
ot-cli-ftd 2) 的串行终端。 - Raspberry Pi 上用于
ot-ctl(OTBR/RCP) 的 SSH 或终端会话。
您现在可以组建 Thread 网络了。
10. 创建 Thread 网络
设置 RCP (OTBR)
从 Raspberry Pi 上的 ot-ctl shell 创建新的 Thread 网络。按顺序输入以下命令:
索引 | 命令 | 说明 | 预期响应 | ||
1 |
| 创建新的网络配置。 | 完成 | ||
2 |
| 将新数据集提交到有效操作数据集。 | 完成 | ||
3 |
| 启用 Thread 接口。 | 完成 | ||
4 |
| 启用并附加 Thread 协议操作。 | 完成 | ||
等待 10 秒,直到 Thread 接口启动。 | |||||
5 |
| 检查设备状态。应为 leader。其他可能的状态:离线、已停用、已分离、子设备、路由器或主设备。 | leader | ||
6 |
| 查看网络配置。您的值会有所不同。记下信道、网络密钥、网络名称和 PAN ID,这些信息是让 FTD 加入网络所必需的。 | 有效时间戳:1 | ||
将 FTD 添加到 Thread 网络(带外方法)
使用带外调试方法时,您可以直接提供网络凭据。在每个 FTD 板的串行终端中,使用上述 OTBR 数据集输出中的信道和网络密钥输入以下命令:
索引 | 命令 | 说明 | 预期响应 | ||
1 |
| 将频道设置为与 OTBR 匹配。将 | 完成 | ||
2 |
| 设置网络密钥。替换为 OTBR 的网络密钥。只需提供此密钥即可附加。 | 完成 | ||
3 |
| 将新数据集提交到有效操作数据集。 | 完成 | ||
4 |
| 启用 Thread 接口。 | 完成 | ||
5 |
| 启用并附加 Thread 协议操作。 | 完成 | ||
等待 20 秒,让设备加入并自行配置。 | |||||
6 |
| 检查设备状态。 | 儿童 | ||
由于 Thread 网络具有自配置特性,并且这些设备是完整 Thread 设备,因此一个或两个 FTD 最终都可能会成为路由器。您可以使用 state 命令随时验证当前角色。
Thread 设备之间的通信
使用 ping 命令验证设备是否可以通信。使用 ipaddr 获取每个设备的 IPv6 地址:
> ipaddr fd5c:c6b:3a17:40b9:0:ff:fe00:fc00 # Leader Anycast Locator (ALOC) fd5c:c6b:3a17:40b9:0:ff:fe00:1800 # Routing Locator (RLOC) fd5c:c6b:3a17:40b9:84e2:bae8:bd5b:fa03 # Mesh-Local EID (ML-EID) fe80:0:0:0:c449:ca4a:101f:5d16 # Link-Local Address (LLA) Done
从两个 FTD 中,使用 OTBR 的 RLOC 地址 ping OTBR:
> ping fd5c:c6b:3a17:40b9:0:ff:fe00:1800 Done > > 16 bytes from fd5c:c6b:3a17:40b9:0:ff:fe00:1800: icmp_seq=3 hlim=64 time=30ms 16 bytes from fd5c:c6b:3a17:40b9:0:ff:fe00:1800: icmp_seq=3 hlim=64 time=52ms
成功的响应会确认 Thread 网络正在运行,并且设备可以通信。重复此过程,从 OTBR (sudo ot-ctl ping ) ping 每个 FTD。
11. 恭喜
您已使用 TI CC2745R10-Q1 板创建了 Thread 网络!
您现在已了解:
- 如何设置 Texas Instruments ot-ti 构建环境。
- 如何构建 OpenThread CLI 二进制文件并将其刷写到 LP-EM-CC2745R10-Q1 LaunchPad。
- 如何使用 ot-br-posix 将 Raspberry Pi 设置为 OpenThread 边界路由器 (OTBR)。
- 如何在 OTBR 上创建 Thread 网络。
- 将设备带外调试到 Thread 网络。
- 如何使用 ping 命令验证节点之间的 Thread 通信。
延伸阅读
如需各种 OpenThread 资源,请访问 openthread.io 和 GitHub,其中包括:
- 支持的平台 - 了解支持 OpenThread 的所有平台
- 构建 OpenThread - 有关构建和配置 OpenThread 的更多详细信息
- Thread 基础知识 - 涵盖了本 Codelab 中介绍的所有 Thread 概念
- TI ot-ti 代码库 - TI 针对 SimpleLink 设备的 OpenThread 实现,包含 build 说明和版本说明
- CC2745R10-Q1 产品页面 - 设备数据表、参考设计和其他文档
- LP-EM-CC2745R10-Q1 LaunchPad - 评估板用户指南和硬件文件
- OpenThread CLI 参考文档 - OpenThread CLI 及其用法的概览
- OpenThread CLI 命令 - 所有 OpenThread CLI 命令的完整参考文档
- TI E2E 社区 - Thread 和 Zigbee - Texas Instruments 无线连接产品的技术支持社区