Skip to content

boards: shields: add MR-MCXN-T1-OFL, MR-MCXN-T1-F9P and MR-MCXN-T1-IO shields - #117416

Draft
bperseghetti wants to merge 6 commits into
zephyrproject-rtos:mainfrom
CogniPilot:pr-mcxn-t1-shields
Draft

boards: shields: add MR-MCXN-T1-OFL, MR-MCXN-T1-F9P and MR-MCXN-T1-IO shields#117416
bperseghetti wants to merge 6 commits into
zephyrproject-rtos:mainfrom
CogniPilot:pr-mcxn-t1-shields

Conversation

@bperseghetti

@bperseghetti bperseghetti commented Aug 26, 2026

Copy link
Copy Markdown
Member

Add three stacking shields for the MR-MCXN-T1 board's expansion header:

  • mr_mcxn_t1_ofl (MR-MCXN-T1-OFL): optical flow, with an AFBR-S50 rangefinder, a PAA3905 optical flow sensor and ICM42688 and ICM45686 IMUs
  • mr_mcxn_t1_f9p (MR-MCXN-T1-F9P): GNSS, with a u-blox F9P receiver on two UARTs and an RM3100 magnetometer
  • mr_mcxn_t1_io (MR-MCXN-T1-IO): flex IO breakout exposing I2C, UART, PWM and ADC from the header

Each shield ships its overlay, config fragment, shield.yml, and documentation with a board-view image, and builds against the mr_mcxn_t1 board with the documented sample commands.

Co-stacking notes documented on each page: OFL and F9P contend for FlexCOMM7, F9P and IO contend for the port 3 pins, and OFL and IO contend for FlexCOMM3, so those pairs are mutually exclusive.

Opened as a draft: the branch is stacked on the MR-MCXN-T1 board PR and carries its commits until that merges.

Dependencies: #117414 (the MR-MCXN-T1 board, which this branch stacks on). For full sensor function: #117396 and #117406 (AFBR-S50 LPSPI path and error recovery), #117394 (ICM45686 streaming), #117395 (RM3100).

bperseghetti and others added 6 commits August 24, 2026 15:08
Add a GPIO nexus binding for the MR-MCXN-T1 stacking header. The board
mates a stacking header that carries the expansion boards. Expansion-board
overlays must reference connector nexus labels rather than raw SoC GPIO
controllers, so the board needs a nexus that maps the header's control
lines (sensor interrupts, resets, indicator and user inputs). The binding
follows the existing connector-header pattern and includes gpio-nexus.yaml.

Signed-off-by: Benjamin Perseghetti <bperseghetti@rudislabs.com>
Add board support for the NXP MR-MCXN-T1, a dual-core MCXN947
mobile-robotics controller. CPU0 runs the TrustZone-secure image and
CPU1 is the secondary core.

On-board hardware:

- ENET-QoS MAC with a TJA1103 100BASE-T1 PHY, MAC derived from the SoC
  unique ID
- Two FlexCAN controllers, each behind a TJA1462 CAN transceiver
- I3C barometer (BMP581) and magnetometer (BMM350)
- ICM-45686 hub IMU on LPSPI8
- APA102 indicator LED driven over FlexIO SPI

The board mates a series of stacking expansion boards through the board
connector. A GPIO nexus (mr-mcxn-t1-header) maps the header control
lines, and the multiplexed peripheral buses are exposed as labeled bus
nodes so expansion-board overlays reference the board instead of raw SoC
controllers. FlexCOMM3 and FlexCOMM7 are shared across expansion boards,
so only one function per instance is active at a time.

The I3C bus stalls in a busy-wait at startup, so I3C and its two sensors
are disabled by default. Doing so also frees flexcomm1 for the physical
LPUART1 console, as the board has no USB CDC ACM console. The 32.768 kHz
VBAT crystal oscillator is left off because enabling it wedges the boot
ROM on warm reset, and the RTC counts the internal FRO16K until that
ROM behavior is understood.

To re-attempt enabling the VBAT 32.768 kHz crystal, gate it on the
devicetree rtc clock-src being 1 and guard the switch with
VBAT0->STATUSA OSC_RDY.

Co-authored-by: Peter van der Perk <peter.vanderperk@nxp.com>
Signed-off-by: Benjamin Perseghetti <bperseghetti@rudislabs.com>
Add the board documentation page for the MR-MCXN-T1. It covers the
overview, hardware, supported features, the stacking-header connections,
and programming and debugging.

Signed-off-by: Benjamin Perseghetti <bperseghetti@rudislabs.com>
Add the optical-flow stacking shield for the MR-MCXN-T1 board. The
shield carries an AFBR-S50 time-of-flight rangefinder, a PAA3905
optical-flow sensor and two InvenSense IMUs (ICM-42688 and ICM-45686),
each on its own SPI bus routed through the board stacking header.

The overlay enables the FlexCOMM SPI parents and their children exposed
by the board and attaches the sensor nodes. Interrupt lines reference the
board stacking-header GPIO nexus. The AFBR-S50 SPI-in-GPIO-mode pins and
its chip select are the FlexCOMM3 SPI signals reused in GPIO mode, so
they are named on the SoC GPIO controller alongside their bus. A shield
Kconfig fragment raises the main stack to the 4096-byte minimum the
AFBR-S50 driver asserts at build time.

Signed-off-by: Benjamin Perseghetti <bperseghetti@rudislabs.com>
Add the GNSS stacking shield for the MR-MCXN-T1 board. The shield
carries a u-blox F9P RTK GNSS receiver and a PNI RM3100 magnetometer.
The receiver primary UART is on FlexCOMM7, its RTCM corrections UART is
on FlexCOMM3, and the magnetometer is on the FlexCOMM4 I2C bus.

The overlay enables the FlexCOMM parents and children exposed by the
board and attaches the receiver and magnetometer nodes. The receiver
reset and the magnetometer data-ready line reference the board
stacking-header GPIO nexus. The receiver output rate, time-pulse
capture, and network time distribution are left to the application.

Signed-off-by: Benjamin Perseghetti <bperseghetti@rudislabs.com>
Add the Flex IO stacking shield for the MR-MCXN-T1 board. The shield is
a passive breakout that routes an expansion I2C bus, two flow-controlled
UARTs, two FlexPWM blocks and an ADC from the board to the
stacking-header connectors.

The overlay enables the FlexCOMM, FlexPWM and ADC instances the board
exposes for the connector. Because the board carries no fixed silicon,
the devices on the expansion connectors, the ADC channel setup and any
PWM consumers are left to the application overlay.

Signed-off-by: Benjamin Perseghetti <bperseghetti@rudislabs.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant