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 可用於驗證通訊埠是否可正常運作
- 哈佛自動化工具使用 UART 介面控制 OpenThread,以便進行測試和認證
如果目標硬體平台支援 USB CDC 模組而非 UART,請確認:
- 在主機端安裝正確的 USB CDC 驅動程式
- 將 UART API 實作替換為 OpenThread 端的 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 待處理。
其他/重設
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 Nonce
- 隨機延遲時基誤差
- 裝置的擴充地址
- 影片計時器中的初始隨機週期
- 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 會實作快閃記憶體驅動程式,而 Settings API 可為上層提供基礎 Flash 作業實作的功能。
這些 API 會公開於上層:
- 用來儲存應用程式資料的可用非易變儲存空間大小 (例如,執行中/待處理的作業資料集、目前的網路參數,以及重設後重新連接的執行緒裝置憑證)
- 讀取、寫入、清除及查詢 Flash 狀態作業
在平台範例的核心設定檔中使用 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、無線電、隨機、Misc/重設。
實作此 API 的方式取決於您的用途。如果您想將產生的 CLI 和 NCP 應用程式用於範例平台,則必須實作這個 API。否則,您可以實作任何 API,將範例平台驅動程式整合至系統/RTOS。