mbed-os-5.5.0
The mbed OS 5.5 release upgrades to the latest version of CMSIS, paving the way for support of the latest ARM compilers, ARMv8-M Architecture based MCUs and lower power RTOS modes. It also introduces cellular connectivity, embedded storage and hardware security enhancements to further simplify development of connected, managed IoT devices. In addition, this release contains many minor fixes and enhancements and brings target platform support up to 85 targets.
Core
mbed OS 5.5 upgrades to the latest CMSIS version, CMSIS5, including the enhanced CMSIS-RTOS2 kernel. This is a significant step in our roadmap to enable support for the latest generation of compilers (ARM GCC Embedded 6, ARM Compiler 6 and IAR Embedded Workbench 8), support for v8-M architecture cores and introduction of low power tick-less RTOS and deep sleep modes.
The release includes many general enhancements and fixes, and upstreams those that have been maintained within the mbed OS codebase itself. The upgrade should be generally transparent to developers using the mbed OS RTOS APIs, but please report in the forums or contact us at support@mbed.com if you have any issues in this area.
The file system infrastructure now supports SPI NOR Flash devices, a low-cost, external storage solution. Developers commonly use it in IoT devices to store firmware update images, device credentials and configuration information and to cache data for later syncing to the cloud. You can use the SPI NOR Flash storage with all mbed Enabled platforms, and it is the recommended storage medium for devices requiring firmware update capabilities.
The release also includes a standard in-application flash programming API, FlashIAP, and first partner implementations. This component supports the upcoming mbed Cloud Update service capability, available to licensees, that manages device firmware update campaigns across fleets of devices.
Connectivity
mbed OS 5.5 introduces improved support for cellular connectivity modules, including standard integration through a built-in PPP network interface.
A Linux-based Thread Access Point reference that uses the Thread border router is now available.
Our new native mbed OS BLE stack has reached our Early Partner Release milestone. This allows use of BLE transceivers with any mbed Enabled MCU and provides stack consistency across different BLE hardware. Based on this, we will be working with the first mbed Partners to enable support for their BLE transceivers and SoCs using this stack, planning to provide first access to developers in the 5.6 release. Partners interested in supporting BLE transceivers or SoCs with this stack should contact their Partner Enablement Team representatives.
Security
mbed OS cryptography incorporates mbed TLS 2.5 and the completion of internal APIs for enabling hardware entropy and symmetric and asymmetric cryptographic acceleration. Many partners are implementing and landing support for acceleration on their target platforms and are seeing significant performance increases. Partner acceleration will land in patch releases as we work with partners to complete security audits and mainline these contributions.
uVisor updates address several performance and usability issues reported since the last release. Secure boxes on devices with an ARMv7-M MPU now use less memory and provide more user-friendly configuration options.
uVisor now also supports the new ARMv8-M architecture, including the TrustZone for ARMv8-M security extensions. Support for this architecture is still experimental and is currently only accessible through a feature branch in mbed OS.
Targets
Thanks to our partners’ hard work, mbed OS 5.5 now supports 85 target platforms.
We'll continue to add targets in our biweekly patch releases as partners work with us on support.
Fixes and changes
4315: Add support for ubirch boards #4315
3906: uVisor: Fix 'publish' and core libs dependencies #3906
3738: fix STM USB config after L4 ,F4, F7 file tree changes #3738
3867: Filesystem: Revert deprecation of FileHandle #3867
3996: Check in algo generation code #3996
3995: Move target related code into it's own directory #3995
3997: Move contents of project_api to export/init.py #3997
3998: Remove dead code in tools #3998
3848: USBAudio: writesync with 1 sample jitter capability. #3848
3994: Use OUTPUT_EXT to pick binary type #3994
4015: DISCO_L053C8: Add support of USB Device #4015
3987: thread link configuration bypass flag in mesh-api #3987
4013: Fix a small bug in subtract_basepath #4013
4100: Edit the README and add Travis CI badges #4100
4125: STM32 USB configuration file move #4125
3993: Added list options for --supported command #3993
4097: Debug build flag + change to sleep behavior in debug mode https://github.com/ARMmbed/mbed-
os/pull/4097
3991: events: Fix zero wait condition in non-rtos semaphore #3991
4175: [NRF52840]: Remove unwanted nRF5 SDK's app_timer libarary. https://github.com/ARMmbed/mbed-
os/pull/4175
4179: uVisor: Fix copy of quick-start doc in exporter script #4179
4167: Replace deprecated import and correct typo in c_blob_mbed.tmpl https://github.com/ARMmbed/mbed-
os/pull/4167
4048: Make LWIP options configurable #4048
4111: [drivers] Update doxygen errors #4111
4199: USB: bus reset for KL25Z fix, USBSerial update #4199
3988: Enable USB capabilities on NUCLEO_F446RE #3988
4212: Maxim USB library update #4212
4210: USB: Added support for the logo key to the keyboard #4210
4155: Thread sec policy #4155
4110: Add --build-data switch to mbed compile and test #4110
4233: [platform] Update doxygen comments #4233
4169: [NXP LPC176X] flash_api.c implementation #4169
4186: Filesystem: Include '.' and '..' in directory iteration #4186
4259: Add error check in Stream constructor #4259
4248: Fixed STM32 USB Device support for mbed Classic #4248
4298: Remove FLASH capabilities for the ARCH_PRO #4298
4306: Remove unsupported net libraries #4306
4307: Remove ARM7 support and targets #4307
4313: Remove and cleanup old code in the tools #4313
4235: Nanostack libservice #4235
4284: LWIP random library and TCP sequence number improvements https://github.com/ARMmbed/mbed-
os/pull/4284
4291: USBHost : fix build for TARGET_STM #4291
4312: BEETLE: Remove unused and conflicting systick #4312
4316: Remove Cortex A boards as Cortex-A it is not supported in CMSIS5/RTX2 https://github.com/ARMmbed
/mbed-os/pull/4316
4319: Enable CMSIS_VECTAB_VIRTUAL for Nordic platforms #4319
4317: Reduce test overhead in preperation for CMSIS 5 #4317
4325: Decode STDERR from compiler #4325
4311: Disable lwIP checksum-on-copy #4311
4274: NSAPI - Don't send trailing garbage in DNS queries #4274
4202: Add support for Unmanaged Bootloader #4202
4185: Include mbed_debug.h in mbed.h #4185
4385: Allow examples to specify which repo source to use for testing https://github.com/ARMmbed/mbed-
os/pull/4385
4381: Fix vscode intellisense engine to 'Tag Parser' #4381
4340: Thread med support #4340
4333: Adjust Thread interface connect timeout #4333
4165: fix #3863 Add an mbed API that allows the init of the CAN at the bus frequency #4165
4351: STM32L4 cube update from v1.5.0 to v1.8.0 #4351
4345: Nanostack update #4345
4331: Have objects depend on their respective compiler invocations #4331
4328: Remove unwanted (and unused anymore) NRF5_SDK13 BLE port #4328
4299: STM32F4 cube update from v1.12.0 to v1.16.0 #4299
4230: Usb host msd block device #4230
4329: Fix for #3863: STM Check can sync error #4329
3936: bd: Add MBR block device for standard storage partitioning #3936
4377: Disable Cortex-A in tooling for better error messages #4377
4321: Update mbed TLS to version 2.5.0 #4321
4403: mbed: version macros are not defined on master #4403
4402: Stm32 f2 cube sdk update to v1.6.0 #4402
4119: Cellular feature br #4119
4388: Deprecate config store and related libraries #4388
4207: spi: Add SPI block-write to C++ and HAL for performance #4207
4178: [NRF52840]: SecurityManager::getAddressesFromBondTable #4178
4413: Fix a bug in dependency handling #4413
4094: [HAL] Add support for 64 bit us timestamp #4094
4415: Disallow building of mbed OS 2 + RTOS, and remove mbed OS 5 support for Cortext-A #4415
4411: Adding APIs to namespace mbed #4411
4427: tests: remove ticker test #4427
4387: Allow target attribute overrides in app config and pick toolchain with default_toolchain #4387
4294: Update CMSIS-Core and RTX to version 5 #4294
4431: Restore mbed OS 5.4 mbed_lwip_ function prototypes #4431
4389: Assert that mutexes and prints are not use in interrupt or critical context #4389
3972: FAT: Add support for block sizes of 512-4096 bytes #3972
4438: Add REALTEK_RTL8195AM to mbed-os #4438
4087: LocalFileSystem: Repair the FileSystemLike hooks #4087
4295: Update uVisor to v0.28.1 #4295
4436: Issue#4250: Fix USB driver for Kinetis devices #4436
4420: Update CONTRIBUTING.md #4420
4368: MTS_DRAGONFLY_F411RE/MTS_MDOT_F411RE: add IAR to post_binary_hook toolchains #4368
4365: Fix i2c communication with pcf8574 on stm32 targets of f1, f2, f4 and l1 families #4365
4455: mbed-coap fixes #4455
4454: Warning fixes #4454
4451: Fix typo in test code #4451
4439: Proper fix for 1fa30b7 #4439
4430: utest optimization: Allow case data structure to be put in ROM. #4430
4424: Fix corner cases in STM32 16bit tickers #4424
4423: NUCLEO_F412ZG: Remove hal_conf file from NUCLEO_F412ZG #4423
4417: STM32: Fix 32-bit us ticker interrupt scheduling #4417
4216: STM32s Serial: Correct handling of parity bits #4216
4453: Safely initialize RTC on kinetis devices #4453
4425: Doxygen template and CI to not produce warnings and errors #4425
4449: Fix semaphore usage on lpc1768 emac #4449
4493: Fix typo that used 16kB for stack. #4493
4434: Doxygen EventQueue updates to not produce warnings and errors [DOC Changes Only] #4434
4496: Fix typo in tools code to handle bootloader builds #4496
4469: 17q2 l4 bootloader - Rebase #4469
4474: STM32 L0: Add Flash API support - Rebase #4474
4501: Fix compilation for NCS36510 RF driver. #4501
4499: Fix rtc api time conversion #4499
4497: Silicon Labs: Add TRNG support #4497
4495: NRF52840: TRNG support #4495
4494: Use absolute paths for bootloader binaries #4494
4480: rtc_time: Fix incorrect return value when the calendar is not available. #4480
4471: [Silicon Labs] Fix compile warnings and ticker test failure #4471
4482: [Silicon Labs] Bugfix for bootloader on Pearl and Mighty Gecko - Rebase #4482
4489: mbed sdk boot: fix gcc sw init hook attribute #4489
4481: Add bootloader support stm32f439xI - Rebase #4481
4476: Add TRNG support for KW41Z #4476
4473: [Silicon Labs] Enable dynamic heap with ARMCC #4473
4441: lwip - fix typo and cleanup coding style #4441
4450: Doxygen template #4450
4508: Doxygen combined HAL, RTOS, and features/Framework updates to not produce warnings and errors
[DOC Changes Only] #4508
4511: Fix Cortex-M0 devices #4511
4445: Fixes for exporter issues #4445
4475: Silicon Labs: Add bootloader support #4475
4477: Silicon Labs: Fix bug with SPI MISO and CS handling #4477
4484: STM32L4 Flash support #4484
4466: Clean up dead classes in retarget layer #4466
4509: NRF52840: enabled SdBlockDevice capability #4509
4503: mbed sdk boot: copy vectors addition #4503
4506: Disable error trapping for mbed 2 builds #4506
4513: Disabled lwip ethernet ipv6 multicast filter for STM boards #4513
4472: Silicon Labs: Add flash API support #4472
4519: Fix mktime test #4519
4448: Add mbed-os-example-cellular to release data #4448
4369: Increase DHCP timeout, and rework networking tests logic #4369
4470: Flash API support using the MCUXpresso drivers #4470
4490: tests: Reintroduce ticker test. #4490
4483: Improve error messages for bootloader build errors #4483
4487: Resolve Realtek device small code space issue #4487
4536: STM32 - fix bug where sockets stop receiving data #4536
4543: Fix STM32 crashes on boot due to unset VTOR #4543
4566: Fix mbed2 failures #4566
Known Issues
mbed TLS accepts certificates that use weak signature algorithms
- Description: mbed TLS accepts X.509 certificates that use the following signature algorithms:
md4WithRSAEncryption
,md5WithRSAEncryption
andsha1WithRSAEncryption
. These algorithms are considered weak or unsafe due to the hashing algorithms used. - Workaround: For mbed TLS 2.1 and above, the default mbed TLS profile for
mbedtls_x509_crt_verify()
excludes all these weak algorithms and is safe to use. There are no known workarounds for mbed TLS 1.3. - Reported Issue: Received via email.
- Priority: Critical
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: Mbed-TLS/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. Certificate chains relying on IP addresses insubjectAltNames
return aBADCERT_CN_MISMATCH
error. - 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 the 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 dependent on the application and what features of the library it chooses to use. 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. First, the joiner fails to correctly parse received records because it does not correctly handle queued retransmissions received. Second, the commissioner may cause a deadlock because 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
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 as uVisor
- Description: The current architecture of uVisor and of RTX require the RTOS to run with the same privilege as uVisor. As such, the RTOS is considered trusted.
- Workaround: There is no available workaround at the moment.
- Reported Issue: ARMmbed/uvisor#235
- Priority: Major
mbed-os-example-client
linking fails in ARMCC for Realtek board
- Description:
mbed-os-example-client
takes more flash space than reserved for Realtek board. For it to link properly, more code has to move to SDRAM, which is not yet implemented or tested. - Workaround: There is no available workaround at the moment.
- Reported Issue: #4462
- Priority: Major
Mesh networking applications fails to compile with IAR on unsecure platform
- Description: If the target has not defined a source of hardware entropy, then mbed TLS support is disabled. This leads to compilation warnings on some Nanostack related modules and compilation failure when using IAR toolchain.
- Workaround: There is no available workaround at the moment.
- Reported Issue: ARMmbed/mbed-os-example-mesh-minimal#91
- Priority: Major
UARTSerial asserts if debug is enabled
- Description: UARTSerial attempts to claim a mutex from interrupt context. If debug is not enabled, this fails silently, and the driver works as intended. If debug is enabled, the system stops in the assert.
- Workaround: Turn off the debug build.
- Reported Issue: #4537
Introduction of RTX/CMSIS 5 has broken semaphore signalling
- Description: RTX 5 reduced the semaphore count limit from UINT16_MAX to the arbitrary value 1024 and added an assert that would halt if the semaphore count exceeded this limit. This is especially problematic for applications that are using the semaphore for signaling. In RTX 4, the semaphore was the only library-friendly mechanism available for signaling, and in RTX 5 it is still the only option for the C++ layer. This breaks a number of the higher-level APIs.
- Workaround: None
- Reported Issue: #4584
- Priority: Critical
Using the release
You can fetch the latest version of the mbed OS 5.5 release from the mbed-os
GitHub repository using the branch “mbed-os-5.5”.
Please feel free to ask any questions or provide feedback about this release on the forum, or to contact us at support@mbed.org.