This week's Wireless Wednesday will focus on NXP's unified Wi-Fi driver for Wireless Connectivity SoCs known as the
Multi-Chip, Multi-Interface driver (MXM). We will explain how its architecture simplifies development across NXP's Wireless Connectivity SoCs and i.MX Applications Processors.
The MXM
driver is NXP’s
proprietary Wi-Fi driver implementation and can be used with NXP i.MX MPUs supporting Linux
and
Android. The driver has a flexible dual license offering and is offered under GPL-2.0 and a proprietary license
which
helps to avoid licensing conflicts. The driver provides a seamless interface between the NXP Wireless SoC’s firmware
and
the standard Linux networking stack/cfg80211 on the host processor. The driver is responsible for providing various
Wi-Fi functions to the kernel and application, including station/client (STA), Micro AP/Softap (uAP), P2P and
Neighbor Awareness Networking/Wi-Fi Aware (NAN).
NXP offers the MXM driver through GitHub. Visit the MXM driver GitHub source
repository to view and download the driver source code.
Multi-Device/Interface Support
The MXM driver supports the portfolio of NXP Wireless Connectivity SoCs, supporting PCIE, SDIO
and USB interfaces.
The
SoC/interface combination can be easily configured via Makefile settings during compile time, including the ability
to
configure multiple SoC/interface combinations at the same time. The compiled kernel module of the driver can work
with
the various SoC/interface combinations without the need for reloading or recompilation of the driver. For developers
who
want to switch from the current generation of NXP devices to the next generation, this provides an easier migration
path
with less integration efforts and easier maintenance across generations of products without the burden of
architecture
changes.
Driver Architecture
Figure 1: MXM driver architecture.
The driver has a two-layer architecture comprising the MLAN layer and the MOAL layer, as shown in Figure 1.
This
is primarily meant to make it easier for porting to different OSes other than Linux/Android. The functions of these
two
layers are as follows:
- MLAN: OS-independent module responsible for command handling and interfacing with the firmware running on the
device.
It is platform agnostic C code
- MOAL: OS-dependent module responsible for interfacing with the upper kernel/protocol stacks and lower-level bus
driver
interface
The MLAN module contains the majority of the code and can be used as-is while the MOAL module must be ported to the
target OS. NXP has ported the MOAL module to some of the most common RTOSes that support NXP’s i.MX RT Crossover
MCUs
and General Purpose
MCUs, including FreeRTOS and Zephyr.
NXP has ported the MXM driver to RTOS. Explore the driver repos for FreeRTOS and Zephyr to kickstart your RTOS projects.
The FreeRTOS implementation is included as part of the
MCUXpresso SDK while the Zephyr
Wi-Fi driver is part of the Zephyr Project upstream. The RTOS drivers are licensed
using
the permissive BSD-3 Clause License thus allaying the concerns of developers and customers when a non-GPL based
license is preferred.
The MXM driver also supports platforms based on processor architectures such as x86 and ARM, making it well suited
for
i.MX MPUs. It offers backward compatibility with Linux kernel versions over the last 15 years as well as with older
versions of
Android. The driver is continuously
upgraded to be compliant with the latest kernel version and supports working with various standard and third-party
applications with the standard Linux utilities/tools, such as iw, and wpa_supplicant supported by the driver via the
cfg80211 application programming interface (Linux 802.11 configuration API).
Integration with NXP Processors
NXP has integrated the MXM driver with NXP’s i.MX Applications Processors and offers quarterly Linux and
Android
Board
Support Packages (BSPs) for NXP evaluation kits (EVKs) across the i.MX 6, i.MX 7, i.MX 8 and i.MX 9 series. NXP has
optimized and validated the BSPs
for
peak performance and rich feature sets across a diverse set of use cases covering Industrial, IoT, and Automotive
segments. This provides a seamless out-of-box experience to evaluate NXP Processor and Wireless Connectivity
solutions.
The BSPs are supported by maintenance releases and patches, ensuring lower cost of ownership for customers. The BSPs
can
be found at Embedded Linux for i.MX Applications
Processors and Android OS for i.MX Applications Processors.
Enjoy a seamless out-of-box experience with NXP EVKs. Get started with the i.MX Application
Processors BSPs available for Linux and Android.
Distribution
The driver is available as a submodule of the Linux Yocto project build, making it easier for developers to build for
NXP-based EVKs. Further, the driver is released in source code format and can be downloaded from sources such as
GitHub
enabling easier collaboration and integration with both NXP and non-NXP platforms. Refer to the user
manual for
instructions to download and build the MXM driver. For users targeting a Yocto-based system, the NXP Yocto recipes
for
the MXM Driver are distributed here and can be used to port the MXM driver to additional, third-party
platforms with
minimal development effort.
Easier collaboration and integration accelerates your development path. Learn more about how to
download and build the MXM driver in the
user manual.