標籤:windows驅動開發 wdf windows phone 8 i2c
SPB是Simple Peripheral Bus的簡稱,直譯過來就是簡單外設匯流排,它包括I2C匯流排、SPI匯流排。SPB是在Windows 8以後才被驅動支援的,而在之前如果系統想訪問I2C外圍裝置,則只能通過BIOS程式間接的訪問,沒法直接存取外設寄存器。在系統啟動時,ACPI韌體會根據配置表掃描SPB裝置,並將它們的資源資訊傳遞給PnP(隨插即用裝置)管理器,這些資源就包括I2C從裝置地址、I2C匯流排時鐘頻率以及該裝置的中斷號。需要注意的一點,在ACPI資源配置表中,是不允許使用Memory32Fixed等這樣的儲存映射Method的,因為一個I2C裝置是不能被系統地址映射的,它們只能通過I2C匯流排進行訪問。關於I2C匯流排的協議並不是本文討論的主要內容,如果有不瞭解的還請事先上網查閱,然後再來閱讀本文。
和GPIO驅動一樣,SPB驅動也分為SPB控制器驅動、SPB架構(SpbCx)和SPB外設驅動。
SPB控制器驅動:直接操作SPB(I2C)控制寄存器,與控制器硬體相關,並通過事件回調的方式將資料傳送給SpbCx。
SPB架構:負責串連SPB Controller Driver 和 Periphera Device Driver 的中介層,實現外設驅動與控制器驅動之間資料互動的細節,也為平台移植提供了極大的好處。
SPB外設驅動:與SPB(I2C)所串連的具體外設驅動,與外設硬體相關,通過發送I/O請求給SpbCx進行外設的控制。它不關心底層SPB控制器的具體操作。
微軟採用這樣的架構極大的方便了手機驅動人員開發I2C外設驅動的工作,因為我們驅動人員只需要與SpbCx打交道,而不必關心SoC硬體平台的具體細節,就算以後換了個SoC,I2C控制器寄存器地址發生了變化,我們的外設驅動也不需要做任何改動就能正常工作,而往往與平台硬體相關的I2C控制器驅動則都是由SoC平台廠商去完成的,這樣節省了手機驅動人員的開發工作量,縮短了項目開發週期。
很清晰的表明了三者的關係(圖片來源於MSDN):
或是這幅圖:
關於SPB驅動更詳細的資訊,請查閱MSDN官方文檔:Simple Peripheral Buses
Windows Phone 8.1 驅動開發——SPB 簡介