mbed-os-6.6.0
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.
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
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
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 andKVMap
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(Update: required CMake changed included in this PR)mbed-storage-kvstore
target. Hopefully the CMake team will later componentise each type of KVStore intombed-storage-kvstore-<type>
. similar to what they've already done forBlockDevice
s. @0xc0170
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
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
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 inmbedtls/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.