Skip to content

mbed-os-5.5.0

Compare
Choose a tag to compare
@adbridge adbridge released this 05 Oct 15:32
· 23597 commits to master since this release

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 and sha1WithRSAEncryption. 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 in subjectAltNames return a BADCERT_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.