GPIO, I2C 및 SPI에 대한 Usermode 액세스

Windows 10 usermode에서 직접 GPIO, I2C, SPI 및 UART에 액세스하기 위한 새 API를 포함합니다. Raspberry Pi 2와 같은 개발 보드는 사용자가 특정 애플리케이션을 해결하기 위해 사용자 지정 회로를 사용하여 기본 컴퓨팅 모듈을 확장할 수 있도록 이러한 연결의 하위 집합을 노출합니다. 이러한 하위 수준 버스는 일반적으로 헤더에 노출되는 GPIO 핀 및 버스의 하위 집합만 있는 다른 중요한 온보딩 함수와 공유됩니다. 시스템 안정성을 유지하려면 usermode 애플리케이션에서 수정하기에 안전한 핀과 버스를 지정해야 합니다.

Windows의 하위 수준 버스에 대한 Usermode 액세스는 기존 GpioClxSpbCx 프레임워크를 통해 배관됩니다. Windows IoT Core 및 Windows Enterprise에서 사용할 수 있는 RhProxy라는 새 드라이버는 usermode에 리소스와 SpbCx 리소스를 노출합니다GpioClx. API를 사용하도록 설정하려면 usermode에 노출되어야 하는 각 GPIO 및 SPB 리소스를 사용하여 ACPI 테이블에서 rhproxy에 대한 디바이스 노드를 선언해야 합니다.

RhProxy를 통한 UserMode 액세스에 대한 자세한 설명서는 여기에서 확인할 수 있습니다.

버스 공급자

Windows 10 시작하여 Windows에는 온-소크에 있는 Gpio, Spi 또는 I2c 버스에 직접 액세스할 수 있는 기본 UWP API가 있습니다. 이렇게 하면 상위 수준 API에서 이 하드웨어에 매우 쉽게 액세스할 수 있습니다. 그러나 디바이스 제조업체가 오프소크 컨트롤러를 사용하여 버스에 액세스하려고 하는 경우가 많습니다. Gpio, SPI 및 I2C 핀을 추가할 뿐만 아니라 PWM 및 ADC를 지원하는 전체 MCU(예: Arduino)만큼 풍부하거나 16개의 GPIO 핀을 추가하는 저렴한 칩만큼 간단할 수 있습니다. "버스 공급자" 모델을 사용하면 개발자에게 격차를 해소하는 사용자 모드 공급자를 사용하여 기본 API를 사용하여 이러한 오프 소크 버스에 액세스할 수 있는 기능을 제공합니다.

공급자를 빌드하는 사람은 UWP 클래스 라이브러리에 인터페이스 집합을 구현한 다음 해당 하드웨어와 통신하려는 개발자는 구성 요소를 포함하고 해당 구성 요소에 대해 기본 제공 API에 알릴 뿐입니다. 원격 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);`

사용 가능한 공급자

현재 Bus Providers github 리포지토리에서 사용할 수 있는 여러 공급자가 있습니다. 공급자에 대한 코드 외에도 각 공급자에는 클라이언트가 해당 공급자를 사용하는 방법을 보여 주는 샘플 VS 솔루션이 있습니다.

  • ADC

    • Ads1x15
    • Mcp3008
    • 원격 Arduino
  • PWM

    • PCA9685
    • Gpio를 사용하여 시뮬레이션됨
    • 원격 Arduino
  • Gpio, SPI, I2C

    • 원격 Arduino

실제 하드웨어에 대한 액세스를 제공하는 공급자 외에도 무한 지원 공급자인 것처럼 작동하는 시뮬레이션된 공급자 를 빌드했으며, 애플리케이션을 먼저 작업 디바이스에 배포하지 않고도 애플리케이션을 작성하고 디버그할 수 있도록 설계되었습니다. 더 풍부한 환경을 위해 실제 하드웨어를 시뮬레이션하도록 사용자 지정할 수 있습니다. 예를 들어 지정된 보조 주소가 있는 디바이스에서 온도 판독 명령을 보낼 때 결과 "75"를 반환하도록 I2c 공급자를 업데이트합니다.

추가 리소스

I2C, SPI, GPIO, MinComm/UART에 대한 추가 버스 도구, 샘플 코드 및 빌드 및 테스트는 여기에서 찾을 수 있습니다.

WinRT(Windows 런타임) API를 참조하세요. Win32 애플리케이션에서 API를 활용하는 방법은 다음과 같습니다.