Skip to content

mbed-os-6.6.0

Compare
Choose a tag to compare
@mbedmain mbedmain released this 16 Dec 17:38
· 2750 commits to master since this release

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

Summary

There is no major new functionality introduced as part of this release, but some of the enhancements we've made to existing functionality have changed APIs, so as per semantic versioning, we've incremented the release version.

The full details are below but in summary we've introduced the following changes;

  • BLE update to the GATT API to better reflect what the specification define
  • Add a method to allow an application to set or get the MAC address for Wi-SUN
  • Restructuring of KVStore to better support the bare metal profile
  • Enhancements to printing floating point values
  • Improved memory and performance for ticker support

Migration Guide

This section lists specific changes which are part of this release and may
need special attention.

Update GattAuthCallbackReply_t enumeration.

14014

Summary of changes

Add missing values that are present in pal::AttErrorResponse.
This allows applications to use correct ATT error codes.
The values have been changed to reflect what is actually defined in the specification. The 0x01 was a leftover from softdevice's days.

Network interface MAC address set/get

13936

Summary of changes

Add method set_mac_address that Application can use to set MAC address to the interface.
Update get_mac_address to return MAC address correctly from EMAC.
This PR is copied from: #13902

Restructure KVStore to one library per store type

13908

Summary of changes

Fixes: #13657
Mutually depends on: ARMmbed/mbed-os-example-kvstore#60
In #13307 we combined multiple KVStore types (TDBStore, FileSystemStore) and the global API into one library, kv-global-api. This is inconvenient for users of bare metal: if they only want one store type, they need to add dependencies for other unused types and the global API to "requires". This becomes cumbersome as FileSystem has many dependencies.
This PR restructures KVStore to follow the same logic of BlockDevice: declare the interface at the top level, and treat each type/implementation as a "sub-" library. Users only need to enable the interface + the type they need. So each of the following is a library (containing mbed_lib.json):

  • storage/kvstore: KVStore interface
  • storage/kvstore/tdbstore: TDBStore : KVStore class
  • storage/kvstore/filesystemstore: FileSystemStore : KVStore class
  • storage/kvstore/securestore: SecureStore : KVStore class
  • storage/kvstore/kvstore_global_api: optional API to globally manage instances of KVStore, containing kvstore_global_api functions and KVMap which is a helper class for the global API
  • storage/kvstore/kvconfig: configurations
    Greentea and unit tests have also been moved into subdirectories of corresponding KVStore types.
    Note: The CMake support for KVStore has not been componentised yet - compilation with CMake still brings in all the unused types and dependencies, because everything is under one mbed-storage-kvstore target. Hopefully the CMake team will later componentise each type of KVStore into mbed-storage-kvstore-<type>. similar to what they've already done for BlockDevices. @0xc0170 (Update: required CMake changed included in this PR)

Impact of changes

Users can enable one type of KVStore (e.g. TDBStore) without having to bring in dependencies for unused types of KVStore.

Migration actions required

For a bare metal application, add "kvstore" and the type of KVStore to use (e.g. "tdbstore") to "requires" in mbed_app.json. Note that the KVStore interface library is "kvstore", not "kv-global-api" which now contains only the global API.
To use CMake (full profile and bare metal profile): Add the TDBStore sub-component you need (e.g. mbed-storage-tdbstore) and dependencies (e.g. TDBStore requires mbed-storage-blockdevice) to your app's CMakeLists.txt.

Add width modifier and prepending zeros for hexadecimal output and decimal precision for floating point

13548

Summary of changes

Added width modifier and prepend zeros if the width modifier is given feature to printing integer, hexadecimal and floating point values. So e.g. printf("%04X", i); works now the same as the std version.
Added precision specifier for printing floating point values, as it already existed for strings. If no precision specifier is given MBED_CONF_PLATFORM_MINIMAL_PRINTF_SET_FLOATING_POINT_MAX_DECIMALS will be used.
This PR also fixes #13783.

Impact of changes

Prepending zeros and width modifier work with integer, hexadecimal and floating point values when using minimal_printf.
Also the precision modifier works for floating point variables. If no precision specifier is given MBED_CONF_PLATFORM_MINIMAL_PRINTF_SET_FLOATING_POINT_MAX_DECIMALS is used.

Optimise mbed_ticker_api.c

12897

Summary of changes

The generic code in mbed_ticker_api.c uses run-time polymorphism to handle different tickers, and has generic run-time calculations for different ticker widths and frequencies, with a single special-case for 1MHz.
Extend the run-time special casing to handle any conversion cases where either the multiply or divide can be done as a shift. This is a speed optimisation for certain platforms.
Add a new option target.custom-tickers. If turned off, it promises that only USTICKER and LPTICKER devices will be used. This then permits elimination and/or simplification of runtime calculations, saving size and speed. If either both USTICKER and LPTICKER have the same width, or the same period numerator or denominator, or only one of them exists, then operations can be hard-coded. This is a significant ROM space saving, and a minor speed and RAM saving.
We get to optimise all the calculations, but the run-time polymorphism is retained even if there is only one ticker, as it doesn't significantly affect code size versus direct calls, and the existence of
lp_ticker_wrapper and various us_ticker optimisations requires it, even if only LPTICKER is available.

Impact of changes

  • Targets should make an effort to define the new LP_TICKER_XXX defines to help the optimisation kick in.

Migration actions required

None

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 section 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: 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

TLS: Hardware-accelerated hash creates CBC padding oracle in TLS

  • Description: The current countermeasures against CBC padding oracle attacks in Mbed TLS call a low level internal API. The implementation of this API might not be possible with the hardware accelerator API and even if it is, the timing might still have detectable differences. The lower level API is called out of sequence and accelerators that are not aware of this might crash.
  • Workaround: Keep MBEDTLS_SSL_ENCRYPT_THEN_MAC enabled in mbedtls/config.h and enable the Encrypt-then-MAC extension (RFC7366) on the peers side.
  • Reported Issue: Reported by the development team.
  • Priority: MAJOR

Crypto: Mbed OS ATECC608A example fails to build with IAR

  • Description: The current ATECC608A secure element example fails to build with the IAR toolchain. The Microchip-provided cryptoauthlib library does not build with IAR.
  • Workaround: Use a different toolchain, like GCC_ARM.
  • Reported Issue: MicrochipTech/cryptoauthlib#116
  • Priority: Minor

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

Wi-SUN Hardfaults with IAR compiled image with Mbed OS 5.15.0

  • Description: Mesh Wi-SUN FAN may HardFault in rare occasions with IAR8 compiled binaries during initial network connection.
  • Workaround: The workaround is to use other compilers.
  • Reported Issue: IOTTHD-3898
  • Priority: Major

Test Report

Release automated CI test

In addition to regular Pull Request test and Nightly test, we also ran a branch test on mbed-os 6.6.0-RC1

Results for the tests we run on CI (PR, Nightly, Branch):

  • Build Greentea ARMC6 - SOME FAILS (Issue: MBEDOSTEST-1163 - ARMC6 Failed to build mbed OS with LTO options)
  • Build Greentea GCC_ARM - ALL PASSED
  • Build Examples ARMC6 - ALL PASSED
  • Build Examples GCC_ARM - ALL PASSED
  • Build Cloud Examples ARMC6 - ALL PASSED
  • Build Cloud Examples GCC_ARM - ALL PASSED
  • Build CMAKE Examples ARMC6 - ALL PASSED
  • Build CMAKE Examples GCC_ARM - ALL PASSED
  • Unittest Test matrix - ALL PASSED
  • GreenTea test matrix - ALL PASSED
  • Examples test matrix - ALL PASSED
  • CMAKE Examples test matrix - ALL PASSED
  • Exporter Test - SOME FAILS (Issue: IOTCORE-1663 - Nightly: Export uvision failing with missing context fault handler)
  • Cloud Client integration Test - ALL PASSED
  • Memory Usage Test - ALL PASSED

Toolchain Coverage

In the mbed OS 6.6.0 release. we are testing the following toolchains:

  • ARM compiler 6.15.0
  • GCC_ARM 9-2019-q4-major

Targets Coverage

In mbed OS 6.6.0, the compilation test targets scope has not changed and remains all mbed OS enabled targets.

Greentea test targets have been changed slightly. At the time of the mbed-os 6.6.0 release, we run the greentea tests on the following targets:

  • NRF52840_DK
  • DISCO_L457VG_IOT01A
  • K64F
  • K66F
  • NUCLEO_F429ZI
  • NUCLEO_F767ZI
  • NUCLEO_WB55RG

We have the following issues on the test jobs:

  • MBEDOSTEST-1163 - ARMC6 Failed to build mbed OS with LTO options
  • IOTCORE-1663 - Nightly: Export uvision failing with missing context fault handler

Test Numbers

Greentea test number 1674 (+0)
Unittest number 743 (+2)

Code Coverage

Test Code Coverage been tracked and information is published on COVERALLS

Memory Monitoring

No observed changes from mbed-os-6.5.0

Contents

Ports for Upcoming Targets

Fixes and Changes

14024
CMake: add Samsungs, Analog devices and WICED targets

14019
Port analog devices to CMake

14017
Nuvoton: Remove DISABLE/ENABLE macro definitions in BSP

14014
Update GattAuthCallbackReply_t enumeration.

14009
ble cyw43xxx: dev/hci driver terminate

14005
Correct/clarify TimerEvent::insert documentation

14003
STM32H7: system power supply configuration

14002
STM32F0 update drivers version to CUBE V1.11.2

14001
Add missing retry to atomic exchange

14000
Add octa RAM calibration feature to GR-MANGO.

13998
Add crash reporting and autoreboot capability to MTS_DRAGONFLY_L471QG

13996
TDBStore: pad program units when writing record_header_t; ensure work buffer is large enough

13995
CMake: Add support for GigaDevice targets

13992
STM32_gen_PeripheralPins.py v1.19

13988
BLE: Fix periodic advertrising sync based on advertiser list

13987
CMake: Set required toolchain and processor flags globally, instead of per-target

13985
CMake: fix memory map generation

13978
S5JS100: remove idle hook in favour of Mbed-default idle hook

13977
CMake: Add support for all Samsung Mbed targets

13973
stm32: delete objects.h

13972
CMake: Add support for WICED target

13970
CMake: Add support for all Maxim Mbed targets

13969
Maxim: Remove support for some Maxim targets

13964
CMake: Add support for all ARM FM Mbed targets

13963
Fix ThisThread warnings

13962
STM: fix ARMClang sct files, using proper -E command

13961
Silabs: Remove EFR32_1 rail files

13960
Add const keyword to get_erase_size declaration

13959
CMake: Add support for all Silicon Labs Mbed targets

13958
Fix a typo in STM32F3's CMakeList.txt

13957
Replaced new calls with nothrow version of the call on mesh api

13953
Add nanostack dependency lib

13952
CMake: Add support for all Freescale Mbed targets

13951
MCU_NRF52832 (NRF52_DK, SDT52832B): use two-region memory model to support MicroLib

13950
Freescale: Remove KL27Z files

13949
Fix mbed::Dir type handling in fat_filesystem

13948
CMake: Simplify BLE library inclusion

13947
Fix erase type determination for [Q/O/]BlockDevice::erase()

13946
Update to reflect Mbed CLI 2 changes

13945
Freescale: Remove K20XX files

13942
ble: Fix persistence in SecurityDB

13939
STM32: LSE DRIVE feature update

13936
Network interface MAC address set/get

13935
Dragonfly Nano(MTQN): power on/off so soft_power_on() fix

13934
CMake: Add support for Cypress targets

13932
Reduce ST QSPI/OSPI trace verbosity to debug

13931
STM32 I2C: use correct HAL API

13930
CMake: pass macros to ARM toolchain linker

13929
STM32: LPUART clock source selection up to a serial driver

13928
Clean remnant of experiment with ARM toolchain

13925
Cypress: Remove CY8CKIT_064S2_4343W files

13924
CMake: Add support for all NXP Mbed targets

13922
CMake: add nuvoton targets

13921
TARGET_NXP: Remove support for LPC55S69

13918
TARGET_NXP: Remove support for LPC11U6X

13917
Move SFDP to blockdevice

13915
CMake: add all TARGET_STM targets

13914
STM32 FLASH API : add critical sections

13908
Restructure KVStore to one library per store type

13907
Workaround to fix RTC-reset issue on the EFM32GG11_STK3701

13906
STM32G070: generic target creation

13898
Adding CAN function to GR-MANGO

13896
STM32 OSPI support

13780
STM32 H7: fix USB in sleep mode

13777
STM32 : full GPIO reset during mbed init

13755
Fix MBED_ERROR call in init_os_timer

13548
Add width modifier and prepending zeros for hexadecimal output and decimal precision for floating point

13085
Change MBED_STATIC_ASSERTs version for built-in

12897
Optimise mbed_ticker_api.c

Using this release

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

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