1. 簡介

Google 的 OpenThread (OT) 是 Thread 的開放原始碼實作項目。Google 發布了 OpenThread,讓開發人員廣泛使用 Google Nest 產品採用的網路技術,加速開發智慧聯網家庭和商業建築應用程式的產品。OpenThread 具有狹窄的平台抽象層和較小的記憶體用量,因此非常容易移植。支援系統單晶片 (SoC) 和網路協同處理器 (NCP) 設計。
Thread 規格定義了以 IPv6 為基礎的可靠、安全且低功耗的無線裝置對裝置通訊協定,適用於住家和商業建築應用程式。
德州儀器已為 SimpleLink™ CC27xx 裝置系列導入 OpenThread。GitHub 上的 ot-ti 存放區包含在 Texas Instruments SimpleLink Connected MCU 上執行 OpenThread 時所需的平台驅動程式和範例應用程式。CC2745R10-Q1 是 TI SimpleLink CC27xx 系列的車用級 (通過 AEC-Q100 認證) IEEE 802.15.4 無線 MCU,並通過 Thread 認證。
本程式碼研究室說明如何使用 LP-EM-CC2745R10-Q1 LaunchPad 評估板和 ot-ti 存放區,開始開發 OpenThread 應用程式。下圖顯示本程式碼研究室使用的硬體設定,包括 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 角色。CC2340R5 搭配 LP-EM-CC2340R5 LaunchPad 是記憶體較小的選項,只能做為 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。此外,您也可以使用 LaunchPad (搭載 XDS110 偵錯探針,例如 LAUNCHXL-CC26X2R1) 完全取代 LP-EM 板和獨立偵錯探針。詳情請參閱「LaunchPad 偵錯連線指南」。 - 3 條 micro-USB 傳輸線,用於連接 LaunchPad 開發板和偵錯探針,並為這些裝置供電。
- Raspberry Pi 4B 以上版本,並透過乙太網路連上網際網路。這會設定為 OT 邊界路由器主機。

- Linux 或 macOS 主機系統,至少要有 2 個 USB 連接埠,並可存取網際網路。建構環境需要與 Bash 相容的殼層。Windows 使用者應搭配 Ubuntu 使用 WSL2 (適用於 Linux 的 Windows 子系統 2)。
- 至少一條乙太網路線,用來將 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. 硬體設定
本程式碼研究室使用三塊 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 偵錯探針供電,並進行偵錯/程式設計。
透過 USB 連接時,每個 LP-EM-CC2745R10-Q1 會顯示為兩個虛擬序列埠:一個用於 XDS110 偵錯介面,另一個用於應用程式 UART。開啟序列主控台時,請連線至「Application/User UART」通訊埠,而非「Auxiliary Data」通訊埠。

4. 設定及建構存放區
ot-ti 建構系統使用 CMake,且需要 Bash 殼層。本節中的所有指令都會在 Linux 或 macOS 主機 (或 Windows 上的 WSL2) 上執行。
1. 複製存放區
$ git clone https://github.com/TexasInstruments/ot-ti.git $ cd ot-ti $ git submodule update --init
2. 執行啟動程序指令碼
Bootstrap 指令碼會安裝必要的依附元件,包括 GNU ARM 工具鍊和 SysConfig:
$ ./script/bootstrap
Bootstrap 指令碼需要 cmake、git、wget 和標準建構工具。在 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 建構目標對應於 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
本程式碼研究室使用的兩張圖片如下:
ot-rcp.out:邊界路由器板的無線電共同處理器韌體。ot-cli-ftd.out:兩個 FTD 板的完整 Thread 裝置 CLI 韌體。
選用最簡化的 Thread 裝置:如要探索休眠終端裝置,而非完整的 Thread 裝置,可以在 Boards 2 和 3 上閃爍 ot-cli-mtd.out,取代 ot-cli-ftd.out。MTD 不會傳送 Thread 流量,而且可以進入低耗電睡眠狀態,因此非常適合電池供電的應用程式。本程式碼研究室中的 Thread 網路形成步驟,適用於這兩種裝置類型。
選用網路共同處理器 (NCP):ot-ncp-ftd.out 二進位檔會實作 NCP 架構,OpenThread 堆疊會在裝置上執行,主機處理器則透過 Spinel 通訊協定驅動該堆疊。NCP 用量不在本程式碼研究室的範圍內,詳情請參閱 NCP README。
5. 刷入韌體
使用 TI UniFlash 將 ELF 映像檔刷新至 LaunchPad 開發板。
使用 UniFlash 刷新裝置
- 開啟 UniFlash。由於自動偵測裝置功能,已連線的 LaunchPad 開發板會顯示在「Detected Devices」下方。如果系統未自動偵測到開發板,請按一下「New Configuration」,選取
LP-EM-CC2745R10-Q1目標,然後選擇 XDS110 USB 偵錯探針。
- 選取「Board 1」(要刷寫
ot-rcp.out的開發板),然後按一下「Start」(開始)。 - 按一下「瀏覽」按鈕,然後前往
ot-ti/build/bin/ot-rcp.out。
- 按一下「Load Image」刷新韌體。記錄區域會顯示進度並確認完成。
- 針對「Board 2」和「Board 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 User's Guide: Manual Method」。
- 如要啟動不含專案的偵錯工作階段,請參閱 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 Low Power F3 SDK 內所需的韌體映像檔路徑,請參閱 TI Resource Explorer 中的 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 bps 速率公開應用程式 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 是以開放原始碼的 OpenThread 邊界路由器專案 ot-br-posix 為基礎建構而成。邊界路由器會在 Raspberry Pi 上執行,並透過 USB 使用主機板 1 (RCP) 做為 802.15.4 無線電。
Raspberry Pi 設定
- 使用 Raspberry Pi Imager,將 Raspberry Pi OS (64 位元 Lite 或 Desktop) 燒錄到 SD 卡。
- 啟動 Raspberry Pi,然後開啟終端機 (透過 SSH 或直接開啟)。
- 更新套件管理員並升級已安裝的套件:
$ sudo apt-get update $ sudo apt-get upgrade -y
更新後,請先重新啟動 Raspberry Pi,再繼續操作:sudo reboot
將主板 (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
您也可以透過 http:// 使用 OTBR 網頁介面,以圖形化方式查看 Thread 網路。
如要停止或重新啟動 OTBR 代理程式,請按照下列步驟操作:
$ sudo systemctl stop otbr-agent $ sudo systemctl start otbr-agent
此時,您應該有三個有效的控制台:
- 主機電腦上的「Board 2」() 序列終端機 (
ot-cli-ftd 1)。 - 主機上的「Board 3」序列終端機 (
ot-cli-ftd 2)。 - Raspberry Pi 上的 SSH 或終端機工作階段,適用於
ot-ctl(OTBR/RCP)。
現在可以建立 Thread 網路了。
10. 建立 Thread 網路
設定 RCP (OTBR)
在 Raspberry Pi 的 ot-ctl 殼層中建立新的 Thread 網路。依序輸入下列指令:
索引 | 指令 | 說明 | 預期的回覆 | ||
1 |
| 建立新的網路設定。 | 完成 | ||
2 |
| 將新資料集提交至「有效作業資料集」。 | 完成 | ||
3 |
| 啟用 Thread 介面。 | 完成 | ||
4 |
| 啟用並附加 Thread 協定作業。 | 完成 | ||
等待 10 秒,系統就會顯示 Thread 介面。 | |||||
5 |
| 檢查裝置狀態。應為「領導者」。其他可能狀態:離線、已停用、已卸離、子項、路由器或領導者。 | 領導者 | ||
6 |
| 查看網路設定。您的值會有所不同。請記下頻道、網路金鑰、網路名稱和 PAN ID,這些資訊是將 FTD 加入網路時的必要條件。 | Active Timestamp: 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,使用 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 基礎知識:涵蓋本程式碼研究室中所有 Thread 概念
- TI ot-ti 存放區:TI 為 SimpleLink 裝置實作的 OpenThread,內含建構說明和版本資訊
- CC2745R10-Q1 產品頁面:裝置資料表、參考設計和其他說明文件
- LP-EM-CC2745R10-Q1 LaunchPad - 評估板使用者指南和硬體檔案
- OpenThread CLI 參考資料:OpenThread CLI 總覽和使用方式
- OpenThread CLI 指令:所有 OpenThread CLI 指令的完整參考資料
- TI E2E Community - Thread & Zigbee:Texas Instruments 無線連線產品的技術支援社群