Доступ пользователей к GPIO, I2C и SPI

Windows 10 содержит новые API-интерфейсы для осуществления доступа к GPIO, I2C, SPI и UART непосредственно из пользовательского режима. Платы разработки, такие как Raspberry Pi 2, предоставляют подмножество таких подключений, которые позволяют пользователям расширить базовый вычислительный модуль, добавив в него электрические схемы для определенной сферы применения. Эти низкоуровневые автобусы обычно совместно используются с другими критически важными функциями подключения, причем только подмножество контактов GPIO и автобусов, предоставляемых на заголовках. Для сохранения стабильности системы необходимо указать, какие контакты и шины можно безопасно менять в приложениях пользовательского режима.

Доступ пользователей к низкоуровневой шине в Windows осуществляется через существующие GpioClx и SpbCx платформы. Новый драйвер с именем RhProxy, доступный в Windows IoT Core и Windows Enterprise, предоставляет GpioClx и SpbCx ресурсы для пользовательского режима. Чтобы включить API, узел устройств для rhproxy должен быть объявлен в таблицах ACPI с каждым ресурсом GPIO и SPB, которые необходимо предоставить пользовательскому режиму.

Дополнительные подробные сведения о доступе UserMode через RhProxy можно найти здесь.

Поставщики шины

Начиная с Windows 10 Windows имеет встроенные API UWP, которые обеспечивают прямой доступ к шинам Gpio, Spi или I2c, расположенным на soc. Это обеспечивает очень простой доступ к этому оборудованию из высокоуровневого API. Однако существует много раз, когда производитель устройств хочет использовать контроллер вне soc для доступа к шине. Это может быть так же просто, как дешевый чип, который добавляет 16 контактов GPIO, или как богатый, как полный MCU (как Arduino), который не только добавляет Gpio, SPI и I2C контактов, но и поддерживает PWM и ADC. С помощью модели "Поставщик шины" мы предоставляем разработчикам возможность получить доступ к этим шинам вне soc с помощью встроенных API, используя поставщик пользовательского режима, который мостит разрыв.

Кто-то, кто создает поставщик, реализует набор интерфейсов в библиотеку классов UWP, а затем любой разработчик, который хочет общаться с этим оборудованием, просто включает компонент и сообщает встроенным API об этом. Если взглянуть на пример кода из поставщика Remote Arduino , можно увидеть, насколько легко настроить поставщик и после установки в качестве поставщика по умолчанию для этого приложения остальная часть кода в клиентском приложении идентична коду, необходимому для доступа к шине 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);`

Доступные поставщики

В настоящее время у нас есть ряд поставщиков, доступных в репозитории GitHub "Поставщики шины ". Помимо кода поставщика, у каждого поставщика есть пример решения VS, демонстрирующий использование этого поставщика клиентом.

  • ADC

    • Ads1x15
    • Mcp3008
    • Удаленное arduino
  • ШИМ

    • PCA9685
    • Имитация с помощью Gpio
    • Удаленное arduino
  • Gpio, SPI, I2C

    • Удаленное arduino

Помимо поставщиков, которые предоставляют вам доступ к реальному оборудованию, мы создали имитированный поставщик , который будет действовать так, как если бы это был бесконечно способный поставщик и предназначен для создания и отладки приложений без необходимости сначала развертывать их на рабочем устройстве. Для более полного взаимодействия его можно настроить для имитации фактического оборудования. Например: обновление поставщика I2c для возврата результата "75" при отправке команды для чтения температуры на устройстве с указанным вторичным адресом.

Дополнительные ресурсы

Дополнительные средства шины, примеры кодов и сборка и тестирование на I2C, SPI, GPIO, MinComm/UART можно найти здесь.

Ознакомьтесь с api среда выполнения Windows (WinRT), а также узнайте, как использовать API из приложений Win32.