Difference between revisions of "iMX6 OpenRex Max Accessing and Testing Peripherals"
(Created page with "Category:iMX6 OpenRex SBC Category:iMX6 OpenRex Max Category:iMX6 OpenRex SBC Peripherals <!-- --> <div style="float:right">__TOC__</div> Elemental operations of...") |
|||
Line 10: | Line 10: | ||
=== Hardware === | === Hardware === | ||
* DC power supply (5V, 4A) | * DC power supply (5V, 4A) | ||
− | * iMX6 OpenRex SBC | + | * iMX6 OpenRex SBC Max |
=== Peripherals and Accessories === | === Peripherals and Accessories === |
Revision as of 13:31, 1 April 2021
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 correctly displayed
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-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 -- -- -- -- -- -- -- -- 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
Altarnative 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
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 error
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: SD card is plugged in
Output: Files stored on SD card are listed
root@imx6-openrexmax:~# dmesg | grep mmc mmc0: new high speed SD card at address aaaa mmcblk1: mmc0:aaaa SU02G 1.84 GiB mmcblk1: p1 root@imx6-openrexmax:~# mount /dev/mmcblk1p1 /media/ root@imx6-openrexmax:~# ls -la /media total 118084 drwxr-xr-x 4 root root 8192 Jan 1 1970 . drwxr-xr-x 22 root linaro 4096 Dec 20 09:30 .. -rwxr-xr-x 1 root root 120886176 Dec 22 15:11 78.avi drwxr-xr-x 8 root root 8192 Oct 10 16:48 Pictures processed drwxr-xr-x 2 root root 8192 Oct 10 16:44 iMX6 Rex Moduel Layout videos
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 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) ...