NXP i.MX RT1170 High End Processor Evaluation Kit - Review

Table of contents

RoadTest: NXP i.MX RT1170 High End Processor Evaluation Kit

Author: cledic

Creation date:

Evaluation Type: Test Equipment

Did you receive all parts the manufacturer stated would be included in the package?: True

What other parts do you consider comparable to this product?:

What were the biggest problems encountered?:

Detailed Review:

The RT1170 processor blends a high computational speed with a considerable graphic equipment, allowing it to be used in environments where small embedded Linux systems often dominate.


  A Cortex M7 running at the speed of 1GHz and the presence of a Cortex M4 to accomplish deterministic tasks, put this MCU to be used in many scenario. From real-time DSP analisys to industrial panel.

The RT1170 MCU can be used to develop a panel, with a rich graphical HMIs. If we need to view data read by an MQTT server, we can use some graphics engines capable of providing the user with a "smartphone experience". As well as, if we need to visualize complex audio processing, we can delegate the MCU Cortex M4 to the data acquisition task and the M7 core to the processing and visualization task.


  In my experience, I have had customers who have chosen to use embedded linux in order to have a sufficient graphic interface and connectivity, using both wifi or ethernet. For sure I will propose to them to see some demos with this new MCU. The advantage, in using a device programmed in bare-metal or with RTOS, compared to a device with an operating system, is in the possibility of inserting it in a cycle of use where the power failure or the possibility that the user switches on and off the device does not compromise the stability of the device. Or more briefly: they do not compromise its operating system with data corruptions.


  Another field I work in is in the development of software for embedded devices that record ultrasound. In this case, this MCU would allow me to tackle a project in which I can have the possibility of sampling the signal and storing it on SDCard, as a task to be performed on the Cortex M4, and also being able to run a task on the Cortex M7 that show the signal samples or the spectrum of what it is acquired. Furthermore I would have the possibility to develop an excellent graphic interface with tabs dedicated to the graphic part and to the configuration part. With the ability to use widgets with date and time keeper, to implement quickly the GUI for a screen dedicated to program an autonomous recorder.


  A rapidly expanding field is also the image analysis with ML systems. A bare-metal or RTOS system, in which the processing is directly on the image with no way to store anything, on any medium or on temporary files, may be welcome in those environments where privacy is a fundamental aspect. For example in a project for a people counter device, to be used on a waiting room in a hospital, or in any other public place; using a powerful device such as the RT1170, would give the guarantee that in no way the images, and therefore sensitive data, could be saved, even temporarily, in the device itself: once the power is removed, everything disappears.



.: MCUXpresso :.

  The development system I use is the ARM Keil, but in this case I had two good reasons not to use it: the first is that my Keil license arrives at version 5.31 while to open RT1170 projects you have to use 5.33; and second that for this Roadtest it was better to use the MCUXpress with its integrated environment!

  The development environment of MCUXpresso is based on Eclipse, but has additional tools that easily allow the passage from the development phase to the configuration of peripherals and pins. It also has additional tools to speed up the compilation and debug phases. As I said, it was my "first time" in using MCUXpresso and among the things that I found comfortable there was the "Welcome" page that you can find at the first start. From here I was able to quickly download and install the demo board SDK. Also from this point it is then possible to switch to the actual IDE.

  Inside the IDE, located at the bottom left, a "Quickstart Panel" will be positioned from which it will be possible to: import or create a new project, import an example from the SDK, or import one or more projects from the filesystem. Following in this Panel there is the "Build your Project" section to build or clean the project, the section for debugging "Debug your Project" and a "Miscellaneus" section. I found this "Quickstart Panel" very useful because, for me who was new to MCUXpresso, it concentrated the most important functionalities in a single point.

  For a developer like me, starting with a sample project is often critical to understanding the settings of the most important peripherals. They also allow you to develop, often and willingly, a demo close to the customer's needs, and therefore in addition to being able to show something to the customer, you are able to really try if you are within the specifications required by the project. Fortunately, NXP provides a wide variety of examples; they relate both to the use of single peripherals and, in a more complex way, to specific activities using complex peripherals, such as USB and Ethernet. These examples are divided by single MCU: Cortex M4 or M7 and whether they are written in "bare-metal" (bm) or RTOS. There are also specific projects to work with both MCUs at the same time. These examples are important because they allow you to have a working basis both for software development and for setting up the MCUXpresso IDE: compiler and debugger.



.: Software Demo :.

  I have prepared two projects with which I could test the features I am interested in. The first project uses only the Cortex M7 core and comes from the example of use of the SAI interface. The second project is based on an example of using the two cores and is developed in bare-metal, to which I added the demo of the LVGL library.


  - The "evkmimxrt1170_sai_cm7" project uses the same skeleton as the example, but I added two simple Digital Signal Processing tasks: the calculation of two Biquad filters by processing a signal generated with Octave and made available as an "include file", and the generation of some waveforms using iFFT. The two files with the two processing are: "playbackFilterWave.c" and "playbackSyntWave.c". In the code I have foreseen the dump of the processed samples, so that they can be collected and saved in log files, to be then displayed with Octave GUI.



The console output show that the execution time for the two filter, option 3, is circa 0.4us. The filter chain is feeded by a sample per time. In this case the wave data I used was stored as an header file, generated by an Octave script. Using option 4, an iFFT is used to genererate different wave, you can change the frequency of the signal modifiing the source code. The execution time for the 2048 bins iFFT is 1ms.


  - Inside the folder "evkmimxrt1170_hello_world" there are the two folders of the project for the use of both MCUs, which in MCUExpresso appear as "Master" the M7 and "Slave" the M4. Compared to the original project, I also changed the arrangement of these folders in the filesystem, this to make the "common" folder accessible from both projects. Inside this folder there is the "shared_mem.h" file that has the configuration of the shared memory. This file is included by both MCUs. This memory area is used to pass information between the two core. I developed this project starting from the example available in the "multicore_examples" section called "hello_world_cm7". To this project, for the part concerning the CM7 core, I added the software components of the "littlevgl_demo_widgets_bm_cm7" example contained in the "littlevgl_example" section. While for the CM4 core I have inserted a part of the "sai_cm4" example under the "demo_apps" section. In doing so I was able to program the M4 core for Audio acquisition using the SAI, while the M7 core runs a simple GUI based on the LVGL demo. The M4 core makes the received samples available through the shared memory. The M7 core reads the samples and displays them as a waveform and spectrum in two graphs.






Inside the "Property:C/C++ Build:MCU setting" I create the shared memory area used by both core: "rpmsg_sh_mem".



Folder tree inside workspace for dual core project.


  - I also prepared another project, making the merge between a demo program for the use of the "frame buffer" and one for the use of the touch screen. My program is based on the software described in the "Lode's Computer Graphics Tutorial" site for Ray Casting. To bring the image in the "landscape" format I used this transposition of the coordinates:

* (uint16_t *) (buffer + ((y + ((w-1-x) * h)) * 2)) = color16b;


Unfortunately the result is not correct, I will have to review it to correct the rendering of the sky and the floor.





.: Github :.

   The source code is here!



.: A summary from the NXP site :.

i.MX RT1170 Crossover MCU - First GHz MCU with Arm® Cortex®-M7 and Cortex-M4 Cores

From the NXP site [1]: "i.MX RT1170 crossover MCUs are part of the EdgeVerse™ edge computing platform and are setting speed records at 1 GHz. This ground-breaking family combines superior computing power and multiple media capabilities with ease of use and real-time functionality. The dual core i.MX RT1170 MCU runs on the Arm® Cortex®-M7 core at 1 GHz and Arm Cortex-M4 at 400 MHz, while providing best-in-class security. "


  - Features:

    * 6468 CoreMark with Cortex-M7 @ 1 GHz + Arm Cortex-M4 @ 400 MHz

    * 2 MB SRAM with 512 KB of TCM for Cortex-M7 and 256 KB of TCM for Cortex-M4

    * Advanced security, including secure boot and crypto engines, and is part of the EdgeLock® Assurance program

    * 2 x Gb ENET with AVB and TSN

    * 2D GPU


    * ram, flash, velocità processori

    * 6x SPI, 6x I2C , 12x UART

    * Two USB 2.0 OTG controllers with integrated PHY interfaces

    * SD/SDIO 3.0 compliance with 200 MHz SDR signaling to support up to 100 MB/sec

    * Supported by MCUXpresso suite of software and tools


- Useful Information:

  - An introduction to the development of the RT1170 MCU divided into three different videos divided by themes. Thanks to ARROW and in particular to Steve Mitchell and Mark Dunnett for this material.

  - A Get Started with the i.MX RT1170 in three part. Very useful the part with the debugging example and how compile and debug dual core program.

  - The evaluation kit web page

  - i.MX RT1170 Processor ReferenceManual

  - i.MX RT1170 Processor Data Sheet

  - i.MX RT1170 Processor Developer Tools


.: Many Thanks :.

- It's time to thank Randall Scasny who allowed me to participate in this Roadtest. Also I would like to thank Steve Mitchell and Mark Dunnett for the three introductory and hands-on videos. They were very important to me to get started smoothly in using MCUXpresso IDE.