The Microsoft Azure IoT Developer Kit (AZ3166) board is built for prototyping Internet of Things (IoT) solutions and getting started quickly and easily. As part of this ease of use, the firmware flashing process for the device is extremely simple to do as well. You don’t need any special device drivers, special hardware or anything. If you can connect it to your computer over USB, then you can upgrade the firmware of the AZ3166 board.

Is an Update Available?

Before upgrading the firmware on your Azure IoT Developer Kit (AZ3166) board, you may want to first check if there’s a firmware update available. The board actually makes this extremely simple to do. When you power on the board, and it’s connected to Wifi, the default display will be to show you the Current version of the firmware that it is running. Additionally, since it’s on Wifi and able to connect to the Internet, it will also show you the version number of the latest available firmware too. This makes it extremely easy to tell if there’s an update available that you might want to update to.

Here’s an image of the display that you should see on your device telling you both the Current firmware version the AZ3166 device is running, as well as the Latest firmware version available:

Azure IoT DevKit: Upgrade Firmware - MXChip, AZ3166 2

How to Install Latest Firmware

Installing a new firmware, or upgrading the firmware, of the Azure IoT Developer Kit (AZ3166) board is extremely easy to do. You basically just download the latest firmware binary file, then copy it to the device over USB from your computer. Once copied, the device will automatically reboot and flash the new firmware.

Here’s the simple steps to follow to flash an updated firmware to your Azure IoT DevKit device:

  1. Connect the Azure IoT Developer Kit board to your computer using a USB cable. You can connect to any Windows or macOS computer.
  2. Download the latest firmware from the following URL, or the official documentation page.
  3. Locate a storage device connected to your computer named AZ3166. This is the Azure IoT Developer Kit board that is connected over USB.
    Azure IoT DevKit: Upgrade Firmware - MXChip, AZ3166 3
  4. Once you have downloaded the Firmware Update (it will be a .bin file), simply copy/paste the file to your AZ3166 device.
  5. Once the file is copied, the Azure IoT Developer Kit device will automatically reboot, flash the new firmware to it’s memory, then boot back up again. When it’s completed, your device will be ready to use again.
  6. It will also display the new Current firmware version on the default display after being updated. This helps you ensure that the firmware flash did succeed successfully. Additionally, it won’t show the “Latest” firmware display if there isn’t an update available. So after flashing the latest firmware to your device, it should display similar to the following:
    Azure IoT DevKit: Upgrade Firmware - MXChip, AZ3166 4

The Microsoft team, along with the team at MXChip, working on the Azure IoT Developer Kit board have done a really amazing job at making this board extremely easy to use. While not the most secure in terms of using for Production solutions, it’s a great setup to use for Prototyping and Learning purposes. After all, this isn’t meant to run anything Production anyway, since it’s really all about lowering the barrier to entry when Prototyping and Learning Azure IoT.


Posted by Chris Pietschmann

Chris is a Microsoft MVP and has nearly 20 years of experience building enterprise systems both in the cloud and on-premises. He is also a Microsoft Certified Azure Solutions Architect and developer, a Microsoft Certified Trainer (MCT), and Cloud Advocate. He has a passion for technology and sharing what he learns with others to help enable them to learn faster and be more productive.


  1. […] Azure IoT DevKit: Upgrade Firmware – MXChip, AZ3166 (Chris Pietschmann) […]


  2. Why would you consider the MXChip board “not the most secure” for production?


    1. Chris Pietschmann January 28, 2018 at 6:23 pm

      The Microsoft Azure IoT DevKit (AZ3166) board is built as a prototyping platform, it’s not meant to be used as a securely hardened IoT device to deploy out into Production. As a result, I wouldn’t recommend it be used in a Production environment that requires a secure device.


  3. Hello,is it possible to upgrade firmware remotely? what if deploy hundreeds of mxchip and need to upgrade them?


    1. Chris Pietschmann January 26, 2018 at 11:30 am

      I’m not aware of a way to update the firmware remotely. The Azure IoT Developer Kit (AZ3166) board is built to be a prototyping and learning platform. It’s not really meant to use for Production deployments.


  4. Lewis Harris-Manley January 30, 2018 at 8:41 am

    Hi Chris,
    My device isn’t appearing in my file explorer as a drive… also when I try to reset using A+B buttons, nothing seems to happen…


    1. Chris Pietschmann February 2, 2018 at 6:12 pm

      I’m not sure, it should just work. Are you certain your USB port and/or USB cable is working correctly? Try a different USB device to make sure.


    2. Did you ever fix your issue as my device is having the same problems you listed above?


  5. Can I put the DevKit back to factory default?


    1. Chris Pietschmann February 21, 2018 at 10:32 am

      I believe the “default” app running on the device is in the GitHub repos for the Azure IoT DevKit. I’d have to look again to find it, but you don’t really need to reset back to the “default” app.


  6. Hi, happened the same thing to me. I could not see the az3166 drive in my Win 10 PC, although power was fine, change to a different USB cable and it worked. The brand new USB cable from the box did not work….!


    1. Rodrigo Sanchez March 7, 2019 at 5:58 am



  7. Cable seems a common problem!


  8. Stephen Morris July 11, 2019 at 12:52 pm

    Hi Chris. I have successfully provisioned an MXChip both with and without X.509 enrollment.

    When I invoke “Azure IoT Device Workbench: Upload Device Code” within VS Code for the MXChip with X.509 enrollment (to update functions for the MXChip) I get an authorization error and I lose the connection between the MXChip and the IoT Hub. The non-enrolled MXChip works well with the same updated code (no error message and works well) and the connection to the IoT Hub remains.

    So the enrolled MXChip, when I try to update its code via VS Code, seems to corrupt or write over the enrollment code on the board. Not sure if this is exactly what is happening. Again, updating the MXChip code when not enrolled is no problem; updating the MXChip code results in a disconnection from the IoT Hub/DPS.

    What should I look for – or do – while trying to update an MXChip with new functionality when it is enrolled with X.509 certificate on DPS?

    Thanks for any ideas…



    1. Chris Pietschmann July 18, 2019 at 11:12 am

      One thing to know about updating the firmware of the MXChip board, is that when you do the secure enclave is basically cleared, so you will need to reload the X.509 certificate. This is because updating the firmware is a change to the device that could be done when the device is compromised by an attacker. This may be frustrating, but it’s a security feature that really helps increase the security of the devices connecting to your IoT Hub.


  9. Stephen Morris July 19, 2019 at 2:56 pm

    Thanks Chris.

    I combined the necessary code from the “Device Registration with DPS” sample to maximize security of the device-to-Azure connection, and to provide the core board functionality and telemetry to the IoT Hub, and some handshaking with the MXChip’s Device Twin.

    All this in one Command Palette “Azure…Upload Device Code” step in VS Code – works well!


Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.