In October 2014, ARM announced mbed OS, its new operating system for IoT devices. Now, roughly on schedule, the company has released a public beta version of the OS for developers and hobbyists to try out. mbed OS is a free and open source OS for ARM’s Cortex-M range of microcontrollers. These processors are less complex that ARM’s range of Cortex-A processors that you find in smartphones or tablets. Cortex-M processors are ultra-low power, run at speeds of around 100MHz (or less), and are perfect for the Internet of Things.
When it was first announced mbed OS was exclusively designed for the Cortex-M, which meant that if you wanted to build an IoT device with mbed OS you had to be using a Cortex-M based board. However in April ARM announced a companion to mbed OS called mbed Client, a set of core libraries which will allow mbed OS programs to be ported to Cortex-A based computers and boards running Linux. Part of the public beta which was announced today is also a test version of the mbed Client.
Today’s announcement is actually made up of five different projects, three of which are open source. The components are: the mbed OS, the mbed Device Connector, the mbed Device Server, the mbed TLS, and the mbed Client. The OS, the Client, and the TLS library are the components which have been released as open source.
ARM has released a github project for mbed OS as well as more information at mbed.com. mbed OS is designed specifically for the “things” part of the Internet of Things. It aims to provide a foundation for developers to build on and offers standards based communication capabilities, along with drivers for sensors, I/O devices and connectivity.
mbed OS itself is made up of several different software components, combined together and built using yotta. There are the core OS modules including minar, the mbed OS event scheduler; and uvisor, a supervisory kernel for security on mbed OS.
Next is the hardware abstraction layer which provides generic implementations of CMSIS (the Cortex Microcontroller Software Interface Standard – ARM’s official low level hardware abstraction for Cortex-M) for a variety of controller boards including the Freescale FRDM-K64F board and the ST STM32F429I Discovery board.
There are also several different networking components including a socket abstraction layer, and support for Ethernet, 6LoWPAN, and Bluetooth Low Energy.
mbed Device Server and mbed Device Connector
The mbed Device Server is a middleware product for connecting IoT devices to web applications. The server uses the Constrained Application Protocol (CoAP) to communicate with IoT devices. Every mbed OS and mbed Client has a small CoAP implementation that allows available information such as sensors and historical data to be sent up to server and made available in web applications. Each device registers its resources with the resource directory feature of the mbed Device Server using a single POST request (which is automated by mbed OS itself). Once a device is registered, all lookup, resolution and discovery can be handled between the web applications and the mbed Device Server. This removes the need for the web application to communicate with devices directly.
The mbed Device Connector is a hosted version of the mbed Device Server, offered to mbed developers to fast track development and prototyping. It is provided at no cost to IoT developers, but is limited to 100 devices, 200 events per hour and two API keys. Basically is allows IoT developers to test out the cloud based part of their projects without having to build the infrastructure.
The mbed TLS is a full open source an SSL library. The mbed TLS modules are as loosely coupled as possible and written in the portable C language. This allows developers the freedom to use the parts they need, without having to include the total library.
As an SSL library, mbed TLS (formerly known as PolarSSL) makes it easy for developers to include cryptographic and SSL/TLS capabilities in their (embedded) products. All of the mbed TLS code is released under the Apache 2.0 license.
The other open source component is the mbed Client. The source code can be found on github. Using this library non-mbed OS based devices (i.e. devices not running on Cortex-M boards) can connect to the mbed Device Connector or mbed Device Server. It basically implements a subset of mbed OS functionality and is optimized for constrained networks and devices. Like mbed OS it uses the Constrained Application Protocol (CoAP) and supports communication security using mbed TLS.