circuitpython/ports/mimxrt
robert-hh 5c78762c16 mimxrt/machine_i2c_target: Support I2C target mode.
The functionality is similar to the RP2 implementation.  The supported
address size is 7 bit.  In order to achieve a sufficient response, the
target I2C IRQ handler has to run from RAM, causing much more code moved to
RAM than required.

Tested with Teensy 4.1, MIMXRT1021EVK, MIMXRT1011EVK and MIMXRT1170, using
both a On-Board SoftI2C as controller and a RP2 Pico as external
controller.

Signed-off-by: Damien George <damien@micropython.org>
Signed-off-by: robert-hh <robert@hammelrath.com>
2025-08-01 23:03:17 +10:00
..
boards mimxrt/machine_i2c_target: Support I2C target mode. 2025-08-01 23:03:17 +10:00
hal mimxrt/hal/qspi_nor_flash_config: Use a safe common CS timing. 2025-03-25 12:40:41 +11:00
lwip_inc extmod/lwip-include: Factor common lwIP config into lwipopts_common.h. 2025-01-29 12:36:27 +11:00
mbedtls all: Update bindings, ports and tests for mbedtls v3.5.1. 2024-01-30 11:08:46 +11:00
modules ports: Use vfs module instead of os. 2024-02-07 13:25:09 +11:00
board_init.c mimxrt/irq: Move all IRQ related definitions to dedicated header. 2023-09-01 00:02:19 +10:00
cyw43_configport.h extmod,alif,mimxrt,rp2,stm32: Create common cyw43 driver config header. 2025-05-08 15:32:05 +10:00
dma_manager.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
dma_manager.h mixmrt/machine_i2s: Add I2S protocol support. 2022-03-30 14:12:40 +11:00
eth.c all: Upgrade codespell to v2.4.1. 2025-02-25 16:11:33 +11:00
eth.h mimxrt: Add support for MIMXRT1176 MCUs, and MIMXRT1170_EVK board. 2022-11-17 14:11:50 +11:00
fatfs_port.c mimxrt/sdcard: Implement SDCard driver. 2021-09-07 20:45:33 +02:00
flash.c mimxrt/hal: Set the flexspi flash CLK frequency on boot. 2025-02-10 11:32:26 +11:00
flash.h mimxrt/flash: Separate low level driver code from flash object. 2023-05-09 15:18:36 +10:00
help.c ports: Standardise docs link in help text. 2023-06-02 11:48:46 +10:00
irq.h mimxrt/irq: Add CSI IRQ. 2025-02-07 22:39:32 +11:00
led.c mimxrt/boards/make-pins.py: Update to use tools/boardgen.py. 2023-11-03 14:18:54 +11:00
led.h mimxrt/led: Add support for up to four LEDs. 2023-05-23 10:54:23 +10:00
machine_adc.c mimxrt/machine_adc: Add ADC.read_uv() method. 2025-03-25 12:38:00 +11:00
machine_bitstream.c mimxrt: Fix cycle counter for time.ticks_cpu() and machine.bitstream(). 2021-10-25 15:50:44 +11:00
machine_i2c.c mimxrt/machine_i2c_target: Support I2C target mode. 2025-08-01 23:03:17 +10:00
machine_i2c.h mimxrt/machine_i2c_target: Support I2C target mode. 2025-08-01 23:03:17 +10:00
machine_i2c_target.c mimxrt/machine_i2c_target: Support I2C target mode. 2025-08-01 23:03:17 +10:00
machine_i2s.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
machine_led.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
machine_pin.c mimxrt/machine_pin: Clear IRQ flag when enabling or disabling IRQ. 2024-08-20 12:06:25 +10:00
machine_pwm.c mimxrt/machine_pwm: Fix a few inconsistencies with PWM output. 2024-11-18 16:11:13 +11:00
machine_rtc.c mimxrt/machine_rtc: Fix build with new SDKs. 2025-02-07 22:39:37 +11:00
machine_sdcard.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
machine_spi.c mimxrt: Enable default devices for I2C, SPI and UART. 2025-03-25 12:44:20 +11:00
machine_uart.c mimxrt/machine_uart: Enable CTS SION so it can be read. 2025-04-22 12:39:01 +10:00
machine_wdt.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
main.c mimxrt/machine_i2c_target: Support I2C target mode. 2025-08-01 23:03:17 +10:00
Makefile mimxrt/cyw43_configport: Update cyw43 config to use new BTHCI UART. 2025-04-22 12:49:14 +10:00
mimxrt_flash.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
mimxrt_sdram.c mimxrt/mimxrt_sdram: Fix pin config and comments. 2024-08-20 12:05:59 +10:00
modmachine.c all: Rename the "NORETURN" macro to "MP_NORETURN". 2025-05-13 10:36:47 +10:00
modmachine.h extmod/modmachine: Clean up decls of machine types to use common ones. 2023-10-26 16:20:53 +11:00
modmimxrt.c mimxrt: Add optional MSC support. 2025-02-10 12:52:45 +11:00
modmimxrt.h mimxrt: Add optional MSC support. 2025-02-10 12:52:45 +11:00
modos.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
modtime.c shared/timeutils: Standardize supported date range on all platforms. 2025-07-09 11:54:21 +10:00
mpbthciport.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
mpbthciport.h mimxrt: Integrate Bluetooth support with NimBLE bindings. 2023-08-31 23:42:10 +10:00
mpconfigport.h mimxrt/machine_i2c_target: Support I2C target mode. 2025-08-01 23:03:17 +10:00
mphalport.c mimxrt/mphalport: Refactor to use shared TinyUSB CDC functions. 2024-05-31 19:47:25 +10:00
mphalport.h shared/tinyusb: Wake main task if needed at end of USB ISR. 2024-10-07 11:06:57 +11:00
mpmetalport.c mimxrt: Add support for OpenAMP. 2024-03-29 17:59:29 +11:00
mpmetalport.h mimxrt/mpmetalport: Use mp_event_handle_nowait() for metal_poll. 2024-08-08 18:02:21 +10:00
mpnetworkport.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
mpnimbleport.c mimxrt: Integrate Bluetooth support with NimBLE bindings. 2023-08-31 23:42:10 +10:00
mpnimbleport.h mimxrt: Integrate Bluetooth support with NimBLE bindings. 2023-08-31 23:42:10 +10:00
mpremoteprocport.c mimxrt: Add support for OpenAMP. 2024-03-29 17:59:29 +11:00
msc_disk.c mimxrt: Add optional MSC support. 2025-02-10 12:52:45 +11:00
network_lan.c esp32,mimxrt,stm32: Implement ipconfig() for more network interfaces. 2024-06-04 12:45:01 +10:00
pendsv.c mimxrt/irq: Move all IRQ related definitions to dedicated header. 2023-09-01 00:02:19 +10:00
pendsv.h mimxrt: Fix header include guard names. 2024-02-15 09:45:14 +11:00
pin.c mimxrt/boards/make-pins.py: Update to use tools/boardgen.py. 2023-11-03 14:18:54 +11:00
pin.h mimxrt/boards/make-pins.py: Update to use tools/boardgen.py. 2023-11-03 14:18:54 +11:00
qstrdefsport.h mimxrt: Add new, minimal port to NXP i.MX RT series CPUs. 2020-03-11 15:34:13 +11:00
README.md mimxrt/README: Add build and flashing instructions. 2022-11-17 14:21:59 +11:00
sdcard.c all: Upgrade codespell to v2.4.1. 2025-02-25 16:11:33 +11:00
sdcard.h mimxrt/sdcard: Implement SDCard driver. 2021-09-07 20:45:33 +02:00
sdio.c mimxrt/sdio: Add support for the 117x series. 2023-09-29 23:08:41 +10:00
sdio.h mimxrt/sdio: Add SDIO driver. 2023-08-31 23:39:34 +10:00
systick.c mimxrt/machine_timer: Use soft-timer implementation for machine.Timer. 2022-10-27 14:09:29 +11:00
systick.h mimxrt/eth: Add LAN support and integrate the network module. 2021-10-25 15:14:26 +11:00
ticks.c mimxrt: Add support for MIMXRT1176 MCUs, and MIMXRT1170_EVK board. 2022-11-17 14:11:50 +11:00
ticks.h mimxrt: Improve ticks and sleep functions using GPT. 2021-05-18 22:36:32 +10:00
usbd.c mimxrt: Switch to shared TinyUSB descriptor. 2024-12-10 10:29:21 +11:00

Port of MicroPython to NXP iMX RT 10xx

Currently supports Teensy 4.0, Teensy 4.1, and the MIMXRT1010_EVK, MIMXRT1020_EVK, MIMXRT1050_EVK, MIMXRT1060_EVK and MIMXRT1064_EVK boards.

Features:

  • REPL over USB VCP
  • machine.ADC
  • machine.I2C
  • machine.LED
  • machine.Pin
  • machine.PWM
  • machine.RTC
  • machine.SDCard
  • machine.SPI
  • machine.Signal
  • machine.SoftI2C
  • machine.SoftSPI
  • machine.Timer
  • machine.UART
  • LFS2 file system at the internal Flash
  • SDCard support (not on MIMXRT1010_EVK)
  • Ethernet (not on Teensy 4.0 and MIMXRT1010_EVK)

Known issues:

TODO:

  • More peripherals (Counter, I2S, CAN, etc)
  • More Python options

Build Instructions

Before building the firmware for a given board the MicroPython cross-compiler must be built; it will be used to pre-compile some of the built-in scripts to bytecode. The cross-compiler is built and run on the host machine, using:

$ make -C mpy-cross

This command should be executed from the root directory of this repository. All other commands below should be executed from the ports/mimxrt/ directory.

An ARM compiler is required for the build, along with the associated binary utilities. The default compiler is arm-none-eabi-gcc, which is available for Arch Linux via the package arm-none-eabi-gcc, for Ubuntu via instructions here, or see here for the main GCC ARM Embedded page. The compiler can be changed using the CROSS_COMPILE variable when invoking make.

In addition newlib is required which is available for Arch Linux via the package arm-none-eabi-newlib, for Ubuntu/Debian install package libnewlib-arm-none-eabi

Next, the board to build must be selected. Any of the board names of the subdirectories in the boards/ directory is a valid board. The board name must be passed as the argument to BOARD= when invoking make.

All boards require certain submodules to be obtained before they can be built. The correct set of submodules can be initialised using (with SEEED_ARCH_MIX as an example of the selected board):

$ make BOARD=SEEED_ARCH_MIX submodules

Then to build the board's firmware run:

$ make BOARD=SEEED_ARCH_MIX

The above command should produce binary images in the build-SEEED_ARCH_MIX/ subdirectory (or the equivalent directory for the board specified).

Flashing

Deploy the firmware following the instructions here https://docs.micropython.org/en/latest/mimxrt/tutorial/intro.html#deploying-the-firmware