.. zephyr:board:: mimxrt700_evk

Overview
********

The new i.MX RT700 CPU architecture is composed of a high-performance main-compute subsystem,
a secondary “always-on” sense-compute subsystem and specialized coprocessors.

The main-compute subsystem has a primary Arm® Cortex®-M33 running at 325 MHz, with an integrated
Cadence® Tensilica® HiFi 4 DSP for more demanding DSP and audio processing tasks.
The sense-compute subsystem has a second Arm® Cortex®-M33 and an integrated Cadence® Tensilica®
HiFi 1 DSP. This removes the need for an external sensor hub, reducing system design complexity,
footprint and BOM costs.

The HiFi4 is a high performance DSP core based upon a Very Long Instruction Word (VLIW) architecture,
which is capable of processing up to eight 32x16 MACs per instruction cycle. It can be used for offloading
high-performance numerical tasks such as audio and image processing and supports both fixed-point and
floating-point operations.

The i.MX RT700 also features NXP’s eIQ Neutron NPU, enabled with the eIQ machine learning software
development environment.

Hardware
********

- Main Compute Subsystem:
   - Arm Cortex-M33 up to 325 MHz
   - HiFi 4 DSP up to 325 MHz
   - eIQ Neutron NPU up to 325 MHz
- Sense Compute Subsystem:
   - Arm Cortex-M33 up to 250 MHz
   - HiFi 1 DSP up to 250 MHz
- 7.5 MB on-chip SRAM
- Three xSPI interfaces for off-chip memory expansion, supporting up to 16b wide external memories up to 250 MHz DDR
- eUSB support with integrated PHY
- Two SD/eMMC memory card interfaces—one supporting eMMC 5.0 with HS400/DDR operation
- USB high-speed host/device controller with on-chip PHY
- A digital microphone interface supporting up to 8 channels
- Serial peripherals (UART/I²C/I3C/SPI/HSPI/SAI)
- 2.5D GPU with vector graphics acceleration and frame buffer compression
- EZH-V using RISC-V core with additional SIMD/DSP instructions
- Full openVG 1.1 support
- Up to 720p@60FPS from on-chip SRAM
- LCD Interface + MIPI DSI
- Integrated JPEG and PNG support
- CSI 8/10/16-bit parallel (via FlexIO)

For more information about the MIMXRT798 SoC and MIMXRT700-EVK board, see
these references:

- `i.MX RT700 Website`_

Supported Features
==================

NXP considers the MIMXRT700-EVK as a superset board for the i.MX RT7xx
family of MCUs. This board is a focus for NXP's Full Platform Support for
Zephyr, to better enable the entire RT7xx family. NXP prioritizes enabling
this board with new support for Zephyr features.

.. zephyr:board-supported-hw::

Connections and IOs
===================

The MIMXRT798 SoC has IOCON registers, which can be used to configure the
functionality of a pin.

+---------+-----------------+----------------------------+
| Name    | Function        | Usage                      |
+=========+=================+============================+
| PIO0_6  | I2C             | I2C SDA                    |
+---------+-----------------+----------------------------+
| PIO0_7  | I2C             | I2C SCL                    |
+---------+-----------------+----------------------------+
| PIO0_31 | UART0           | UART RX                    |
+---------+-----------------+----------------------------+
| PIO1_0  | UART0           | UART TX                    |
+---------+-----------------+----------------------------+
| PIO0_18 | GPIO            | GREEN LED                  |
+---------+-----------------+----------------------------+
| PIO0_9  | GPIO            | SW5                        |
+---------+-----------------+----------------------------+
| PIO8_14 | UART19          | UART TX                    |
+---------+-----------------+----------------------------+
| PIO8_15 | UART19          | UART RX                    |
+---------+-----------------+----------------------------+
| PIO3_0  | SPI             | SPI MOSI                   |
+---------+-----------------+----------------------------+
| PIO3_1  | SPI             | SPI SCK                    |
+---------+-----------------+----------------------------+
| PIO3_2  | SPI             | SPI MISO                   |
+---------+-----------------+----------------------------+
| PIO3_3  | SPI             | SPI SSEL                   |
+---------+-----------------+----------------------------+

System Clock
============

The MIMXRT700 EVK is configured to use the Systick
as a source for the system clock.

HiFi1 DSP Core
==================

One can build a Zephyr application for the i.MX RT700 HiFi 1  DSP core by targeting the HiFi 1
SOC. Xtensa toolchain supporting RT700 DSP cores is included in Zephyr SDK.

To build the hello_world sample for the i.MX RT700 HiFi 1 DSP core:

.. zephyr-app-commands::
   :tool: west
   :zephyr-app: samples/hello_world
   :board: mimxrt700_evk/mimxrt798s/hifi1
   :goals: build

HiFi4 DSP Core
==================

One can build a Zephyr application for the i.MX RT700 HiFi 4  DSP core by targeting the HiFi 4
SOC. Xtensa toolchain supporting RT700 DSP cores is included in Zephyr SDK.

To build the hello_world sample for the i.MX RT700 HiFi 4 DSP core:

.. zephyr-app-commands::
   :tool: west
   :zephyr-app: samples/hello_world
   :board: mimxrt700_evk/mimxrt798s/hifi4
   :goals: build

Programming and Debugging
*************************

.. zephyr:board-supported-runners::

Build and flash applications as usual (see :ref:`build_an_application` and
:ref:`application_run` for more details).

Configuring a Debug Probe
=========================

A debug probe is used for both flashing and debugging the board. This board is
configured by default to use the MCU-Link CMSIS-DAP Onboard Debug Probe.

.. tabs::
    .. group-tab:: LinkServer


        1. Install the :ref:`linkserver-debug-host-tools` and make sure they are in your search path.
        2. To put the board in ``DFU mode`` to program the firmware, short jumper J20.
        3. To update the debug firmware, please follow the instructions on `MIMXRT700-EVK Debug Firmware`

    .. group-tab:: JLink External


        1. Install the :ref:`jlink-debug-host-tools` and make sure they are in your search path.

        2. To disconnect the SWD signals from onboard debug circuit, **short** jumpers JP18.

        3. Connect the J-Link probe to J18 20-pin header.

        See :ref:`jlink-external-debug-probe` for more information.

Configuring a Console
=====================

Connect a USB cable from your PC to J54, and use the serial terminal of your choice
(minicom, putty, etc.) with the following settings:

- Speed: 115200
- Data: 8 bits
- Parity: None
- Stop bits: 1

Flashing
========

The DIP switch SW10 selects the boot options.  Set SW10 to Off-On (01) to boot from the default
external flash on XSPI0.

Here is an example for the :zephyr:code-sample:`hello_world` application. This example uses the
:ref:`jlink-debug-host-tools` as default.

.. zephyr-app-commands::
   :zephyr-app: samples/hello_world
   :board: mimxrt700_evk/mimxrt798s/cm33_cpu0
   :goals: flash

Open a serial terminal, reset the board (press the RESET button), and you should
see the following message in the terminal:

.. code-block:: console

   *** Booting Zephyr OS v3.7.0 ***
   Hello World! mimxrt700_evk/mimxrt798s/cm33_cpu0

Debugging
=========

Here is an example for the :zephyr:code-sample:`hello_world` application. This example uses the
:ref:`jlink-debug-host-tools` as default.

.. zephyr-app-commands::
   :zephyr-app: samples/hello_world
   :board: mimxrt700_evk/mimxrt798s/cm33_cpu0
   :goals: debug

Open a serial terminal, step through the application in your debugger, and you
should see the following message in the terminal:

.. code-block:: console

   *** Booting Zephyr OS v3.7.0 ***
   Hello World! mimxrt700_evk/mimxrt798s/cm33_cpu0

.. include:: ../../common/board-footer.rst
   :start-after: nxp-board-footer

.. _i.MX RT700 Website:
   https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/i-mx-rt-crossover-mcus/i-mx-rt700-crossover-mcu-with-arm-cortex-m33-npu-dsp-and-gpu-cores:i.MX-RT700

.. _MIMXRT700-EVK Debug Firmware:
   https://www.nxp.com/docs/en/application-note/AN13206.pdf

Display Support
***************

The mimxrt700_evk board supports following in-tree display module(s). Setup for
each module is described below:

NXP G1120B0MIPI MIPI Display
============================

The :ref:`g1120b0mipi` connects to the board's MIPI connector J52
directly, but some modifications are required (see
:zephyr_file:`boards/shields/g1120b0mipi/boards/mimxrt700_evk_mimxrt798s_cm33_cpu0.overlay`
for a list). The display sample can be built for this module like so:

.. zephyr-app-commands::
   :board: mimxrt700_evk
   :shield: g1120b0mipi
   :zephyr-app: samples/drivers/display
   :goals: build
   :compact:
