Compartir a través de


Acceso de modo de usuario a GPIO, I2C y SPI

Windows 10 contiene nuevas API para acceder a GPIO, I2C, SPI y UART directamente desde el modo de usuario. Los paneles de desarrollo como Raspberry Pi 2 exponen un subconjunto de estas conexiones que permiten a los usuarios ampliar un módulo de cálculo base con circuitos personalizados para dirigirte a una aplicación particular. Estos buses de bajo nivel suelen compartirse con otras funciones de incorporación críticas, con solo un subconjunto de patillas y buses GPIO expuestos en encabezados. Para preservar la estabilidad del sistema, es necesario especificar qué patillas y buses son seguros para modificar las aplicaciones de modo de usuario.

El acceso de modo de usuario a los buses de bajo nivel en Windows se extiende a través de los marcos y SpbCx existentesGpioClx. Un nuevo controlador llamado RhProxy, disponible en Windows IoT Core y Windows Enterprise, expone GpioClx y SpbCx recursos al modo de usuario. Para habilitar las API, se debe declarar un nodo de dispositivo para rhproxy en las tablas ACPI con cada uno de los recursos GPIO y SPB que se deben exponer en modo de usuario.

Puede encontrar documentación adicional detallada sobre el acceso a UserMode a través de RhProxy aquí.

Proveedores de bus

A partir de Windows 10, Windows ha tenido API para UWP incorporadas que proporcionan acceso directo a los buses Gpio, Spi o I2c ubicados en soc. Esto proporciona un acceso muy fácil a este hardware desde una API de alto nivel. Sin embargo, hay muchas veces que un creador de dispositivos quiere usar un controlador off-soc para acceder a un bus. Puede ser tan simple como un chip barato que agrega 16 pines GPIO, o tan rico como un MCU completo (como un Arduino) que no solo agrega patillas Gpio, SPI e I2C, sino que también admite PWM y ADC. Con el modelo "Proveedor de buses", proporcionamos a los desarrolladores la capacidad de acceder a estos buses fuera de soc mediante las API incorporadas, mediante un proveedor en modo de usuario que une la brecha.

Alguien que crea un proveedor implementa un conjunto de interfaces en una biblioteca de clases de UWP y, a continuación, cualquier desarrollador que quiera comunicarse con ese hardware simplemente incluye el componente e indica a las API integradas sobre él. Si observa el código de ejemplo del proveedor de Arduino remoto , puede ver lo fácil que es configurar el proveedor y, una vez establecido como proveedor predeterminado para esa aplicación, el resto del código de la aplicación cliente es idéntico al código necesario para acceder a un bus on-soc.

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);`

Proveedores disponibles

Actualmente tenemos una serie de proveedores disponibles en el repositorio de GitHub Proveedores de bus . Además del código del proveedor, cada proveedor tiene una solución de VS de ejemplo que muestra cómo un cliente usaría ese proveedor.

  • ADC

    • Ads1x15
    • Mcp3008
    • Arduino remoto
  • PWM

    • PCA9685
    • Simulado con Gpio
    • Arduino remoto
  • Gpio, SPI, I2C

    • Arduino remoto

Además de los proveedores que proporcionan acceso al hardware real, hemos creado un proveedor simulado que actuará como si fuera un proveedor infinitamente capaz y está diseñado para permitirle escribir y depurar las aplicaciones sin tener que implementarlas primero en un dispositivo en funcionamiento. Para obtener una experiencia más completa, puede personalizarla para simular el hardware real. Por ejemplo: actualizar el proveedor I2c para devolver el resultado "75" cuando se envía el comando para una lectura de temperatura en un dispositivo con la dirección secundaria designada.

Recursos adicionales

Puede encontrar herramientas de bus adicionales, códigos de ejemplo y compilación y pruebas en I2C, SPI, GPIO, MinComm/UART aquí.

Consulte las API de Windows Runtime (WinRT) y aquí se muestra cómo aprovechar las API de las aplicaciones Win32.