Getting Started with the MCIMX8M-EVK

Last Modified: 2022-12-06 13:29:00Supports i.MX 8M Evaluation Kit

1. Out of the Box

The following instructions will guide you on how to boot the preloaded Android image on the i.MX 8M Evaluation Kit.

The development kit contains:

  • i.MX8MQuad EVK board for smart devices
  • USB cable (micro-B to standard-A)
  • Cable -Assembly, USB 3.0 Type-A Male, USB micro-B Male, Shielded, 1 m
  • Cable -Assembly, USB 2.0 Type-A Male, USB-Type C Male, Shielded, 1 m
  • 12 V/5 A universal power supply
  • Quick Start Guide
  • Android BSP flashed into the eMMC

1.1 Get Familiar with the Board

GS-MCIMX8EVK-BOARD

GS-MCIMX8EVK-BOARD

GS-MCIMX8EVK-BOARD-BACK

GS-MCIMX8EVK-BOARD-BACK

1.2 Boot from eMMC

The i.MX8MQuad EVK comes with a pre-built NXP Android binary demo image flashed on the eMMC. Without modifying the binary inside, booting from the eMMC provides a default system with certain features for building other applications on top of Android.

To understand more about NXP’s Embedded Linux®, Embedded Android™, or MCUXpresso SDK, continue reading the next sections.

1.3 Connect USB Debug Cable

Connect the micro-B end of the supplied USB cable into Debug UART port J901. Connect the other end of the cable to a host computer.

If you are not sure about how to use a terminal application, try one of the following tutorials depending on the operating system of the host machine: Minicom Tutorial, Tera Term Tutorial, PuTTY Tutorial.

1.4 Connect the HDMI Cable

To see the user interface provided with the image binary connect a monitor via the HDMI connector (J1001).

1.5 Boot Switch Setup

By default, all the boot switches are configured to zero position. With the SW801 switch on eMMC boot mode, the board boots from the eMMC.

The boot modes of the i.MX boards are controlled by the boot configuration boot switches on the board.

IMX 8M Chip

IMX 8M Chip

The following table lists the boot switch settings (which takes priority in boot process) for booting from the eMMC on the i.MX8MQuad EVK board.

Switch D1 D2 D3 D4
SW801 OFF OFF ON OFF
SW802 ON OFF - -

1.6 Connect Power Supply

Connect the plug of the 12 V power supply to the DC power jack J902. Power on the EVK board by sliding power switch SW701 to ON.

Power the board by flipping the switch (SW701). The processor starts executing from the on-chip ROM code. With the default boot switch setup, the code reads the fuses to define the media where it is expected to have a bootable image. After it finds a bootable image, the U-Boot execution should begin automatically.

Information is printed in the smaller number serial console for the Cortex-A53 (COM9 on Windows as an example and /dev/ttyUSB* on Linux). If you do not stop the U-Boot process, it continues to boot the Linux kernel.

1.7 Android Has Booted

During the boot process, the Android logo appears on the HDMI display. Note that the HDMI output resolution is 1080P fixed — to change it, check the Android Documentation.

The Android UI can be seen after the boot process is finished. You can start operating with the mouse.

2. Embedded Linux®

This section is applicable only if attempting to load a Linux operating system on the board.

The i.MX Linux Board Support Package (BSP) is a collection of binary files, source code, and support files that are used to boot an Embedded Linux image on a specific i.MX development platform.

Current releases of Linux binary demo files can be found in the i.MX Linux download page. The Linux User's Guide  and Linux Reference Manual  provide additional information. Additional documentation can be found in the i.MX Linux documentation bundle, or under the Linux sections on the i.MX Software and Development Tools.

2.1 Overview

Before the Linux OS kernel can boot on an i.MX board, the Linux image is copied to a boot device (SD card, eMMC and so on) and the boot switches are set to boot that device.

There are various ways to download the Linux BSP image for different boards and boot devices.

For this getting started guide, only a few methods to transfer the Linux BSP image to an SD card are listed. Experienced Linux developers can explore other options.

Depending on the OS used in the host machine, the way to transfer the Linux BSP image onto an SD card can vary.

Choose an option below for detailed instructions

3. Embedded Android

This section describes the boot process of loading the i.MX8MQuad EVK board with an Embedded Android system image and introduces how to build the software components that create your own system image. For details on building the Android platform, see the Documentation .

The current release includes Demo Images, Source Code and Documentation. These can also be found under Android section of the i.MX Software and Development Tools.

3.1 Overview

The storage devices on the development system (MMC/SD or NAND) must be programmed with the U-Boot bootloader. The boot process determines which storage device to access based on the switch settings. When the bootloader is loaded and begins execution, the U-Boot environment space is then read to determine how to proceed with the boot process.

The images can come from pre-built release packages or be created from source code. Regardless of how you obtain them, all Android images contain the following components:

  • U-Boot image: u-boot.imx

  • Boot image: boot.img

  • Android system root image: system.img

  • Recovery root image: recovery.img

For more information about the Android BSP refer to the Android User's Guide .

Depending on the OS used in the host machine, the way to transfer the Android BSP image onto an SD card can vary.

Choose an option below for detailed instructions

4. MCUXpresso SDK

The MCUXpresso Software Development Kit (MCUXpresso SDK) provides comprehensive software source code to be executed in the i.MX8MQuad M4 core. If you do not wish to enable the Cortex-M4 on i.MX8MQuad at this moment you can skip this section.

4.1 Overview

The MCUXpresso SDK is designed for the development of embedded applications for Cortex-M4 standalone or collaborative use with the A cores. Along with the peripheral drivers, the MCUXpresso SDK provides an extensive and rich set of example applications covering everything from basic peripheral use case examples to demo applications. The MCUXpresso SDK also contains RTOS kernels, device stack, and various other middleware to support rapid development.

Depending on the OS used in the host machine, the way to build and deploy the demos can vary.

Choose an option below for detailed instructions

Security and Integrity

Security and Integrity

CAAM Module Example

The i.MX 8M SoC includes the Cryptographic Acceleration and Assurance Module (CAAM) module that can be used through CryptoDev in order to accelerate by hardware the encryption and decryption process. Because the CAAM module is on the SoC, the i.MX8M EVK board supports it as well. It is recommended to use this module when working with large amounts of data or in any application where performance is important.

Checking the speed performance

OpenSSL is an open source project that defines the security protocols SSL (Secure Sockets Layer) and TLS (Transport Layer Security). It has a software library that can be used in applications that require a secure information transmission in order to prevent eavesdropping.

OpenSSL includes a speed command that tests the encryption performance for a desired encryption algorithm. For this example, the algorithm used is the aes-128-cbc that implements the Advanced Encryption Standard (AES) encryption algorithm, with a Cipher Block Chaining (CBC) mode of operation and 128 bits block.

The OpenSSL speed test can be seen using the following command:

#openssl speed -evp aes-128-cbc

Doing aes-128-cbc for 3s on 16 size blocks: 43389139 aes-128-cbc's in 2.99s
Doing aes-128-cbc for 3s on 64 size blocks: 28788614 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 256 size blocks: 11766741 aes-128-cbc's in 2.99s
Doing aes-128-cbc for 3s on 1024 size blocks: 3674139 aes-128-cbc's in 2.99s
Doing aes-128-cbc for 3s on 8192 size blocks: 495157 aes-128-cbc's in 3.00s
    
OpenSSL 1.0.2p 14 Aug 2018
built on: reproducible build, date unspecified
options: bn(64,64) rc4(ptr,char) des(idx,cisc,16,int) aes(partial) idea(int) blowfish(ptr)
compiler: arm-poky-linux-gnueabi-gcc -march=armv7ve -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a7 -DL_ENDIAN -DTERMIO -O2 -pipe -g -feliminate-unused-debug-types -Wall -Wa,--noexecstack -DHAVE_CRYPTODEV -DUSE_CRYPTODEV_DIGESTS
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes.
Aes-128-cbc 193627.86k 513839.78k 837089.96k 1048974.64k 1130986.42k

Solution: In the document: "AN12838 Strengthening Public Key Crptography using CAAM Secure Key" section 5.2.1 and 5.2.2. it is described the details of usage.

Wired Communications

Wired Communications

With Linux running on the i.MX board, you can evaluate special features that i.MX SoCs provide. This tutorial shows the step-by-step instructions on how to connect to the Internet on Linux with i.MX 8M EVK:

  1. Connect an Ethernet cable to the board RJ-45 connector
  2. Boot up the board and wait for the Linux prompt
  3. At the Linux prompt, enter the following command
    #Log in: root
    #ifconfig eth0
  4. Ping any site to corroborate functionality
  5. #ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 
    
    64 bytes from 8.8.8.8: icmp_seq=1 ttl=119 time=4.81 ms 64 bytes 
    from 8.8.8.8: icmp_seq=2 ttl=119 time=4.87 ms 64 bytes 
    from 8.8.8.8: icmp_seq=3 ttl=119 time=4.94 ms 64 bytes 
    from 8.8.8.8: icmp_seq=4 ttl=119 time=4.61 ms

Wireless Connectivity

Wireless Connectivity

Power Management

Power Management

The PF4210 is the NXP 14-Channel Power Management IC Optimized for i.MX 8M.

Low Power Mode Suspension Example

With Linux running on the i.MX board, you can evaluate special features that i.MX SoCs provide. This example shows how to suspend to low-power modes and resume to normal operation.

Enter the command below in order to enable serial TTY as a wake up source for the board:

#echo enabled > /sys/class/tty/ttymxc0/power/wakeup

Enter the command below to enter Suspend-To-RAM mode:

#echo mem > /sys/power/state

PM: suspend entry (deep) 
PM: Syncing filesystems ... done. 

Freezing user space processes ... (elapsed 0.001 seconds) done. 
OOM killer disabled. 
Freezing remaining freezable tasks ... (elapsed 0.000 seconds) done. 
    
Suspending console(s) (use no_console_suspend to debug)

Press the SW1701 switch to wake-up the board. The following messages should appear on terminal:

HIFsuspendwow TODO 
PM: suspend devices took 0.112 seconds Disabling non-boot CPUs ... 
CPU1: shutdown 
psci: CPU1 killed. 
CPU2: shutdown 
psci: CPU2 killed. 
CPU3: shutdown 
psci: Retrying again to check for CPU kill 
psci: CPU3 killed. 
Enabling non-boot CPUs ... 
Detected VIPT I-cache on CPU1 
GICv3: CPU1: found redistributor 1 region 0:0x00000000388a0000 
CPU1: Booted secondary processor [410fd034] 
cache: parent cpu1 should not be sleeping CPU1 is up Detected VIPT I-cache on CPU2 
GICv3: CPU2: found redistributor 2 region 0:0x00000000388c0000 
CPU2: Booted secondary processor [410fd034] 
cache: parent cpu2 should not be sleeping CPU2 is up Detected VIPT I-cache on CPU3 
GICv3: CPU3: found redistributor 3 region 0:0x00000000388e0000 
CPU3: Booted secondary processor [410fd034] 
cache: parent cpu3 should not be sleeping 
CPU3 is up 
PM: resume devices took 0.028 seconds 
OOM killer enabled. 
Restarting tasks ... done. 
PM: suspend exit

Audio

Audio

Simple Audio Example

This simple example shows the link between audiotestsrc and alsasink.

Connect your earphone to the Audio Jack on the i.MX 8M EVK board.

If your earphone includes a microphone feature (TRRS with four contacts), do not push the microphone jack to the end. Leave one contact ring outside.

#aplay -1

**** List of PLAYBACK Hardware Devices ****
card 0: imxspdif [imx-spdif], device 0: S/PDIF PCM snd-soc-dummy-dai-0 [S/PDIF PCM snd-soc-dummy-dai-0]
Subdevices: 1/1 
Subdevice #0: subdevice #0 
card 2: wm8524audio [wm8524-audio], device 0: HiFi wm8524-hifi-0 
[] 
Subdevices: 1/1 
Subdevice #0: subdevice #0 
card 2: wm8524audio [wm8524-audio], device 1: HiFi-ASRC-FE (*) 
[] 
Subdevices: 1/1 
Subdevice #0: subdevice #0 

# gst-launch-1.0 audiotestsrc ! alsasink device=plughw:2 
    
Setting pipeline to PAUSED ... 
Pipeline is PREROLLING ... 
Redistribute latency... 
Pipeline is PREROLLED ... 
Setting pipeline to PLAYING ... 

New clock: GetAudioSinkClock

You should be able to listen to a tone on the earphone.

When you are done with the tone, finish the command line by pressing Ctrl+C.

Decoder Video Audio Example

This example explains how to decode just the audio from a video file. Copy a video file to your /home/root/ on your SD card rootfs partition, boot the board from the SD card and run the command below:

#gplay-1.0 SampleVideo_1280x720_2mb.mp4

FSL_GPLAY2_01.00_LINUX build on Mar 12 2018 11:48:19

Set VideoSink kmssink
Set TextSink fakesink ====== AIUR: 4.3.4 build on Mar 12 2018 11:47:35. ======       
Core: AVI_PARSER_03.05.29 build on Aug 31 2017 09:15:57
          
file: /usr/lib/imx-mm/parser/lib_avi_parser_arm_elinux.so.3.1
          
Track 00 [video]: Disabled
          
Codec: 4, SubCodec: 1
          
------------------------
------------------------ Track 01 [audio_0] Enabled
          
Duration: 0:09:56.424000000      
Language: und   
Mime: audio/mpeg, mpegversion=(int)1, channels=(int)2, rate=(int)48000, bitrate=(int)0
codec_data=(buffer)014d401fffe10017674d401fda014016ec0440000003004000000c83c60ca801000468ef3c80
          
------------------------
          
====== BEEP: 4.3.4 build on Mar 12 2018 11:47:45. ======
          
Core: MP3 decoder Wrapper build on Jan 11 2018 10:20:25
         
file: /usr/lib/imx-mm/audio-codec/wrap/lib_mp3d_wrap_arm_elinux.so.3
          
CODEC: BLN_MAD-MMCODECS_MP3D_ARM_02.13.01_ARMV8 build on Jan 11 2018 10:05:45. [Stop (No Repeated)][Vol=1.0][00:00:00/00:09:56]
    
=========== fsl_player_play()=========== 
    
FSL_GPLAY2_01.00_LINUX build on Mar 12 2018 11:48:19
          
[h]display the operation Help       
[p]Play       
[s]Stop      
[e]Seek    
[a]Pause when playing, play when paused  
[v]Volume     
[m]Switch to mute or not     
[>]Play next file
[r]Switch to repeated mode or not   
[u]Select the video track
[d]Select the audio track
[b]Select the subtitle track
[f]Set full screen
[z]resize the width and height
[t]Rotate
[c]Setting play rate
[i]Display the metadata 
[x]exit
          
State changed: buffering   
State changed: playing
          
[Playing (No Repeated)][Vol =1.0][00:00:13/00:00:13]EOS Found
          
getNextItem No next item!   
No more media file, exit gplay!
         
State changed: stopped
          
Exit display thread
          
FSL_PLAYER_UI_MSG_EXIT
          
fsl_player_deinit

Display and Graphics

Display and Graphics

Camera Interfaces

Camera Interfaces

Machine Learning

Machine Learning

Machine learning (ML) typically encompasses applications where classification, recognition and prediction of man-made abstractions are desired. Examples include Image Recognition, Gesture Recognition, Anomaly Detection, Speech-to-Text, Text-to-Speech, ASR, Scene Recognition and many more. This section will focus specifically on the NXP ML tools applied to image or video streams. The audio section may reference the included examples.

Device Management and Secure OTA

Device Management and Secure OTA

Minicom Tutorial

Serial Communication Console Setup

On the command prompt of the Linux host machine, run the following command to determine the port number:

$ls /dev/ttyUSB* 

The smaller number is for Arm® Cortex®-A53 core and the bigger number is for Arm® Cortex®-M4 core.

Minicom

Use the following commands to install and run the serial communication program (minicom as an example):

  1. Install Minicom using Ubuntu package manager
    $sudo apt-get install minicom
  2. Launch Minicom using a console window using the port number determined earlier
    $sudo minicom /dev/ttyUSB* -s
  3. Configure Minicom as shown in Figure 12 GS-MCIMX7SABRE-MINICOM
  4. The next step is to Connect the HDMI cable

Tera Term Tutorial

Serial Communication Console Setup

The FTDI USB-serial chip on i.MX8MQuad enumerates two serial ports. Assume that the ports are COM9 and COM10. The smaller numbered port ( COM9) is for the serial console communication from Arm® Cortex®-A53 and the larger numbered port (COM10) is for Arm® Cortex®-M4 core. The serial-to-USB drivers are available at FTDI Chip Drivers .

Tera Term Tutorial

Tera Term is an open source terminal emulation application. This program displays the information sent from the NXP development platform's virtual serial port.

  1. Download Tera Term . After the download, run the installer and then return to this webpage to continue
  2. Launch TeraTerm. The first time it launches, it shows the following dialog. Select the Serial option. Assuming your board is plugged in, there should be a COM port automatically populated in the list Tera-Term-Connection
  3. Configure the serial port settings (using the COM port number identified earlier) to 115,200 baud rate, 8 data bits, no parity and 1 stop bit. To do this, go to Setup → Serial Port and change the settings
  4. Verify that the connection is open. If connected, Tera Term shows something like below in its title bar Tera-Term-Console
  5. The next step is to Connect the HDMI cable

PuTTY Tutorial

Serial Communication Console Setup

The FTDI USB-serial chip on i.MX8MQuad enumerates two serial ports. Assume that the ports are COM9 and COM10. The smaller numbered port (COM9) is for the serial console communication from Arm® Cortex®-A53 and the larger numbered port (COM10) is for Arm® Cortex®-M4. The serial-to-USB drivers are available at FTD Chip Drivers .

PuTTY Tutorial

PuTTY is a popular terminal-emulation application. This program displays the information sent from the NXP development platform's virtual serial port.

  1. Download PuTTY . After the download, run the installer and then return to this webpage to continue
  2. Launch PuTTY by either double clicking on the executable file you downloaded or from the Start menu, depending on the type of download you selected
  3. Configure in the window that launches. Select the Serial radio button and enter the COM port number that you determined earlier. Also, enter the baud rate, in this case 115,200
  4. PUTTY-Configuration
  5. Click open to open the serial connection. Assuming that the board is connected and you entered the correct COM port, the terminal window will open. If the configuration is not correct, PuTTY will alert you
  6. The next step is to Connect the HDMI cable

Support

Trainings

To learn what to do next, find your issue below. If you still need help, contact NXP Support.

Trainings Description
i.MX 8M Training Full list of on-demand training, how-to videos and webinars from NXP about this product.