Difference between revisions of "iMX6 OpenRex Basic Accessing and Testing Peripherals"

From Voipac Wiki
Jump to navigation Jump to search
Line 323: Line 323:
 
== HDMI Output ==
 
== HDMI Output ==
 
'''''Input:''''' Connect LCD monitor to the SBC<br />
 
'''''Input:''''' Connect LCD monitor to the SBC<br />
'''''Output:''''' Desktop UI is correctly displayed<br />
+
'''''Output:''''' Desktop UI is displayed correctly<br />
 
[[image:iMX6_TinyRex_Development_kit-HDMI_terminal.jpg|600px]]
 
[[image:iMX6_TinyRex_Development_kit-HDMI_terminal.jpg|600px]]
  

Revision as of 00:33, 22 April 2021

Elemental operations of iMX6 OpenRex Single Board Computer interfaces in Basic configuration are shown on this page.

Prerequisites

Hardware

  • DC power supply (5V, 4A)
  • iMX6 OpenRex SBC Basic

Peripherals and Accessories

  • 1x FullHD monitor with Audio output
  • 1x MicroSD card
  • 1x MiniPCIe WiFi card
  • 1x MiniPCIe 3G card
  • 1x RPi camera module
  • 2x USB FLASH drive
  • 1x Infrared remote

Cables

  • Ethernet cable
  • HDMI cable
  • Micro USB cable
  • USB to UART cable
  • Headphones

Audio

Input: Search kernel log for SGTL5000 chip
Output: Audio chip is detected and bound as an input device

root@imx6-openrexbasic:~# dmesg | grep -i sgtl5000
sgtl5000 1-000a: sgtl5000 revision 0x11
sgtl5000 1-000a: Using internal LDO instead of VDDD
imx-sgtl5000 sound-sgtl5000: sgtl5000 <-> 2028000.ssi mapping ok
  #0: imx-audio-sgtl5000

Input: Run alsamixer command
Output: Card imx-audio-sgtl5000 is available

root@imx6-openrexbasic:~# alsamixer
lqqqqqqqqqqqqqqqqqqqqqqqqqqqqq AlsaMixer v1.0.29 qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk
x Card: imx-audio-sgtl5000                             F1:  Help               x
x Chip:                                                F2:  System information x
x View: F3:[Playback] F4: Capture  F5: All             F6:  Select sound card  x
x Item: Headphone [dB gain: -19.00, -20.00]            Esc: Exit               x
x                                                                              x
x     lqqk                       lqqk     lqqk                                 x
x     x  x                       x  x     x  x                                 x
x     x  x                       x  x     x  x                                 x
x     x  x                       x  x     x  x                                 x
x     x  x                       xaax     x  x                                 x
x     x  x                       xaax     x  x                                 x
x     x  x                       xaax     x  x                                 x
x     x  x                       xaax     x  x                                 x
x     x  x                       xaax     x  x                                 x
x     xa x                       xaax     x  x                                 x
x     xaax                       xaax     x  x                                 x
x     xaax                       xaax     x  x                                 x
x     mqqj     DAC      lqqk     mqqj     mqqj     lqqk    MIC_IN    lqqk      x
x                       xOOx                       xMMx              xOOx      x
x                       mqqj                       mqqj              mqqj      x
x    24<>23                     75<>75     0                                   x
x  <Headphon>Headphon Headphon   PCM      Mic    Capture  Capture  Capture     x
mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj

Input: Boot-up the board with HDMI cable plugged in, connect headphones into HP_OUT connector and plug-in USB flash drive with MP3 file on it
Output: Sound is played and heard

root@imx6-openrexbasic:~# aplay multimedia/sample.wav
Playing WAVE 'multimedia/sample.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
root@imx6-openrexbasic:~# #aplay -D sysdefault:CARD=imxaudiosgtl500 multimedia/sample.wav 
root@imx6-openrexbasic:~# aplay -D sysdefault:CARD=sgtl5000audio multimedia/sample.wav
Playing WAVE 'multimedia/sample.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
root@imx6-openrexbasic:~# aplay -D sysdefault:CARD=imxhdmisoc 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
Output: Microphone sound is played in headphones

root@imx6-openrexbasic:~# #arecord -D sysdefault:CARD=imxaudiosgtl500 -t wav -f cd | aplay -D sysdefault:CARD=imxaudiosgtl500
root@imx6-openrexbasic:~# arecord -D sysdefault:CARD=sgtl5000audio -t wav -f cd | aplay -D sysdefault:CARD=sgtl5000audio

Input: Plug headphones with microphone input into HP_OUT connector
Output: Sound is recorded and played afterwards

root@imx6-openrexbasic:~# #arecord -D sysdefault:CARD=imxaudiosgtl500 -t wav -f cd -d 10 multimedia/recorded.wav
root@imx6-openrexbasic:~# arecord -D sysdefault:CARD=sgtl5000audio -t wav -f cd -d 10 multimedia/recorded.wav 
Recording WAVE 'multimedia/recorded.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
root@imx6-openrexbasic:~# #aplay -D sysdefault:CARD=imxaudiosgtl500 multimedia/recorded.wav
root@imx6-openrexbasic:~# aplay -D sysdefault:CARD=sgtl5000audio multimedia/recorded.wav
Playing WAVE 'multimedia/recorded.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo

User button

Input: Press Home/Back-/Menu+ buttons
Output: Button events 1 and 0 are generated

root@imx6-openrexbasic:~# evtest /dev/input/by-path/platform-gpio-keys*-event
Input driver version is 1.0.1
Input device ID: bus 0x19 vendor 0x1 product 0x1 version 0x100
Input device name: "gpio-keys"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 102 (KEY_HOME)
    Event code 139 (KEY_MENU)
    Event code 158 (KEY_BACK)
Properties:
Testing ... (interrupt to exit)
Event: time 1473952105.010541, type 1 (EV_KEY), code 102 (KEY_HOME), value 1
Event: time 1473952105.010541, -------------- SYN_REPORT ------------
Event: time 1473952105.140569, type 1 (EV_KEY), code 102 (KEY_HOME), value 0
Event: time 1473952105.140569, -------------- SYN_REPORT ------------
Event: time 1473952106.320588, type 1 (EV_KEY), code 158 (KEY_BACK), value 1
Event: time 1473952106.320588, -------------- SYN_REPORT ------------
Event: time 1473952106.440540, type 1 (EV_KEY), code 158 (KEY_BACK), value 0
Event: time 1473952106.440540, -------------- SYN_REPORT ------------
Event: time 1473952109.630544, type 1 (EV_KEY), code 139 (KEY_MENU), value 1
Event: time 1473952109.630544, -------------- SYN_REPORT ------------
Event: time 1473952109.760589, type 1 (EV_KEY), code 139 (KEY_MENU), value 0
Event: time 1473952109.760589, -------------- SYN_REPORT ------------

Alternative test

Input: Press Home/Back-/Menu+ buttons
Output: Button events 1 and 0 are generated

root@imx6-openrexbasic:~# hexdump -C /dev/input/by-path/platform-gpio-keys-event
00000000  ef e7 da 57 ca 8e 0a 00  01 00 66 00 01 00 00 00  |...W......f.....|
00000010  ef e7 da 57 ca 8e 0a 00  00 00 00 00 00 00 00 00  |...W............|
00000020  ef e7 da 57 9f b1 0c 00  01 00 66 00 00 00 00 00  |...W......f.....|
00000030  ef e7 da 57 9f b1 0c 00  00 00 00 00 00 00 00 00  |...W............|
00000040  f0 e7 da 57 28 70 06 00  01 00 9e 00 01 00 00 00  |...W(p..........|
00000050  f0 e7 da 57 28 70 06 00  00 00 00 00 00 00 00 00  |...W(p..........|
00000060  f0 e7 da 57 18 93 08 00  01 00 9e 00 00 00 00 00  |...W............|
00000070  f0 e7 da 57 18 93 08 00  00 00 00 00 00 00 00 00  |...W............|
00000080  f1 e7 da 57 69 78 02 00  01 00 8b 00 01 00 00 00  |...Wix..........|
00000090  f1 e7 da 57 69 78 02 00  00 00 00 00 00 00 00 00  |...Wix..........|
000000a0  f1 e7 da 57 68 9b 04 00  01 00 8b 00 00 00 00 00  |...Wh...........|
000000b0  f1 e7 da 57 68 9b 04 00  00 00 00 00 00 00 00 00  |...Wh...........|

Reset button

Input: Press the RESET button
Output: The board will execute bootloader immediately with "Reset cause: POR"
Note: iMX6 OpenRex SBC should never freeze or hang after the reset button was pressed. Testing the operation 10 times gives a reliable result

U-Boot 2015.10+fslc+g7d8ddd7 (Dec 15 2016 - 18:52:24 +0100)

CPU:   Freescale i.MX6QUAD rev1.1 996 MHz (running at 792 MHz)
CPU:   Extended Commercial temperature grade (-20C to 105C) at 44C
Reset cause: POR
Board: iMX6-OpenRex
I2C:   ready
DRAM:  512 MiB
MMC:   FSL_SDHC: 0
SF: Detected SST26VF032B with page size 256 Bytes, erase size 4 KiB, total 4 MiB
In:    serial
Out:   serial
Err:   serial
Net:   FEC [PRIME]
Hit any key to stop autoboot:  0 
OpenRex U-Boot>

CAN

Input: None
Output: Device driver is available

root@imx6-openrexbasic:~# ip addr show dev can0
2: can0: <NOARP,ECHO> mtu 16 qdisc noop state DOWN group default qlen 10
    link/can 
root@imx6-openrexbasic:~# ip addr show dev can1
3: can1: <NOARP,ECHO> mtu 16 qdisc noop state DOWN group default qlen 10
    link/can

Camera Input

Input: Connect RPi camera module into CSI interface and check if it is detected on I2C bus
Output: I2C address 0x36 is occupied and under use
Note: HDMI monitor may cause I2C communication issues

root@imx6-openrexbasic:~# i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- UU -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- UU -- -- -- -- -- -- -- -- -- 
40: UU -- -- -- -- -- -- -- UU -- -- -- -- -- -- -- 
50: UU -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --

Input: Connect RPi camera into CSI interface and check kernel modules
Output: Device driver ov5647_camera_mipi_int(or ov5647_camera_mipi) is loaded

root@imx6-openrexbasic:~# lsmod
Module                  Size  Used by
mxc_v4l2_capture       27362  1
ipu_bg_overlay_sdc      5230  1 mxc_v4l2_capture
ipu_still               2304  1 mxc_v4l2_capture
ipu_prp_enc             5864  1 mxc_v4l2_capture
ipu_csi_enc             3807  1 mxc_v4l2_capture
ipu_fg_overlay_sdc      6056  1 mxc_v4l2_capture
lm75                    4768  0
sht21                   2126  0
ov5647_camera_mipi_int    30415  0
v4l2_int_device         2897  3 ov5647_camera_mipi_int,ipu_csi_enc,mxc_v4l2_capture
at24                    5488  0
fxas2100x               6680  0
fxos8700                9014  0
mxc_dcic                6536  0
iwl4965                88394  0
iwlegacy               62850  1 iwl4965
galcore               226429  2

Input: Connect RPi camera module into CSI interface and capture image
Output: The image is displayed on HDMI monitor

root@imx6-openrexbasic:~# echo 2 > /sys/bus/i2c/devices/1-0036/ov5647_mode 
root@imx6-openrexbasic:~# gst-launch-1.0 v4l2src device="/dev/video0" ! video/x-bayer,width=1920,height=1080,framerate=30/1 ! queue ! bayer2rgb ! videoconvert ! fbdevsink
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
ERROR: v4l2 capture: unsupported ioctrl!
ERROR: v4l2 capture: unsupported ioctrl!
WARNING: from element /GstPipeline:pipeline0/GstFBDEVSink:fbdevsink0: A lot of buffers are being dropped.
Additional debug info:
/home/marek/workdir/imx6/yocto/fsl-release-bsp-4.1/build-x11/tmp/work/cortexa9hf-vfp-neon-poky-linux-gnueabi/gstreamer1.0/1.6.0-r0/gstreamer-1.6.0/libs/gst/base/gstbasesink.c(2846): gst_base_sink_is_too_la:
There may be a timestamping problem, or this computer is too slow.
mxc_hdmi 20e0000.hdmi_video: Read EDID again
mxc_hdmi 20e0000.hdmi_video: create default modelist
EVENT plugin
WARNING: from element /GstPipeline:pipeline0/GstFBDEVSink:fbdevsink0: A lot of buffers are being dropped.
Additional debug info:
/home/marek/workdir/imx6/yocto/fsl-release-bsp-4.1/build-x11/tmp/work/cortexa9hf-vfp-neon-poky-linux-gnueabi/gstreamer1.0/1.6.0-r0/gstreamer-1.6.0/libs/gst/base/gstbasesink.c(2846): gst_base_sink_is_too_la:
There may be a timestamping problem, or this computer is too slow.
^Chandling interrupt.
Interrupt: Stopping pipeline ...
Execution ended after 0:00:27.103901670
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...
power_down_callback: ipu0/csi1

Alternative test

Input: Connect RPi camera module into CSI interface and capture image
Output: The image is displayed on HDMI monitor

root@imx6-openrexbasic:~# echo 1 > /sys/bus/i2c/devices/1-0036/ov5647_mode
root@imx6-openrexbasic:~# gst-launch-1.0 v4l2src device="/dev/video0" ! video/x-bayer,width=1280,height=720,framerate=30/1 ! queue ! bayer2rgb ! videoconvert ! fbdevsink
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
ERROR: v4l2 capture: unsupported ioctrl!
ERROR: v4l2 capture: unsupported ioctrl!
WARNING: from element /GstPipeline:pipeline0/GstFBDEVSink:fbdevsink0: A lot of buffers are being dropped.
Additional debug info:
/home/marek/workdir/imx6/yocto/fsl-release-bsp-4.1/build-x11/tmp/work/cortexa9hf-vfp-neon-poky-linux-gnueabi/gstreamer1.0/1.6.0-r0/gstreamer-1.6.0/libs/gst/base/gstbasesink.c(2846): gst_base_sink_is_too_la:
There may be a timestamping problem, or this computer is too slow.
^Chandling interrupt.
Interrupt: Stopping pipeline ...
Execution ended after 0:00:06.514209667
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...
root@imx6-openrexbasic:~# power_down_callback: ipu0/csi1

Software integration and additional commands or settings of CSI camera interface are available on separate iMX6 OpenRex Camera page.

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@imx6-openrexbasic:~# ip addr show dev eth0
4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0d:15:00:d1:75 brd ff:ff:ff:ff:ff:ff

Input: Plug Ethernet cable into connector and issue DHCP command
Output: IPv4 address is assigned

root@imx6-openrexbasic:~# dmesg | tail
...
fec 2188000.ethernet eth0: Link is Down
fec 2188000.ethernet eth0: Link is Up - 100Mbps/Full - flow control off
root@imx6-openrexbasic:~# udhcpc -i eth0
udhcpc (v1.23.2) started
Sending discover...
Sending discover...
Sending select for 192.168.1.39...
Lease of 192.168.1.39 obtained, lease time 600
/etc/udhcpc.d/50default: Adding DNS 192.168.1.1
/etc/udhcpc.d/50default: Adding DNS 192.168.1.2

HDMI Output

Input: Connect LCD monitor to the SBC
Output: Desktop UI is displayed correctly
600px

I2C

Input: Scan I2C bus 0
Output: Available devices:

  • PMIC control (0x08)
  • Compass + Accelerometer FXOS8700 (0x1C)
  • Gyroscope FXAS21002 (0x20)
  • EEPROM (0x50/0x57)
root@imx6-openrexbasic:~# i2cdetect -y 0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- UU -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- UU -- -- -- 
20: UU -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: UU -- -- -- -- -- -- UU -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --

Input: Scan I2C bus 1
Output: Available devices:

  • Audio SGTL5000 (0x0A)
  • CSI Camera (0x36)
  • Humidity sensor SHT21 (0x40)
  • Temperature sensor TMP101 (0x48)
  • HDMI Output EDID (0x50)
root@imx6-openrexbasic:~# i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- UU -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- UU -- -- -- -- -- -- -- -- -- 
40: UU -- -- -- -- -- -- -- UU -- -- -- -- -- -- -- 
50: UU -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --

Input: Scan I2C bus 2
Output: This I2C bus is reserved for external use and accessible via connectors

root@imx6-openrexbasic:~# i2cdetect -y 2
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --

Input: Trigger I2C EEPROM detection
Output: I2C EEPROM is detected

root@imx6-openrexbasic:~# echo -n "0-0057" > /sys/bus/i2c/drivers/at24/unbind
root@imx6-openrexbasic:~# echo -n "0-0057" > /sys/bus/i2c/drivers/at24/bind 
at24 0-0057: 256 byte 24c02 EEPROM, writable, 1 bytes/write

Input: Write and read data from I2C EEPROM
Output: If successful, console text 'Data are the same' should appear

root@imx6-openrexbasic:~# echo -n "0123" > eeprom_in
root@imx6-openrexbasic:~# cat eeprom_in > /sys/bus/i2c/devices/0-0057/eeprom
root@imx6-openrexbasic:~# head -c 4 /sys/bus/i2c/devices/0-0057/eeprom > eeprom_out
root@imx6-openrexbasic:~# diff eeprom_in eeprom_out && echo "Data are the same"
Data are the same

Altarnative test

Input: List I2C bus 0, 1 and 2
Output: Available devices are displayed

root@imx6-openrexbasic:~# ls /sys/bus/i2c/devices/i2c-0 | grep ^[0]
0-0008
0-001c
0-0020
0-0057

Sensors

Input: Test Compass, Accelerometer (FXOS8700) and Gyroscope (FXAS21002) sensors
Output: Sensors are registered by the Linux kernel

root@imx6-openrexbasic:~# echo 1 > /sys/devices/virtual/misc/FreescaleAccelerometer/enable
root@imx6-openrexbasic:~# echo 1 > /sys/devices/virtual/misc/FreescaleMagnetometer/enable
root@imx6-openrexbasic:~# echo 1 > /sys/devices/virtual/misc/FreescaleGyroscope/enable
misc FreescaleGyroscope: mma enable setting active 
root@imx6-openrexbasic:~# evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0:      gpio_ir_recv
/dev/input/event1:      MCE IR Keyboard/Mouse (gpio-rc-recv)
/dev/input/event2:      gpio-keys
/dev/input/event3:      fxos8700
/dev/input/event4:      fxas2100x
Select the device event number [0-4]: 3
...
root@imx6-openrexbasic:~# evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0:      gpio_ir_recv
/dev/input/event1:      MCE IR Keyboard/Mouse (gpio-rc-recv)
/dev/input/event2:      gpio-keys
/dev/input/event3:      fxos8700
/dev/input/event4:      fxas2100x
Select the device event number [0-4]: 4
...
root@imx6-openrexbasic:~# echo 0 > /sys/devices/virtual/misc/FreescaleAccelerometer/enable
root@imx6-openrexbasic:~# echo 0 > /sys/devices/virtual/misc/FreescaleMagnetometer/enable
root@imx6-openrexbasic:~# echo 0 > /sys/devices/virtual/misc/FreescaleGyroscope/enable

Input: Test SHT21 humidity sensor
Output: Sensor provides actual humidity and temperature values

root@imx6-openrexbasic:~# cat /sys/devices/soc0/soc/2100000.aips-bus/21a4000.i2c/i2c-1/1-0040/hwmon/hwmon*/humidity1_input
20741
root@imx6-openrexbasic:~# cat /sys/devices/soc0/soc/2100000.aips-bus/21a4000.i2c/i2c-1/1-0040/hwmon/hwmon*/temp1_input
30853

Input: Test TMP101 temperature sensor
Output: Sensor provides current temperature readout

root@imx6-openrexbasic:~# cat /sys/devices/soc0/soc/2100000.aips-bus/21a4000.i2c/i2c-1/1-0048/hwmon/hwmon*/temp1_input 
32125

Infrared receiver

Input: Press Infrared remote keys. (For Samsung Infrared remote load "nec" protocol)
Output: Events are detected

root@imx6-openrexbasic:~# echo nec > /sys/devices/soc0/ir-receiver/rc/rc0/protocols
root@imx6-openrexbasic:~# evtest /dev/input/by-path/platform-ir-receiver-event
Input driver version is 1.0.1
Input device ID: bus 0x19 vendor 0x1 product 0x1 version 0x100
Input device name: "gpio_ir_recv"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 152 (KEY_SCREENLOCK)
  Event type 4 (EV_MSC)
    Event code 4 (MSC_SCAN)
Key repeat handling:
  Repeat type 20 (EV_REP)
    Repeat code 0 (REP_DELAY)
      Value    500
    Repeat code 1 (REP_PERIOD)
      Value    125
Properties:
Testing ... (interrupt to exit)
Event: time 1474009071.488894, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70707
Event: time 1474009071.488894, -------------- SYN_REPORT ------------
Event: time 1474009072.178245, type 4 (EV_MSC), code 4 (MSC_SCAN), value 7070b
Event: time 1474009072.178245, -------------- SYN_REPORT ------------

User LED

Input: None
Output: Script switches User LED ON and OFF in one second intervals

root@imx6-openrexbasic:~#
for LED in /sys/devices/soc0/leds*/leds/*
do
	echo Testing ${LED}
	echo -n "1" > ${LED}/brightness
	sleep 1
	echo -n "0" > ${LED}/brightness
	sleep 1
done

Input: None
Output: User LED is set to heartbeat blinking sequence

root@imx6-openrexbasic:~# echo -n "heartbeat" >  /sys/devices/soc0/leds*/leds/module-led/trigger

SD Activity LED

Input: None
Output: SD activity LED is set to show the status of SD card interface

root@imx6-openrexbasic:~# echo -n "mmc1" > /sys/devices/soc0/leds*/leds/sd-activity-led/trigger

Microcontroller LPC1347

Input: LPC1347 firmware
Output: MCU program is executed and LED starts blinking

root@imx6-openrexbasic:~# openrex-isp-handler.sh lpc/LPC1347-userLED.bin
ISP low
RST low
RST high
lpc21isp version 1.97
File lpc/LPC1347-userLED.bin:
        loaded...
        image size : 1068
Image size : 1068
Synchronizing (ESC to abort). OK
Read bootcode version: 2
5
Read part ID: LPC1345, 32 kiB FLASH / 8 kiB SRAM (0x28010541)
Will start programming at Sector 1 if possible, and conclude with Sector 0 to ensure that checksum is written last.
Erasing sector 0 first, to invalidate checksum. OK 
Sector 0: ..........................
Download Finished... taking 0 seconds
Now launching the brand new code
RST low
ISP high
RST high

DDR memory

Input: None
Output: Memory test passes without any errors

root@imx6-openrexbasic:~# memtester 2G 1
memtester version 4.1.3 (32-bit)
Copyright (C) 2010 Charles Cazabon.
Licensed under the GNU General Public License version 2 (only).

pagesize is 4096
pagesizemask is 0xfffff000
want 2048MB (2147483648 bytes)
got  251MB (263602176 bytes), trying mlock ...locked.
Loop 1/1:
  Stuck Address       : ok         
  Random Value        : ok
  Compare XOR         : ok
  Compare SUB         : ok
  Compare MUL         : ok
  Compare DIV         : ok
  Compare OR          : ok
  Compare AND         : ok
  Sequential Increment: ok
  Solid Bits          : ok         
  Block Sequential    : ok         
  Checkerboard        : ok         
  Bit Spread          : ok         
  Bit Flip            : ok         
  Walking Ones        : ok         
  Walking Zeroes      : ok         

Done.


Further information about DDR3 memories and its calibration can be accessed in Memory Calibration details.

Modem

Input: Plug HE910 3G card into PCIe mini slot and plug SIM card into SIM slot
Output: HE910 3G card is detected and AT commands executed

root@imx6-openrexbasic:~# lsusb| grep -i 1bc7 
Bus 001 Device 005: ID 1bc7:0021
root@imx6-openrexbasic:~# cat > /etc/minirc.he910 << EOF
pu port             /dev/ttyACM0
pu baudrate         115200
pu bits             8
pu parity           N
pu stopbits         1
pu rtscts           No
pu xonxoff          No
pu escape-key       ^B
EOF
root@imx6-openrexbasic:~# echo "Press 'Ctrl+B z q' to exit"
root@imx6-openrexbasic:~# minicom -o he910
AT
AT+CPIN?
AT+CREG?
AT+COPS?

Log:

AT
OK
AT+CPIN?
+CPIN: READY

OK
AT+CREG?
+CREG: 0,1

OK
AT+COPS?
+COPS: 0,0,"Vodafone",0

OK

PCI Express

The procedure uses a WiFi wireless card to test PCIe interface. More details concerning wireless cards are located on WiFi and Bluetooth Cards page .

Input: Plug Wireless WiFi Link 4965AGN mini PCIe card into mini PCIe slot
Output: Card is detected by system

root@imx6-openrexbasic:~# lspci 
00:00.0 PCI bridge: Device 16c3:abcd (rev 01)
01:00.0 Network controller: Intel Corporation PRO/Wireless 4965 AG or AGN [Kedron] Network Connection (rev 61)

Input: Plug Wireless WiFi Link 4965AGN mini PCIe card into mini PCIe slot
Output: Wireless WiFi card firmware is loaded

root@imx6-openrexbasic:~# dmesg | grep iwl4965
iwl4965: Intel(R) Wireless WiFi 4965 driver for Linux, in-tree:
iwl4965: Copyright(c) 2003-2011 Intel Corporation
iwl4965 0000:01:00.0: enabling device (0140 -> 0142)
iwl4965 0000:01:00.0: Detected Intel(R) Wireless WiFi Link 4965AGN, REV=0x4
iwl4965 0000:01:00.0: device EEPROM VER=0x36, CALIB=0x5
iwl4965 0000:01:00.0: Tunable channels: 13 802.11bg, 19 802.11a channels
iwl4965 0000:01:00.0: loaded firmware version 228.61.2.24

Input: Plug Wireless WiFi Link 4965AGN mini PCIe card into mini PCIe slot
Output: Card scans neighbour networks

root@imx6-openrexbasic:~# rfkill unblock wlan
root@imx6-openrexbasic:~# ip link set wlan0 up
IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
root@imx6-openrexbasic:~# iw dev wlan0 scan
BSS 20:aa:4b:7e:21:97(on wlan0)
        TSF: 4605781864521 usec (53d, 07:23:01)
        freq: 5220
        beacon interval: 100 TUs
        capability: ESS Privacy ShortPreamble (0x0031)
        signal: -76.00 dBm
        last seen: 0 ms ago
        SSID: OpenWrt5g
        Supported rates: 6.0* 9.0 12.0* 18.0 24.0* 36.0 48.0 54.0 
        DS Parameter set: channel 44
        Country: CZ     Environment: Indoor/Outdoor
                Channels [36 - 48] @ 23 dBm
        RSN:     * Version: 1
                 * Group cipher: CCMP
                 * Pairwise ciphers: CCMP
                 * Authentication suites: PSK
                 * Capabilities: 16-PTKSA-RC 1-GTKSA-RC (0x000c)
        WPA:     * Version: 1
                 * Group cipher: CCMP
                 * Pairwise ciphers: CCMP
                 * Authentication suites: PSK
        Extended capabilities: 6
        WMM:     * Parameter version 1
                 * BE: CW 15-1023, AIFSN 3
                 * BK: CW 15-1023, AIFSN 7
                 * VI: CW 7-15, AIFSN 2, TXOP 3008 usec
                 * VO: CW 3-7, AIFSN 2, TXOP 1504 usec

Alternative test

Input: Plug Wireless WiFi Link 4965AGN mini PCIe card into mini PCIe slot
Output: Card scans neighbour networks

root@imx6-openrexbasic:~# ip link set wlan0 up
IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
root@imx6-openrexbasic:~# iwlist wlan0 scan
wlan0     Scan completed :
          Cell 01 - Address: 20:AA:4B:7E:21:97
                    Channel:44
                    Frequency:5.22 GHz (Channel 44)
                    Quality=38/70  Signal level=-72 dBm  
                    Encryption key:on
                    ESSID:"OpenWrt5g"
                    Bit Rates:6 Mb/s; 9 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s
                              36 Mb/s; 48 Mb/s; 54 Mb/s
                    Mode:Master
                    Extra:tsf=0000072735a29d05
                    Extra: Last beacon: 30ms ago
                    IE: Unknown: 00094F70656E5772743567
                    IE: Unknown: 01088C129824B048606C
                    IE: Unknown: 03012C
                    IE: Unknown: 0706435A20240417
                    IE: IEEE 802.11i/WPA2 Version 1
                        Group Cipher : CCMP
                        Pairwise Ciphers (1) : CCMP
                        Authentication Suites (1) : PSK
                    IE: WPA Version 1
                        Group Cipher : CCMP
                        Pairwise Ciphers (1) : CCMP
                        Authentication Suites (1) : PSK
                    IE: Unknown: 7F080000000000000040
                    IE: Unknown: DD180050F2020101000003A4000027A4000042435E0062322F00

SD card

Input: Plug SD card with a filesystem and boot-up the board
Output: The board boots up successfully

root@imx6-openrexbasic:~# dmesg | grep -i "Kernel command line"
Kernel command line: console=ttymxc0,115200 root=/dev/mmcblk2p2 rootwait rw

SPI Flash Memory

Input: Trigger M25P80 flash detection
Output: SPI Flash sst25vf032b is detected

root@imx6-openrexbasic:~# echo -n "spi2.1" > /sys/bus/spi/drivers/m25p80/unbind
root@imx6-openrexbasic:~# echo -n "spi2.1" > /sys/bus/spi/drivers/m25p80/bind 
m25p80 spi2.1: found sst26vf032b, expected m25p32
m25p80 spi2.1: sst26vf032b (4096 Kbytes)

Input: Write and read data from M25P80 flash memory
Output: If successful, console text 'Data are the same' should appear

root@imx6-openrexbasic:~# echo -n "0123" > mtd_in
root@imx6-openrexbasic:~# mtd_debug write /dev/mtd0 0 4 mtd_in 
Copied 4 bytes from mtd_in to address 0x00000000 in flash
root@imx6-openrexbasic:~# mtd_debug read /dev/mtd0 0 4 mtd_out
Copied 4 bytes from address 0x00000000 in flash to mtd_out
root@imx6-openrexbasic:~# diff mtd_in mtd_out && echo "Data are the same"
Data are the same

Suspend

Input: Put the board into suspend state (mem state). Wait 10 seconds and then press HOME button
Output: The board wakes up

root@imx6-openrexbasic:~# echo mem > /sys/power/state
PM: Syncing filesystems ... done.
Freezing user space processes ... (elapsed 0.002 seconds) done.
Freezing remaining freezable tasks ... (elapsed 0.001 seconds) done.
Suspending console(s) (use no_console_suspend to debug)
fec 2188000.ethernet eth0: Graceful transmit stop did not complete!
PM: suspend of devices complete after 48.990 msecs
PM: suspend devices took 0.050 seconds
PM: late suspend of devices complete after 1.437 msecs
Info: dont support pm_turn_off yet.
PM: noirq suspend of devices complete after 17.065 msecs
Disabling non-boot CPUs ...
PM: noirq resume of devices complete after 20.138 msecs
PM: early resume of devices complete after 0.744 msecs
PM: resume of devices complete after 229.268 msecs
PM: resume devices took 0.230 seconds
Restarting tasks ... done.
fec 2188000.ethernet eth0: Link is Up - 100Mbps/Full - flow control off
root@imx6-openrexbasic:~#

Input: Put the board into suspend state (standby state). Wait 10 seconds and then press USER button
Output: The board wakes up

root@imx6-openrexbasic:~# echo standby > /sys/power/state
PM: Syncing filesystems ... done.
Freezing user space processes ... (elapsed 0.005 seconds) done.
Freezing remaining freezable tasks ... (elapsed 0.001 seconds) done.
Suspending console(s) (use no_console_suspend to debug)
fec 2188000.ethernet eth0: Graceful transmit stop did not complete!
PM: suspend of devices complete after 31.989 msecs
PM: suspend devices took 0.030 seconds
PM: late suspend of devices complete after 0.532 msecs
PM: noirq suspend of devices complete after 11.862 msecs
Disabling non-boot CPUs ...
PM: noirq resume of devices complete after 20.186 msecs
PM: early resume of devices complete after 0.397 msecs
PM: resume of devices complete after 412.337 msecs
PM: resume devices took 0.410 seconds
Restarting tasks ... done.
root@imx6-openrexbasic:~#

Input: Set 10 seconds wakeup event and put the board into suspend state (standby state)
Output: The board wakes up by itself

root@imx6-openrexbasic:~# echo +10 > /sys/class/rtc/rtc0/wakealarm && echo standby > /sys/power/state
PM: Syncing filesystems ... done.
Freezing user space processes ... (elapsed 0.002 seconds) done.
Freezing remaining freezable tasks ... (elapsed 0.001 seconds) done.
Suspending console(s) (use no_console_suspend to debug)
fec 2188000.ethernet eth0: Graceful transmit stop did not complete!
PM: suspend of devices complete after 53.940 msecs
PM: suspend devices took 0.050 seconds
PM: late suspend of devices complete after 1.467 msecs
Info: dont support pm_turn_off yet.
PM: noirq suspend of devices complete after 20.758 msecs
Disabling non-boot CPUs ...
PM: noirq resume of devices complete after 20.156 msecs
PM: early resume of devices complete after 0.762 msecs
PM: resume of devices complete after 229.124 msecs
PM: resume devices took 0.230 seconds
Restarting tasks ... done.
root@imx6-openrexbasic:~#

UART serial console

Input: Connect USB to UART cable into the serial header connector and open serial console with baud rate 115200 8n1
Output: The board is controlled and responsive to serial terminal commands

root@imx6-openrexbasic:~# uname -a
Linux imx6-openrexbasic 4.1.36-18268-g4e448d3-dirty #18 SMP PREEMPT Sun Feb 26 14:39:51 CET 2017 armv7l GNU/Linux

USB

Input: Plug USB flash drive with single VFAT partition into bottom USB connector
Output: Filesystem recognises the flash drive and automatically mounts it

root@imx6-openrexbasic:~# lsusb
Bus 001 Device 004: ID 125f:d31a A-DATA Technology Co., Ltd. 
Bus 001 Device 003: ID 125f:d31a A-DATA Technology Co., Ltd. 
Bus 001 Device 002: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

root@imx6-openrexbasic:~# mount | grep /run/media/sd
/dev/sda1 on /run/media/sda1 type vfat (rw,relatime,gid=6,fmask=0007,dmask=0007,allow_utime=0020,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)
/dev/sdb1 on /run/media/sdb1 type vfat (rw,relatime,gid=6,fmask=0007,dmask=0007,allow_utime=0020,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)

Input: Generate a dummy file and copy it into USB flash drive
Output: Generated file and copied file have the same checksum

root@imx6-openrexbasic:~# rm -f file.txt /run/media/sda1/file.txt 
root@imx6-openrexbasic:~# dd if=/dev/urandom of=file.txt count=1024 bs=1024
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB) copied, 0.435065 s, 2.4 MB/s
root@imx6-openrexbasic:~# cp file.txt /run/media/sda1/
root@imx6-openrexbasic:~# md5sum file.txt /run/media/sda1/file.txt 
b8e8141b61813fcc08a6164833729e3b  file.txt
b8e8141b61813fcc08a6164833729e3b  /run/media/sda1/file.txt
root@imx6-openrexbasic:~# rm file.txt /run/media/sda1/file.txt

USB OTG

Input: Load USB serial gadget driver and connect the board to host PC over micro USB cable
Output: Driver is successfully loaded and host PC detects a new USB serial gadget device

iMX6 Rex Single Board Computer:

root@imx6-openrexbasic:~# modprobe -i g_serial
g_serial gadget: Gadget Serial v2.4
g_serial gadget: g_serial ready
root@imx6-openrexbasic:~# g_serial gadget: high-speed config #2: CDC ACM config

Host PC:

user@voipac:~$ lsusb 
...
Bus 002 Device 048: ID 0525:a4a7 Netchip Technology, Inc. Linux-USB Serial Gadget (CDC ACM mode)
...