The Raspberry Pi 3 was released recently (February 2016). I’ve worked a lot with different types of Arduino before, but I’ve never worked with the Pi, so I decided to buy one to experiment. Since I’ve started to become interested in Windows UWP apps recently, I was particularly keen to try the Raspberry Pi 3 with a Windows operating system.

Since purchasing my Raspberry Pi 3, I’ve followed instructions on how to install Windows 10 from online guides, and watched a few installation guides on YouTube – each time, the installation was reported as very straightforward. This wasn’t my experience (and judging from forums and newsgroups, I’m not alone) and I hate admitting defeat. That said, once I worked out a process, I found it easy to install Windows 10 onto the Pi 3 (and got WiFi working too). So I’ve written this post to include all the mistakes I made, as well as the things I learned. Expert Raspberry Pi users might look at some of the things I’ve done here and say they’re unnecessary – this might be correct, but rightly or wrongly these were the steps I followed to get to a working install.

Remember that I’m describing how to get started with the Pi 3 with Windows 10 IoT Core. Getting Windows 10 to work with the Raspberry Pi 2 could be a very different process – I don’t have a Pi 2 so I haven’t experimented. Additionally, the items I discuss here might not be relevant for setting up the Pi 3 with operating systems other than Windows.

Last things – apologies for the poor quality photos throughout this post – I couldn’t take screenshots from my TV set so had to photograph the relevant screens. This is one of my longest posts, and I think this points to how complex the end to end process was.

Getting started

As well as a Raspberry Pi 3, there are a few other things you need which usually aren’t included with the Pi:

You need a micro SD card to hold the operating system that the Pi 3 will run – and not just any old micro SD card

For Windows, only certain micro SD cards are “Microsoft Verified“. I don’t pretend to understand the underlying differences between brands, but my experiences were that:

  • a Kingston 64GB SDXC didn’t work for me,
  • a SanDisk 64GB SDXC didn’t work for me,
  • a SanDisk 16GB Ultra SDHC did work (which is Microsoft Verified), and
  • a SanDisk 8GB Ultra SDHC did work in certain circumstances (and this card is not Microsoft Verified).

Of course, I’m not saying that the first two cannot work – there might be a step that I’ve missed – it’s just that they didn’t work for me.

I’ll go into a bit more detail about my experiences with these cards later in the post.

For Windows 10 to run on the Pi 3, you must format your card as FAT32 – it won’t work if it’s formatted as NTFS, or exFAT.

The Pi 3’s bootloader only has support for reading from FAT filesystems.

There is an official “SDFormatter” application, which I found worked for none of my cards (and ultimately this application proved irrelevant – I was able to use the built in Windows disk formatter to make things work on the 8GB and 16GB cards).

There’s an application called guiformat which allows you to format a 64GB microSD card as FAT32 – however, I wasn’t able to get Windows 10 to run on the Pi 3 from a 64GB card, so this really is just background information.

You need a display device with an HDMI port (and obviously an HDMI cable to connect the display device and the Pi 3).

I think it’s practically impossible to install the Windows IoT OS without having some form of visual feedback.

I needed a USB Keyboard.

If you’re installing by downloading from the internet, you’ll need to enter your Windows Insider username and password – if you’re installing from an image flashed onto your microSD card, you’ll still need to configure your Pi 3’s language settings.

And life is a lot easier if you have a USB mouse as well.

For a Windows 10 IoT install, I needed to be able to directly connect my Pi to an ethernet port.

Theoretically I shouldn’t have needed this – the Pi 3 has WiFi for online installs, and if you flash the OS onto your microSD card, everything should be on there. But I found a hard-wired connection to be critical to getting to the end of the process. There were times when the installation process failed, and after only one change of connecting the ethernet cable between my router and Pi 3, the installation worked.

You’ll possibly need to be able to supply the board with 5v and at least 1.0A through a micro USB connection.

I’ve read a few reports online of people saying installations failed because the Pi 3 wasn’t getting enough power. I’m not sure I entirely buy this explanation – I was able to successfully set up a Pi 3 with power coming from a regular USB port – however, your mileage may vary.

Use either NOOBS Lite, or use the Windows IoT Dashboard to load the flash.ffu file onto your SD card.

I found these tools were most consistent in getting a positive result. The Windows IoT Core Image Helper did work for me sometimes, but there are reasons why I prefer the IoT Dashboard (which I’ll go into later).

Don’t waste your time trying to use the Windows 10 installation for the Raspberry Pi 2.

Raspberry Pi 2 installers for Windows don’t work on the Pi 3. If you flash the Pi 2 image onto a disk and use it in a Pi 3, you’ll not see the Pi’s onboard green light flash when the device boots up (signifying it hasn’t found anything it can start booting from). I know this because at one point, my installation attempts had failed so many times that I was desperate enough to try this.

You need patience

There’s going to be a bit of waiting, especially after starting your Pi 3 for the first time, so don’t give up too quickly. Later in the post, I’ll provide the timings that I measured.

The wrong way (don’t do this)

After I ordered my Raspberry Pi 3, I ordered a 64GB SDXC Kingston SD Card (bad start – unverified microSD card). I formatted it using a Windows 10 machine, all in one partition using the default exFAT format (another mistake – it needed to be FAT32).

I download the Windows Insider ISO for the Raspberry Pi 3, mounted the ISO on my machine and double clicked the MSI file. This created a file on my machine called flash.ffu in the location “C:\Program Files (x86)\Microsoft IoT\FFU\RaspberryPi2” (this was about the only thing during my first attempt that I got right).

I found that the tools for installing this flash.ffu onto the micro SD card weren’t on this ISO, so I downloaded the ISO for the Raspberry Pi 2, mounted and installed that, and this gave me the “Windows IoT Core Image Helper” application. I then re-ran the ISO for the Pi 3 to get the correct flash.ffu file (there’s a much easier tool for doing this – the Windows IoT Dashboard).

I then flashed the SD card using the “Windows IoT Core Image Helper” application, which happily reported success. I put this card into my Raspberry Pi 3, switched it on, and the usual Windows start up screen appeared. It stayed there. After waiting 30 minutes I decided that it probably wasn’t going to boot.

A better way

Later, I found that only certain micro SD cards are “Microsoft Verified” – my Kingston 64GB microSD card was not on this list.

I don’t pretend to understand why a Kingston SD card is different from a SanDisk SD card – but I decided to get try with a couple of SanDisk SD cards, an 8GB Ultra (not Microsoft Verified) and a 16 GB Ultra (apparently Microsoft Verified).

First I tried the SanDisk 16GB SDHC Ultra (Microsoft Verified) – successful

For this disk, I decided to try to use “NOOBS Lite” to install Windows. For anyone who doesn’t know what NOOBS is, this is a piece of software which you can download, unzip, and copy to the root of your micro SD card. Then you can insert this SD card into your Raspberry Pi 3, power it up, and see a selection of operating systems which are available for download and install.

The steps I followed were:
1. Format the 16GB disk as FAT32;
2. Connect the Raspberry Pi 3 to your router using a CAT5 cable;
3. Connect a USB keyboard and mouse to the Raspberry Pi 3 ;
4. Insert the SD card into the Raspberry Pi 3;
5. Connect the Raspberry Pi 3 to a display device using an HDMI cable;
6. Finally, connect it to power using a powered USB socket (ideally delivering 5v and 1A, or better).

Once powered on, the display shows a screen with the Raspberry Pi logo, and a window saying that the micro SD card is being re-partitioned.

initial screen

After this, it will show you a window with the operating systems that you can download – Windows 10 is one of these systems.

choose operating system

I selected Windows 10, entered my WiFi details, and hit “i” to install. This immediately started downloading the Windows 10 system, and I was quickly challenged for my Insider user id and password. Once I supplied these, I was able to select the version of the ISO that I wanted to install, and download that to my Pi 3.

choose insider build

During the installation, I got a warning message to say the speed of my card may not be fast enough. I got this warning for every micro SD card that I tried, even for ones that ultimately worked.

warning message about speed

I found that I needed to click Yes to continue quickly – if I left this dialog open for more than a few seconds, the process presented me with a critical error message and aborted the download and installation.

So after clicking yes on the warning dialog above, the Windows 10 OS downloaded to my system, and reported success.

os installed successfully message

Once I clicked ok, the Pi 3 rebooted, and the usual Windows screen appeared with a spinner.

After about 4 minutes 40 seconds, the device appeared in my Windows IoT Device Dashboard with an allocated IP address (although what was being displayed on my TV screen did not change at this point).

After 14 minutes, the screen showed a critical error – CRITICAL_PROCESS_DIED – and automatically rebooted.

After it rebooted, about 1 min 30 secs later, it appeared on my Windows IoT dashboard, and then after another 30 seconds, I was shown an image of a red Raspberry Pi briefly, followed by Windows 10 IoT Core for Pi 3 set up screen.

This took me through a fairly standard set up process before I finished with the default screen for Windows 10 on the Raspberry Pi 3.

Pi 3 screen from 16GB SanDisk

Next – the SanDisk 8GB SDHC Ultra (not Microsoft Verified) – successful

I tried following the above process for an 8GB SanDisk microSD card – formatted as FAT32, with NOOBS Lite copied to the root. However, when I selected the Windows 10 OS, I saw an error appear – 7765MB were needed, and only 7424MB were available. Therefore I would not be able to install Windows 10 onto an 8GB card using NOOBS Lite.

error message for SanDisk 8GB

However, I didn’t want to give up on this microSD card yet – I thought I could flash an offline version of Win10IoT onto it. However, the 8GB microSD card had been partitioned by NOOBS Lite already, and I needed to remove these partitions.

I found the easiest way to do this was to use DISKPART – this is a disk partitioning tool which ships with Windows. The steps I followed were:

  1. Open a command prompt as Administrator;
  2. I typed “diskpart” to start the DiskPart application;
  3. Listing the available disks with the command “list disk”;
  4. Selecting the disk I wanted to work with using “select disk 1”;
  5. Cleaning this disk using “clean” (sometimes this gives an error – just running “clean” again often removes the error);
  6. Make this a single primary partition using “create partition primary”;
  7. Finally activate this partition using “active”.

disk part

(This image above shows the process I followed while cleaning my 64GB card, but it’s an identical process for the 8GB microSD card).

At this point, the 8GB microSD card was ready to be formatted by Windows into a single partition using FAT32 (to get to the Windows format tool, right click on the microSD card’s entry in Windows Explorer, and choose the Format option, highlighted in a red box in the image below).

format menu

Next, I installed the Windows IoT Dashboard, and browsed to the Insider ISO version 14322 of Flash.ffu (you can get the most up to date versions here), and flashed this onto the 8GB disk. Remember to select “Custom” from the Device Type drop down and choose the Flash.ffu image file location.

screenshot.1462221497

The process above will probably change when the image for the Raspberry Pi 3 is promoted from the Windows Insider Program to General Release – bear in mind this article was written in early May 2016.

One reason I prefer to use the Windows IoT Dashboard is that the tool it uses for flashing the image onto the microSD card is signed with a verified publisher (see the photo below). This tool is called “DISM” – this stands for “Deployment Image Servicing and Management”.

signature screen

I’ve found that the alternative tool provided by Microsoft – the “Windows IoT Core Image Helper” also uses DISM, but this version is reported by Windows as unsigned.

unsigned DISM

I inserted the flashed microSD card into the Pi 3, booted it up, and after about 2 mins 30 seconds, the Pi 3 entered setup mode, challenging me to select the device language.

One interesting thing that I noticed was that about a minute after I booted the Pi 3, the device appeared on my IoT Dashboard’s list of devices.

windows iot dashboard

When you try to open the device using the Windows IoT dashboard, you’re challenged for a username and password. The Pi 3 instructions specify that these username/password credentials are Pi and Raspberry respectively – however, this doesn’t work for the Windows install. The default username and password are “Administrator” and “p@ssw0rd” – change these as soon as possible!

Does WiFi work?

I found that Windows 10 IoT does support the Pi 3 onboard WiFi chip – this is contrary to what a lot of people are reporting right now. However…it works on my machine.

As an update to this, I read on this forum that the WiFi works on Element 14 manufactured devices (which mine is) – not sure about other manufacturers.

I didn’t have to do anything special – whilst setting up the Raspberry Pi 3 device, I was invited to set up internet connectivity, and shown the screen below. “Kobol” is the name of my family’s wireless network (we’re big BSG fans).

wireless setup screen

I was able to configure the network, and it was visible on the default Dashboard. I’ve disconnected the hard wired connection from my Raspberry Pi 3 and highlighted it in the photo below – the wireless connection is showing up in the default dashboard on my TV set.

pi with wireless

I was able to confirm this worked wirelessly by deploying one of the sample applications from the Windows IoT Dashboard (internet radio).

Conclusion

After a lot of hassle, I was able to successfully install Windows 10 IoT core on two microSD Cards – both from SanDisk – for Raspberry Pi 3. There are a lot of opportunities to trip up in this process, and I’ve documented all the ones that tripped me up. I think the process of flashing an image onto FAT32 microSD card is the best way to install Windows 10 IoT Core, though using NOOBS Lite does work also. Finally, I’ve found that in version 14322, on-board WiFi is working for my device, which is manufactured by Element 14.


About me: I regularly post about .NET – if you’re interested, please follow me on Twitter, or have a look at my previous posts here. Thanks!