@adbridge adbridge released this Sep 26, 2018 · 2550 commits to master since this release

Assets 2

We are pleased to announce the Mbed OS 5.10.0 release is now available.


In Mbed OS 5.10, we are improving the firmware update user experience. Mbed OS provides integrated firmware over-the-air (OTA) update capability enabled by Pelion Device Management. Mbed OS now makes it seamless and provides secure and flexible IoT firmware update and device management capabilities right from Arm Mbed CLI tool itself. Bluetooth Low Energy (BLE) is quickly becoming the IoT connectivity protocol of choice for a variety of use cases. In Mbed OS 5.10, we are launching Arm Mbed Cordio stack, the world’s first open-source, fully-qualified and production-ready BLE software stack that supports BLE 5 and gives developers even more flexibility in developing new IoT solutions with BLE connectivity.

Security is the most important challenge for the IoT developers. Mbed OS is supporting Arm V8M which has built in Trustzone functionality and laying the foundation for you to build highly secure devices. In Mbed OS 5.10, we are now supporting the Nuvoton M2351 based on the latest ARM V8M core. We are also integrating storage components, such as SPIF, SD and FlashIAP block devices, into the Mbed OS repository to simplify the use of storage components.

In addition, this release contains many minor fixes and enhancements and brings support for 145 target development boards. In the release note below, we summarize some of the key updates to Mbed OS that are part of the Mbed OS 5.10.0 release.

Core OS

Enhancing the user experience for firmware OTA updates

Firmware OTA updates are critical for IoT devices to ensure that the IoT device can be maintained throughout its lifecycle. Firmware OTA updates can significantly increase your device’s lifespan. If a device cannot update its firmware over the air, you must go to the field where the device is deployed and update its firmware, which is expensive and not scalable. Mbed OS supports firmware updates enabled by Pelion Device Management and provides flexible, secure and simple IoT device management for any device. It enables the provisioning and connection of IoT end nodes with cost-effective, secure and reliable software updates, ensuring a long product lifetime. In Mbed OS 5.10, we are simplifying the user experience of doing firmware updates. This enhancement means you can seamlessly enable firmware update capabilities in your IoT device. Using Mbed CLI, you can perform firmware updates to your device in fewer commands. You can also prepare firmware updates for one or multiple devices. For more information, please refer to our documentation about updating devices.

Support for ARMv8-M with Nuvoton M2351

Mbed OS supports building highly secure IoT embedded solutions based on the ARMv8-M platform. The most significant enhancement in the ARMv8-M architecture is the inclusion of the TrustZone security extension, a technology that adds a new dimension of security control and allows multiple security domains within a single processor system. This results in enhanced security and simplified development. TrustZone enables a “secure world” that keeps important data, such as private keys or pre-shared keys, isolated from the main operating system and apps. Mbed OS 5.10 supports Nuvoton M2351, based on the Cortex-M23 processor. Mbed OS also provides all necessary tools to support building and deploying both secure and nonsecure sides of application. Please see our tools documentation for more information.

Integration of storage components inside Mbed OS

Storage functionality is an essential requirement for building IoT devices that store data, firmware images and credentials on external MCU memory. Throughout the past few Mbed OS releases, we have developed functionality to support many different types of external memories, such as SPI flash and SD card. The storage drivers were developed as external components to allow continuous development and maturity of those drivers before bringing them inside Mbed OS. In Mbed OS 5.10, we are moving the SD, SPI Flash (SPIF) and FlashIAP drivers into Mbed OS. Integration of storage components into the Mbed OS repository makes it easy to use them and allows the simple add-on of default block device and default file system functionality. We added SD, SPIF and FlashIAP block devices under the new component label configured in target.json. Any board with an SD or SPI Flash component enabled has a default block device and file system. For more information, please visit the SDBlockDevice, SPIFBlockDevice and FlashIAPBlockDevice API documentation.

Quad SPI (QSPI) block device driver

With the cost of memory going down rapidly and performance on MCUs increasing every day, devices are storing more data than ever before. QSPI enables faster data transfer compared to traditional flash and used with components such as connectivity modules, displays and others. With QSPI, Mbed OS can communicate with external memories much faster than through SPI because the communication can be up to four lines between the host and a device. We are releasing the QSPI block device driver to enable NOR-based QSPI flash devices that support SFDP. For more information, please visit the QSPI documentation.


Arm Mbed Cordio Bluetooth Low Energy (BLE) stack

Production-ready open source BLE software stack: BLE is quickly becoming the Internet of Things (IoT) connectivity protocol of choice for a variety of use cases, including smart lighting, smart cities and asset tracking, where low cost, power consumption and a small footprint are fundamental requirements. According to the 2018 Bluetooth Market Update, there will be more than 5 billion Bluetooth device shipments by 2022, with 97% of them containing BLE technology. The advances in Bluetooth 5 technology, along with the introduction of Bluetooth Mesh, are driving new market opportunities across building automation, sensor networks and other IoT solutions.

In Mbed OS 5.10, we are adding Arm Mbed Cordio BLE stack to make it easier and more secure for organizations and developers to add BLE to their IoT devices to drive adoption levels to new heights. Arm Mbed Cordio BLE stack is the world’s first open-source, fully-qualified and production-ready BLE software stack, which gives developers even more flexibility in developing new IoT solutions with BLE connectivity. Using Arm Mbed Cordio BLE stack, you can innovate through Bluetooth 5 which supports 2x the data rate, 4x the range and 8x the broadcast capability compared to the previous version, Bluetooth 4.2.

Near field communication (NFC) card emulation mode support

NFC is a short-range radio technology that enables use cases such as contactless payments, access control and device pairing. We are enabling the card emulation mode in Mbed OS 5.10 through an NFC controller or NFC EEPROM. With Mbed OS 5.10, it is now possible to create NDEF messages that can contain device identification, pairing or sensing data. For more information, please visit the NFC API documentation.

Default network interfaces

Mbed OS 5.10 targets that provide network connectivity also provide a default network interface. This can be Ethernet, Wi-Fi, mesh or cellular. Using a default interface allows you to port applications to different targets and connectivity options. Applications no longer require libraries, such as Easy-connect, to be portable.

Refactored Socket API

This release refactors the Mbed OS Socket API by bringing it closer to the POSIX equivalent. The new design contains an abstract socket interface that applications can use directly. Casting Socket pointers back to TCPSocket or UDPSocket is no longer necessary. For most of the applications, these changes are not noticeable because the TCPSocket and UDPSocket classes still emulate previous behavior. The new design also renders the TCPServer API unnecessary, moving its functionality directly into TCPSocket itself. The legacy TCPServer class still exists and is fully functional.

Connectivity stack always builtin

Applications are no longer required to specify FEATURE_NANOSTACK, FEATURE_LWIP or FEATURE_COMMON_PAL to use any of the connectivity stacks that Mbed OS supplies. Those are always included in the build. This change does not increase any flash use because the linker can drop any unused functions.

Connectivity drivers

For easier integration and testing, this release includes some connectivity drivers for external modules, such as the ESP8266 Wi-Fi driver, AT86RF233 driver and MCR20A driver. Now applications using those drivers receive any applicable bug fixes every time they update Mbed OS.


Update to Mbed TLS 2.13

Mbed TLS 2.13.0 introduces several new features improving our support for DTLS over low-bandwidth, high-latency networks with high packet loss.


  • Support for fragmentation of outgoing handshake messages. This allows the use of Mbed TLS across networks with datagram links with MTUs as low as 512 bytes, making it suitable for NB-IOT networks.

  • Grouping outgoing handshake messages in a single datagram, reducing both the network load and the likelihood of reordering effects.

  • Reordering handshake packets that have been received out of order, reducing the number of retransmissions necessary to complete a handshake and therefore increasing handshake efficiency and reducing network load.

For more information, please visit https://tls.mbed.org/tech-updates/releases/mbedtls-2.13.0-2.7.6-and-2.1.15-released

Targets and tools

Thanks to our Partners’ hard work, Mbed OS 5.10 added 10 new target platforms and now supports 145 target platforms. Here’s a sneak peek at the new Mbed Enabled targets added since Mbed OS 5.9 in alphabetical order:

We’ll continue to add targets in our biweekly patch releases as Partners work with us on support.

Compatibility Issues

Mbed-bootloader (https://github.com/ARMmbed/mbed-bootloader), is the repository used to create the bootloader binary which is used by Pelion Client. Currently this repository is not compatible with MbedOS 5.10 but with Mbed OS 5.9.4. It will however create a bootloader binary which is compatible with Pelion Device Management Client 2.0.0 compiled with MbedOS 5.10.

We will be adding MbedOS 5.10 compatibility in upcoming releases of Mbed bootloader

Known Issues

We publish Mbed OS as a collection of modules on GitHub. Issues are raised in the specific repositories and then tracked internally. The purpose of this document is to provide a single view of the outstanding key issues that have not been addressed for this release. As such, it is a filtered and reviewed list based on priority and potential effect. Each item summarizes the problem and includes any known workarounds, along with a link to the GitHub issue (if applicable). We welcome any comments or proposed solutions.

For more information about an issue, contact us on the forum.

TLS: IP addresses in the X.509 certificate subjectAltNames

  • Description: Parsing IP addresses in the X.509 certificate subjectAltNames is not supported yet. In certificate chains relying on IP addresses in subjectAltNames a BADCERT_CN_MISMATCH error is returned.
  • Workaround: merge branch https://github.com/ARMmbed/mbedtls/tree/iotssl-602-san-ip into your copy of Mbed TLS before building the application. It is still in EXPERIMENTAL stage, use it on your own responsibility!
  • Reported Issue: Issue reported by a customer in email.
  • Priority: MAJOR

TLS: Mismatch of root CA and issuer of CRL not caught

  • Description: The x509_crt_verifycrl() function ignores the CRL, when the CRL has an issuer different from the subject of root CA certificate.
  • Workaround: Make sure that the issuer of the CRL and the root CA certificate's subject are the same before passing them to x509_crt_verifycrl().
  • Reported Issue: Reported by a partner.
  • Priority: MAJOR

TLS: Mbed TLS causes stack overflow in Mbed OS targets

  • Description: The stack memory usage of some Mbed TLS features is higher than 4 KB, which may cause stack overflow errors when running in constrained embedded environments with mbed OS which are particularly limited in RAM.
  • Workaround: The amount of stack required is very dependent on the application, and what features of the library it chooses to use. Obviously more intensive, demanding tasks may not be possible on more limited, constrained devices, so we recommend designing for the limitations of the target device, or choosing a device suitable for your application.
  • Reported Issue: ARMmbed/mbed-os-example-tls#14
  • Priority: MAJOR

TLS: Self Test Failure with Some Hardware Accelerators

  • Description: Most HW acceleration engines (if not all) require the parameters to be from contiguous memory.
    All the self tests use test vectors that are defined in the .bss section, which means these are not contiguous. This causes the self test to possibly fail, when implementing HW accelerated engines.
  • Workaround: There are no known workarounds
  • Reported Issue: Reported by the development team.
  • Priority: MAJOR

Tools: Makefile export fails to build larger project in Windows

Tools: Mbed OS tools have issues with python 3.x

  • Description: A number of issues have been found when using Python 3.x with the Mbed OS tools
  • Workaround: Use Python > 2.7
  • Reported Issues: #8146 , #8202
  • Priority: Major

Tools: Error when running mbed test --compile/run list

  • Description: The error, "pkg_resources.DistributionNotFound: The 'mbed-ls==1.*,>=1.5.1' distribution was not found and is required by icetea, mbed-flasher" is observed when running the command "mbed test -m K64F -t ARM --icetea --compile-list -vv".
  • Workaround: None
  • Reported Issues: #8064
  • Priority: Major

Platform: Realtek RTL8195AM does not define flash algorithms for uvision

  • Description: No flashing support in uvision for Realtek RTL8195AM
  • Workaround: Use drag-n-drop programming
  • Reported Issue: #4651
  • Priority: Minor

Platform: Realtek RTL8195AM - CMSIS-RTOS error: ISR Queue overflow

  • Description: Realtek RTL8195AM does not maintain a long running connection to Mbed device connector. The error manifests as an ISR Queue overflow.
  • Workaround: None
  • Reported Issue: #5640
  • Priority: Major

Platform: ARM_CM3DS_MPS2 targets do not have Ethernet driver

  • Description: Ethernet driver interface was refactored for Mbed OS 5.9. ARM_CM3DS is not yet ported.
  • Workaround: None
  • Reported Issue: -
  • Priority: Major

Platform: Ublox ODIN W2 crashing with latest client

  • Description: Ublox ODIN W2 board is often crashing when using Mbed Cloud Client. Root cause unclear.
  • Workaround: None
  • Reported Issue: Internal issues: ONME-3665, ONME-3672, ONME-3692
  • Priority: Major

Core: Some boards are crashing when lots of data is sent and received through buffered serial.

  • Description: This is currently known to affect Ublox ODIN W2 and RTL8195AM.
  • Workaround: None
  • Reported Issue: #8081
  • Priority: Major

Platform: Realtek RTL8195AM not passing networking tests

  • Description: RTL8195AM is not passing Mbed OS socket or WiFi tests. Various problems exist.
  • Workaround: None
  • Reported Issue: #8124
  • Priority: Major

Tools: Mbed CLI dm init fails to load certificate

  • Description: When running the command mbed dm init -d "xxxxxx" --model-name "yyyyyy" ,
    the following error is observed: "[CRITICAL] 2018-09-05 14:19:28 - manifesttool.init - Error setting
    defaults: Error loading .update-certificates\default.der: Unable to load certificate".
  • Workaround: None
  • Reported Issue: Internal reference: IOTUC-593
  • Priority: Major

Tools: Mbed CLI dm init command - reports bad country code when certificate expiration changed

  • Description: Run the command, mbed dm init -d "xxxxxxx" --model-name "yyyyyy" --force, using values
    that are known to work and a country code of 'US'. The following error is observed:
    "[CRITICAL] 2018-09-05 14:28:42 - manifesttool.cert - Error creating certificate: Country name must be a 2 character country code"
    A fix will be added for this in mbed-os-5.10.1.
  • Workaround: Using the -q flag will stop the country, region code etc from being requested and instead
    take default values.
  • Reported Issue: Internal reference: IOTUC-597
  • Priority: Major


Fixes and Changes

DAPLink 0250 release: During the 5.10 development cycle, we created DAPLink 0250. This improves the drag-and-drop programming experience when using the Mbed OS bootloader. We recommend anyone using DAPLink upgrade to this version.

Update Mbed TLS to version 2.13.0

ESP8266: Fix compilation error when default interface is enabled

Prevent sector-unaligned erase

Cellular: Fix Greentea test for network attach

Update mbed-coap to version 4.6.2

Bluetooth 5 Phy support

Lora: Remove duplicate LinkCheckReq MAC command

Cellular: CellularDevice unittests fix initialization

Corrected mbed-mesh-api thread/6lowpan tasklets interface disconnect/connect

Update CMSIS to 5.4.0

realtek: fix #7829 - remove dhcps files

Add ThisThread namespace and deprecate static Thread methods

Update linker files for NUCLEO_F207ZG and enable bootloader functionality

Cellular: Support for GPRS dial-up

BLE: Cordio going open source

Disable MBEDTLS_HAVE_DATE_TIME as ARMCC does not support gmtime

Cellular: Allow cellular modules to override network registration mode

Cellular: Make AT_CellularStack socket array multi-thread safe

Nanostack patch release for Mbed OS 5.10

littlefs: Fixed issue with cleanup in mount function on error

Message ID in CAN constructor needs to be unsigned

Tools: Use Distcc when it's configured

Implement device management subcommand

WISE_1570 greentea tests

Lora: Change visibility of LoRaMac internal methods as private

Platform: Add C++ Span class.

Silicon Labs QSPI HAL implementation

Add initial NFC support to Mbed OS

Unit testing framework

Allow ThreadInterface::device_eui64_get() before connect()

standardise QSPI pin names

Lora: Refactor duty-cycle configuration and introduce config for JOIN request

Re-add Shared Pointer Class into platform features

Connectivity drivers

Update greentea tests to use default interface

LoRaWAN: Fixing Hard fault in CN470 PHY layer

Skip Greentea tests for Mbed OS code coverage on Fast Models

LoRaWAN: Custom FSB selection in US and Australian regions

Cellular: Add getters for device and serial to EasyCellularConnection

Update Mbed 5 boot sequence

Template specialization didnt work after addition of default constructor

Build tool fixes for Musca support


Add thread safety to CRC class

Rename nanostack configuration (.cfg) files

Fix MeshInterface::get_default_instance()

Add default block device support (SD, SPIF and FLASHIAP)

Add some logic related to initialization to various block devices

LoRa: Fix MAC initialization for connection with parameters

Lora: Fix TX_ERROR event if corrupted msg is received for CONFIRMED request

Revert "Move BlockDevice classes inside mbed namespace"

Realtek RTL8195A wifi interface to inherit EMAC interface

Icetea support

Update mbed-coap to version 4.6.1

Nanostack release for Mbed OS 5.10

Optimized CRC implementation - (32-bit ANSI polynomial)

PR template: Feature -> functionality change

CircularBuffer: volatile specifier removal

Update BLE error calls to use new error codes and mbed_error

Add BOOTLOADER feature

LittleFS: Update to version 1.6

FlashIAP: Add a ROM end macro

netsocket: astyle fix

Renesas : Improve LWIP speed

Cellular: Gemalto Cinterion support for ELS61 and BGS2

Fixing import paths of memap.py when excuted as a script

Cellular: Add CellularDevice::init_module API to be called at startup

Move BlockDevice classes inside mbed namespace

Add Error Decoding URL to error report

Tools: Fix incrimental compile dep tracking

Tools: Scan for "components"

Tools: Omit include path parents when they're scan rules

UBLOX cellular api's for UDP and TCP

Tools: Correct win_to_unix path handling

LoRaWAN: Reduced priority for automatic uplinks & higher data rate usage for connection establishment

Fix double low power ticker interrupt

Remove uVisor from mbed-os

Tools: Differential Memap

Allow legacy TCPServer::accept() to override inherited Socket::accept()

Update ODIN drivers to v3.0.0 RC1

Tools: Add Uvision6 exporter

Tools: Generate update images with managed bl mode

Cellular: Make ATHandler::cmd_start() virtual

Design process and template for Mbed-OS

Export: Support Make + ArmC6 + v8m

Tools: Select compiler based on arch version

Fixes for tickless and LPTICKER_DELAY_TICKS

Add bootloader configuration parameters for MAX32625PICO

Ticker free() - requirements, pseudo code, tests, implementation

LoRaWAN: Reporting scheduling failures

LoRaWAN: FRMPayload size validity

Lora: Add support for runtime PHY selection

NFC APIs Design Specification

Fix issue #6872 - Mutex lock has possibility to fail at runtime (returning status flag)

Cordio Documentation: Explain how to tests and what tools are available.

Added json options for nanostack heap statictics

Replace mbed_mem_tracing_enabled macro with config option

Bug fix for receive windows

Update nsdynmemlib in frameworks/nanostack-libservice

Fix storage rtos types - remove including internal header file

Fix connected UDPSocket filtering

LoRaWAN: Refactoring LoRaRadio::receive(uint32_t) API

Add CPU stats for greentea tests


Tools: Persist config errors until validation occurs

Disable XTS cipher mode by default when importing Mbed TLS

Cordio: Add tests that validates a cordio port.

Cellular: Add AT+CCID and AT+CGSN

FlashIAP & NVStore tests: Skip test if overwriting code in flash

Create abstract Socket interface

Tools: Extract resources object and implement incremental scan

tools: crash_log_parser: make ELF and MAP parameters optional

Cordio driver hook

Tool, build_release: Return nonzero when builds fail

NRF52: add a separate .nvictable section and allow .noinit to be used

Override ROM/RAM start/size for TrustZone targets

Add reference counter for platform context

Add non-blocking write function for USBCDC

Tools: Include configuration in ASM

Extend feature which displays errors/warnings as Link

STM32 : script to generate PeripheralPins.c for new target addition

Implement zoomable html-flamegraph memap output

Update Mbed TLS version to 2.13.1

Update mbed-coap to version 4.6.3

[OOB 5.10] Fix typo

QSPI driver: API parameters fix

IOTCORE-389 - bring back legacy alignment for Arm C6

Reverting PinNames.h after PR #7774 changes

fix example code in QSPI.h

DISCO_L475VG_IOT01A remove old QSPI pins

Unittesting: Update mutex stub

Unittesting: Update Mbed CLI subcommand in Readme

Fix memory reservation for Softdevice in NRF52_DK

NFC: fix reading from NFC EEPROM

Fix memory allocation on STM32L4 devices

Add special handling for "/default" filesystem

Lora: Improve description of callback methods

Use MbedCRC for LittleFS

Add Socket test plan

python scripts : table print with github policy

requiremnts: Bump IceTea

Icetea hw restriction

Unit tests: fix coverage exclude paths on Windows

Allow storage doxy to build

Fix quotes around gcovr install command for Windows

Fix SocketAddress unittests

BUGFIX: Remove account management API calls from DM

Syncronize mbed-ls minimum version with icetea requirements

Move unittest paths to hyphens

mbed dm: Accept api key and host on the command line

Fix TCPServer::accept()

IAR: Fix for #7662, only massage the error decode URL for the IAR .xcl

Move SYNCHRONOUS_DNS_CACHE test to extended set

Adjust STMF411xE IAR linker file to mbed-os memory needs.

Testing and improvements

Icetea test framework: Icetea is an automated testing framework for Mbed development. It automates the process of flashing Mbed boards, running tests and accumulating test results into reports. Developers use it for local development as well as for automation in a Continuous Integration Environment. Icetea allows you to execute commands remotely via the command line interface in a device under test. More information is available at https://github.com/ARMmbed/icetea

Support for unit tests: Unit tests enable testing of code in small sections on a host machine and don’t require embedded hardware. Unit testing takes place in a build environment where you test each C or C++ class or module in isolation. This means you build test suites into separate test binaries and stub all access outside to remove dependencies on any specific embedded hardware or software combination. This results in much faster testing using native compilers on the build machine. For more information, please visit our unit testing documentation.

Support for Fast Models: Arm Fast Models are software models of Arm cores, subsystems, peripherals and so on. Mbed OS has enabled working with Cortex-M family Fast Models. You can run Mbed OS on the software model instead of the hardware. This give users the flexibility of running and testing Mbed OS and its applications in a hardware-free environment. For the details of running Mbed OS on Fast Models, please visit the Fast Models documentation.

Continuous integration framework:

The continuous integration framework ensures that every new feature and change in Mbed OS is tested, so that:

  • For every new feature, we create tests that we then deliver to our Partners. For every board to be Mbed Enabled, we need our Partners to successfully conduct these tests.

  • Partners must test the changes on their boards before submitting pull requests (PRs) on GitHub.

  • Once the PR is submitted, the Mbed OS gatekeepers manually review the code to ensure it meets the coding guidelines and code standards.

  • Once approved by gatekeepers, the code goes through the automated test infrastructure, which tests the submitted code across multiple platforms using three toolchains: IAR, ARM and GCC.

  • During the testing phase, we select the combination of boards and devices that support a variety of peripherals, MCU cores and features for maximum coverage.

  • To ensure the Mbed OS code is compatible with all the IDEs, we test that the code exports properly to all the compilers.

  • We merge the PRs only if all the above procedures are successful.

Below are the summary results for testing conducted for Mbed OS 5.10.0:

  • Total test time is 40,293 hours on actual development boards.

  • We have added 292 new test cases since the Mbed OS 5.9.0 release to test new and existing features on Mbed OS. The number of total test cases is 1,316.

  • The total number of binaries built since the Mbed OS 5.9.0 release is 46,270,224.

Using this release

Arm Mbed CLI

When you create a new program, Mbed CLI automatically imports the latest Mbed OS release. Each release includes all the components: code, build tools and IDE exporters. If you want to update your Mbed OS version or existing program to Mbed OS 5.10.0, run the CLI command mbed update mbed-os-5.10.0.

Arm Mbed Online Compiler

When you create a new program, the Mbed Online Compiler automatically uses the latest Mbed OS release. If you want to update your Mbed OS version, right click on mbed-os library, and press update.


You can also fetch this release from the mbed-os GitHub repository, using the tag "mbed-os-5.10.0".

If you need any help with this release please visit our support page, which provides reference links and details of our support channels.