iMX8M Industrial Accessing and Testing Peripherals
The initial operations with the iMX8M Industrial Development Kit interfaces are presented on this page. For more specific information such as display options, camera capabilities or industrial modular extensions, refer to the dedicated Peripherals section.
Mandatory components
Hardware
- iMX8M Industrial Module
- iMX8M Development Baseboard
- DC power supply (5V, 8A, 40W)
Peripherals and Accessories
- 1x FullHD HDMI monitor with Audio output (default)
- 1x FullHD DisplayPort monitor with Audio output (optional)
- Wifi and Bluetooth antenna set
- 1x MicroSDHC card Class 10 or higher
Cables
- Ethernet cable
- HDMI cable
- Micro USB cable
- USB to UART cable
- Headphones
Audio
Input: Search kernel log for wm8904 chip
Output: Audio chip is detected and bound as an input device
[ 1.864809] fsl-asoc-card sound-wm8904: failed to find codec device [ 2.155773] wm8904 0-001a: 0-001a supply DCVDD not found, using dummy regulator [ 2.163163] wm8904 0-001a: 0-001a supply DBVDD not found, using dummy regulator [ 2.170561] wm8904 0-001a: 0-001a supply AVDD not found, using dummy regulator [ 2.177846] wm8904 0-001a: 0-001a supply CPVDD not found, using dummy regulator [ 2.185209] wm8904 0-001a: 0-001a supply MICVDD not found, using dummy regulator [ 2.197860] wm8904 0-001a: revision A [ 2.699093] debugfs: Directory '308b0000.sai' with parent 'wm8904-audio' already present! [ 2.707395] fsl-asoc-card sound-wm8904: wm8904-hifi <-> 308b0000.sai mapping ok [ 2.714808] fsl-asoc-card sound-wm8904: ASoC: no DMI vendor name! [ 3.145901] #1: wm8904-audio
Input: Run amixer command
Output: Controls for card are available
root@imx8mq-voipac:~# amixer -c1 Simple mixer control 'Headphone',0 Capabilities: volume pswitch Playback channels: Front Left - Front Right Capture channels: Front Left - Front Right Limits: 0 - 63 Front Left: 46 [73%] [-11.00dB] Playback [on] Front Right: 45 [71%] [-12.00dB] Playback [on] Simple mixer control 'Headphone ZC',0 Capabilities: pswitch Playback channels: Front Left - Front Right Mono: Front Left: Playback [on] Front Right: Playback [on] Simple mixer control 'Line Output',0 Capabilities: volume pswitch Playback channels: Front Left - Front Right Capture channels: Front Left - Front Right Limits: 0 - 63 Front Left: 57 [90%] [0.00dB] Playback [on] Front Right: 57 [90%] [0.00dB] Playback [on] Simple mixer control 'Line Output ZC',0 Capabilities: pswitch Playback channels: Front Left - Front Right Mono: Front Left: Playback [on] Front Right: Playback [on] ...
Input: Boot-up the board with HDMI cable plugged in, connect headphones into HP_OUT connector and plug-in USB flash drive with wav file on it
Output: Sound is played and heard
root@imx8mq-voipac:~# aplay multimedia/sample.wav Playing WAVE 'multimedia/sample.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
root@imx8mq-voipac:~# aplay -D sysdefault:CARD=wm8904audio multimedia/sample.wav Playing WAVE 'multimedia/sample.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
root@imx8mq-voipac:~# aplay -D sysdefault:CARD=imxaudiohdmi multimedia/sample.wav Playing WAVE 'multimedia/sample.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
Input: Plug headphones with microphone input into HP_OUT connector and microphone to MIC
Output: Microphone sound is played in headphones
root@imx8mq-voipac:~# arecord -D sysdefault:CARD=wm8904audio -t wav -f cd | aplay -D sysdefault:CARD=wm8904audio
Input: Verify Digital microphone
Output: Microphone sound is played in headphones
root@imx8mq-voipac:~# amixer -c1 sset "Capture Input" "DMIC" root@imx8mq-voipac:~# arecord -D sysdefault:CARD=wm8904audio -t wav -f cd | aplay -D sysdefault:CARD=wm8904audio
User buttons
Input: Press Enter/Left/Right/Up/Down buttons
Output: Button events 1 and 0 are generated
root@imx8mq-voipac:~# evtest /dev/input/by-path/platform-gpio-buttons-event Input driver version is 1.0.1 Input device ID: bus 0x19 vendor 0x1 product 0x1 version 0x100 Input device name: "gpio-buttons" Supported events: Event type 0 (EV_SYN) Event type 1 (EV_KEY) Event code 28 (KEY_ENTER) Event code 103 (KEY_UP) Event code 105 (KEY_LEFT) Event code 106 (KEY_RIGHT) Event code 108 (KEY_DOWN) Properties: Testing ... (interrupt to exit)
Reset button
Input: Press the RESET button
Output: The board will execute bootloader immediately with "Reset cause: POR"
Note: iMX8M Industrial Development Kit should never freeze or hang after the reset button was pressed. Testing the operation 10 times gives a reliable result
U-Boot 2020.04-imx_v2020.04_5.4.24_2.1.0+g4979a99482 (May 30 2020 - 06:50:01 +0000) CPU: i.MX8MQLite rev2.1 1300 MHz (running at 800 MHz) CPU: Industrial temperature grade (-40C to 105C) at 62C Reset cause: POR Model: Voipac i.MX8MQ EVK DRAM: 2 GiB MMC: FSL_SDHC: 0, FSL_SDHC: 1 Loading Environment from MMC... OK [*]-Video Link 0imx8m_hdmi_probe ....
Power button
Input: Press the POWER button
Output: The board will shutdown. By pressing longer again, the board starts booting.
[ OK ] Stopped target Sound Card. [ OK ] Stopped target System Time Synchronized. [ OK ] Stopped target System Time Set. [ OK ] Stopped target Timers. [ OK ] Stopped Daily Cleanup of Temporary Directories. Stopping Save/Restore Sound Card State... Stopping Kernel Logging Service... Stopping System Logging Service... Stopping Getty on tty1... Stopping Serial Getty on ttymxc0... Stopping Hostname Service... Stopping Load/Save Random Seed... [ OK ] Stopped Kernel Logging Service. [ OK ] Stopped System Logging Service. [ OK ] Stopped Getty on tty1. [ OK ] Stopped Serial Getty on ttymxc0. [ OK ] Stopped Hostname Service. [ OK ] Stopped Save/Restore Sound Card State. [ OK ] Stopped Load/Save Random Seed. [ OK ] Stopped Session c1 of user root. [ OK ] Removed slice system-getty.slice. [ OK ] Removed slice system-serial\x2dgetty.slice. Stopping Login Service... Stopping User Manager for UID 0... [ OK ] Stopped User Manager for UID 0. Stopping User Runtime Directory /run/user/0... [ OK ] Unmounted /run/user/0. [ OK ] Stopped User Runtime Directory /run/user/0. [ OK ] Removed slice User Slice of UID 0. Stopping D-Bus System Message Bus... Stopping Permit User Sessions... [ OK ] Stopped D-Bus System Message Bus. [ OK ] Stopped Login Service. [ OK ] Stopped Permit User Sessions. [ OK ] Stopped target Basic System. [ OK ] Stopped target Network. [ OK ] Stopped target Paths. [ OK ] Stopped Dispatch Password ��…ts to Console Directory Watch. [ OK ] Stopped Forward Password R��…uests to Wall Directory Watch. [ OK ] Stopped target Remote File Systems. [ OK ] Stopped target Slices. [ OK ] Removed slice User and Session Slice. [ OK ] Stopped target Sockets. [ OK ] Closed D-Bus System Message Bus Socket. [ OK ] Closed dropbear.socket. [ OK ] Stopped target System Initialization. [ OK ] Closed Syslog Socket. Stopping Network Name Resolution... Stopping Network Time Synchronization... [ OK ] Stopped Network Name Resolution. [ OK ] Stopped Network Time Synchronization. Stopping Network Service... [ OK ] Stopped Create Volatile Files and Directories. [ OK ] Stopped target Local File Systems. Unmounting Temporary Directory (/tmp)... Unmounting /var/volatile... [ OK ] Stopped Network Service. [ OK ] Unmounted Temporary Directory (/tmp). [ OK ] Unmounted /var/volatile. [ OK ] Stopped target Local File Systems (Pre). [ OK ] Stopped target Swap. [ OK ] Reached target Unmount All Filesystems. [ OK ] Stopped Remount Root and Kernel File Systems. [ OK ] Stopped Apply Kernel Variables. [ OK ] Stopped Load Kernel Modules. [ OK ] Stopped Create Static Device Nodes in /dev. [ OK ] Reached target Shutdown. [ OK ] Reached target Final Step. [ OK ] Started Power-Off. [ OK ] Reached target Power-Off. [ 15.911216] systemd-shutdown[1]: Syncing filesystems and block devices. [ 15.920832] systemd-shutdown[1]: Sending SIGTERM to remaining processes... [ 15.936588] systemd-journald[247]: Received SIGTERM from PID 1 (systemd-shutdow). [ 15.959340] systemd-shutdown[1]: Sending SIGKILL to remaining processes... [ 15.975454] systemd-shutdown[1]: Unmounting file systems. [ 15.982656] [353]: Remounting '/' read-only in with options '(null)'. [ 16.020576] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null) [ 16.031646] systemd-shutdown[1]: All filesystems unmounted. [ 16.037301] systemd-shutdown[1]: Deactivating swaps. [ 16.042421] systemd-shutdown[1]: All swaps deactivated. [ 16.047678] systemd-shutdown[1]: Detaching loop devices. [ 16.055830] systemd-shutdown[1]: All loop devices detached. [ 16.061424] systemd-shutdown[1]: Detaching DM devices. [ 16.066794] systemd-shutdown[1]: All DM devices detached. [ 16.072226] systemd-shutdown[1]: All filesystems, swaps, loop devices and DM devices detached. [ 16.086744] systemd-shutdown[1]: Syncing filesystems and block devices. [ 16.093483] systemd-shutdown[1]: Powering off. [ 16.097961] kvm: exiting hardware virtualization [ 16.097991] imx-sdma 30bd0000.sdma: external firmware not found, using ROM firmware [ 16.098546] cfg80211: failed to load regulatory.db [ 16.101341] imx-sdma 302c0000.sdma: loaded firmware 4.5 [ 16.166426] mwifiex_pcie 0000:01:00.0: info: shutdown mwifiex... [ 16.173169] mwifiex_pcie 0000:01:00.0: PREP_CMD: card is removed [ 16.240963] mwifiex_pcie 0000:01:00.0: performing cancel_work_sync()... [ 16.247595] mwifiex_pcie 0000:01:00.0: cancel_work_sync() done [ 16.288309] reboot: Power down
Then pressing POWER button again:
U-Boot 2020.04-imx_v2020.04_5.4.24_2.1.0+g4979a99482 (May 30 2020 - 06:50:01 +0000) CPU: i.MX8MQLite rev2.1 1300 MHz (running at 800 MHz) CPU: Industrial temperature grade (-40C to 105C) at 62C Reset cause: POR Model: Voipac i.MX8MQ EVK DRAM: 2 GiB MMC: FSL_SDHC: 0, FSL_SDHC: 1 Loading Environment from MMC... OK [*]-Video Link 0imx8m_hdmi_probe ....
CAN
Input: None
Output: Device driver is available
root@imx8mq-voipac:~# ip addr show dev can0 1: can0: <NOARP,ECHO> mtu 16 qdisc noop state DOWN group default qlen 10 link/can
To setup can interface to 500kB bitrate use following command:
ip link set can0 up type can bitrate 500000
To test send data use following command:
cansend can0 365#AA.11.11
To test receiving data use following command:
candump can0
Camera Input
Input: Connect DIGILENT Pcam 5C camera module into CSI-2 interface and check if it is detected on I2C bus
Output: Camera is found
root@imx8mq-voipac:~# dmesg | grep ov56 [ 2.383324] ov5640_mipi 1-003c: No pin available [ 2.387976] ov5640_mipi 1-003c: No sensor pwdn pin available [ 2.393683] ov5640_mipi 1-003c: No sensor reset pin available [ 2.399479] ov5640_regulator_enable: cannot get io voltage error - err:-517 [ 3.018132] ov5640_mipi 1-003c: No pin available [ 3.033972] ov5640_mipi 1-003c: No sensor pwdn pin available [ 3.046488] ov5640_mipi 1-003c: No sensor reset pin available [ 3.062091] ov5640_mipi 1-003c: 1-003c supply DVDD not found, using dummy regulator [ 3.072436] ov5640_mipi 1-003c: 1-003c supply AVDD not found, using dummy regulator [ 4.325257] mxc-mipi-csi2_yav 30b60000.mipi_csi: Registered sensor subdevice: ov5640_mipi 1-003c [ 4.337288] ov5640_mipi 1-003c: Camera is found
Input: Connect DIGILENT Pcam 5C camera module into CSI-2 interface and capture image
Output: The image stored in local media with name sample_image.jpeg
root@imx8mq-voipac:~# gst-launch-1.0 v4l2src num-buffers=1 device=/dev/video1 ! jpegenc ! filesink location=sample_image_digi.jpeg # Updating the printout may be needed here! Setting pipeline to PAUSED ... Pipeline is live and does not need PREROLL ... Setting pipeline to PLAYING ... New clock: GstSystemClock [ 59.069241] ov5640_mipi 1-003c: s_stream: 1 [ 59.759767] skip frame 1 Got EOS from element "pipeline0".[ 61.733964] ov5640_mipi 1-003c: s_stream: 0 Execution ended after 0:00:03.186379448 Setting pipeline to PAUSED ... Setting pipeline to READY ... Setting pipeline to NULL ... Freeing pipeline ...
Input: Connect DIGILENT Pcam 5C camera module into CSI-2 interface and capture video
Output: The image displayed on display/monitor
root@imx8mq-voipac:~# GST_DEBUG=GST_BUFFER:5 gst-launch-1.0 v4l2src device=/dev/video1 ! 'video/x-raw,framerate=30/1' ! autovideosink # Updating the printout may be needed here! Setting pipeline to PAUSED ... Pipeline is live and does not need PREROLL ... Setting pipeline to PLAYING ... New clock: GstSystemClock 0:00:00.787577440 510 0xaaab09d54800 DEBUG GST_BUFFER gstbuffer.c:2279:gst_buffer_add_meta: alloc metadat a 0xaaab09db63c0 (GstVideoMeta) of size 112 0:00:00.787728994 510 0xaaab09d54800 DEBUG GST_BUFFER gstbuffer.c:2279:gst_buffer_add_meta: alloc metadat a 0xaaab09db6440 (GstVideoMeta) of size 112 0:00:00.787782512 510 0xaaab09d54800 4116.266441] ov5640_mipi 1-003c: s_stream: 1 mDEBUG GST_BUFFER gstbuffer.c:2279:gst_buffer_add_meta: alloc metadata 0xaaab09db64c0 (GstVideoMeta) of siz e 112 0:00:00.787833750 510 0xaaab09d54800 DEBUG GST_BUFFER gstbuffer.c:2279:gst_buffer_add_meta: alloc metadat a 0xaaab09db6540 (GstVideoMeta) of size 112 [ 4116.843975] skip frame 1
Video should be displayed on video output (hdmi or lvds display)
Ethernet
Input: None
Output: Device driver is available
Note: MAC address should be identical with the address on the sticker placed on the board
root@imx8mq-voipac:~# ip addr show dev eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0d:15:01:50:92 brd ff:ff:ff:ff:ff:ff inet 192.168.10.122/24 brd 192.168.10.255 scope global dynamic eth0 valid_lft 86103sec preferred_lft 86103sec inet6 fe80::20d:15ff:fe01:5092/64 scope link valid_lft forever preferred_lft forever
Input: Plug Ethernet cable into connector
Output: IPv4 address is assigned
[ 348.300585] fec 30be0000.ethernet eth0: Link is Down [ 350.350853] fec 30be0000.ethernet eth0: Link is Up - 100Mbps/Full - flow control off
HDMI Output
Input: Connect LCD monitor to the development kit
Output: Desktop UI is displayed correctly
DisplayPort Output
NOTE: A different boot file image and/or device tree is required!
Input: Connect LCD monitor with DisplayPort to the development kit
Output: Desktop UI is displayed correctly
User LED
Input: None
Output: Script switches User LED on baseboard ON and OFF in one second intervals
root@imx8mq-voipac:~# for LED in /sys/class/leds/user do echo Testing ${LED} echo -n "1" > ${LED}/brightness sleep 1 echo -n "0" > ${LED}/brightness sleep 1 done
Input: None
Output: User LED on baseboard is set to heartbeat blinking sequence
root@imx8mq-voipac:~# echo heartbeat > /sys/class/leds/user/trigger
Input: None
Output: User LED on SOM is set to heartbeat blinking sequence
root@imx8mq-voipac:~# echo heartbeat > /sys/class/leds/user-som/trigger
Wifi
Input: None
Output: Device driver is available
root@imx8mq-voipac:~# dmesg | grep mwifiex [ 5.145232] mwifiex_pcie 0000:01:00.0: enabling device (0000 -> 0002) [ 5.166217] mwifiex_pcie: PCI memory map Virt0: (____ptrval____) PCI memory map Virt2: (____ptrval____) [ 6.133666] mwifiex_pcie 0000:01:00.0: info: FW download over, size 632240 bytes [ 7.004061] mwifiex_pcie 0000:01:00.0: WLAN FW is active [ 7.049670] mwifiex_pcie 0000:01:00.0: Unknown api_id: 3 [ 7.055024] mwifiex_pcie 0000:01:00.0: Unknown api_id: 4 [ 7.060385] mwifiex_pcie 0000:01:00.0: Unknown GET_HW_SPEC TLV type: 0x217 [ 7.075700] mwifiex_pcie 0000:01:00.0: info: MWIFIEX VERSION: mwifiex 1.0 (16.68.1.p179) [ 7.080505] mwifiex_pcie 0000:01:00.0 wlp1s0: renamed from mlan0 [ 7.083959] mwifiex_pcie 0000:01:00.0: driver_version = mwifiex 1.0 (16.68.1.p179)
Chek if interface is present
root@imx8mq-voipac:~# ip addr show dev wlp1s0 3: wlp1s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 78:c4:0e:a0:32:16 brd ff:ff:ff:ff:ff:ff
Check connection
NOTE: Consider adding command to screen all the available WiFi networks.
- edit in /etc/wpa_supplicant.conf ssid and passphrase fields
NOTE: Describe the network string a bit in detail so that costumers can adjust it easier.
root@imx8mq-voipac:~# cat /etc/wpa_supplicant.conf ctrl_interface=/var/run/wpa_supplicant ctrl_interface_group=0 update_config=1 network={ ssid="AAA" scan_ssid=1 key_mgmt=WPA-PSK psk="BBB" }
- start wpa_supplicant
root@imx8mq-voipac:~# wpa_supplicant -i wlp1s0 -c/etc/wpa_supplicant.conf & root@imx8mq-voipac:~# Successfully initialized wpa_supplicant rfkill: Cannot open RFKILL control device wlp1s0: Trying to associate with 40:a5:ef:c0:70:62 (SSID='CPE_C0[ 188.254851] mwifiex_pcie 0000:01:00.0: info: trying to associate to 'CPE_C07061' bssid 40:a5:ef:c0:70:62 7061' freq=2462 MHz) [ 188.334475] mwifiex_pcie 0000:01:00.0: info: associated to bssid 40:a5:ef:c0:70:62 successfully wlp1s0: Associated with 40:a5:ef:c0:70:62 wlp1s0: CTRL-EVENT-SUBNET-STATUS-UPDATE status=0 [ 188.351598] IPv6: ADDRCONF(NETDEV_CHANGE): wlp1s0: link becomes ready wlp1s0: WPA: Key negotiation completed with 40:a5:ef:c0:70:62 [PTK=CCMP GTK=CCMP] wlp1s0: CTRL-EVENT-CONNECTED - Connection to 40:a5:ef:c0:70:62 completed [id=0 id_str=]
- run udhcpc
udhcpc -i wlp1s0
Bluetooth
Input: None
Output: Remote device is recognized after scan
# attach module root@imx8mq-voipac:~# hciattach /dev/ttymxc2 any 115200 flow [ 63.137693] Bluetooth: HCI UART driver ver 2.3 [ 63.142196] Bluetooth: HCI UART protocol H4 registered [ 63.147407] Bluetooth: HCI UART protocol BCSP registered [ 63.153061] Bluetooth: HCI UART protocol LL registered [ 63.158263] Bluetooth: HCI UART protocol ATH3K registered [ 63.163719] Bluetooth: HCI UART protocol Three-wire (H5) registered [ 63.170309] Bluetooth: HCI UART protocol Broadcom registered [ 63.176113] Bluetooth: HCI UART protocol QCA registered Device setup complete # put hci0 device up root@imx8mq-voipac:~# hciconfig hci0 up # scan for remote bluetooth devices (enable bluetooth on phone and make it discoverable) root@imx8mq-voipac:~# hcitool scan Scanning ... Devices: hci0 00:0D:18:01:5A:B3
SATA
NOTE: Add descriptions / pictures / visual guide how to connect the card to the board. Do not forget to mention requirement of additional power signals are required to be connected from one of the baseboard headers to the card.
Input: Plug sata disk to M2 extension board and power on
Output: Sata device is recognized
root@imx8mq-voipac:~# ls -la /dev/sda brw-rw---- 1 root disk 8, 0 Feb 22 07:13 /dev/sda # run speed test - write root@imx8mq-voipac:~# time dd if=/dev/urandom of=/dev/sdb bs=4096 status=progress count=200000 #NOTE: "of=/dev/sdb" is correct? + Consider using a printout from testing a better SATA disk - higher speeds were achieved. 812093440 bytes (812 MB, 774 MiB) copied, 29 s, 28.0 MB/s 200000+0 records in 200000+0 records out 819200000 bytes (819 MB, 781 MiB) copied, 34.1491 s, 24.0 MB/s real 0m 34.15s user 0m 0.30s sys 0m 12.74s # run speed test - read root@imx8mq-voipac:~# time dd if=/dev/sdb of=/tmp/test.bin bs=4096 status=progress count=100000 #NOTE: "if=/dev/sdb" is correct? + Consider using a printout from testing a better SATA disk - higher speeds were achieved. 364503040 bytes (365 MB, 348 MiB) copied, 4 s, 91.1 MB/s 100000+0 records in 100000+0 records out 409600000 bytes (410 MB, 391 MiB) copied, 4.5828 s, 89.4 MB/s real 0m 4.79s user 0m 0.06s sys 0m 2.15s
We achieved aw write speed ~ 24MB/s and read speed ~90MB/s