> For the complete documentation index, see [llms.txt](https://docs.morsemicro.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.morsemicro.com/software-releases/mm-iot-sdk-software-release-notes.md).

# MM-IoT-SDK Software Release Notes

[Download as PDF](https://www.morsemicro.com/resources/software_releases/iot/MM-IoT-SDK-Software-Release-Notes.pdf)

## 1 Overview

The Morse Micro IoT SDK includes the necessary host-side components for using an MCU with an MM610x or MM810x transceiver. This includes drivers, the Upper MAC (UMAC) layer, the network stack, and the RTOS.

The MM IoT SDK release package includes the following:

* morselib: a library containing the Morse Micro driver, UMAC, and WPA supplicant.
* Source code: RTOS (FreeRTOS), network stack (LwIP, mbedTLS, coreMQTT, etc.), platform BSPs, and shim layers.
* Example applications: Various example applications to aid in understanding how to use the SDK and accelerate development efforts.
* Additional libraries developed by Morse Micro: mmconfig for key-value persistent storage and mmagic for CLI interface generation.
* API documentation: for Makefile-based development.
* Getting Started Guide: for Makefile-based development.
* Set up scripts: development machine setup scripts and tools.

The SDK supports Makefile-based development on Linux with experimental support on MacOS. Ubuntu 22.04 x86\_64 is the officially supported Linux distribution.

## 2 Software Change History

### 2.1 Release 2.12.3

This section outlines significant changes from release 2.11.2.

#### 2.1.1 New Features

* Device Provisioning Protocol (DPP), QR code mode functionality as STA (Beta)

#### 2.1.1 Other Improvements

* Updated Morse firmware and BCFs to 1.17.9.
* Added validation to enforce that simultaneous AP and STA interfaces operate on the same channel.
* Added a benchmark test to Porting Assistant that verifies that the system executes instructions fast enough to meet the expected throughput.
* Removed 2MHz EU channels from the regulatory database.
* Added regulatory database documentation to the user guide.
* Added Makefile targets to simplify programming and reconfiguring devices.
* Added a check to example Makefiles that detects non-object files in `OBJS`.
* Added support for defragmentation of management frames. In practice, this affects only large management frames, such as DPP GAS frames.
* Decoupled DPP credentials from the PB\_RESULT event. There is now a new MMWLAN\_DPP\_EVT\_CONF\_RECEIVED event that is raised when the configuration is available; this makes it portable for different DPP methods (e.g., DPP QR).

#### 2.1.2 Bug Fixes

* Fixed a crash that occurred when mmwlan\_sta\_disable() was invoked while an association request retry timer was pending.
* Fixed a crash caused by calling an ISR-context FreeRTOS function from a non-ISR background task.
* Fixed system time drifting when exiting deep sleep.

#### 2.1.3 Known Issues

**2.1.3.1 Makefile Infrastructure**

* Building fails when the MM-IoT-SDK package directory has a space in the path
* The MM-IoT-SDK package must be unpacked into a directory without spaces in its name.

**2.1.3.2 RTOS**

* Timeouts with FreeRTOS time slicing disabled
* FreeRTOS time slicing is enabled by default in the MM-IOT-SDK FreeRTOS configuration. If this is disabled, timeouts may be observed when sending commands to the MM chip.
* System time drifts on STM32-based reference platforms due to the use of the low-accuracy clock. Higher accuracy can be achieved by switching to the High-Speed External (HSE) clock source at the cost of higher power consumption when active.

**2.1.3.3 Example Applications**

* Failures when lwIP is built with LWIP\_IPV4=0
* If IPv4 is disabled when LWIP is built (i.e., IPv6-only), the IP stack may not work as expected. The workaround is to always enable IPv4.

**2.1.3.4 AP Mode**

Note that AP Mode is alpha and not for production use.

* Traffic is not forwarded between STAs
* AP mode does not forward frames between connected STAs. Therefore, connected STAs cannot communicate with each other unless bridging is implemented at the application layer.
* This functionality can be achieved by enabling relay mode and setting the AP as the root node. No changes are required on the STA devices to facilitate this.
* Recovery from health failures is not supported in AP mode
* If a health check failure occurs while operating in AP mode, it will trigger a system restart.
* Mitigation is to disable the health check by invoking:\
  mmwlan\_set\_health\_check\_interval(0, 0);
* OWE security is not supported
* Mitigation is to use Open or SAE security.
* STAs may not be able to associate to the AP in EU and GB regulatory domains.

**2.1.3.5 DPP**

Note that DPP is beta and not for production use.

* DPP must be stopped explicitly before shutdown
* If DPP has been started (via mmwlan\_dpp\_start()), it must be stopped explicitly via mmwlan\_dpp\_stop() prior to invocation of mmwlan\_shutdown().
* DPP is not currently supported in regulatory domains that contain multiple channels sharing the same center frequency but at different bandwidths, in particular JP and AU REVmf.

**2.1.3.6 Stability**

* Some link instability may be seen at some specific signal levels, resulting in an elevated packet error rate.
* Minor changes to the distance from the AP, antenna orientation, or environment will correct it.

#### 2.1.4 Migration from 2.11.2

**2.1.4.1 MMWLAN API**

Added QR Code Enrollee mode, selectable via the new mode field in mmwlan\_dpp\_args. The event enum was expanded to include granular auth/config phase events, and SSID/passphrase was moved from args.pb\_result to args.conf\_received (fired as MMWLAN\_DPP\_EVT\_CONF\_RECEIVED for both modes). Update callbacks accordingly and use MMWLAN\_DPP\_ARGS\_INIT to initialize the expanded struct.

**2.1.4.2 Flash HAL API**

The Flash HAL API now uses mmhal\_flash\_addr\_t for address in place of uint32\_t. This type is defined to uint32\_t by default unless overridden by MMHAL\_FLASH\_ADDR\_T.

Add optional mmhal\_get\_factory\_mmconfig\_partition() to allow a factory defaults partition to be specified for mmconfig.

**2.1.4.3 UART HAL API**

Added new functions, mmhal\_uart\_validate\_config() and mmhal\_uart\_configure(), for validating and setting UART configuration (baud rate and flow control).

**2.1.4.4 MMAGIC API**

DPP API has been updated.

#### 2.1.5 Components

|                     |                                                                    |
| ------------------- | ------------------------------------------------------------------ |
| Component           | Version                                                            |
| Morse firmware      | 1.17.9                                                             |
| Regulatory Database | 2.8.0                                                              |
| FreeRTOS kernel     | 11.2.0                                                             |
| LWIP                | 2.2.0 (+modifications)                                             |
| mbedTLS             | 3.6.5                                                              |
| STM32U5 BSP         | 1.8.0                                                              |
| STM32WB55 BSP       | 1.14.1                                                             |
| BCF API             | 12.1.0 (backward compatible to 8.0.0, but features may be limited) |

### 2.2 Release 2.11.2

This section outlines significant changes from release 2.10.4.

#### 2.2.1 New Features

* Simultaneous AP/STA support
* Subset of S1G Relay support, including Reachable Address Update \[alpha]

#### 2.2.2 Other Improvements

* Added MMWLAN API to register a callback to be invoked in case of unrecoverable errors.
* Added a workaround to prevent indefinite pause of transmission when traffic control resume events are missed during spread mode duty cycle operation.
* Added MMWLAN API to retrieve channel information for a VIF.
* Updated the FreeRTOS kernel to v11.2.
* Updated board support packages for STM32U5 and STM32H7 to the latest release version.
* Updated mbedtls submodule version from 3.6.2 to 3.6.5. The main benefit is a large number of security fixes (11 issues with Security Advisories) and a few bug fixes. See the full changesets at [https://github.com/Mbed-TLS/mbedtls/releases](https://www.google.com/url?q=https://github.com/Mbed-TLS/mbedtls/releases\&sa=D\&source=editors\&ust=1783311800036005\&usg=AOvVaw3vPlbpu5tcGkltbHCWAI5B).
* Added missing `const` qualifiers in mmconfig.
* Error message with file hash: line number is now logged when a chip assert occurs.
* Added a mechanism to hold the transceiver in reset when the MCU is halted on assertion in debug builds.
* Added a function to assert/deassert the reset pin on the Wi-Fi HaLow transceiver in mmhal\_wlan.
* mmutils.h now uses MMLOG\_XX macros instead of calling printf() directly.
* Added additional information in the sta\_status updates in the ap\_mode example application.
* Fixed typos in `mmagic_controller.h` function docstrings.
* Increased the response timeout for `mmagic_mqtt_stop_agent` to improve reliability.
* Added connect\_on\_boot configuration option to MMAGIC.
* Added detection and disconnection of inactive STAs in AP mode.
* Implemented `mmwlan_ap_disable()` to fully disable AP mode operation, replacing the previous stub implementation.
* Implemented deauthentication of unrecognized stations in AP mode to ensure STAs with stale associations are properly notified when the AP has no record of their association.
* Added an optional mmpkt pool for management-class frames (used in AP mode).
* Extended API readiness labels and added documentation explaining usage.
* Added ap\_ prefix to mmconfig WLAN parameters in ap\_mode example application.
* Added mmwlan statistics for TX frames that timed out in the send path.
* Added MMWLAN\_NOT\_SUPPORTED status code.
* Reduced recovery time when a chip assertion is detected.
* Removed freertos-plus-tcp network stack support.
* Removed the bootloader that was previously provided with MM-IoT-SDK, as it was never productionized. In addition, the AWS OTA example that relied on it has been removed.
* Increased size of command pool in reference pktmem implementations to account for larger commands.
* Clarified behavior and parameters for mmwlan\_ate\_execute\_command().
* The standby mode and offload features that had previously been deprecated have now been removed from the MM-IoT-SDK.
* Updated firmware binaries to v1.17.8.
* Refactored the mmiperf client and server implementations into separate source files to improve code maintainability.
* Added an API to stop iperf servers and in-progress iperf sessions.
* Removed load\_mmwlan\_settings() prototype from mmconfig.h. It is provided by mm\_app\_loadconfig.h.
* Updated the default NTP server to "time.aws.com" in the aws\_iot example to increase robustness and stability.
* Updated scan example application to use the common version function from mm\_app\_common.
* Improved clarity of mmhal\_flash documentation.
* Replaced ARM-specific inline Assembly code in FreeRTOSConfig.h with MMPORT\_BREAKPOINT().
* Fixed a missing include in `mqtt_agent_task_powersave.c`.
* Relaxed handling of `CHANNEL_LIST_NOT_SET` errors during network interface initialization to allow startup to proceed without a fully configured channel list.
* Updated LWIP configuration to only set LWIP\_PROVIDE\_ERRNO if LWIP\_ERRNO\_STDINCLUDE is not defined.
* Renamed MMAGIC “tcp” module to “socket”.
* Added UDP client and server support to MMAGIC through the socket API, matching the existing TCP interface.
* Enum types in the MMAGIC API are now packed to enforce consistent serialization.
* Added MMAGIC DPP push button command support.
* Increased mmagic\_controller\_wlan\_commit\_all timeout.
* Added basic example application for relay mode.
* Added experimental support for MacOS (Apple silicon).
* Updated the default toolchain version to GCC14.
* LWIP assertion messages are now printed in LWIP\_PLATFORM\_ASSERT().
* Added morselib and HW version to the Porting Assistant example application output.
* Added mmpkt\_list API function to dequeue multiple packets from a list at once.
* Added version information output to m2m reference applications.
* Made the receive timeout for the mbedTLS transport interface configurable.
* Added example application to demonstrate raw UDP and TCP client sockets.
* The ekh08-wb55 and ekh18-wb55 platforms now use the hardware crypto libraries by default, reducing association time.
* On-demand timers are added to the LWIP network stack to enable event-based timing, reducing power consumption. This option is toggled using ON\_DEMAND\_TIMERS\_ENABLED and is enabled by default.
* Removed support for PlatformIO.
* Updated the README to link to the GitHub Pages HTML documentation.
* Added a new configuration variable to MMAGIC MQTT for the configuration of the keep alive interval.

#### 2.2.3 Bug Fixes

* Fixed a bug where the CLI application would fail an assertion if a country code was not programmed to the config store.
* Fixed an incorrect return code in the porting assistant `test_wlan_io.c`, `process_sdio_spi_multi_byte_return()`.
* Fixed a bug that could cause system instability when the M2M agent datalink state was updated from an interrupt service routine context.
* Fixed a bug where MMAGIC M2M ping would fail and report incorrect results.
* Fixed AP enable API returning before the AP interface was started.
* Improved scan result filtering to increase robustness of AP selection.
* Fixed incorrect message in UART HAL.
* Fixed an issue where the LwIP network interface bypassed the standard `netif->input` dispatch path by calling `tcpip_input` directly.
* Improved stability of hardware reset functionality for SDIO platforms.
* Fixed incorrect range in implementation of `mmhal_random_u32(min, max)` for WB55 platforms.

#### 2.2.4 Known Issues

**2.2.4.1 Makefile Infrastructure**

* Building fails when the MM-IoT-SDK package directory has a space in the path
* The MM-IoT-SDK package must be unpacked into a directory without spaces in its name.

**2.2.4.2 RTOS**

* Timeouts with FreeRTOS time slicing disabled
* FreeRTOS time slicing is enabled by default in the MM-IOT-SDK FreeRTOS configuration. If this is disabled, timeouts may be observed when sending commands to the MM chip.
* System time drifts when the host is in deep sleep
* System time may drift from wall clock time when deep sleep is enabled. This may result in iperf taking longer than expected to complete. A 1-2% drift has been observed on STM32U575 and 3-4% on STM32WB55, but this may vary with activity levels.

**2.2.4.3 Example Applications**

* Failures when lwIP is built with LWIP\_IPV4=0
* If IPv4 is disabled when LWIP is built (i.e., IPv6-only), the IP stack may not work as expected. The workaround is to always enable IPv4.

**2.2.4.4 AP Mode**

Note that AP Mode is alpha and not for production use.

* Traffic is not forwarded between STAs
* AP mode does not forward frames between connected STAs. Therefore, connected STAs cannot communicate with each other unless bridging is implemented at the application layer.
* This functionality can be achieved by enabling relay mode and setting the AP as the root node. No changes are required on the STA devices to facilitate this.
* Recovery from health failures is not supported in AP mode
* If a health check failure occurs while operating in AP mode, it will trigger a system restart.
* Mitigation is to disable the health check by invoking:\
  mmwlan\_set\_health\_check\_interval(0, 0);
* OWE security is not supported
* Mitigation is to use Open or SAE security.

**2.2.4.5 DPP**

Note that DPP is beta and not for production use.

* DPP must be stopped explicitly before shutdown
* If DPP has been started (via mmwlan\_dpp\_start()), it must be stopped explicitly via mmwlan\_dpp\_stop() prior to invocation of mmwlan\_shutdown().
* DPP is not currently supported in regulatory domains that contain multiple channels sharing the same center frequency but at different bandwidths, in particular JP and AU REVmf.

**2.2.4.6 Stability**

* Some link instability may be seen at some specific signal levels, resulting in an elevated packet error rate.
* Minor changes to the distance from the AP, antenna orientation, or environment will correct it.

#### 2.2.5 Migration from 2.10.4

**2.2.5.1 Toolchain updates**

The GCC toolchain has been updated. Please rerun the setup script to ensure the correct version is installed at the expected location.

**2.2.5.2 MMWLAN API**

A new state, MMWLAN\_AP\_STA\_AUTHENTICATED, has been added to the mmwlan\_ap\_sta\_state enumeration.

The function mmwlan\_ap\_enable() now blocks by default until the AP interface is up. This can be overridden to the previous behavior by setting the async\_start option in the AP arguments.

Deprecated Offload API has been removed and is no longer available for application use.

**2.2.5.3 MMWLAN HAL API**

New function mmhal\_wlan\_assert\_reset() needs to be implemented by the WLAN HAL. Reference HALs have been updated to reflect this.

**2.2.5.4 MMAGIC API**

The tcp module of MMAGIC has been renamed to socket.

Deprecated Offload API has been removed.

#### 2.2.6 Components

|                     |                                                                    |
| ------------------- | ------------------------------------------------------------------ |
| Component           | Version                                                            |
| Morse firmware      | 1.17.8                                                             |
| Regulatory Database | 2.7.0                                                              |
| FreeRTOS kernel     | 11.2.0                                                             |
| LWIP                | 2.2.0 (+modifications)                                             |
| mbedTLS             | 3.6.5                                                              |
| STM32U5 BSP         | 1.8.0                                                              |
| STM32WB55 BSP       | 1.14.1                                                             |
| BCF API             | 12.1.0 (backward compatible to 8.0.0, but features may be limited) |

### 2.3 Release 2.10.4

This section outlines significant changes from release 2.9.7.

#### 2.3.1 New Features

* Combined MM6108 and MM8108 into a single release package
* Added support for the new AU 802.11-2024 and 802.11-REVmf channel maps.
* Added support for handling Extended Channel Switch Announcements (ECSAs) in STA mode.
* Added morselib source code.
* Added MM8108 support for ESP32.
* Added support for ESP32-P4.
* Added ap\_mode example application for ESP32 platforms.

#### 2.3.2 Other Improvements

* Added morselib version header (mmversion.h)
* Improved consistency of code style in the example application source code.
* Updated the list of BCFs that are now included in the MM-IoT-SDK release package.
* Updated ESP32 binary blob search behavior to be a recursive search.
* Moved BCFs into a morsefirmware//bcfs/ directory structure to clarify which BCF is for which chip type.
* Added duty cycle limits to EU and GB regulatory domains (2.8% for STA, 10% for AP).
* Updated ap\_mode example to use Operating Class 71 (US, 8 MHz channel spacing) by default.
* Moved application-specific regulatory database implementations into a dedicated Morse Micro regulatory database component.
* Set the default AU channel list to IEEE 802.11-REVmf. This will be used if the country code "AU" is specified.
* Added an assert on health check failure in AP mode, as health check recovery is not supported.
* Added the ability to configure the maximum allowed connections when enabling AP mode.
* Added MAC address helper functions to mmutils.h.
* Added a warning to the documentation and an error message to mmwlan\_ap\_enable to make it explicitly clear that OWE is not currently supported by AP mode.
* Disabled FreeRTOS-plus-TCP network stack for mm-ekh18-wb55 out of the box.
* Added support for MM8108 to the mm-iot-sdk release package and deprecated the mm-iot-sdk-mm8108 release package.
* Reduced RAM usage by 32 kB for MM8108 platforms.
* Added support for TLS 1.3 to MMAGIC.
* Added a new event to the MMAGIC TCP module that allows a Controller to receive notifications when data is ready to be read for a given TCP socket. This may be enabled on a per-socket basis. Only supported for the LWIP network stack.
* Added configurable logging API to mmlog.h.
* Added support for datapath\_driver\_rx\_alloc\_failures and datapath\_driver\_rx\_read\_failures UMAC stats on MM8108.
* Reordered contents of mmwlan.h to improve structure and clarity.
* Added support for libmorse\_nosupplicant.a on an ESP32 by mangling libmorse and hostap symbols post-compilation and linking of the two components. This adds a new Kconfig option, BUILD\_SUPPLICANT\_FROM\_SOURCE, that lets the user select the libmorse variant.
* Added hostap source files to the esp32 package and hostap as a valid ESP-IDF component. For brevity, the build configuration is statically defined to the set required to support AP mode when this component is used.
* Added a library mangler script to enable users to compile Morse Micro's hostap from source, useful for systems that already include hostap for another radio, e.g., ESP32.
* Added packet memory reservation for commands when using mmpktmem\_heap. This improves command reliability on MM8108.
* Renamed AP mode API from softap to ap, and example application from softap to ap\_mode.
* Improved handling of packet memory exhaustion on MM8108.
* HW Version string is now printed at boot for most example applications.
* Added noise measurements to scan results to provide more in-depth information on scanned channels. Provided WPA Supplicant with a measured noise value to improve the accuracy of SNR estimation.
* Enabled hardware acceleration of ECP cryptography operations for EKH05 platforms by default.
* Enabled building of Supplicant cryptographic code from source by default in example applications. The BUILD\_SUPPLICANT\_CRYPTO\_FROM\_SOURCE make variable is now set to “y” by default in the example Makefile, but can be set to an empty string to return to the previous behavior. This change may result in longer connection times on platforms where hardware acceleration for ECC cryptographic operations is not supported (particularly those with slower processors).
* Made IPAL implementations more permissive to config get/set operations when a given IP version is not enabled at compile time by the network stack configuration.
* The MMWLAN API specifies that it must only be invoked when MMWLAN is inactive (i.e., STA mode is not enabled) and will now return `MMWLAN_UNAVAILABLE` if you call it when the STA is enabled.
* Increased the maximum number of stations that can connect in AP mode from 4 to 20, and added make variables to simplify enabling AP mode and allocating sufficient memory for the expected station count.
* Python version 3.10 has been specified in the Pipfile as a requirement.
* Split up mmhal.h API into multiple files (mmhal\_xxx.h) to better represent where each function is used.
* Revised Getting Started guide.
* Extended MMWLAN API to allow specification of the interface for transmitted and received packets, link status callback, and when retrieving the MAC address.
* Added MMWLAN\_NOT\_INITIALIZED error code to signal when the MMWLAN API is invoked before the subsystem is initialized.
* Removed Emmet dependency on MMHAL API. Applications that use set\_button or set\_led Emmet commands must now implement the corresponding emmet\_hal functions.
* Added BCF for MM6108-MF16858 module.
* Added API to set the time after network activity before the STA will notify the AP that it will go to sleep using a QoS Null frame, and when the host will allow the Morse chip to sleep.
* Increased the default TCP client socket timeout to 10 seconds for both IP stacks.
* Added MMWLAN API to enable/disable non-TIM mode.
* Improved detection of connection loss. Stations will now disconnect on a beacon loss event after sending 2 QoS null packets to check whether the AP is reachable. Previously, 20 unacknowledged packets would also cause disconnects, and the station frequently sent QoS nulls to verify the AP's presence.
* Added support for power-saving stations in AP mode.
* Add releasing group-addressed traffic on the DTIM beacon in AP mode.
* Added support for handling Extended Channel Switch Announcements (ECSAs) in STA mode.
* Added MMWLAN API for notification and retrieval of STA status in AP mode.
* Added support for DTIM periods greater than 1 in AP mode.
* Moved offload\_arp\_response and offload\_arp\_refresh\_s from mmconfig WLAN namespace to IP namespace.
* Replaced malloc/free usage in crypto\_mbedtls\_mm.c with mmosal\_malloc/mmosal\_free.
* Added support for dynamic wake. This means that instead of waiting a fixed duration (10 ms) after the WAKE pin is raised, the Morse chip will now indicate readiness. This may result in lower power consumption and potentially less delay during transmission.
* Reformatted source files in morselib/include files to ensure consistency. This will result in whitespace differences when comparing the old and new header files.
* Added API to configure the Control Response preamble bandwidth.
* FW\_MBIN is now specified in the platform-specific Makefile.
* Improved robustness of the 4-way handshake in STA mode when connecting to an AP.
* Improved roaming behavior when background scan is enabled in STA mode.
* Added on-demand timer support to lwIP. This uses the RTOS timer to schedule events, allowing the host to sleep longer while the network stack is idle, reducing power consumption. Disabled by default. Set ON\_DEMAND\_TIMERS\_ENABLED=1 to enable.

#### 2.3.3 Bug Fixes

* Added missing stdint.h include to mmagic\_controller.h.
* Fixed a bug where supplicant could get stuck in scanning state forever, unable to start a new scan with the error `Reject scan trigger since one is already pending`.
* Fixed an assertion that could occur on reception of a fragmented 4 address frame.
* Fixed a bug that prevented 2 and 4 MHz channels in the JP regulatory domain from being supported in AP mode.
* Fixed CFLAGS for ESP32C6 platform.
* Increased size of FLASH segment and decreased size of FILESYSTEM segment (currently unused) in m2m\_agent application for mm-ekh08-u575 platform.
* Fixed a bug where stations would continuously send QOS\_NULL frames every 100ms.
* Added missing implementation of mmwlan\_register\_tx\_flow\_control\_cb().
* mm-ekh18-wb55 platform option is now present for the `program_configstore.py` script.
* Fixed a discrepancy between LWIP and MMOSAL timeout expectations in the LWIP port implementation.
* Fixed intermittent connection failure when using public key acceleration on STM32U585 platforms.
* Updated documentation of mmwlan\_get\_bssid() to match behavior.
* Updated the 4 address mode filter to avoid incorrectly dropping certain non-data frames.
* Fixed rate control drops from duty cycle exhaustion.
* Fixed a bug where the timeout argument to the wlan-connect CLI command was ignored, and corrected the argument parsing order for the same command.
* Fixed Random Number Generation (RNG) failure on concurrent access for several STM32-based platforms.
* Fixed a bug that caused received Action frames to be dropped when security mode was Open (i.e., no security). This would result in lower-than-expected throughput, since a Block Ack session could not be negotiated. This does not affect OWE or SAE operation.
* Fixed a bug where group-addressed traffic would not be encrypted when transmitted in AP mode.
* Removed semicolon from configBREAK macro in FreeRTOSConfig.h.
* Fixed a bug that could result in to-chip yaps delimiter CRC fail error messages on MM8108.
* Fixed a crash on mmwlan shutdown with DHCP offload enabled.
* Fixed Command error on boot when DHCP offload is enabled.
* Fixed a bug in the MQTT agent task that could result in a deadlock when resubscribing to MQTT subscriptions after a disconnect.
* Fixed MQTTAgent task stack overflow on TLS 1.3.
* Fixed the enum values in MMAGIC CLI documentation.
* Fixed a bug where MMAGIC Agent would assert if an out-of-range stream\_id was given when closing a socket.

#### 2.3.4 Known Issues

**2.3.4.1 Makefile Infrastructure**

* Building fails when the MM IoT SDK package directory has a space in the path
* The MM IoT SDK package must be unpacked into a directory without spaces in its name.

**2.3.4.2 RTOS**

* Timeouts with FreeRTOS time slicing disabled
* FreeRTOS time slicing is enabled by default in the MM-IOT-SDK FreeRTOS configuration. If this is disabled, timeouts may be observed when sending commands to the MM chip.
* System time drifts when the host is in deep sleep
* System time may drift from wall clock time when deep sleep is enabled. This may result, for example, in iperf taking longer than expected to complete. A 1-2% drift has been observed on STM32U575 and 3-4% on STM32WB55, but this may vary with activity levels.

**2.3.4.3 Example Applications**

* Failures when lwIP is built with LWIP\_IPV4=0
* If IPv4 is disabled when LWIP is built (i.e., IPv6-only), the IP stack may not work as expected. The workaround is to always enable IPv4.
* The CLI application requires the country code to be programmed into the config store
* The CLI application will assert during initialization if a valid country code has not been programmed to the config store. Instructions for programming the config store are in the Getting Started Guide.
* Bootloader/OTAU support
* The example bootloader and over-the-air-update (OTAU) support in the aws\_iot example have not been tested to a level that makes them recommended for production use. The example bootloader may be deprecated in a future release.

**2.3.4.4 Standby/Offload Features**

* The Standby and Offload features of the MMWLAN API are deprecated and will be removed in a future release.

**2.3.4.5 AP**

Note that AP mode is beta and not for production use.

* Traffic is not forwarded between STAs
* AP mode does not forward frames between connected STAs. Therefore, connected STAs cannot communicate with each other unless bridging is implemented at the application layer.
* Recovery from health failures is not supported in AP mode
* If a health check failure occurs while operating in AP mode, it will trigger a system restart.
* Mitigation is to disable the health check by invoking:\
  mmwlan\_set\_health\_check\_interval(0, 0);
* OWE security is not supported
* Mitigation is to use Open or SAE security.

**2.3.4.6 DPP**

Note that DPP is beta and not for production use.

* DPP must be stopped explicitly before shutdown
* If DPP has been started (via mmwlan\_dpp\_start()), it must be stopped explicitly via mmwlan\_dpp\_stop() prior to invocation of mmwlan\_shutdown().
* DPP is not currently supported in regulatory domains that contain multiple channels sharing the same center frequency but at different bandwidths, in particular JP and AU REVmf.

**2.3.4.7 Stability**

* Some link instability may be seen at some specific signal levels, resulting in an elevated packet error rate.
* Minor changes to the distance from the AP, antenna orientation, or environment will correct it.

#### 2.3.5 Migration from 2.9.7

The following is a list of significant changes from the previous MM-IoT-SDK release. This is not an exhaustive list and does not include new feature additions or changes to example applications.

**2.3.5.1 Combined MM6108 and MM8108 libraries**

MM6108 and MM8108 devices are now both supported by a single library. The MMWLAN HAL implementation is required to provide the following function to differentiate chip type:

const struct mmhal\_chip \*mmhal\_get\_chip(void)

{

/\* This is a define that is set by the build system in the platform-xxx.mk file to select the

\* Morse chip type. See the API documentation for mmhal\_get\_chip() for more information. \*/

return \&MMHAL\_CHIP\_TYPE;

}

Where MMHAL\_CHIP\_TYPE is defined to either mmhal\_mm6108 or mmhal\_mm6108.

This function has been added to the platform HALs provided in the SDK.

**2.3.5.2 MMWLAN API**

AP mode API has been renamed. Formerly, this was referred to as Soft AP mode, with an mmwlan\_softap\_ prefix in MMWLAN API. This is now referred to as AP mode, and the prefix has changed to mmwlan\_ap\_. Similarly, the softap example application has been renamed to ap\_mode. Similarly, the name of the Makefile variable to enable AP mode has changed from BUILD\_SUPPLICANT\_WITH\_SOFTAP to BUILD\_SUPPLICANT\_WITH\_AP.

**2.3.5.3 MMHAL API**

The MMHAL header has been split up into multiple headers to better clarify usage.

|                |                                                                            |
| -------------- | -------------------------------------------------------------------------- |
| mmhal\_core.h  | Required for core morselib functionality.                                  |
| mmhal\_wlan.h  | Required for morselib MMWLAN functionality.                                |
| mmhal\_os.h    | Required for the MMOSAL provided with this SDK (mmosal\_shim\_freertos.c). |
| mmhal\_app.h   | Required for the example applications provided with this SDK.              |
| mmhal\_uart.h  | Required for certain example applications that need UART I/O.              |
| mmhal\_flash.h | Required for MMCONFIG, littlefs HALs, and certain example applications.    |

The header mmhal.h is still included in the package, but now simply includes the above headers.

![warning](/files/79636a527f7a813067831ed834ed4601cfebd236)

*warning* Note: mmhal.h is no longer included by mmosal.h. Files that previously relied on this implicit inclusion may need to be updated to explicitly include mmhal.h.

The mmhal.c source file provided in the example applications has been split into multiple files corresponding to mmhal\_xx.h headers, and wlan\_hal.c has been renamed to mmhal\_wlan.c for consistency.

**2.3.5.4 Cryptography**

Example application Makefiles now enable BUILD\_SUPPLICANT\_CRYPTO\_FROM\_SOURCE by default. This can be overridden by setting BUILD\_SUPPLICANT\_CRYPTO\_FROM\_SOURCE to an empty string. The impact of this change is that morselib will use mbedTLS for cryptographic operations (including Elliptic Curve and hash operations). Platforms without hardware acceleration for these operations may observe an increase in connection time.

Hardware acceleration of some mbedTLS Elliptic Curve operations has been enabled for EKH05 reference platforms provided in this SDK.

**2.3.5.5 Makefile and infrastructure**

The firmware and BCF files have moved from the framework/morsefirmware directory into subdirectories appropriate to the chip (framework/morsefirmware/mm6108, framework/morsefirmware/mm8108).

**2.3.5.6 Emmet**

An additional hardware abstraction API has been added to emmet.h. These functions must be implemented by any application that uses Emmet.

**2.3.5.7 Regulatory Database**

The regulatory database has been moved from mm\_app\_regdb.\* into a separate component called mmregdb. To receive regulatory database updates, existing applications should be updated to use this new component. See the provided example applications for reference.

**2.3.5.8 Notable new API**

A configurable logging API has been added to framework/morselib/include/mmlog.h.

A new version header, framework/morselib/include/mmversion.h, has been added.

#### 2.3.6 Deprecation Notice

The following components of the MM-IoT-SDK have been marked as deprecated and will be removed in subsequent releases.

**2.3.6.1 FreeRTOS-plus-TCP network stack**

FreeRTOS-plus-TCP will be removed from future MM-IoT-SDK release packages. LWIP will continue to be the primary supported network stack.

**2.3.6.2 Platform IO**

Platform IO support will be removed from the core MM-IoT-SDK release package in the future. GNU Make will continue to be the primary supported build system supported by the core MM-IoT-SDK. Alternative build systems include:

* ARM CMSIS IDEs such as STM Cube IDE: [https://github.com/MorseMicro/mm-iot-cmsis](https://www.google.com/url?q=https://github.com/MorseMicro/mm-iot-cmsis\&sa=D\&source=editors\&ust=1783311800108463\&usg=AOvVaw1n7hcXhoxHewC-AKInkU4Y)
* ESP32 IDF: [https://github.com/MorseMicro/mm-iot-esp32](https://www.google.com/url?q=https://github.com/MorseMicro/mm-iot-esp32\&sa=D\&source=editors\&ust=1783311800108885\&usg=AOvVaw0jTvYihbhETe5__5HhQ2SM)
* Zephyr: [https://github.com/MorseMicro/mm-iot-zephyr](https://www.google.com/url?q=https://github.com/MorseMicro/mm-iot-zephyr\&sa=D\&source=editors\&ust=1783311800109255\&usg=AOvVaw2Gaj3_xQT_9OT3f0qJ4mCL)

**2.3.6.3 Bootloader example application**

The Bootloader example application provided with the MM-IoT-SDK will be removed in a future release. Alternatives include bootloaders and MCUBoot supplied by the MCU vendors.

**2.3.6.4 Offload functionality**

The existing support for the MM chips' offload functionality (including “Standby mode”) will be removed in a future release. Please see the API documentation for more specific deprecation notices.

#### 2.3.7 Components

|                     |                                                                    |
| ------------------- | ------------------------------------------------------------------ |
| Component           | Version                                                            |
| Morse firmware      | 1.17.6                                                             |
| Regulatory Database | 2.7.0                                                              |
| FreeRTOS kernel     | 10.5.1                                                             |
| LWIP                | 2.2.0 (+modifications)                                             |
| FreeRTOS + TCP      | 4.3.1                                                              |
| mbedTLS             | 3.6.2                                                              |
| STM32U5 BSP         | 1.4.0                                                              |
| STM32WB55 BSP       | 1.14.1                                                             |
| BCF API             | 12.1.0 (backward compatible to 8.0.0, but features may be limited) |

### 2.4 Release 2.9.7

This section outlines significant changes from release 2.8.2.

#### 2.4.1 New Features

* Soft AP functionality (beta - not for production)
* Support for operation in AP mode with a limited feature set:
* Maximum 4 connected STAs
* Automatic and Dynamic channel selection is not supported
* Soft AP example application only supports IPv4 and static IP addresses
* See also the Soft AP subsection under Known Issues below
* Device Provisioning Protocol (DPP), push button mode functionality as STA (Beta)
* DPP push button allows a device to be provisioned onto a network by pressing a button on both the STA and on the AP
* Only supported on EKH05 platforms, as Public Key Accelerator (PKA) HW is required to meet timing requirements
* Support for 4-address frames in STA mode
* Allows a STA to act as a layer 2 bridge
* Support for duty cycle burst mode
* In regulatory domains subject to duty cycle limitations, burst mode allows a device to consume its allowance in a burst rather than spread evenly over the duty cycle period

#### 2.4.2 Other Improvements

* Improved documentation of mmconfig parameters
* Added support for home channel dwelling during background scan
* Added MMWLAN API to configure listen interval
* Added support for registering a callback on station events
* Added support for appending user provided IEs to association IEs
* Updated mbedTLS to latest release v3.6.2
* Added API to query preserved failure logs
* Improved reliability of the WLAN chip health check system
* Added support for MCS8/9 rate control override for MM8108.
* Remove unsupported software scan
* Reduced power consumption of unused sensors on EKH05
* Added logging of return address to Hard Fault handlers, which can aid in identifying the instruction that triggered the fault.
* Improved EAPOL frame transmission reliability
* Enforced TWT configuration to occur pre-association
* Removed package files for unsupported MCU STM32-F429
* Extracted mmhal\_flash API from mmhal.c
* Updated EKH05 CubeMX code generation to v6.14.1
* Added additional morselib.a builds to mm-iot-sdk-mm8108 so that it supports the same architectures as mm-iot-sdk.
* Added support for debug-only assertions using the macro MMOSAL\_DEV\_ASSERT()
* Removed support for MMAGIC CLI on EKH08-WB55 due to insufficient FLASH space
* Disabled LWIP address collision detection by default to improve DHCP link bring-up time
* Enabled DHCP by default on example applications and assumed target IP address is gateway address, where applicable (e.g., ping, iperf examples).
* Extended mmconfig configuration options for the AWS IoT example application
* Removed LED validation from porting assistant
* Updated ESP32 porting assistant to match main version
* Added support for debug builds in SDK Makefiles
* Added support for configuring the scan interval when running ACE script wlan-sta-connect.py
* Provided MM Chip MAC address to MMHAL read MAC address API
* Added scan dwell time configuration to mmconfig
* Added support for transceiver snooze in between scan attempts
* Added support for snooze before association to reduce power consumption
* Added support for disabling debugging in low power modes when using OpenOCD to improve power consumption profiling
* Removed unneeded SWO initialisation from main.c. OpenOCD initialises the SWO when required.
* Added PKA hardware acceleration support for EKH05 in mbedTLS
* Deprecated MMOSAL notification API
* Added a MMAGIC LLC synchronization mechanism to enable a controller to reattach to a running M2M agent
* Added MMAGIC CLI command to query WLAN link status
* Added TLS support in MMAGIC TCP core
* Added support for NTP in MMAGIC m2m
* Added support for a configurable timeout on MMAGIC m2m command responses
* Restructured autogenerated MMAGIC source code files to remove .def files and replace with .c files. In doing this several existing .c files were also renamed for clarity. This change should be transparent to users of the autogenerated makefile fragments.
* Added support for statically allocating MMPKT memory for m2m\_agent demo application
* Reduced maximum mmagic streams to a sensible limit and allocated additional RAM to m2m\_agent application to allow allocating the maximum streams.
* Added support for connecting to AP with higher operating bandwidth
* Reduced default scan dwell duration
* Added GB country code to regulatory domain database
* Added support for EU 2MHz channels and 100% Duty cycle
* Enabled subband transmission by default
* Added support for customer provided BCFs
* Added initial support for ESP32C6 platform
* Added a Kconfig for specifying the Morse chip firmware binary when building for ESP32
* Improved SDK documentation viewability for ESP-IDF version on Github
* Improved display of scan results in MMAGIC CLI
* Added support for clearing MMAGIC CLI variables
* Disabled OTA update support in aws\_iot example application by default
* Reduced static RAM usage by 32KB when using MM8108 devices
* Added ESP32C3 support to mm-iot-sdk-esp32

#### 2.4.3 Bug Fixes

* Fixed `mmhal_get_time()` API missing explicit void argument
* Fixed reporting TWT Requester S1G capabilities as "Not Supported"
* Ensure MAC address persists over the app lifetime
* Fixed RAW priority 0 being treated as disabled
* Reduced power consumption on MM8108-EKH05 when HaLow chip is off
* Improved robustness of porting assistant BUSY pin testing
* Fixed MMAGIC CLI unable to set full IPV6 address
* Fixed memory leak on failed TX in MMAGIC Agent LLC.
* Fixed potential memory leak in m2m\_agent application for SPI datalink buffer TX.
* Fixed MMAGIC CLI becoming unresponsive after executing one-shot system deep sleep command `sys-deep_sleep one_shot`
* Fixed m2m\_agent SPI data link recovery from receive error.
* Fixed ignored MMAGIC wlan core configuration parameters
* Fixed MMAGIC CLI maximum wlan password length not matching MMWLAN maximum
* Improved MM8108 TCP throughput stability in environments experiencing packet loss

#### 2.4.4 Known Issues

**2.4.4.1 Makefile Infrastructure**

* Building fails when MM IoT SDK package directory has a space in the path
* The MM IoT SDK package must be unpacked into a directory that does not include a space in its name.

**2.4.4.2 Stability**

* Timeouts with FreeRTOS time slicing disabled
* FreeRTOS time slicing is enabled by default in the MM-IOT-SDK FreeRTOS configuration. If this is disabled, timeouts may be observed when sending commands to the MM chip.
* System time drifts when host deep sleep is enabled
* System time may drift from wall clock time when deep sleep is enabled. This may result, for example, in iperf taking longer than expected to complete. Drift of 1-2% has been observed on STM32U575 and 3-4% on STM32WB55, but this may vary with level of activity.
* DPP must be stopped explicitly before shutdown
* If DPP has been started (via mmwlan\_dpp\_start()) it must be stopped explicitly via mmwlan\_dpp\_stop() prior to invocation of mmwlan\_shutdown().
* Assert after consecutive RNG failures
* On STM32 platforms, in cases where multiple threads access the hardware random number generator (RNG), a priority inversion may occur resulting in an assertion in mmhal\_random\_u32(). This can be mitigated by protecting access to the STM32 RNG API with a mutex.

**2.4.4.3 Throughput**

* Low throughput with open security due to action frames being dropped
* When connected with open security (no encryption), action frames are dropped on receive. The primary impact of this is that block ack negotiation fails, meaning A-MPDU aggregation is not enabled, and thus resulting in lower throughput. This does not affect SAE or OWE security modes.

**2.4.4.4 Example Applications**

* Failures when lwIP built with LWIP\_IPV4=0
* If IPv4 is disabled when LWIP is built (i.e., IPv6 only) then there may be issues with the IP stack not working as expected. The workaround is to always enable IPv4.
* CLI application requires country code to be programmed to config store
* The CLI application will assert during initialization if a valid country code has not been programmed to the config store. Instructions for programming config store can be found in the Getting Started Guide.
* Bootloader/OTAU support
* The example bootloader and over-the-air-update (OTAU) support in the aws\_iot example has not been tested to a level where it is recommended for production use. The example bootloader may be deprecated in a future release.

**2.4.4.5 Standby/Offload Features**

* The Standby and Offload features of the MMWLAN API are in development and may not be fully functional.
* Further improvements are planned in future releases that may result in minor API changes.

**2.4.4.6 Soft AP**

* Power save is not supported on connected STAs
* Soft AP does not support buffering of traffic for power saving STAs. Therefore, 802.11 power save must be disabled on STAs connecting to the AP.
* Traffic is not forwarded between STAs
* Soft AP does not forward frames between connected STAs. Therefore it is not possible for connected STAs to communicate with each other.
* Soft AP does not correctly transmit group addressed frames
* Group addressed frames are transmitted unencrypted, even when encryption is enabled, meaning that they are not able to be decoded by receiving STAs.
* Recovery from health failures is not supported in Soft AP mode
* If a health check failure occurs while operating in Soft AP mode, it will not return to an operable state (for example, beacon transmission will not resume).

#### 2.4.5 Migration from 2.8.2

The following is a list of significant changes from the previous release of the MM-IoT-SDK. This is not an exhaustive list and does not include new feature additions or changes to example applications.

**2.4.5.1 mbedTLS configuration**

For mbedTLS configuration files that use mmhal\_get\_time() for MBEDTLS\_PLATFORM\_TIME\_MACRO, the definition must be updated to the following to avoid compilation errors:

\#define MBEDTLS\_PLATFORM\_TIME\_MACRO(x) mmhal\_get\_time()

**2.4.5.2 MMOSAL API**

Newly added functions:

* mmosal\_printf(): OS abstracted version of printf used by morselib
* mmosal\_extract\_failure\_info(): Extract the oldest un-viewed failure log entry

The task notification API (mmosal\_task\_wait\_for\_notification(), mmosal\_task\_notify(), mmosal\_task\_notify\_from\_isr()) has been deprecated. This API is no longer used by morselib, and it may be removed from the MMOSAL API in the future.

The macro MMOSAL\_DEPRECATED\_API\_ENABLED has been added to mmosal.h. If set to 0, then the deprecated MMOSAL API will be excluded by the preprocessor. The default value is 1 to allow for backward compatibility, but it can be overridden to 0 for increased strictness.

**2.4.5.3 MMWLAN API**

Newly added API:

* morse\_chip\_id\_string field added to mmwlan\_version struct.
* home\_channel\_dwell\_time\_ms field added to mmwlan\_scan\_config struct.
* Duty cycle API (mmwlan\_set\_duty\_cycle\_mode() and mmwlan\_get\_duty\_cycle\_stats()) added.
* STA event callback API added (sta\_evt\_cb and sta\_evt\_cb\_arg fields added to mmwlan\_sta\_args struct). (Beta)
* extra\_assoc\_ies and extra\_assoc\_ies\_len fields added to mmwlan\_sta\_args struct.
* use\_4addr field added mmwlan\_sta\_args struct.
* DPP API added (mmwlan\_dpp\_start() and mmwlan\_dpp\_stop()). (Beta)
* dwell\_on\_home\_ms field added to mmwlan\_scan\_args struct.
* Soft AP API added (mmwlan\_softap\_enable() and mmwlan\_softap\_disable()). (Beta)

API changes:

* MMWLAN\_SCAN\_DEFAULT\_DWELL\_TIME\_MS was reduced from 105 to 30 due to improvements in scan implementation.

**2.4.5.4 MMHAL API**

The behavior regarding the invocation of the function mmhal\_read\_mac\_addr() has changed. This function will now only be invoked once after boot of the transceiver (e.g., via mmwlan\_boot()) and the value will be cached, where previously it may have been invoked multiple times.

**2.4.5.5 MMAGIC**

Restructured auto-generated MMAGIC source code files to remove .def files and replace them with .c files. In doing this, several existing .c files were also renamed for clarity. This change should be transparent to users of the auto-generated makefile fragments.

Low-level MMAGIC Controller API added: mmagic\_controller\_agent\_sync() and mmagic\_controller\_request\_agent\_reset().

New API: TLS, MQTT, and NTP. Currently supported in M2M mode only.

Due to FLASH constraints, support for the MMAGIC CLI has been removed on the mm-ekh08-wb55 platform.

**2.4.5.6 MQTT agent**

MQTT agent has been moved out of the aws-common component and into its own freertos-libs component. This enables using the MQTT agent without introducing a dependency on AWS, such as in the MMAGIC MQTT module.

Existing Makefile-based applications using MQTT via AWS will need to include an additional Makefile fragment in their root Makefile::

include $(MMIOT\_ROOT)/mk/mqtt-agent-task.mk

This change should be transparent to users of the auto-generated makefile fragments.

**2.4.5.7 Makefile infrastructure**

Setting of Makefile CFLAGS for optimization has been moved from misc.mk to Makefile for each example. Projects relying on this flag being set in misc.mk will need to be updated to set the flag in their Makefile.

**2.4.5.8 Morse Firmware/BCFs**

![warning](/files/79636a527f7a813067831ed834ed4601cfebd236)

*warning* The firmware version has been updated from 1.15.3 to 1.16.4. Devices may need to have their BCF files updated to the latest version if they want the latest features on MM6108/MM8108.

#### 2.4.6 Components

|                     |                                                                     |
| ------------------- | ------------------------------------------------------------------- |
| Component           | Version                                                             |
| Morse firmware      | 1.16.4                                                              |
| Regulatory Database | 2.4.1                                                               |
| FreeRTOS kernel     | 10.5.1                                                              |
| LWIP                | 2.2.0                                                               |
| FreeRTOS + TCP      | 4.3.1                                                               |
| mbedTLS             | 3.6.2                                                               |
| STM32U5 BSP         | 1.4.0                                                               |
| STM32WB55 BSP       | 1.14.1                                                              |
| BCF API             | 12.1.0 (backwards compatible to 8.0.0, but features may be limited) |

## 3 System Details

### 3.1 System Memory Requirements

Supported architectures\*:

* ARM Cortex-M4F
* ARM Cortex-M7F
* ARM Cortex-M33F

\*Users can compile morselib from source to integrate with other architectures.

|        |             |
| ------ | ----------- |
| Memory | Recommended |
| RAM    | 256 KB+     |
| Flash  | 2 MB+       |

Space required will depend on the specific application. This may not be sufficient to support, for example, cloud connectivity, where application-layer protocols such as TLS and MQTT are required.

### 3.2 HaLow Throughput Performance

Throughput is measured at 8 MHz, with RTS disabled (unless otherwise stated), SGI enabled, power-save enabled, using Lightweight IP (LWIP), and with iperf run for 60 seconds, taking the median of 5 iterations.

* MM-IoT-SDK 2.12 STA
* Linux AP with 1.17 drivers/firmware.

|                              |                       |            |           |            |     |
| ---------------------------- | --------------------- | ---------- | --------- | ---------- | --- |
| Test Type                    | Platform              | UDP (Mbps) |           | TCP (Mbps) |     |
| STA -> AP                    | AP -> STA             | STA -> AP  | AP -> STA |            |     |
| Single STA                   | MM6108 EKH08-WB55     | 5.6        | 10        | 4.6        | 5.8 |
| MM6108 EKH05 SDIO            | 22                    | 22         | 7.0       | 9.4        |     |
| MM6108 EKH05 SPI             | 17                    | 18         | 6.4       | 8.2        |     |
| MM8108 EKH05 SDIO            | 24                    | 30         | 8.5       | 10         |     |
| MM8108 EKH05 SPI             | 19                    | 19         | 7.7       | 9.7        |     |
| Multi STA (4 STA cumulative) | MM6108 EKH08-U575 SPI | 20         | 26        | 10         | 14  |
| MM8108 EKH05 SPI             | 25                    | 35         | 11        | 17         |     |

## 4 Revision History

|                |              |                 |
| -------------- | ------------ | --------------- |
| Release Number | Release Date | Release Notes   |
| Version 4      | 1 Jul 2026   | Added 2.12.3    |
| Version 3      | 1 May 2026   | Added 2.11.2    |
| Version 2      | 3 Mar 2026   | Added 2.10.4    |
| Version 1      | 1 Oct 2025   | Initial release |

Morse Micro provides this information "as is" without warranties of any kind, express or implied. No guarantee is made as to the accuracy, completeness, or suitability of this information or Morse Micro’s products for any specific purpose. Use of this information and products is at the user’s sole risk. Morse Micro products are not designed or tested for use in mission-critical systems, and should not be used in such applications. Performance specifications are based on internal testing and are believed to be reliable; however, they are not guaranteed. It is the Buyer’s responsibility to test and validate all product performance, compatibility, and compliance, both in isolation and within end applications. Morse Micro assumes no liability for the use or application of any product, circuit, or information described herein. No license or other rights—express or implied—are granted under Morse Micro’s intellectual property. This document contains proprietary information of Morse Micro and is subject to change without notice. Wi-Fi®, Wi-Fi HaLow™, and the Wi-Fi logo are trademarks of Wi-Fi Alliance. ZigBee™ and Z-Wave™ are trademarks of their respective owners. All other trademarks are the property of their respective owners.
