Benutzermode-Zugriff auf GPIO, I2C und SPI
Windows 10 enthält neue APIs für den Zugriff auf GPIO, I2C, SPI und UART direkt aus dem Benutzermodus. Platinen für die Entwicklung, z. B. Raspberry Pi 2, zeigen eine Teilmenge dieser Verbindungen, mit denen Benutzer ein grundlegendes Berechnungsmodell mit benutzerdefiniertem Schaltkreis auf eine bestimmte Anwendung erweitern können. Diese Niedrigebenen-Busse werden in der Regel mit anderen kritischen Onboardfunktionen geteilt, wobei nur eine Teilmenge von GPIO-Pins und Bussen auf Kopfzeilen verfügbar ist. Um die Systemstabilität zu erhalten, ist es erforderlich, anzugeben, welche Pins und Busse zur Änderung durch Benutzermodusanwendungen sicher sind.
Der Benutzermode-Zugriff auf Niedrige-Level-Busse unter Windows wird durch die vorhandenen GpioClx
und SpbCx
Frameworks gestürzt. Ein neuer Treiber namens RhProxy, der unter Windows IoT Core und Windows Enterprise verfügbar ist, stellt GpioClx
SpbCx
den Benutzermodus zur Verfügung. Um die APIs zu aktivieren, muss ein Geräteknoten für rhproxy in Ihren ACPI-Tabellen für die einzelnen GPIO- und SPB-Ressourcen deklariert werden, die für den Benutzermodus verfügbar gemacht werden soll.
Weitere ausführliche Dokumentationen zum UserMode-Zugriff über RhProxy finden Sie hier.
Bus-Anbieter
Ab Windows 10 verfügt Windows über UWP-APIs, die direkten Zugriff auf Gpio-, Spi- oder I2c-Busse bieten, die sich auf soc befinden. Dies bietet sehr einfachen Zugriff auf diese Hardware aus einer hochstufigen API. Es gibt jedoch viele Zeiten, wenn ein Gerätehersteller einen Off-Soc-Controller zum Zugriff auf einen Bus verwenden möchte. Es kann so einfach wie ein billiger Chip sein, der 16 GPIO-Pins hinzufügt, oder so reich wie ein vollständiges MCU (wie ein Arduino), das nicht nur Gpio, SPI und I2C-Pins hinzufügt, sondern auch PWM und ADC unterstützt. Mit dem Modell "Busanbieter" bieten wir Entwicklern die Möglichkeit, auf diese Off-Soc-Busse mit den in-Box-APIs zuzugreifen, indem wir einen Benutzermodusanbieter verwenden, der die Lücke übergibt.
Jemand, der einen Anbieter erstellt, implementiert eine Reihe von Schnittstellen in eine UWP-Klassenbibliothek und dann jeden Entwickler, der mit dieser Hardware sprechen möchte, einfach die Komponente enthält und die In-Box-APIs darüber informiert. Wenn Sie sich den Beispielcode aus dem Remote-Arduino-Anbieter ansehen, können Sie sehen, wie einfach es ist, den Anbieter zu konfigurieren und sobald sie als Standardanbieter für diese App festgelegt ist, ist der Rest des Codes in der Client-App identisch mit dem Code, der für den Zugriff auf einen soc-Bus erforderlich ist.
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);`
Verfügbare Anbieter
Wir haben derzeit eine Reihe von Anbietern, die auf dem Github-Repo für Busanbieter verfügbar sind. Zusätzlich zum Code für den Anbieter verfügt jeder Anbieter über eine Beispiel-VS-Lösung, die veranschaulicht, wie ein Client diesen Anbieter verwenden würde.
ADC
- Anzeigen1x15
- Mcp3008
- Remote-Arduino
PWM
- PCA9685
- Simuliert mit Gpio
- Remote-Arduino
Gpio, SPI, I2C
- Remote-Arduino
Zusätzlich zu den Anbietern, die Ihnen Zugriff auf echte Hardware gewähren, haben wir einen simulierten Anbieter erstellt, der so funktioniert, als wäre es ein unendlich fähiger Anbieter und ist so konzipiert, dass Sie Ihre Anwendungen schreiben und debuggen können, ohne sie zuerst auf ein arbeitsfähiges Gerät bereitzustellen. Für eine umfassendere Erfahrung können Sie sie anpassen, um Ihre tatsächliche Hardware zu simulieren. Beispiel: Aktualisieren des I2c-Anbieters, um das Ergebnis "75" zurückzugeben, wenn Sie es den Befehl für eine Temperaturlesung auf einem Gerät mit der angegebenen sekundären Adresse senden.
Weitere Ressourcen
Weitere Bustools, Beispielcodes und Tests auf I2C, SPI, GPIO, MinComm/UART finden Sie hier.
Bitte verweisen Sie auf Windows-Runtime (WinRT)-APIs und hier erfahren Sie, wie Sie die APIs von Win32-Anwendungen nutzen.