@adbridge adbridge released this Jun 13, 2018 · 4676 commits to master since this release

Assets 2

We are pleased to announce the mbed OS 5.9.0 release is now available.


Mbed OS 5.9 is releasing device statistics APIs, which allow you to gather critical device information. This is a first step toward giving you power to remotely diagnose the health of IoT devices deployed in the field. Mbed OS 5.9 focuses on mainlining and increasing adoption of low power features, such as the microsecond ticker, low power timer, sleep manager and real time clock APIs. Power consumption is one of the most important design requirements for IoT devices. Meeting the power budget is becoming challenging as the systems today include more sensors, faster responses and more connectivity. With the introduction of and improvements to key low power features, such as the microsecond ticker, low power timer, sleep and real time clock APIs, meeting tight power requirements and designing low power systems becomes straightforward.

This release also continues our efforts to add comprehensive documentation for Mbed OS. Our ongoing efforts in this area include adding documentation to our connectivity, RTOS and storage APIs, as well as information about our configuration system.

In addition, this release contains many minor fixes and enhancements and brings support for 135 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.9.0 release.

Core OS

Device statistics APIs

A major challenge in deploying and managing remote IoT devices is monitoring the overall health of the system. Identifying individual mis-performing devices can be challenging when many devices are deployed, and the cost of sending a technician to test devices in the field is very high. We are releasing device statistics APIs in Mbed OS 5.9 to enable device analytics on Mbed OS platforms. Our vision is to continue developing the APIs that provide information about the device and system health and to develop APIs that enable transmission of device health information over the network, so you can remotely monitor the health of your IoT device. The device statistics APIs in the Mbed OS 5.9 release are well-defined APIs that you can use to retrieve OS statistics and device information, such as memory usage, Thread information, stack usage data and runtime CPU load information. The implementation of these APIs is modularized, and it provides multiple APIs for each category. You can enable these separately using build time configuration. For more information, please visit https://os.mbed.com/docs/v5.9/reference/mbed-statistics.html.

Low power features

The Mbed OS 5.9.0 release mainlines several low power features to enable long battery life and reduces power consumption to solve key challenges for embedded devices. The low power features were developed over the past few Mbed OS releases and adopted by Mbed Partners. Many platforms now support these features.

  • Tickless RTOS scheduler: In tickless operation, you don’t have to make the tradeoff between the high frequency timing interval, which consumes more power, and the low frequency timing interval, which results in suboptimal time keeping. The scheduler schedules the next timer tick in response to the next event rather than the fixed timer tick. For more information, please visit https://os.mbed.com/docs/v5.9/reference/tickless.html.

  • Improvements to the microsecond ticker and low power timer: Tickers or timers are hardware timers that track small amounts of time​. Mbed OS supports two types of tickers, the high-resolution microsecond ticker​ and the low power ticker​. We have made several improvements to tickers. For example, our ticker now returns native value and configuration data, and the Mbed OS driver is responsible for frequency conversion. For more information, please visit https://os.mbed.com/docs/v5.9/reference/microsecond-ticker.html.

  • Improvements to sleep modes: To save power, Mbed OS goes in sleep modes during idle loop. The sleep modes turn off the system clock when peripherals relying on it are not in use and saves power. We are making several improvements to sleep modes to enhance their functionality. We have APIs to demonstrate the peripheral status during sleep mode. The device must be able to wake up from specified sources. For sleep mode, it is any interrupt, and for deep sleep mode, it is watchdog, low power ticker or GPIO. For more information, please visit https://os.mbed.com/docs/v5.9/reference/power-management.html​.

  • Real time clock: The phrase "real time" differentiates this clock from a ​typical digital clock, which generates electrical pulses but doesn’t keep track of seconds or minutes. The real time clock enables the system to track time in human units​. Usually, it continues to count over system resets, and the date and time remain correct even after you reset the system​. RTC is often supplied with a dedicated battery to keep track of time during power loss. We have improved the real time clock support in Mbed OS. It now continues to keep counting during ​software reset, sleep modes and shutdown mode​. Also, the improved accuracy is now below 100 ms. ​Please visit https://os.mbed.com/docs/development/v5.9/rtc.html for more information.

Improvements in error codes and error handling

We are improving our error codes and error reporting infrastructure to ease development by enabling a standard way to describe, debug and communicate error scenarios. Improved error handling implementation provides features such as standardized error code and error status definitions, error handling APIs for error construction, error reporting with thread context, the ability to retrieve previous errors and the ability to save errors to the file system. We designed the error reporting APIs to be used from any context, such as ISR or Threads. The implementation also provides mechanisms for extending the error status definitions to report application specific errors and to extract information from error status values. For more information, please visit https://os.mbed.com/docs/v5.9/reference/error-handling.html.


Ethernet MAC API (EMAC)

We have introduced a new EMAC API to bring unified support for Wi-Fi and Ethernet interfaces and make drivers independent of underlying network stacks. The new changes make it possible to use the same driver with both Nanostack and LWIP Stack. Working closely with our Silicon partners, the new EMAC feature is already available on boards and modules from Nuvoton, NXP, Realtek, Renesas, ST and u-blox.


Update to Mbed TLS 2.10.0

Mbed TLS 2.10.0 provides support for the ARIA cipher and cipher suite for TLS (RFC-6209). Mbed TLS also contains optimizations to reduce code size or RAM, including an option for smaller AES tables. In addition, it contains many security and bug fixes over Mbed TLS 2.7.1, which was included with Mbed OS 5.8. You can access the Mbed TLS feature at https://github.com/ARMmbed/mbed-os/tree/master/features/mbedtls.

Targets and tools

Thanks to our Partners’ hard work, Mbed OS 5.9 added 14 new target platforms and now supports 135 target platforms. We’ll continue to add targets in our biweekly patch releases as Partners work with us on support.

Mbed CLI update and Python 3 support

We have updated all Mbed OS tools to be compatible with both Python 2 and Python 3 environments. This gives greater flexibility on system requirements because previous installations of Mbed OS required the use of Python 2. You can now choose which Python environment fits your needs. Our tools are backward compatible with all current and previous versions of Mbed OS for Python 2. It is only compatible with Mbed OS 5.9 and later for Python 3.

We have also added a built-in serial terminal feature to Mbed CLI. You can invoke the serial terminal using the “mbed sterm” command. For more information, please visit https://os.mbed.com/docs/v5.9/tools/debugging.html#serial-terminal

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.

Handshake Messages are not fragmented as per MaxFragmentLength Extension Negotiation.

  • Description: "Once a maximum fragment length other than 2^14 has been successfully
    negotiated, the client and server MUST immediately begin fragmenting
    messages (including handshake messages) to ensure that no fragment
    larger than the negotiated length is sent. " In Mbed TLS only the application data is fragmented and the handshake messages are not.
  • Workaround: Disable MaxFragmentLength Extension Negotiation.
  • Reported Issue: ARMmbed/mbedtls#387
  • Priority: MAJOR

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

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

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

Commissioner does not retransmit message when it receives retransmission

  • Description: There are two issues with DTLS handshake retransmission. Firstly, the joiner fails to correctly parse received records because it does not correctly handle queued retransmissions received. Secondly, the commissioner may cause a deadlock as it does not retransmit certain records after it receives retransmission as instructed in RFC6347 Section 4.2.4.
  • Workaround: There is no known workaround.
  • Reported Issue: openthread/openthread#1207
  • Priority: MAJOR

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 accelerted engines.
  • Workaround: There are no known workarounds
  • Reported Issue: Reported by the development team.
  • Priority: MAJOR

uVisor does not support nested interrupts

  • Description: When running an application with uVisor enabled, nested interrupts are not supported.
  • Workaround: There is no available workaround at the moment.
  • Reported Issue: ARMmbed/uvisor#345
  • Priority: Major

On ARMv7-M targets supporting uVisor, the RTOS runs with the same privilege of uVisor

  • Description: The current architecture of uVisor and of RTX require the RTOS to run with the same privilege of uVisor. As such, the RTOS is considered as trusted.
  • Workaround: There is no available workaround at the moment.
  • Reported Issue: ARMmbed/uvisor#235
  • Priority: Major

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

Traceback occurs when ran with factory default firmware on Realtek RTL8195AM

  • Description: When running mbed-ls on the Realtek board a traceback happens
  • Workaround: Version of mbedls in Mbed OS does not have this fix. Workaround is to install mbedls from master until a release is made.
  • Reported Issue: ARMmbed/mbed-ls#276
  • Priority: Major

Export project to Keil - device not present

  • Description: cmsis-pack-manager assumes that all information is stored in a device tag. According to the official CMSIS Pack specification however this is not the case. cmsis-pack-manager needs to be updated to index by variant as well as device. We currently do not know how many devices are affected by this issue.
  • Workaround: In this case manual selection of the device and flash programming algorithm may be required.
  • Reported Issue: ARMmbed/mbed-os-example-cellular#41
  • Priority: Major

OnboardCellularInterface used incorrectly

  • Description: This example invokes methods on OnboardCellularInterface that are not part of the CellularBase abstract class. This means it may not work if OnboardCellularInterface is not a PPPCellularInterface.
  • Workaround: None
  • Reported Issue: ARMmbed/mbed-os-example-cellular#54
  • Priority: Major

WiFi connection fails with client compiled by IAR IDE

  • Description: Mbed connector client example programs do not connect to api.connector.mbed.com when built in the IAR Embedded Workbench IDE. It works when you build using Mbed CLI.
  • Workaround: Do not export mbed connector example for IAR Embedded Workbench.
  • Reported Issue: ARMmbed/mbed-os-example-client#355
  • Priority: Major

Client fails to connect via UDP when binary is compiled by Online Compiler

  • Description: using UDP fails when binary is compiled with Online compiler but works if compiled with mbed-cli GCC_ARM .
  • Workaround: Use TCP based connections
  • Reported Issue: ARMmbed/mbed-os-example-client#357
  • Priority: Major

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

Makefile export fails to build larger project in Windows

Online exports of projects overriding mbed-os configuration fail

  • Description: Exports from the online compiler of projects that override mbed-os configuration do not work
  • Workaround: Export offline using Mbed CLI
  • Reported Issue: #6428
  • Priority: Major

NXP LPC17xx targets do not have Ethernet driver

  • Description: Ethernet driver interface was refactored for Mbed OS 5.9. LPC17xx is not yet ported.
  • Workaround: Wait for Mbed OS 5.9.1
  • Reported Issue: ARMmbed/mbed-os-example-sockets#12
  • Priority: Major

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: no
  • Reported Issue: -
  • Priority: Major

Nanostack Border router does not build for Nucleo F429ZI

  • Description: Ethernet driver interface was refactored for Mbed OS 5.9. Nanostack border router was not refactored, so new versions of F429ZI drivers are not yet in use.
  • Workaround: wait for fix in the Border Router application
  • Reported Issue: ARMmbed/nanostack-border-router#113
  • Priority: Major

BLE Security Manager initializes cryptographic hardware on NRF52840

  • Description: The CC310 Cryptocell hardware is initialized when using the BLE Security Manager on NRF52840; if the application is already using mbedTLS prior to this initialization it might yield undefined behaviour
  • Workaround: Do not use the BLE Security Manager on NRF52840 if mbedTLS should be used by the application, or make sure it is initialized first and that mbedtls_platform_setup()/mbedtls_platform_teardown() are not called subsequentially
  • Reported Issue: #7069
  • Priority: Major

Exporting to GCC in Windows does not work with Python 3

  • Description: Exporting projects to GCC makefiles in Windows does not work when using Python 3.
  • Workaround: Wait for Mbed OS 5.9.1
  • Reported Issue: ARMmbed/mbed-cli#694
  • Priority: Major

Ublox ODIN W2 crashing with latest client

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

All NRF52832 based devices (e.g. NRF52_DK) have sleep/deepsleep functionality disabled.

  • Description: sleep/deepsleep functionality will be enabled in Mbed OS 5.9.1 release
  • Workaround: Wait for Mbed OS 5.9.1 (fix available here #7073)
  • Reported Issue: #7168
  • Priority: Major

Cortex-A release and develop profiles for ARMCC build fail

  • Description: Bug in CMSIS ARMCC header file causing ARMCC builds with -O3 to fail (release and develop profiles are affected)
  • Workaround: use develop profile for ARMCC or wait for Mbed OS 5.9.1
  • Reported Issue: #7065
  • Priority: Major

Fixes and changes

Fix lwIP PPP glue

Add new examples to example list for CI.

Made lwip memory configuration more specific for NXP targets

Fix build for MBT_ODIN_W2 and MBED_CONNECT_ODIN when using WiFi

Enable DeviceKey class reference for Doxygen

Bring in improved HAL APIs to master

Add devicekey example to examples list

Add warning about FEATURE_UVISOR being deprecated

CPU Stats test - Increased wait time to allow device to sleep

Standardized Error Handling and Error Codes

Remove ns_event_loop_thread_start() from NDInterface and ThreadInterface connect()

LoRaWAN: Message flags correction

Remove unused ITM implementation from NRF51 series

BLE privacy, signing, persistent security database

Cellular: AT debugging improved

Travis: Quick name-fix for warnings reported by Astyle

LoRaWAN: Adding acquisition of metadata, backoff and a cancel_send() API

Lora: Remove obsolete FEATURE_COMMON_PAL flags

events: Introduce API to query how much time is left for delayed event

LoRaWAN: Wrong type of message check

Corrected iteritems py2/3 compatability in test_api.py

lwIP: Enable TCP out-of-order processing

Add low power timer fallback for platforms without RTC

Nanostack release for Mbed OS 5.9

Lora: Fix battery_level callback

fatfs: Add erase disk to format

Update Mbed TLS to version 2.9.0

Fastmodels support: add FVP_MPS2 targets to mbed os

CPU Statistics

Merge feature-emac branch into master

Lora: fix AU915 build

mbed test: add argument --ignore to allow passing in mbedignore patterns

Reorganize SoftDevices for NRF52 series

tools: Remove long-deprecated build_everything.py

System stats - API addition

Remove example update scripting from tools

LoRa: State machine work

Lora: Fix LoRaMacCrypto asserts

Fix bug in MBR for NRF52 series

Fix us_ticker for NRF52 series

Thread stats API

Cryptocell 310 support

Cellular: Add dynamic alloc and destruction to easycellular

Add POSIX fcntl flag support

Add common define MBED_ALL_STATS_ENABLED to enable all statistics

tools: Refactor notification API

[MAX32625PICO] Add new platform


Fix UART initialization for NRF52

Cellular: Fix AT Handler compile warning

Implement BufferedBlockDevice

LoRaWAN: Memory corruption due to band mishandling

Add platform setup and teardown calls to mbedtls tests

nrf5x: Fix assert test on SERIAL_RESERVED_CHAR_MATCH

Support RTOS-less secure image build with Cortex-M23/M33

Fix vector table relocation for NRF52

Cellular: Changed ATHandler yield to wait

Lora: Split add_mac_command() into separate methods

Fix bug in Nordic SDK 14.2 I2C driver

Fix bug in Nordic SDK 14.2 SPI driver

Fix NRF52 SPI pin initialization


Add Hardware CRC HAL API specification

Cellular: Fix to prefer IPv6 single stack with fallback to IPv4

mbr: Added assertions for overlapping partitions

Make poll() use RTOS tick count

CM3DS Maintenance Pull Request: Cleaning

Make event queue use RTOS tick count

Lora: Remove singleton pattern

Cellular fixes

Fixed cellular unittests

Cellular: fixed null pointer bug in cellular fsm

Greentea netsocket more tests

Use SingletonPtr in Nanostack HAL

add ncs36510 fib and trim generation

Add missing carriage returns to fault handler

Stop lwIP using us_ticker

Device key implementation

cellular: Error messages

Support secure/non-secure flash IAP for Cortex-M23/M33

Cellular: add plmn for CellularConnectionFSM

Lora: Make automatic uplink message configurable

Nanostack hal timer shortcut

Cellular: Separated context activation in CellularConnectionFSM.

Fix typo with NVStore

Updates tools to be runnable in Python 3

AStyle addition to travis

[IOTCELL-741] Separating public data structures

LoRa: Internal include paths corrected

Lora: Introduce new receive API which returns port and flags


Cellular: add detach from the network

Lora: small fixes

LoRa: Stack cleanup

Implement FlashSimBlockDevice - flash simulated block device over RAM

Update Nordic NRF52 based targets to SDK 14.2

Add handling for synchronized low power tickers

Update idle loop to reduce calls to suspend

Exclude files like .main.cpp from builds

standard non-blocking NetworkInterface::connect

Thread class tz

CMSIS: Add TrustZone functions

NVStore: add the allocate_key API (instead of set_alloc_key)

Disable all deprecated exporters

Remove supertarget

Enabl-able Python 3 tools testing in Travis CI

Added SerialWireOutput to mbed namespace

Add an option to use LowPowerTimer for poll

Stack refactoring

Add overloaded get_erase_size API with address parameter to BlockDevice

Renaming Ublox library for mbed cellular framework

NVStore: key management enhancements

fatfs: Update error code mapping

Peek API to view data of buffer without popping

LoRa refactoring

Update cmsis/rtx to version 5.3

Add parameter in tools settings to show error/warning as Link

Interrupt in pin mode

Remove windup behavior from break_dispatch

Tool: Use TerminalNotifier in Mbed 2 release

Additional fixes for running Python 3 in Windows

BLE fixes (SM whitelist creation, Nordic scatter file fix, missing TLS initialisation)

Windows pytest fixes

Remove redundant Cryptocell libraries

Edit warning about FEATURE_UVISOR being deprecated

set the tolerance to 5% if NO_SYSTICK is enabled

UBLOX_C027: init us_ticker in the target initialization

OS version not update in mbed_stats

Fix RTOS-less build failed with cmsis/RTE_Components.h

Fix for filename capture not working

tests-mbed_hal-common_tickers: Fix increment test case implementation

build: fix notifier typo and passing to builds API

Add configuration options to enable CMAC in mbedtls by default

Update Mbed TLS to version 2.10.0


We designed Mbed OS to significantly reduce cost and time for embedded software development by providing a production-quality toolset and code. We are committed to delivering high-quality code working across all supported boards and platforms. To ensure all the features of code meet our quality control requirements, we have built an automated testing environment and processes that perform rigorous testing on every line of code. The continuous integration framework is a highlight of our testing framework.

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 is exporting properly to all the compilers.
  • We merge the PRs only if the all the above procedures are successful.

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

  • Total test time is 28,182 hours on actual development boards.

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

  • The total number of binaries built since the Mbed OS 5.8.0 release is 40,561,560.

We plan to share more details about testing processes, such as our out-of-box testing coverage and system testing, in upcoming release blogs.

Using the 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.9.0, run the CLI command mbed update mbed-os-5.9

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 the latest version of the Mbed OS 5.9 release from the mbed-os GitHub repository using the branch “mbed-os-5.9”.