# NXP i.MX RT1170 (MIMXRT1170-EVK) Evaluation Kit

This topic provides board-specific information about for NXP's i.MX RT1170. Assuming that you have set up the development environment as per the intructions in getting started.

## Board features

• MIMXRT1176DVMAA MCU featuring 1GHz ARM® Cortex®-M7 core and 400Mhz Cortex®-M4 core
• 5.5” 720x1280 TFT LCD Touch Display
• 2 MB Internal SRAM with 512 KB of TCM for Cortex-M7 and 256 KB of TCM for Cortex-M4
• 16 MB Hyper Flash
• 512 Mbit External SDRAM
• 2 x Gb ENET with AVB and TSN

## Supported color depths

The reference port for this board supports 32bpp color depth. The board also supports 16bpp and 24bpp with the ItemLayer API, but not with QUL_COLOR_DEPTH. See Color depth for more information.

## Supported displays

The reference port supports two displays, RK055HDMIPI4M and RK055HDMIPI4MA0. The RK055HDMIPI4MA0 display is the newer one and is currently sold by NXP, whereas RK055HDMIPI4M is not available anymore. While the specifications of these displays are mostly the same, some critical components, such as the TFT driver, are different and therefore need their own initialization values and function calls.

The pre-built library and binaries have RK055HDMIPI4MA0 enabled by default. If you have the older display model and wish to use it, you'll need to change USE_MIPI_PANEL definition in QUL_DIR/platform/boards/nxp/mimxrt1170-evk-freertos/display/platform_display_c.h to MIPI_PANEL_RK055AHD091 and recompile Qt Quick Ultralite (Platform) library. To restore the support for the new display model, change the USE_MIPI_PANEL definition back to MIPI_PANEL_RK055MHD091 and recompile the library.

## Hardware layers support

The NXP i.MX RT1170 Evaluation Kit comes with support for graphical hardware layers. Although Qt for MCUs supports hardware layers on this board, ensure that the following requirements are met to get the desired results.

• A layer must not exceed display boundaries. If invalid position is requested, the closest possible position is calculated and used instead. Qt for MCUs uses the following formulas to ensure that layers are within the display boundaries.
• 0 < x + layer.width < display.width
• 0 < y + layer.height < display.height

Note: If layer size exceeds display size in at least one direction, it will not be initialized and shown. In such a case, memory is not allocated for frame buffers to avoid consuming rendering resources.

In addition, the hardware layer support on this platform comes with the following limitations:

• A layer's size and z order is constant after initialization and can not be changed at runtime.
• If the requested z order is already used, the next available higher value is taken. Qt for MCUs will search for next available value starting from 0, if a higher value is not available.
• If maximum number of layers (8) is exeeded, the additional layers are not initialized to avoid consuming resources.
• Global opacity for layers is not supported right now. Use alpha channel from layer's frame buffer to change layer's opacity,
• NXP i.MX RT1170 does not support hardware sprites. To overcome this limitation, Qt for MCUs offers a software implementation for SpriteLayer. It provides an offset position to the SpriteLayer's children and propogates opacity and enabled properties to them.
• The SpriteLayer's width, height, and z properties are ignored.

## Optimization for the rotated images

To utilize optimized cache usage on the Vivante Imaging Engine a tiled format can be enabled for the rotated images with QUL_RESOURCE_OPTIMIZE_FOR_ROTATION property. Using tiled format for the rotated images can significantly reduce the rendering time for a single texture.

Format conversion is done during runtime for all textures that belong to the resource. Converted textures are stored in SDRAM in section named preprocess cache.

Minimum size for the cache is the size of the biggest image that has been optimized for the rotations. Optimal size for the cache is such that it is able to hold all rotation optimized images that are visible at the same time. Texture(s) with the oldest access time are freed if the cache gets full.

### Setting texture preprocess cache size

#### With CMake

Cache size is set with QUL_PREPROCESS_CACHE_SIZE property.

cmake [...] -DQUL_PREPROCESS_CACHE_SIZE=1M

#### Without CMake

Cache size is set by creating a global linker symbol.

##### GCC
--config_def __qul_preprocess_cache_size__=1M
##### IAR
-Xlinker --defsym=__qul_preprocess_cache_size__=1M

## Using Monotype Spark font Engine

### Utilizing vector font rendering

If using the Monotype Spark font engine, it's possible to enable an experimental Qt Quick Ultralite feature in order to use vector outlines for text rendering. This will utilize vector hardware acceleration to draw fonts.

Use the QUL_FONT_VECTOR_OUTLINES_DRAWING CMake option to enable vector outlines. Refer to Text Rendering and Fonts for more detail about how to use the Monotype Spark font engine.

Note: This platform requires text cache to support vector font rendering. It's configured by default in QUL_DIR/platform/boards/nxp/mimxrt1170-evk-freertos/cmake/coreLibrary.cmake

### Performance consideration

For the best performance it's recommended to configure QUL_FONT_CACHE_SIZE.

## Prebuilt demos and examples

The package for NXP i.MX RT1170 Evaluation Kit board comes with the following prebuilt demos and examples:

• FreeRTOS

You can find these in the demo_images directory.

By default, the output of printf calls are redirected to a virtual serial port, which is exposed on the host machine via USB.

## Debugging via JTag

In order to debug application code on MIMXRT1170-EVK, a hardware debugger can be connected to the board's JTag port, and J-Link software must be installed from here

The J5-J8 pins (under the JTag socket) must be disabled.

Warning: Disabling J5-J8 pins prevents flashing via DAP-Link. Those pins must be re-enabled before using DAP-Link again.

• Start the gdb server
JLinkGDBServer -endian little -noir -speed auto -port 2331 -vd -device MIMXRT1176xxxA_M7 -if SWD -halt -reportuseraction -JLinkScriptFile evkmimxrt1170_connect_cm4_cm7side.jlinkscript
• Run arm-none-eabi-gdb in a separate console
c:\path\to\bin\arm-none-eabi-gdb.exe path\to\compiled.elf -ex "target remote localhost:2331"
(gdb) monitor reset halt
(gdb) continue

Note: If the monitor reset gdb command does not reset the device, use the load command. JLink script file is delivered with SDK package.

Note: This method requires MCUXpresso IDE v11.3.0 or newer.

For convenience, you can set an environment variable that points to the Redlink tool, which is part of the MCUXpresso IDE.

export REDLINK=\$MCUXPRESSO_IDE_PATH/ide/binaries/crt_emu_cm_redlink
set REDLINK=%MCUXPRESSO_IDE_PATH%\ide\binaries\crt_emu_cm_redlink

Where, MCUXPRESSO_IDE_PATH is an environment variable pointing to the MCUXpresso IDE installation directory.

• Connect a USB cable to the board (to J11) and to the host PC. Open a terminal window and run the following command:
%REDLINK% --server :50032 --mi -2 -vc -p MIMXRT1176xxxxx --ConnectScript RT1170_connect_M7_wake_M4.scp --resetscript RT1170_reset.scp -x .\platform\boards\nxp\mimxrt1170-evk-freertos\cmake

GDB Server is now listening for TCP connections on port, 50032.

Note: To change TCP port used by redlink_server, change --server :50032 to different value.

• Run arm-none-eabi-gdb in a separate console
/path/to/bin/arm-none-eabi-gdb <PATH_TO>/your_app.elf
C:\path\to\bin\arm-none-eabi-gdb.exe <PATH_TO>\your_app.elf
• Connect to the target via the gdbserver in the arm-none-eabi-gdb console using
(gdb) target remote :50032
• Alternatively, flash the target device from the arm-none-eabi-gdb console using the following command:
(gdb) load