Whilst the Raspberry Pi 2 has extensibility through GPIO, I2C, SPI and Single wire, the main interface for adding off-the-shelf peripherals is via USB. Unlike the desktop, there is though only a limited set of USB peripherals that can be used on the RPI2 running Windows 10 IoT in the first release. This series of articles looks at what is available and what the overarching issues are.

Windows 10 IoT RTM has two target platforms; one x86/64 (read x86 from here) and one ARM platform. Others are being developed. Regardless of the CPU target, Win 10 IoT apps are built from the same code as the desktop and mobile versions of Windows 10 .. the One Windows mantra. A Windows 10 Universal App (technically a Universal Windows Platform App in Windows 10) without any extensions will run on all three platforms. You just need to set the target CPU .. that is all There are extensions though that can be added to a Universal App which will limit the targets. There are extensions for the desktop, mobile and IoT:


For example, the IoT extensions give GPIO, SDI and I2C capabilities to the Universal App.

With Windows 8/8,1 there were desktop x86 and ARM versions of the OS; the ARM version being the RT Surface (or just Surface as opposed to Surface Pro which is x86). Many desktop USB peripherals would not run on the ARM version of Win 8 as there was only an x86 driver for them. A USB memory stick would work on both types of Windows 8 platforms whereas most USB WiFi peripherals would only run on the x86 platform. This is because USB memory sticks do not require a specific driver as they conform to the USB Mass Storage class. USB WiFi drivers are more complex and so were not in general ported to the ARM platform for Windows 8.  Remote NDIS does add some universality to WiFi drivers though. Another example is the FTDI serial driver. Initially USB-serial dongles based upon an FTDI chip would not work on the RT Surface but FTDI later on developed the required driver::FTDI Win 8 RT Driver V 1.02 . This is documented at: FTDI RT Docs. With Windows 10 there is no desktop ARM, only mobile and IoT versions.

So what is this leading up to? The thing is, if there was a Windows 10 RT Surface then there would be an impetus for porting USB devices drivers to ARM that could, at least in principle, be used with Win 10 IoT on the Raspberry PI 2. But that isn’t true, so we are left being only able to use USB devices for classes of USB specifically implemented for that operating system and for other USB devices that have been specifically ported to ARM and included in OS. On the other hand, any USB device driver that runs on the desktop could in principle run MinnowMax board.


Supported Peripheral Interfaces and Devices

The official list of supported peripherals is at here.

The listed classes of USB devices that are “hosted” is

  • Serial
  • HID
  • Audio
  • Ethernet
  • Bluetooth
  • WiFi

For some USB device classes the device class is generically supported whereas for some class only a specific device is supported.

USB Memory sticks, even though not listed appear to be supported. One interface not listed for the Raspberry PI 2 is the native UART.  It would make interesting reading as to why this is not yet available. Currently those pins are listed as reserved for Win 10 IoT. This is definitely the Achilles heel, until it is resolved.  Also, USB Wireless HID is also supported, such as the Microsoft (Wireless) Arc Mouse.

The following articles discuss the USB devices that have been found to work (and not work in some cases) with the Win 10 IoT RPI2. Included are some test apps. These documents are under development.


  • Win 10 IoT Core: Raspberry PI 2 - Connected Devices: Peripheral devices can be connected to the Raspberry PI 2 via the four USB host ports. The connected devices can be examined in a number of ways. This article examines these methods.
  • Win 10 IoT Core: Raspberry Pi 2 - Connected Devices (Code): This blog discusses a UWP (Universal) app that enumerates the drivers on a Windows 10 system (including IoT), like the Windows Device Manager app. Full source code is available on GitHub.
  • Win 10 IoT Core: Raspberry Pi 2 – Connected Devices: USB HID Peripherals 
    Human Interface Devices (HID) are supported in the “headful/headed” (viz. headless) version of Windows 10 IoT. Anything that takes users input for an app is an HID device, and can include devices such as screens that provide feedback to the user. Traditional HID devices are the mouse and keyboard, whereas gaming devices such as joystick, XBox controller and steering wheel are also HID devices. A barcode scanner or credit scanner are also be HID devices, A system with just a few push buttons to control it has those pushbuttons as a trivial HID. Technically the HID protocol was developed as a protocol for the USB-HID class such that devices that conform to that class do not need a specific driver.
  • Win 10–Universal (UWP) App: Using JSON from a file to populate a menu
    This blog demonstrates the mechanism for loading JSON data from a text file into an Xaml ComboBox.
  •  Win 10 IoT Core: Raspberry Pi 2 Peripherals – Serial There are currently 2 reserved GPIO pins on the RPI2 that ordinarily are SOC (I call native) serial. A future Tx and Rx  but not at the moment. Serial is achieved on the RPI2 with Win 10 IoT Core via a USB-Serial device connected to a Host USB port on the RPI2. There are though limitations in that the widely used FTDI chipset is not supported by Microsoft, although we have a solution. An alternative is over Bluetooth but there is an issue there.
    • <ToDo> Win 10 IoT Core: Raspberry Pi 2 Peripherals – My list of working/not working USB devices
    • <ToDo> Win 10 IoT Core: Raspberry Pi 2 Peripherals – USB Ethernet & WiFi
    • <ToDo> Win 10 IoT Core: Raspberry Pi 2 Peripherals – USB Bluetooth
    • <ToD0> Win 10 IoT Core: Raspberry Pi 2 Peripherals – USB Storage
    • <ToDo> Win 10 IoT Core: Raspberry Pi 2 Peripherals –  USB Audio & Web Cam
    • <ToDo> Win 10 IoT Core: Raspberry Pi 2 Peripherals – Off-the-shelf USB devices