通訊協定
InBandInterrupt
定義於 fuchsia.hardware.sdmmc/sdmmc.fidl
Callback
要求
<EMPTY>
回應
<EMPTY>
科幻
定義於 fuchsia.hardware.sdmmc/sdmmc.fidl
AckInBandInterrupt
要求
<EMPTY>
HostInfo
取得主辦人資訊。
要求
<EMPTY>
回應
| 名稱 | 類型 | 
|---|---|
| payload | Sdmmc_HostInfo_Result | 
HwReset
發出 HW 重設。
要求
<EMPTY>
回應
| 名稱 | 類型 | 
|---|---|
| payload | Sdmmc_HwReset_Result | 
PerformTuning
執行調整作業。
要求
| 名稱 | 類型 | 
|---|---|
| cmd_idx | uint32 | 
回應
| 名稱 | 類型 | 
|---|---|
| payload | Sdmmc_PerformTuning_Result | 
RegisterInBandInterrupt
註冊要在卡片收到頻內中斷時呼叫的特定回呼。呼叫回呼之前,通訊協定實作會停用控制器中的頻內中斷。用戶端處理上一個中斷後,請呼叫 AckInBandInterrupt() 來重新啟用頻內中斷。
要求
| 名稱 | 類型 | 
|---|---|
| interrupt_cb | InBandInterrupt | 
回應
| 名稱 | 類型 | 
|---|---|
| payload | Sdmmc_RegisterInBandInterrupt_Result | 
RegisterVmo
在下列方法中,vmo_id 是用來識別 VMO,該 VMO 會傳遞給 SdmmcBufferRegion 中的 Request。VMO ID 由呼叫端選擇,可以是任何 uint32 值。註冊 VMO 並將擁有權轉移至通訊協定實作項目。vmo_rights 是包含 SdmmcVmoRight 值的位元欄位,可決定您固定或對應 VMO 時,實作所使用的讀取/寫入權限。實作可能會在這次呼叫期間或任何於要求中使用 vmo 時固定 Vmo,而且會保持固定,直到 VMO 取消註冊為止。client_id 可能位於 [0, SDMMC_MAX_CLIENT_ID] 中,並且識別要註冊這個 VMO 的 ID 空間 (也就是說,如果兩個不同的 VMO 註冊不同的用戶端,可以使用相同的 ID)。
要求
| 名稱 | 類型 | 
|---|---|
| vmo_id | uint32 | 
| client_id | uint8 | 
| vmo | handle<vmo> | 
| offset | uint64 | 
| size | uint64 | 
| vmo_rights | uint32 | 
回應
| 名稱 | 類型 | 
|---|---|
| payload | Sdmmc_RegisterVmo_Result | 
要求
按順序執行要求,不分介入處理要求。此外,來電會依照接收順序回覆。如果發生錯誤,請取消任何剩餘的要求。否則,系統會傳回最後一個要求的回應。
通訊協定實作會根據要求的屬性和控制器的功能,選擇是否要使用 DMA。
用戶端負責執行下列快取作業:
讀取要求之後:
- 在用戶端對應的緩衝區上使用 ZX_CACHE_FLUSH_DATA | ZX_CACHE_FLUSH_INVALIDATE 呼叫 zx_cache_flush。
- 對所有其他緩衝區使用 ZX_VMO_OP_CACHE_CLEAN_INVALIDATE 呼叫 zx_vmo_op_range。
請注意,在要求傳回前,先寫入緩衝區的任何部分,可能會導致接收的資料毀損。
在寫入要求之前:
- 在用戶端對應的緩衝區上使用 ZX_CACHE_FLUSH_DATA 呼叫 zx_cache_flush。
- 在所有其他緩衝區上使用 ZX_VMO_OP_CACHE_CLEAN 呼叫 zx_vmo_op_range。
要求
| 名稱 | 類型 | 
|---|---|
| reqs | vector<SdmmcReq> | 
回應
| 名稱 | 類型 | 
|---|---|
| payload | Sdmmc_Request_Result | 
SetBusFreq
將公車頻率設定為 0,代表停用卡片。
要求
| 名稱 | 類型 | 
|---|---|
| bus_freq | uint32 | 
回應
| 名稱 | 類型 | 
|---|---|
| payload | Sdmmc_SetBusFreq_Result | 
SetBusWidth
設定公車寬度。
要求
| 名稱 | 類型 | 
|---|---|
| bus_width | SdmmcBusWidth | 
回應
| 名稱 | 類型 | 
|---|---|
| payload | Sdmmc_SetBusWidth_Result | 
SetSignalVoltage
設定訊號電壓。
要求
| 名稱 | 類型 | 
|---|---|
| voltage | SdmmcVoltage | 
回應
| 名稱 | 類型 | 
|---|---|
| payload | Sdmmc_SetSignalVoltage_Result | 
SetTiming
設定 mmc 時間。
要求
| 名稱 | 類型 | 
|---|---|
| timing | SdmmcTiming | 
回應
| 名稱 | 類型 | 
|---|---|
| payload | Sdmmc_SetTiming_Result | 
UnregisterVmo
受呼叫者會取消對應/取消固定 VMO,並將擁有權傳回呼叫端。
要求
| 名稱 | 類型 | 
|---|---|
| vmo_id | uint32 | 
| client_id | uint8 | 
回應
| 名稱 | 類型 | 
|---|---|
| payload | Sdmmc_UnregisterVmo_Result | 
結構
SdmmcBufferRegion 資源
定義於 fuchsia.hardware.sdmmc/sdmmc.fidl
| 廣闊 | 類型 | 說明 | 預設 | 
|---|---|---|---|
| buffer | SdmmcBuffer | 無預設 | |
| offset | uint64 | 在 VMO 間偏移,即可開始讀取或寫入。如果類型為 VMO_ID,則此值與傳遞至 RegisterVmo 的偏移值相對較。 | 無預設 | 
| size | uint64 | 要讀取或寫入這個緩衝區區域的位元組數。 | 無預設 | 
SdmmcHostInfo
定義於 fuchsia.hardware.sdmmc/sdmmc.fidl
| 廣闊 | 類型 | 說明 | 預設 | 
|---|---|---|---|
| caps | uint64 | 控制器功能 | 無預設 | 
| max_transfer_size | uint64 | 資料要求大小上限 | 無預設 | 
| max_transfer_size_non_dma | uint64 | 無預設 | |
| max_buffer_regions | uint64 | 可在單一要求中使用的緩衝區區域數量。 | 無預設 | 
SdmmcReq 資源
定義於 fuchsia.hardware.sdmmc/sdmmc.fidl
| 廣闊 | 類型 | 說明 | 預設 | 
|---|---|---|---|
| cmd_idx | uint32 | 無預設 | |
| cmd_flags | uint32 | 無預設 | |
| arg | uint32 | 無預設 | |
| blocksize | uint32 | 無預設 | |
| suppress_error_messages | bool | 如果設為 true,SDMMC 驅動程式應減少這項要求產生的任何錯誤訊息記錄層級。這會在預期錯誤或不是嚴重錯誤的要求上設定。 | 無預設 | 
| client_id | uint8 | 這項要求的用戶端 ID。只有向這個用戶端註冊的 VMO 可能出現在下列緩衝區中。 | 無預設 | 
| buffers | vector<SdmmcBufferRegion> | 無預設 | 
Sdmmc_HostInfo_Response
定義於 fuchsia.hardware.sdmmc/sdmmc.fidl
| 廣闊 | 類型 | 說明 | 預設 | 
|---|---|---|---|
| info | SdmmcHostInfo | 無預設 | 
Sdmmc_HwReset_Response
定義於 fuchsia.hardware.sdmmc/sdmmc.fidl
<EMPTY>
Sdmmc_PerformTuning_Response
定義於 fuchsia.hardware.sdmmc/sdmmc.fidl
<EMPTY>
Sdmmc_RegisterInBandInterrupt_Response
定義於 fuchsia.hardware.sdmmc/sdmmc.fidl
<EMPTY>
Sdmmc_RegisterVmo_Response
定義於 fuchsia.hardware.sdmmc/sdmmc.fidl
<EMPTY>
Sdmmc_Request_Response
定義於 fuchsia.hardware.sdmmc/sdmmc.fidl
| 廣闊 | 類型 | 說明 | 預設 | 
|---|---|---|---|
| response | uint32[4] | 無預設 | 
Sdmmc_SetBusFreq_Response
定義於 fuchsia.hardware.sdmmc/sdmmc.fidl
<EMPTY>
Sdmmc_SetBusWidth_Response
定義於 fuchsia.hardware.sdmmc/sdmmc.fidl
<EMPTY>
Sdmmc_SetSignalVoltage_Response
定義於 fuchsia.hardware.sdmmc/sdmmc.fidl
<EMPTY>
Sdmmc_SetTiming_Response
定義於 fuchsia.hardware.sdmmc/sdmmc.fidl
<EMPTY>
Sdmmc_UnregisterVmo_Response 資源
定義於 fuchsia.hardware.sdmmc/sdmmc.fidl
| 廣闊 | 類型 | 說明 | 預設 | 
|---|---|---|---|
| vmo | handle<vmo> | 無預設 | 
ENUMS
SdmmcBusWidth 嚴格
類型:uint8
定義於 fuchsia.hardware.sdmmc/sdmmc.fidl
| 名稱 | 物超所值 | 說明 | 
|---|---|---|
| 一 | 0 | |
| 4 | 1 | |
| 氣象 | 2 | |
| 最快 | 3 | 
SdmmcTiming 嚴格
類型:uint8
定義於 fuchsia.hardware.sdmmc/sdmmc.fidl
| 名稱 | 物超所值 | 說明 | 
|---|---|---|
| LEGACY | 0 | |
| HS | 1 | |
| HSDDR | 2 | |
| HS200 | 3 | |
| HS400 | 4 | |
| SDR12 | 5 | |
| SDR25 | 6 | |
| SDR50 | 7 | |
| SDR104 | 8 | |
| DDR50 | 9 | |
| 最快 | 10 | 
SdmmcVoltage 嚴格
類型:uint8
定義於 fuchsia.hardware.sdmmc/sdmmc.fidl
| 名稱 | 物超所值 | 說明 | 
|---|---|---|
| V330 | 0 | |
| V180 | 1 | |
| 最快 | 2 | 
資料表
SdmmcMetadata
定義於 fuchsia.hardware.sdmmc/metadata.fidl
| 序數 | 廣闊 | 類型 | 說明 | 
|---|---|---|---|
| 1 | max_frequency | uint32 | 公車作業頻率上限。SDMMC 核心驅動程式會將匯流頻率限制為這個程度。如未指定中繼資料,則預設值為 UINT32_MAX。 | 
| 2 | speed_capabilities | SdmmcHostPrefs | 特定主機的速度功能。如未指定中繼資料,則預設值為 0 (無標記)。 | 
| 3 | enable_cache | bool | 如果為 true,請使用裝置端揮發性快取。如未指定中繼資料,則預設值為 true。如果連接的裝置或插入的卡片沒有儲存空間,系統會忽略此值。 | 
| 4 | removable | bool | 如果為 true,這個 SDMMC 控制器會對應至可移除的記憶卡插槽,其中可能隨時插入或移除 MMC/SD/SDIO 卡。在此情況下,如果無法在驅動程式庫初始化期間探測,就不會視為嚴重錯誤。如未指定中繼資料,則預設值為 false。 | 
| 5 | max_command_packing | uint32 | 請使用指令封裝 (批次處理),最多可達這麼多指令。如果值為零,則會停用指令封裝功能。如未指定中繼資料,則預設值為 16。如果連接的裝置或插入的卡片不支援指令封裝,系統就會忽略此值。 | 
| 6 | use_fidl | bool | 完成。如果設為 true,請使用 FIDL SDMMC 通訊協定。如果設為 False,請使用 Banjo SDMMC 通訊協定。如未指定中繼資料,則預設值為 true。 | 
聯合國
SdmmcBuffer 嚴格 資源
定義於 fuchsia.hardware.sdmmc/sdmmc.fidl
| 序數 | Variant | 類型 | 說明 | 
|---|---|---|---|
| 1 | vmo_id | uint32 | 先前註冊的 VMO ID。 | 
| 2 | vmo | handle<vmo> | 未註冊的 VMO,通訊協定實作不會取得擁有權。VMO 會在輸入要求時釘選,並在傳回前取消固定。 | 
Sdmmc_HostInfo_Result 嚴格
定義於 fuchsia.hardware.sdmmc/sdmmc.fidl
| 序數 | Variant | 類型 | 說明 | 
|---|---|---|---|
| 1 | response | Sdmmc_HostInfo_Response | |
| 2 | err | zx/Status | 
Sdmmc_HwReset_Result 嚴格
定義於 fuchsia.hardware.sdmmc/sdmmc.fidl
| 序數 | Variant | 類型 | 說明 | 
|---|---|---|---|
| 1 | response | Sdmmc_HwReset_Response | |
| 2 | err | zx/Status | 
Sdmmc_PerformTuning_Result 嚴格
定義於 fuchsia.hardware.sdmmc/sdmmc.fidl
| 序數 | Variant | 類型 | 說明 | 
|---|---|---|---|
| 1 | response | Sdmmc_PerformTuning_Response | |
| 2 | err | zx/Status | 
Sdmmc_RegisterInBandInterrupt_Result 嚴格
定義於 fuchsia.hardware.sdmmc/sdmmc.fidl
| 序數 | Variant | 類型 | 說明 | 
|---|---|---|---|
| 1 | response | Sdmmc_RegisterInBandInterrupt_Response | |
| 2 | err | zx/Status | 
Sdmmc_RegisterVmo_Result 嚴格
定義於 fuchsia.hardware.sdmmc/sdmmc.fidl
| 序數 | Variant | 類型 | 說明 | 
|---|---|---|---|
| 1 | response | Sdmmc_RegisterVmo_Response | |
| 2 | err | zx/Status | 
Sdmmc_Request_Result 嚴格
定義於 fuchsia.hardware.sdmmc/sdmmc.fidl
| 序數 | Variant | 類型 | 說明 | 
|---|---|---|---|
| 1 | response | Sdmmc_Request_Response | |
| 2 | err | zx/Status | 
Sdmmc_SetBusFreq_Result 嚴格
定義於 fuchsia.hardware.sdmmc/sdmmc.fidl
| 序數 | Variant | 類型 | 說明 | 
|---|---|---|---|
| 1 | response | Sdmmc_SetBusFreq_Response | |
| 2 | err | zx/Status | 
Sdmmc_SetBusWidth_Result 嚴格
定義於 fuchsia.hardware.sdmmc/sdmmc.fidl
| 序數 | Variant | 類型 | 說明 | 
|---|---|---|---|
| 1 | response | Sdmmc_SetBusWidth_Response | |
| 2 | err | zx/Status | 
Sdmmc_SetSignalVoltage_Result 嚴格
定義於 fuchsia.hardware.sdmmc/sdmmc.fidl
| 序數 | Variant | 類型 | 說明 | 
|---|---|---|---|
| 1 | response | Sdmmc_SetSignalVoltage_Response | |
| 2 | err | zx/Status | 
Sdmmc_SetTiming_Result 嚴格
定義於 fuchsia.hardware.sdmmc/sdmmc.fidl
| 序數 | Variant | 類型 | 說明 | 
|---|---|---|---|
| 1 | response | Sdmmc_SetTiming_Response | |
| 2 | err | zx/Status | 
Sdmmc_UnregisterVmo_Result 嚴格 資源
定義於 fuchsia.hardware.sdmmc/sdmmc.fidl
| 序數 | Variant | 類型 | 說明 | 
|---|---|---|---|
| 1 | response | Sdmmc_UnregisterVmo_Response | |
| 2 | err | zx/Status | 
商業智慧
SdmmcHostCap 嚴格
類型:uint64
定義於 fuchsia.hardware.sdmmc/sdmmc.fidl
| 名稱 | 物超所值 | 說明 | 
|---|---|---|
| BUS_WIDTH_8 | 1 | |
| 指定行銷區域 | 2 | |
| VOLTAGE_330 | 4 | |
| AUTO_CMD12 | 8 | |
| SDR104 | 16 | |
| SDR50 | 32 | |
| DDR50 | 64 | |
| NO_TUNING_SDR50 | 128 | 主機不需要調整 SDR50。 | 
SdmmcHostPrefs 嚴格
類型:uint64
定義於 fuchsia.hardware.sdmmc/sdmmc.fidl
| 名稱 | 物超所值 | 說明 | 
|---|---|---|
| DISABLE_HS400 | 1 | |
| DISABLE_HS200 | 2 | |
| DISABLE_HSDDR | 4 | 
SdmmcVmoRight 嚴格
類型:uint32
定義於 fuchsia.hardware.sdmmc/sdmmc.fidl
| 名稱 | 物超所值 | 說明 | 
|---|---|---|
| 閱讀 | 1 | |
| 寫入 | 2 | 
觀測站
| 名稱 | 物超所值 | 類型 | 說明 | 
|---|---|---|---|
| SDMMC_MAX_CLIENT_ID | 7 | uint8 | 下列 client_id 欄位的最大值。目前,您不需要使用超過 8 個用戶端,但如果之後變更此值,就會增加。 | 
| SDMMC_PAGES_COUNT | 512 | uint64 | 每個要求的頁數 - 每個要求 2M 符合 dev/block/sdhci 的 DMA_DESC_COUNT (PAGE_SIZE / sizeof(zx_paddr_t)) | 
服務
SdmmcService
定義於 fuchsia.hardware.sdmmc/sdmmc.fidl
| 名稱 | 類型 | 傳輸 | 
|---|---|---|
| sdmmc | fuchsia.hardware.sdmmc/Sdmmc | 駕駛座 |