GPIO、I2C 和 SPI 的 Usermode 存取
Windows 10 包含可透過使用者模式直接存取 GPIO、I2C、SPI 和 UART 的新 API。 諸如 Raspberry Pi 2 等開發板會公開這些連線的子集,讓使用者能夠使用自訂電路系統延伸基本運算模組,以處理特定應用程式。 這些低階匯流排通常會與其他重要的上線函式共用,只有一部分 GPIO 針腳和匯流排公開在標頭上。 若要保留系統穩定性,必須指定哪些針腳與匯流排可由使用者模式應用程式安全地修改。
Windows 上低階匯流排的使用者模式存取會透過現有 GpioClx
和 SpbCx
架構來管線。 名為 RhProxy 的新驅動程式,可在 Windows IoT 核心版和 Windows 企業版上使用,向使用者模式公開 GpioClx
和資源 SpbCx
。 若要啟用 API,您必須在 ACPI 表格中宣告 rhproxy 的裝置節點,且應將所有 GPIO 與 SPB 資源對使用者模式公開。
如需透過 RhProxy 存取 UserMode 的其他深入檔,請參閱 這裡。
匯流排提供者
從 Windows 10 開始,Windows 具有內建 UWP API,可讓您直接存取位於 soc 上的 Gpio、Spi 或 I2c 匯流排。這可讓您從高階 API 輕鬆存取此硬體。 不過,當裝置製造者想要使用離站控制器來存取匯流排時,有許多次。 它就像是新增 16 個 GPIO 針腳的便宜晶片一樣簡單,也可以像 Arduino) 這類完整 MCU (,不僅新增 Gpio、SPI 和 I2C 針腳,也支援 PWM 和 ADC。 透過「匯流排提供者」模型,我們讓開發人員能夠使用內建 API 存取這些外接匯流排,並使用可橋接間距的使用者模式提供者。
建置提供者的人員會將一組介面實作到 UWP 類別庫,然後任何想要與該硬體交談的開發人員只要包含元件,並告知內建 API。 如果您查看 來自 Remote Arduino 提供者 的範例程式碼,您可以看到設定提供者有多容易,一旦設定為該應用程式的預設提供者,用戶端應用程式中的其餘程式碼會與存取內部部署匯流排所需的程式碼相同。
ArduinoProviders.ArduinoProvider.Configuration =
new ArduinoProviders.ArduinoConnectionConfiguration("VID_2341", "PID_0043", 57600);
Windows.Devices.LowLevelDevicesController.DefaultProvider = new ArduinoProviders.ArduinoProvider();
gpioController = await GpioController.GetDefaultAsync();
i2cController = await I2cController.GetDefaultAsync();
adcController = await AdcController.GetDefaultAsync();
pwmController = await PwmController.GetDefaultAsync();
GpioPin pin = gpioController.OpenPin(LED_PIN, GpioSharingMode.Exclusive);`
可用的提供者
我們目前在 匯流排提供者 github 存放庫中有一些可用的提供者。 除了提供者的程式碼之外,每個提供者都有示範用戶端如何使用該提供者的範例 VS 解決方案。
ADC
- Ads1x15
- Mcp3008
- 遠端 Arduino
PWM
- PCA9685
- 使用 Gpio 模擬
- 遠端 Arduino
Gpio、SPI、I2C
- 遠端 Arduino
除了提供您實際硬體存取權的提供者之外,我們也建立了 模擬提供者 ,其運作方式就像是無限可用的提供者,其設計目的是讓您撰寫和偵錯應用程式,而不需要先將它們部署到運作中的裝置。 如需更豐富的體驗,您可以加以自訂以模擬實際硬體。 例如:更新 I2c 提供者,以傳回結果 「75」,當您將命令傳送給具有指定次要位址的裝置上溫度讀數時。
其他資源
如需其他匯流排工具、範例程式碼,以及在 I2C、SPI、GPIO、MinComm/UART 上進行建置和測試,請參閱 這裡。
請參閱 Windows 執行時間 (WinRT) API ,以下是如何利用 來自 Win32 應用程式的API。