SDMMC 驅動程式架構

SDMMC 驅動程式庫堆疊分為兩個主要元件:直接與控制器硬體通訊的平台驅動程式,以及處理通訊協定專屬裝置初始化和通訊的核心驅動程式。核心驅動程式會進一步劃分為 SDIO 驅動程式庫和區塊驅動程式庫 (適用於 SD 和 eMMC)。每個 SDMMC 控制器都有不同的平台驅動程式庫,而核心驅動程式則適用於所有平台。

Bringup

如要使用搭載新 SDMMC 控制器的 SoC,必須編寫新的平台驅動程式庫。如果控制器實作 SDHCI 規格,則這個驅動程式庫應實作 fuchsia.hardware.sdhci,否則應實作 fuchsia.hardware.sdmmc。在驗證硬體基本功能前,建議透過 SdmmcHostInfo 和 SdmmcHostPrefs 停用 DMA 和較高速模式。詳情請參閱 SDHCI 和 SDMMC 通訊協定定義。

SD/eMMC 核心驅動程式

SD/eMMC 區塊驅動程式庫程式會為使用者資料分割區,以及已啟用 (僅限 eMMC) 的 boot1 和 boot2 分割區,提供 fuchsia.hardware.block.volume.Service 執行個體。如果裝置支援 fuchsia.hardware.rpmb.Service (僅限 eMMC,依據 JEDEC 標準 JESD84-B51 第 6.6.22 節),就會建立該服務。啟用指令佇列時 (僅限 eMMC),驅動程式庫會改為建立提供 fuchsia.hardware.cqhci.Service 的子節點,而子 cqhci 驅動程式庫會提供分割區和 RPMB 服務。

SDIO 核心驅動程式

SDIO 核心驅動程式會建立實作 fuchsia.hardware.sdio 的裝置,每個 IO 函式各有一個裝置。SD/eMMC 區塊驅動程式庫的預期用戶端只有儲存空間堆疊,但 SDIO 驅動程式庫用戶端會因偵測到的 SDIO 卡類型而異。用戶端驅動程式會使用下表指定的繫結變數,繫結至 SDIO 核心驅動程式。使用多個 IO 函式的用戶端驅動程式應繫結至複合裝置,其中每個函式裝置都是片段。請注意,複合式卡片可能有多個並行的 SDIO 用戶端驅動程式 (例如藍牙和 Wi-Fi),在這種情況下,匯流排的存取權會透過核心驅動程式共用。用戶端也無法直接存取函式 0,以免可能中斷其他用戶端。詳情請參閱 SDIO 通訊協定定義。

SDIO 用戶端繫結

繫結變數 意義
BIND_SDIO_VID 從 FBR 讀取的 IO 函式製造商 ID
BIND_SDIO_PID 從 FBR 讀取的 IO 函式產品 ID
BIND_SDIO_FUNCTION IO 函式編號 (1 到 7)

裝置圖

SDMMC 裝置圖表