FoundriesFactory

microPlatform update 0.24

Summary

Zephyr microPlatform changes for 0.24

New console and logging implementations for Zephyr, and an MCUboot heading to v1.2.0.

Linux microPlatform changes for 0.24

No significant changes have gone into this update. The previous update included updates to containers and the sources weren't published. The URL used for authentication in lmp-device-register was updated.

Zephyr microPlatform

Summary

New console and logging implementations for Zephyr, and an MCUboot heading to v1.2.0.

Highlights

Components

MCUboot

Features

New default PEM file selection:
Temporarily enable IRQs in boot_uart_fifo_init():
CONFIG_SYS_POWER_MANAGEMENT disabled by default:
Use of k_fifo replaced with sys_slist:
Several changes to serial boot support:

Bugs

Zephyr build fix with ECDSA:
Several __ASSERT() checks fixed:

Zephyr

Features

Redundant "default n" removed from Kconfig:
Console subsystem refactoring:
Arches:

Microsemi Mi-V RISC-V softcore CPU support was added for running on the M2GL025 IGLOO2 FPGA development board. This required moving some code from the fe310 platform into the RISC-V privilege common folder.

Zephyr support was added for Nordic's nRF52810 SoC. This is a low-cost variant of the nRF52832, with a reduced set of peripherals and memory. Since Nordic does not offer a development kit for the nRF52810, the nrf52810_pca10040 board definition can be used with the nRF52832-DK (nrf52_pca10040). Using this board definition enforces the limitations imposed by the nRF52810 IC. For more information, see:

http://www.nordicsemi.com/eng/Products/nRF52810

An nRF5x peripheral list was created that can be used to describe each nRF5x SoC. Kconfig can use this description to help configure only drivers that are available for a particular SoC.

Support was added for the STM32F7 and STM32F2 series of STM32 SoCs. This includes clock control, entropy, GPIO, flash, pinmux, and UART drivers, as well as several device trees and board definitions for STM32F7 Discovery, STM32F207XG, and STM32F207XE development hardware.

The ESP32 IDF bootloader now has a Kconfig option for compilation during the Zephyr build. At flash time, the bootloader will be flashed with the Zephyr image.

Nordic and STM32 SoCs can now use Segger's RTT protocol for console output, in addition to UART.

Bluetooth:

A new Bluetooth Mesh node sample was added in samples/boards/nrf52/mesh/onoff_level_lighting_vnd_app. It demonstrates several generic and light models.

The BLE controller Kconfig options were reorganized. CONFIG_BT_CTLR means that a controller is implemented, with additional options (currently just CONFIG_BT_LL_SW) selecting a specific implementation. This allows adding alternative controller implementations in the future.

If the Bluetooth device is neither an observer or has central role selected, the scan related code is excluded from the HCI core. This results in smaller image sizes for peripheral- or broadcasting-only roles.

A Kconfig option "CONFIG_BT_CTLR_CRYPTO" was added to allow flexibility in choosing to use host cryptographic functions or the ones provided by the BT controller.

Boards:

Several new boads were added: i.MX's UDOO Neo Full SBC and ST's STM32F746G-DISCO, STM32F723E-DISCO and STM32F769I-DISCO.

The I2C ports of several nRF-based boards were enabled.

Build:

Architectures, boards, and apps can now override the C standard version, which was previously set to -std=c99. Currently, the native POSIX port uses this feature in boards/posix/native_posix/CMakeLists.txt, like so:

set_property(GLOBAL PROPERTY CSTD c11)

Device Tree:

STM32F7-pinctrl added definitions for USART/UARTs.

Documentation:

http://docs.zephyrproject.org/api/networking.html#websocket

Intel S1000 developers will be happy to note that the docs now include instructions for obtaining the toolchain from:

https://tensilicatools.com/platform/intel-sue-creek

As part of Zephyr's security development process, certain external requirements require justification that threats in a threat model have been mitigated. To make this process traceable, the threats must be enumerated and given labels. For this purpose, labels were added to the threats in Zephyr's sensor threat model. See the model itself for more details:

http://docs.zephyrproject.org/security/sensor-threat.html

Ever wonder how DTS relates to Kconfig options? Wonder no more! Some clarification was added to the Device Tree documentation:

http://docs.zephyrproject.org/devices/dts/device_tree.html#dt-vs-kconfig

The "Getting Started" document did not clearly state how to use a custom cross compiler. This was remedied with a new section "Using Custom Cross Compilers". For details, see:

http://docs.zephyrproject.org/getting_started/getting_started.html

Information on the newly-supported gPTP protocol was added to the networking documentation.

Drivers:

The native POSIX Ethernet driver now has support for gPTP.

A generic I2C EEPROM slave driver was added.

USB drivers received several additions, such as high- speed support for DesignWare USB controllers, and an API for USB BOS (Binary Object Store) descriptors.

USB HID payload size is now configurable via CONFIG_USB_HID_MAX_PAYLOAD_SIZE (the previous value of 64 is still the default).

Shims for nRFx TWI, TWIM and PWM drivers were added and the now redundant i2c_nrf5 shim was removed.

A PTP clock driver was introduced which can be implemented in those network interface drivers that provide gPTP support.

An LED driver for NXP PCA9633 (I2C 4-bit LED) was added which supports a blink period from 41ms to 10667ms and a brightness value from 0 to 100%.

External:

The Nordic nRFX HAL was updated to support the nRF52810.

STM32cube updates for all STM32 families (including the addition of STM32F2x HAL) were also merged.

The Segger RTT debug code was updated to version 6.32d.

MCUMGR external sources were updated to external commit a837a731 from the upstream repository, available here:

https://github.com/apache/mynewt-mcumgr

Kernel:
Miscellaneous:
Networking:

Also new to Zephyr is the LLMNR (Link Local Multicast Name Resolution) client and responder from RFC 4795. LLMNR is used in Windows networks. A caller can be set up to resolve DNS resource records using multicast DNS, as well as configured to listen for LLMNR DNS queries and respond to them. Related Kconfig options are CONFIG_LLMNR_RESOLVER and CONFIG_LLMNR_RESPONDER. The implementation is in subsys/net/lib/dns.

Samples:

LLMNR client support was added to the DNS resolver sample.

A sample application for testing the NXP PCA9633 LED driver was added.

Scripts:
  1. Dependency loop detection. Until now, dependency loops have raised a hard-to-debug Python RecursionError during evaluation. Now, a Kconfiglib exception is raised instead, with a message that lists all the items in the loop.

  2. MenuNode.referenced() was converted to a property, making the API more consistent (read-only values are accessed with properties).

  3. Warnings for choice overrides were eliminated.

The nrfjprog runner script was updated to accept a --snr parameter specifying the serial number of the device to be operated on.

Device tree now allows the use of a new element of DTC grammar called overriding nodes. It looks like this in a board's dts file:

arduino_i2c: &i2c1 {};

This overriding node information is used during the DTS include file generation like so In this way, ARDUINO_I2C_LABEL could be used as a generic binding name. This change is derived from a dtc commit in version v1.4.2.

Bugs

Arches:

When compiling, both cortex-m0 and cortex-m0plus will now use -march=armv6s-m instead of -march=armv6-m to to ensure the svc instruction exists.

Bluetooth:

For the Bluetooth Controller core, LE Extended Scanner Filter Policy now depends on CONFIG_BT_OBSERVER and the time to transmit an empty packet was raised from 40 microseconds to 44 microseconds on a 2M PHY, due to an additional byte of preamble.

The BlueNRG-MS HCI driver received a pair of changes. In the first, it now reads from the controller as long as the IRQ is high. In the second, it makes sure to configure the BlueNRG-MS to controller mode just after it's ready by disabling "HCI reset" via a quirk.

Boards:
Build:

Python script "process_gperf.py" used in the Zephyr build system will now be invoked via "python" instead of called directly. This avoids non-portable shebang logic and/or "default application" behaviour on Windows.

Device Tree:
Drivers:

A build error was addressed for intel_s1000 which uses DesignWare USB. It doesn't inherit a qmsi header which has several definitions used in the driver. Instead those definitions are provided via a DesignWare specific header.

A build error in uart_handler.c was fixed when CONFIG_UART_LINE_CTRL is defined.

Fixes were applied to the nRF UART driver for broken hardware flow control and interrupt driven APIs.

For the USB/DFU subsystem, bcdUSB had been previously updated from 1.1 to 2.0 in the default device descriptor, but not in the DFU class. After USB bus reset performed by dfu-util, this alternative descriptor registered with bcdUSB was set to 1.1. This mismatch caused a communication failure. The DFU descriptor's bcdUSB was updated to match the default value.

The STM32 clock control driver received a fix to HCLK calculation when using MSI. The MSI clock signal can be selected in several ranges. These ranges should be taken into account for calculating its frequency and hence global system frequency. This change is used when enabling Bluetooth on the disco_l475_iot1 board.

A long-standing issue where the K64F-FRDM board would generate a random MAC address on every boot (which would lead to DHCP address exhaustion) has been solved. The existing Kconfig option CONFIG_ETH_MCUX_0_RANDOM_MAC, which dynamically chooses a random MAC address, is now one choice among many in the new CONFIG_ETH_MCUX_0_MAC_SELECT option. The other choices are CONFIG_ETH_MCUX_0_UNIQUE_MAC (the new default), which uses the MCU unique identification register to generate a stable MAC address which is persistent over reboots, and CONFIG_ETH_MCUX_0_MANUAL_MAC, which allows setting a fixed MAC address. For details, see:

http://docs.zephyrproject.org/reference/kconfig/choice_55.html?highlight=eth_mcux_0_mac_select

NETUSB and STM32 ethernet hardware apparently never called ethernet_init(). This was revealed when the net_arp_init() function was moved into ethernet_init() and ARP tables stopped being initialized correctly, and has been fixed.

External:

For STM32F4xx and STM32F7xx, the I2SR field needed to be shifted by RCC_PLLI2SCFGR_PLLI2SR_Pos when the PLLI2SCFGR register is read or written. Previously, the configuration was not done properly (R and M params were badly set) and the PLLI2S was generating a bad clock waveform.

Networking:

The layer 2 networking code was also moved as having it under subsys/net/ip/l2 didn't make much logical sense. The new location is subsys/net/l2. Hopefully, this movement didn't result in any functional changes, but only time will tell. Developers should note that any out of tree patches to the old layer 2 location will need to be refactored.

Zephyr's ARP table implementation was cleaned up slightly and optimized for memory usage through the use of a single linked list, smaller ARP entries, and handling request timeouts in a single k_delayed_work structure.

Samples:

The 96 Boards ArgonKey sample added support for the TI LP3943 LED controller to test the 12 on-board LEDs.

Scripts:

hawkBit and MQTT sample application

Features

Bugs

LWM2M sample application

Features

WCN14A2A support as modem-overlay.conf:

Bugs

Stack overflow fixed with DTLS enabled:

Linux microPlatform

Summary

No significant changes have gone into this update. The previous update included updates to containers and the sources weren't published. The URL used for authentication in lmp-device-register was updated.

Highlights

Components

Related posts

Keep up to date with Foundries.io