Difference between revisions of "iMX6 OpenRex Basic Accessing and Testing Peripherals"
Line 389: | Line 389: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | '''''Input:''''' Write and | + | '''''Input:''''' Write and read data from I2C EEPROM<br /> |
'''''Output:''''' If successful, console text 'Data are the same' should appear | '''''Output:''''' If successful, console text 'Data are the same' should appear | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> |
Revision as of 23:34, 21 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 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-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) ...