Mountaineer Release 4.3.1 (Beta 3)

"It is exciting to see Oberon and CSA delivering another high quality release for NETMF. The quality and care of their work makes this port for Cortex-M one of the best offerings of this kind in the industry. Congratulations!"

Lorenzo Tessiore, Microsoft                                                                               See what others are saying...


Release 4.3.1 (also known as NETMF 4.3 QFE1) is the latest version of Micro-soft's .NET Micro Framework. We have updated our NETMF for STM32 port to this version, including solutions for both the Mountaineer USB Mainboard and the Mountaineer Ethernet Mainboard. The compiled binary images of this software (the firmware for the boards) and the libraries for developing applications (the SDK for the PC) can be downloaded as described below.

Beta 3 Notes

This is the Beta 3 release of NETMF 4.3 compatible Mountaineer firmware and SDK.

The major changes to the Beta 1 release are the following:

  • Switch from NETMF 4.3 to 4.3.1 (also known as 4.3 QFE1). Apart from a number of bug fixes, this new release adds the class System.BitConverter.
  • Switch from Gadgeteer Core 2.43.800 to 2.43.900.
  • Bug fixes for Mountaineer firmware issues 2, 3, 7, 8, 9, 10 and 12 (see table at the bottom of this page).
  • The random number function System.Security.Cryptography.RandomNumberGenerator class is now provided. It is a true hardware random number generator, using the special hardware of the STM32 microcontroller. To use it in Visual Studio, add a reference to the System.Security. Cryptography.Netmf DLL. See here for more information.

The major changes to the Beta 2 release are the following:

  • Bug fix in the NetworkLibrary interop code (only affects Gadgeteer programs, and only the Mountaineer Ethernet Mainboard variant).
  • Support for in-field updates using Microsoft's standard MFUpdate mechanism.

If you intend to use the Gadgeteer libraries, please be aware that it may take a while until there are NETMF 4.3.1 compatible drivers for all modules. Ask your module suppliers for updated drivers. If you have the source code for a module's Gadgeteer driver for NETMF 4.2, then switching the target framework in Visual Studio to NETMF 4.3 and recompiling the driver should work as well.

For technical support and discussions, please use this thread on the GHI forum.

For bug reports, please use our Codeplex site.

At the moment, there are still the NETMF 4.2 QFE2 sources on Codeplex. We will update the source code to 4.3.1 once the beta phase is over.


You need a computer with Windows 7 or newer.

For Windows 8.1, you need to enable .NET Framework 3.5, as Microsoft's NETMF SDK has a dependency on an older .NET framework than the current 4.5 version. You can learn how to enable the 3.5 version here.

Using virtual machines, e.g. Parallels, may pose problems and is not supported.

Step 1 - Uninstall old SDKs

Uninstall the Mountaineer, Gadgeteer and NETMF SDKs. You can keep older versions of Visual Studio, though.

Step 2 - Microsoft Visual Studio 2012

Make sure that you have Visual Studio 2012 installed. The free Visual Studio Express 2012 for Windows Desktop edition is sufficient, you can download it from here.

If you already have an older version of Visual Studio installed, you can keep it when you install Visual Studio 2012 ("side-by-side installation"). Note that you can develop and deploy NETMF applications for NETMF 4.3 and also for older NETMF releases from within Visual Studio 2012.

Step 3 - Microsoft .NET Micro Framework SDK 4.3 QFE1

Download Microsoft's .NET Micro Framework SDK 4.3.1. It is the download labeled SDK 4.3 (RTM QFE1). Now install it on your PC.

Step 4 - Microsoft .NET Gadgeteer Core 2.43.900

This step is only relevant if you want to use your board with .NET Gadgeteer. If you only plan to use plain vanilla NETMF, you can skip to the next step. Otherwise install Microsoft's .NET Gadgeteer SDK 2.43.900 by clicking on the download labeled .NET Gadgeteer Core.

Step 4 - Mountaineer USB drivers

To be able to use Microsoft's Visual Studio and MFDeploy tools with your Mountaineer board, you need to install a USB driver on your PC. There is one driver for the Ethernet mainboard, and one driver for the USB mainboard.

Note: These drivers have been updated on 17-Jul-2014. They now are signed in a way that allows installation on Windows 8 systems.

First, download the drivers contained in the following zip archive:

Mountaineer USB Drivers
This archive contains the Windows Drivers based on WinUSB for 32-bit and 64-bit Windows 7 (or newer) systems.
Mountaineer USB Drivers
Compressed Archive in ZIP Format 3.4 MB

This zip file contains both Mountaineer USB Mainboard and Mountaineer Ethernet Mainboard drivers.

Now unzip the archive, which results in the directory


  ...\Mountaineer USB Drivers


The actual installation will happen during the update of the firmware, in the following step.

Step 6 - Mountaineer Firmware 4.3.1

Mountaineer boards are shipped with Mountaineer Firmware 4.2 QFE1 preinstalled. You need to install new firmware on your board.

First, download the appropriate firmware for your board:

Mountaineer Firmware 4.3.1 for Ethernet Mainboard
Mountaineer Firmware 4.3.1
Compressed Archive in ZIP Format 2.2 MB
Mountaineer Firmware 4.3.1 for USB Mainboard
Mountaineer Firmware 4.3.1
Compressed Archive in ZIP Format 2.0 MB

Now unzip the downloaded archive, which results in the directory


  ...\Mountaineer Firmware 4.3.1 Ethernet or

  ...\Mountaineer Firmware 4.3.1 USB


Open this directory, it contains the file


  Installation Guide for Mountaineer Firmware 4.3.1.pdf


Open this document and follow the instructions in order to install the Mountaineer firmware.

Step 7 - Mountaineer SDK 4.3.1

Download the Mountaineer SDK:

Mountaineer SDK 4.3.1
Mountaineer SDK.
Compressed Archive in ZIP Format 2.0 MB

Now unzip the downloaded archive, which results in an installer. Run this installer.

Note that the installer checks whether the Gadgeteer Core is installed (see Step 3 above). Only if this is the case, it installs the Gadgeteer drivers for both Mountaineer USB and Ethernet mainboards. In any case, it installs the Mountaineer DLL, which contains the following namespaces:

  • Mountaineer.Netmf.Hardware (the Gadgeteer-socket-oriented hardware provider),
  • Mountaineer.Stm32.Hardware (the alternate CPU-pin-oriented hardware provider), and
  • Mountaineer.Netmf.Flash (a simple driver for the onboard Flash memory).

Step 8 - Get started

To try out your first Gadgeteer program, follow the steps described in the following document:

Getting started with Mountaineer
Adobe Acrobat Document 660.5 KB

You may then want to try out the samples of the book Getting Started with the Internet of Things. Here the samples are adapted to Mountaineer Ethernet Mainboards.


The following table is intended to make it easier for you to determine if a specific NETMF feature is available for Mountaineer. The supported features fully comply with the standard NETMF distribution of Microsoft.

Some advanced firmware features are only available for engineering projects done in cooperation with the Mountaineer Group; these are labeled as Mountaineer Prime features in the following table.

Feature Support Comments
.NET Micro Framework Supported

Release 4.3.1 (also known as 4.3 QFE1).

.NET Gadgeteer


Gadgeteer Core 2.43.900.

Visual Studio


Visual Studio Express 2012 for Windows Desktop (free), or one of the Pro / Premium / Ultimate editions.

VS 2012 can coexist with installations of older Visual Studio versions on the same PC. You can also develop for older versions of NETMF within VS2012.

Single-chip microcontrollers


STM32F407, 168 MHz, 192 KB RAM, 1 MB Flash.

For Mountaineer Prime projects: many other STM32 microcontrollers can be supported.

Hardware floating-point Supported

STM32F4 only has hardware (FPU) for single-precision values (type float), not for double-precision values (type double).

Digital I/Os Supported


Analog inputs Supported


Analog outputs Supported

Original open source contribution by Oberon microsystems, Inc.

Pulse-Width Modulated (PWM) outputs Supported


USARTs (serial) Supported


I2C bus Supported


SPI bus Supported


USB Device Supported

The Mountaineer USB Mainboard provides two independent USB Device ports. One can be used for debugging and deployment, the other for the application.

USB Host Prime only

For Mountaineer Prime projects: USB mass storage profile for one connected device supported. Requires hardware with USB Host capabilites, e.g. a Mountaineer USB Mainboard. No 4 GB limit.

Ethernet Supported

Hardware available only on Mountaineer Ethernet Mainboard.

Fast Ethernet driver implementation (interrupt-driven with DMA).

ICMP Supported

lwIP stack.

DHCP Supported

lwIP stack.

UDP Supported

lwIP stack.

TCP Supported

lwIP stack.

Maximum number of open sockets (i.e., simultaneous connections): 5

For Mountaineer Prime projects: This limit may be increased, depending on the hardware being used.

HTTP Supported


XML parsing Supported


NTP Supported(new)

Hardware available only on Mountaineer Ethernet Mainboard. Must be explicitly enabled, see here.

Real-time clock Supported(new)

See here for more information.

OneWire bus Supported(new)


Hardware random number generator Supported(new)

Class RandomNumberGenerator in namespace System.Security.Cryptography, in DLL System.Security.Cryptography.Netmf.

See here for more information.

Hardware watchdog Prime only

For Mountaineer Prime projects: The hardware watchdog detects if the language runtime is stuck for some reason. Default timeout is one minute, can be increased to two minutes.

On-board Flash

Limited support


A simple driver is provided in the Mountaineer SDK and described here. Add a reference to the Mountaineer assembly, and then use the FlashDriver class in namespace Mountaineer.Netmf.Flash.

SD Cards Prime only

For Mountaineer Prime projects: fast (4 bit bus) implementation. Requires hardware with an SD Card holder, e.g. the industrial M4-MCU board. No 4 GB limit.

FAT file system Prime only

For Mountaineer Prime projects: onboard flash file systems, SD Card file systems, and memory stick file systems support more than the typical 4 GB volume limit of NETMF.

For the standard firmware, see also the community-contributed Tiny File System of Taylorza and its driver by LouisCpro as an alternative.

In-field firmware updates Supported(new)

Support for firmware updates in the field. See here for more information.

SSL Not supported

OpenSSL is about an order of magnitude too large for the STM32 on-chip memories.

NaCl crypto library

Technology preview 


Experimental support for Daniel Bernstein's NaCl library of cryptographic primitives. See here for more details.

For Mountaineer Prime projects: highly optimized implementation of exactly the same API, at about half the footprint and up to two orders of magnitude higher speed.

Access to uC ID and key storage

Prime only

For Mountaineer Prime projects: library for accessing the unique 96-bit ID of STM32 microcontrollers, and the creation and storage of public/private key pairs.


Limited support


Bitmap data type and graphics operations are now supported in principle. However, there is no standard way in NETMF for efficiently copying a bitmap to a display. Thus displays are currently not supported.

Touch screens Not supported

Mountaineer mainboards have no T sockets.

FTP Not supported

Never required in customer projects yet.

SMTP Not supported

Never required in customer projects yet.

CAN bus Not supported

No support in standard NETMF.

Extended weak references Not supported

Mechanism is hardly usable in practice (nondeterministic commit times to Flash - you never know when your data is safely stored). Moreover, the STM32F4 Flash block structure would waste far too much of the on-chip Flash for EWR.

DPWS Not supported

Never required in customer projects yet. Our focus is typically on more light-weight REST-based services instead.

GCC Not supported

Never required in customer projects yet.

Even the latest GCC version for Cortex-M still produces massively slower and larger code than the tools that we use (ARM MDK-Cortex-M 5.0).

You can find the NETMF source code of the Mountaineer firmware on our Codeplex site.

Known issues

Issue  Description
1) SD Card operations sometimes take long to complete

Somestimes it can take up to a minute for an SD Card read or write operation to complete.


This may be a bug in the NETMF file system's Flush() method (


Workaround:   new Microsoft.SPOT.IO.VolumeInfo("\\SD").FlushAll();

2) Gadgeteer analog output values too large

Analog output has wrong value.

This is a bug in the Gadgeteer Core


Plain vanilla NETMF code is not affected.

Fixed in Beta 2 (new Gadgeteer Core)

3) NetworkUp event issue

NetworkUp event does not fire if board starts up with cable attached (

Fixed in Beta 2.

4) lwIP assertion failure

Sometimes lwIP produces an assertion ("tcp_pcb_purge: listen pcb does not have accepts pending" failed).


Workaround: none needed (ignore output).

5) Slower without debugger

Program can be slower without attached debugger (


Workaround: don't use Debug.Print().

6) Gadgeteer Web server

No response is received from a Gadgeteer.Networking.WebServer instance.

This is a bug in the Gadgeteer Core


Plain vanilla NETMF code is not affected.


Workaround: see the above Codeplex issue.

7) 10 Mbps does not work

Network stack does not work with 10 Mbps switches.

Fixed in Beta 2.

8) UDP broadcasts

UDP broadcasts cause exceptions.

Fixed in Beta 2.

9) Hangup after deployment

After deployment, a soft reboot happens, which sometimes hangs up the board.

Fixed in Beta 2.

10) No deployment when USB stick plugged in

When an USB stick is plugged in to the USB host connector, deployment does not work.

Fixed in Beta 2, only relevant for Mountaineer Prime Firmware.

11) Wrong exception for disposed socket Using a disposed socket causes a SocketException instead of an ObjectDisposed exception (

12) Parity issue

Using odd/even parity for serial ports does not work.

Workaround: add 1 to bit number.

Fixed in Beta 2.

13) NotSupportedException in Gadgeteer

When creating an empty Gadgeteer project and starting it, a System.NotSupportedException is thrown in the Microsoft.SPOT.IO.dll.


Workaround: none needed (ignore exception).

14) Device hangs when deploying and Ethernet cable is plugged in

TCP stack hangs waiting for DHCP if there are multiple devices in the network with the same MAC address.


Workaround: make sure that every device has unique MAC address.