實作 Platform 抽象層 API

前往 GitHub 查看原始碼

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 CLINCP 外掛程式都依賴 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。