OpenThread 不受作業系統和平台限制,且具有狹窄的平台抽象層 (PAL)。這個 PAL 定義了:

- 含鬧鐘的自由運作計時器鬧鐘介面
- 用於傳輸 CLI 和 Spinel 訊息的匯流排介面 (UART、SPI)
- IEEE 802.15.4-2006 通訊的無線電介面
- GCC 專屬的初始化常式
- 產生真實隨機號碼的熵
- 非揮發性設定儲存空間的設定服務
- 用於提交 OpenThread 記錄訊息的記錄介面
- 系統專屬的初始化常式
所有 API 都應根據基礎硬體抽象層 (HAL) 建構支援套件 (BSP) 實作。
API 檔案應放在下列目錄中:
類型 | 目錄 |
---|---|
平台專屬的 PAL 實作 | /openthread/examples/platforms/platform-name |
標頭檔案 - 非揮發性儲存 API | /openthread/examples/platforms/utils |
所有其他標頭檔案 | /openthread/include/openthread/platform |
HAL BSP | /openthread/third_party/platform-name |
鬧鐘
API 宣告:
/openthread/include/openthread/platform/alarm-milli.h
Alarm API 可為上層定時器實作提供基本計時和鬧鐘服務。
鬧鐘服務類型有兩種:毫秒和微秒。新硬體平台需要使用毫秒。微秒為選用值。
UART
API 宣告:
/openthread/examples/platforms/utils/uart.h
UART API 會透過 UART 介面實作基本序列埠通訊。
雖然 OpenThread CLI 和 NCP 外掛程式需要透過 UART 介面與主機端互動,但 UART API 支援功能並非必要。不過,即使您不打算在新的硬體平台範例中使用這些外掛程式,我們仍強烈建議您新增支援功能,原因如下:
- CLI 可用於驗證通訊埠是否正常運作
- Harness Automation Tool 會使用 UART 介面控制 OpenThread,以便進行測試和認證
如果目標硬體平台支援 USB CDC 模組而非 UART,請務必:
- 在主機端安裝正確的 USB CDC 驅動程式
- 使用相同的函式原型,在 OpenThread 端將 UART API 實作項目替換為 USB CDC 驅動程式 (以及 BSP)
電台
API 宣告:
/openthread/include/openthread/platform/radio.h
Radio API 定義了上層 IEEE 802.15.4 MAC 層所呼叫的所有必要函式。無線電晶片必須完全符合 2.4GHz IEEE 802.15.4-2006 規格。
由於 OpenThread 強化了低耗電功能,因此預設會要求所有平台實作自動影格待處理 (間接傳輸),來源位址比對表也應在 radio.h
來源檔案中實作。
不過,如果新硬體平台範例的資源有限,來源位址表可以定義為零長度。詳情請參閱「Auto Frame Pending」。
其他/重設
API 宣告:
/openthread/include/openthread/platform/misc.h
Misc/Reset API 提供一種方法,可用於重設晶片上的軟體,並查詢上次重設的原因。
熵
API 宣告:
/openthread/include/openthread/platform/entropy.h
Entropy API 會為上層提供真隨機號碼產生器 (TRNG),用於維護整個 OpenThread 網路的安全資產。API 應確保為每個函式呼叫產生新的隨機數字。受 TRNG 影響的安全性資產包括:
- AES CCM 隨機數字
- 隨機延遲時基誤差
- 裝置的詳細地址
- 涓滴計時器中的初始隨機時間間隔
- CoAP 權杖/訊息 ID
請注意,許多平台都已整合隨機號碼產生器,並在其 BSP 套件中公開 API。如果目標硬體平台不支援 TRNG,請考慮利用 ADC 模組取樣來產生固定長度的隨機數字。視需要在多個迭代中取樣,以符合 TRNG 規定 (uint32_t)。
當巨集 MBEDTLS_ENTROPY_HARDWARE_ALT
設為 1
時,這個 API 也應提供一種方法,用於產生在 mbedTLS 程式庫中使用的硬體熵。
非揮發性儲存空間
API 宣告:
/openthread/include/openthread/platform/flash.h
或
/openthread/include/openthread/platform/settings.h
只要實作上述兩種 API 之一,即可滿足非揮發性儲存空間需求。Flash API 會實作 Flash 儲存空間驅動程式,而 Settings API 則會為上層提供基礎 Flash 作業實作的函式。
這些 API 會公開至上層:
- 用於儲存應用程式資料的可用非揮發性儲存空間大小 (例如,有效/待處理的作業資料集、目前的網路參數,以及重置後重新連結的執行緒裝置憑證)
- 讀取、寫入、擦除和查詢快閃記憶體狀態作業
在平台範例的核心設定檔中使用 OPENTHREAD_CONFIG_PLATFORM_FLASH_API_ENABLE
,指出平台應使用的 API。如果設為 1
,則必須實作 Flash API。否則,您必須實作 Settings API。
這個旗標必須在 /openthread/examples/platforms/platform-name/openthread-core-platform-name-config.h
檔案中設定。
記錄
API 宣告:
/openthread/include/openthread/platform/logging.h
Logging API 會實作 OpenThread 的記錄和偵錯功能,並提供多個偵錯輸出層級。如果您不打算在新的硬體平台範例中使用 OpenThread 的記錄功能,則可選擇使用這個 API。
最高且最詳細的層級是 OPENTHREAD_LOG_LEVEL_DEBG
,可透過序列埠或終端機列印所有原始封包資訊和記錄行。請選擇最符合需求的偵錯層級。
系統專屬
API 宣告:
/openthread/examples/platforms/openthread-system.h
系統專屬 API 主要提供所選硬體平台的初始化和取消初始化作業。OpenThread 程式庫本身不會呼叫這個 API,但可能對您的系統/RTOS 有用。您也可以在這個來源檔案中實作其他模組的初始化 (例如 UART、Radio、Random、Misc/Reset)。
這個 API 的實作方式取決於您的用途。如果您想針對示範平台使用產生的 CLI 和 NCP 應用程式,就必須實作這個 API。否則,您可以實作任何 API,將示例平台驅動程式整合至系統/RTOS。