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

From Voipac Wiki
Jump to navigation Jump to search
 
Line 400: Line 400:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
=== Altarnative test ===
+
=== Alternative test ===
 
'''''Input:''''' List I2C bus 0, 1 and 2<br />
 
'''''Input:''''' List I2C bus 0, 1 and 2<br />
 
'''''Output:''''' Available devices are displayed
 
'''''Output:''''' Available devices are displayed

Latest revision as of 17:07, 23 April 2022

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

Prerequisites

Hardware

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

Peripherals and Accessories

  • 1x FullHD monitor with Audio output
  • 1x MicroSD card
  • 1x MiniPCIe WiFi card
  • 1x MiniPCIe 3G card
  • 1x RPi camera module
  • 1x SATA HDD drive
  • 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-openrexmax:~# 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-openrexmax:~# 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-openrexmax:~# aplay multimedia/sample.wav
Playing WAVE 'multimedia/sample.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
root@imx6-openrexmax:~# #aplay -D sysdefault:CARD=imxaudiosgtl500 multimedia/sample.wav 
root@imx6-openrexmax:~# aplay -D sysdefault:CARD=sgtl5000audio multimedia/sample.wav
Playing WAVE 'multimedia/sample.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
root@imx6-openrexmax:~# 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-openrexmax:~# #arecord -D sysdefault:CARD=imxaudiosgtl500 -t wav -f cd | aplay -D sysdefault:CARD=imxaudiosgtl500
root@imx6-openrexmax:~# 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-openrexmax:~# #arecord -D sysdefault:CARD=imxaudiosgtl500 -t wav -f cd -d 10 multimedia/recorded.wav
root@imx6-openrexmax:~# 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-openrexmax:~# #aplay -D sysdefault:CARD=imxaudiosgtl500 multimedia/recorded.wav
root@imx6-openrexmax:~# 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-openrexmax:~# 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-openrexmax:~# 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-openrexmax:~# ip addr show dev can0
2: can0: <NOARP,ECHO> mtu 16 qdisc noop state DOWN group default qlen 10
    link/can 
root@imx6-openrexmax:~# 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-openrexmax:~# 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-openrexmax:~# 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-openrexmax:~# echo 2 > /sys/bus/i2c/devices/1-0036/ov5647_mode 
root@imx6-openrexmax:~# 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-openrexmax:~# echo 1 > /sys/bus/i2c/devices/1-0036/ov5647_mode
root@imx6-openrexmax:~# 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-openrexmax:~# 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-openrexmax:~# 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-openrexmax:~# dmesg | tail
...
fec 2188000.ethernet eth0: Link is Down
fec 2188000.ethernet eth0: Link is Up - 100Mbps/Full - flow control off
root@imx6-openrexmax:~# 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
iMX6 TinyRex Development Kit-HDMI terminal.png

I2C

Input: Scan I2C bus 0
Output: Available devices:

  • PMIC control (0x08)
  • Compass + Accelerometer FXOS8700 (0x1C)
  • Gyroscope FXAS21002 (0x20)
  • EEPROM (0x50/0x57)
root@imx6-openrexmax:~# 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 UU UU UU UU 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-openrexmax:~# 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-openrexmax:~# 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-openrexmax:~# echo -n "0-0050" > /sys/bus/i2c/drivers/at24/unbind
root@imx6-openrexmax:~# echo -n "0-0050" > /sys/bus/i2c/drivers/at24/bind 
at24 0-0050: 2048 byte 24c16 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-openrexmax:~# echo -n "0123" > eeprom_in
root@imx6-openrexmax:~# cat eeprom_in > /sys/bus/i2c/devices/0-0050/eeprom
root@imx6-openrexmax:~# head -c 4 /sys/bus/i2c/devices/0-0050/eeprom > eeprom_out
root@imx6-openrexmax:~# diff eeprom_in eeprom_out && echo "Data are the same"
Data are the same

Alternative test

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

root@imx6-openrexmax:~# ls /sys/bus/i2c/devices/i2c-0 | grep ^[0]
0-0008
0-001c
0-0020
0-0050
0-0051
0-0052
0-0053
0-0054
0-0055
0-0056
0-0057

Sensors

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

root@imx6-openrexmax:~# echo 1 > /sys/devices/virtual/misc/FreescaleAccelerometer/enable
root@imx6-openrexmax:~# echo 1 > /sys/devices/virtual/misc/FreescaleMagnetometer/enable
root@imx6-openrexmax:~# echo 1 > /sys/devices/virtual/misc/FreescaleGyroscope/enable
misc FreescaleGyroscope: mma enable setting active 
root@imx6-openrexmax:~# 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-openrexmax:~# 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-openrexmax:~# echo 0 > /sys/devices/virtual/misc/FreescaleAccelerometer/enable
root@imx6-openrexmax:~# echo 0 > /sys/devices/virtual/misc/FreescaleMagnetometer/enable
root@imx6-openrexmax:~# echo 0 > /sys/devices/virtual/misc/FreescaleGyroscope/enable

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

root@imx6-openrexmax:~# cat /sys/devices/soc0/soc/2100000.aips-bus/21a4000.i2c/i2c-1/1-0040/hwmon/hwmon*/humidity1_input
20741
root@imx6-openrexmax:~# 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-openrexmax:~# 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-openrexmax:~# echo nec > /sys/devices/soc0/ir-receiver/rc/rc0/protocols
root@imx6-openrexmax:~# 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-openrexmax:~#
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-openrexmax:~# 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-openrexmax:~# 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-openrexmax:~# 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-openrexmax:~# 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-openrexmax:~# lsusb| grep -i 1bc7 
Bus 001 Device 005: ID 1bc7:0021
root@imx6-openrexmax:~# 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-openrexmax:~# echo "Press 'Ctrl+B z q' to exit"
root@imx6-openrexmax:~# 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-openrexmax:~# 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-openrexmax:~# 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-openrexmax:~# rfkill unblock wlan
root@imx6-openrexmax:~# ip link set wlan0 up
IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
root@imx6-openrexmax:~# 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-openrexmax:~# ip link set wlan0 up
IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
root@imx6-openrexmax:~# 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

SATA

Input: Power off the board, connect HDD to SATA connector, provide power for the hard drive and turn on the board
Output: HDD is detected

root@imx6-openrexmax:~# dmesg | grep -i -e sata -e ata1
ahci-imx 2200000.sata: fsl,transmit-level-mV not specified, using 00000024
ahci-imx 2200000.sata: fsl,transmit-boost-mdB not specified, using 00000480
ahci-imx 2200000.sata: fsl,transmit-atten-16ths not specified, using 00002000
ahci-imx 2200000.sata: fsl,receive-eq-mdB not specified, using 05000000
ahci-imx 2200000.sata: SSS flag set, parallel bus scan disabled
ahci-imx 2200000.sata: AHCI 0001.0300 32 slots 1 ports 3 Gbps 0x1 impl platform mode
ahci-imx 2200000.sata: flags: ncq sntf stag pm led clo only pmp pio slum part ccc apst 
ata1: SATA max UDMA/133 mmio [mem 0x02200000-0x02203fff] port 0x100 irq 71
ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
ata1.00: ATA-8: WDC WD1600BEVT-22ZCT0, 11.01A11, max UDMA/133
ata1.00: 312581808 sectors, multi 0: LBA48 NCQ (depth 31/32)
ata1.00: configured for UDMA/133

Input: Generate a dummy file, copy this file into HDD and compare checksums
Output: Both file are identical and have the same checksum

root@imx6-openrexmax:~# umount /dev/sda[1-9]
root@imx6-openrexmax:~# dd if=/dev/zero of=/dev/sda bs=512 count=1
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.361743 s, 1.4 kB/s
root@imx6-openrexmax:~# fdisk /dev/sda
...


The number of cylinders for this disk is set to 19457.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-19457, default 1): Using default value 1
Last cylinder or size or sizeM or sizeK (1-19457, default 19457): Using default value 19457

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): c
Changed system type of partition 1 to c (Win95 FAT32 (LBA))

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table
 sda: sda1
root@imx6-openrexmax:~# umount /dev/sda1
root@imx6-openrexmax:~# mkfs.vfat -F32 /dev/sda1
root@imx6-openrexmax:~# mount /dev/sda1 /media/
root@imx6-openrexmax:~# rm -f file.txt /media/file.txt
root@imx6-openrexmax:~# 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.434573 s, 2.4 MB/s
root@imx6-openrexmax:~# cp file.txt /media/
root@imx6-openrexmax:~# md5sum file.txt /media/file.txt
b8e8141b61813fcc08a6164833729e3b  file.txt
b8e8141b61813fcc08a6164833729e3b  /media/file.txt
root@imx6-openrexmax:~# rm -f file.txt /media/file.txt
root@imx6-openrexmax:~# umount /dev/sda1


SATA device can be used as a default bootlader and filesystem source. SATA Interface page contains detailed steps to follow.

SD card

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

root@imx6-openrexmax:~# 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-openrexmax:~# echo -n "spi2.1" > /sys/bus/spi/drivers/m25p80/unbind
root@imx6-openrexmax:~# 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-openrexmax:~# echo -n "0123" > mtd_in
root@imx6-openrexmax:~# mtd_debug write /dev/mtd0 0 4 mtd_in 
Copied 4 bytes from mtd_in to address 0x00000000 in flash
root@imx6-openrexmax:~# mtd_debug read /dev/mtd0 0 4 mtd_out
Copied 4 bytes from address 0x00000000 in flash to mtd_out
root@imx6-openrexmax:~# 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-openrexmax:~# 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-openrexmax:~#

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

root@imx6-openrexmax:~# 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-openrexmax:~#

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

root@imx6-openrexmax:~# 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-openrexmax:~#

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-openrexmax:~# uname -a
Linux imx6-openrexmax 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-openrexmax:~# 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-openrexmax:~# 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-openrexmax:~# rm -f file.txt /run/media/sda1/file.txt 
root@imx6-openrexmax:~# 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-openrexmax:~# cp file.txt /run/media/sda1/
root@imx6-openrexmax:~# md5sum file.txt /run/media/sda1/file.txt 
b8e8141b61813fcc08a6164833729e3b  file.txt
b8e8141b61813fcc08a6164833729e3b  /run/media/sda1/file.txt
root@imx6-openrexmax:~# 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-openrexmax:~# modprobe -i g_serial
g_serial gadget: Gadget Serial v2.4
g_serial gadget: g_serial ready
root@imx6-openrexmax:~# 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)
...