C
NXP i.MX RT1170 (MIMXRT1170-EVKB) 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 the USE_MIPI_PANEL
definition in platform/boards/nxp/mimxrt1170-evkb-freertos/platform_config.h.in
under Qt Quick Ultralite install directory to MIPI_PANEL_RK055AHD091
and recompile the 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
andz
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. - A maximum number of 8 layers can be created.
- 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 propagatesopacity
andenabled
properties to them. The SpriteLayer'swidth
,height
, andz
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 ImageFiles.MCU.resourceOptimizeForRotation 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 MCU.Config.fontVectorOutlinesDrawing QmlProject 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-evkb-freertos/cmake/coreLibrary.cmake
Performance consideration
For the best performance it's recommended to configure MCU.Config.fontCacheSize.
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.
Reading debug messages
By default, the output of qul_printf and Qul::PlatformInterface::log 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-EVKB, 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 evkbmimxrt1170_connect_cm4_cm7side.jlinkscript
- Run
arm-none-eabi-gdb
in a separate consolec:\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.
Debugging via DAP-Link
Note: This method requires MCUXpresso IDE v11.8.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/LinkServer/binaries/crt_emu_cm_redlink
set REDLINK=%MCUXPRESSO_IDE_PATH%\ide\LinkServer\binaries\crt_emu_cm_redlink
Where, MCUXPRESSO_IDE_PATH
is an environment variable pointing to the MCUXpresso IDE installation directory.
Note: In MCUXpresso IDE versions 11.8 and older the crt_emu_cm_redlink binary is installed to the IDE itself and can be accessed from <MCUXPRESSO_IDE_PATH>/ide/binaries/crt_emu_cm_redlink
.
- 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-evkb-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
Available under certain Qt licenses.
Find out more.