共用方式為


使用SPB的I/O要求介面

從 Windows 8 開始,SPB 架構延伸模組 (SpbCx) 是一個系統提供的元件,可支援 SPB I/O 要求介面。 SPB 周邊設備驅動器會使用此介面將 I/O 要求傳送至連線到 IーC、SPI 和其他 簡單周邊總線 (SPB) 的裝置。 SpbCx 透過透過各種總線類型提供標準化的 I/O 要求介面,簡化跨各種硬體平臺和不同硬體廠商 SPB 控制器系列周邊裝置的驅動程序支援工作。

如果符合下列條件,SPB 連線周邊裝置的硬體廠商可以開發一個可跨多個總線類型的設備驅動器:

  • 周邊裝置必須與這些總線硬體相容。
  • 驅動程式可以在所有這些總線類型之間使用相同的裝置控制通訊協定。

透過排除周邊驅動程式的總線特定程序代碼,SPB 架構延伸可縮短這些驅動程式的開發時間,並確保支援總線類型之間的行為更加一致。

連線到SPB的周邊裝置不會與記憶體對應,而且這些裝置的驅動程式無法直接存取這些裝置的硬體緩存器。 然而,SPB 周邊設備驅動器必須依賴 SPB 控制器,以序列方式將數據從裝置傳送到裝置。 若要要求這類傳輸,驅動程式必須將 I/O 要求傳送至裝置。 此 I/O 要求會傳送至由 SpbCx 管理的佇列。

SpbCx 會與SPB控制器驅動程式合作,以處理來自驅動程式的I/O要求。 SPB 控制器的硬體廠商會提供SPB控制器驅動程式,以執行控制器硬體特有的工作。

只有驅動程式可以將 I/O 要求傳送至 SPB 控制器的 I/O 要求介面。 應用程式無法直接將 I/O 要求傳送至 SPB 控制器。 相反地,應用程式可以將I/O要求傳送給SPB連接的周邊裝置的驅動程式,然後依賴該驅動程式將任何可能需要的I/O要求傳送給SPB控制器,以便將數據傳輸至裝置或從裝置傳輸數據。

在驅動程式將 I/O 要求傳送至 SPB 連接的周邊裝置之前,必須先開啟與該裝置的邏輯連線。 若要開啟此連線,驅動程式會使用它從隨插即用管理員接收作為硬體資源的聯機標識符。 如需詳細資訊,請參閱 SPB周邊裝置的聯機標識碼

SpbCx 和SPB控制器驅動程式會共同處理SPB連線周邊裝置的讀取和寫入要求。 為了回應 IRP_MJ_READ 要求,SPB 控制器會將指定的位元元組數目從周邊裝置傳輸到驅動程式提供的緩衝區。 為了回應 IRP_MJ_WRITE 要求,SPB 控制器會將指定的位元元組數目從驅動程式提供的緩衝區傳輸到周邊裝置。

對於傳送零個字節的 IRP_MJ_READIRP_MJ_WRITE 要求,SpbCx 會以STATUS_SUCCESS狀態代碼完成要求,但不會執行任何作業。

SpbCx 和 SPB 控制器驅動程式也會處理這些 SPB 特定的 I/O 控制碼 (IOCTLs):

SPB 周邊驅動程式會使用這些 IOCTL 來執行 I/O 傳輸序列,。 I/O 傳輸順序是一組已排序的總線傳輸(讀取和寫入作業),以單一原子性總線作業執行。 如需這些 IOCTL 的詳細資訊,請參閱 I/O 傳輸序列

特定SPB控制器的SPB控制器驅動程式可能支援執行硬體特定功能的自定義IOCTL。 這些是SpbCx無法處理的IOCTLs,但SPB控制器的硬體廠商支援這些IOCTLs,以利需要進行特定硬體操作的SPB周邊設備驅動程式。 如果SPB周邊設備驅動器傳送的IOCTL無法被SpbCx或SPB控制器驅動程式辨識,則不會執行任何作業,且I/O要求會以錯誤狀態值STATUS_NOT_SUPPORTED完成。

SPB 連線周邊裝置的驅動程式通常是 User-Mode Driver Framework (UMDF) 驅動程式,或 Kernel-Mode Driver Framework (KMDF) 驅動程式。 若要將讀取、寫入或 IOCTL 要求傳送至 SPB 連接的周邊裝置,UMDF 驅動程式會呼叫 IWDFIoRequest::Send 等方法。 KMDF 驅動程式會呼叫方法,例如 WdfIoTargetSendReadSynchronouslyWdfIoTargetSendWriteSynchronouslyWdfIoTargetSendIoctlSynchronously

如需示範如何將 I/O 要求傳送至 SPB 連線周邊裝置的程式代碼範例,請參閱下列主題:

User-Mode SPB 周邊驅動程式 硬體資源

用於 Kernel-Mode SPB 周邊驅動程式的硬體資源