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...
Description
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.
Requirements
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:
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:
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:
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:
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.
Features
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 |
Supported |
Gadgeteer Core 2.43.900. |
Visual Studio |
Supported |
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 |
Supported |
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 (new) |
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 (new) |
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. |
Graphics |
Limited support (new) |
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 (https://netmf.codeplex.com/workitem/2149).
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
(https://gadgeteer.codeplex.com/workitem/1666) 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 (https://gadgeteer.codeplex.com/workitem/1752).
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 (https://netmf.codeplex.com/workitem/2179).
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 (https://gadgeteer.codeplex.com/workitem/1861) 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 (https://netmf.codeplex.com/workitem/2180). |
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. |