Доступ пользователей к 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.