i.MX25 SODIMM PC Accessing and Testing Peripherals
Basic examples of operation of i.MX25 SODIMM PC - Development Kit interfaces are shown on this page.
Prerequisites
Hardware
- DC power supply (12V, 2A)
- i.MX25 SODIMM PC Module
- i.MX25 SODIMM PC Base Board
Peripherals and Accessories
- 1x DVI/VGA monitor
- 1x MicroSD card
- 2x USB Flash drive
- 1x headphones
- 1x microphone
- touch panel
Cables
- Ethernet cable
- DVI cable or VGA cable
- Mini USB cable
- RS-232 cable
Audio
Input: Search kernel log for SGTL5000 chip
Output: Audio chip is detected and bound as an input device
root@vmx25:~# dmesg | grep -i sgtl5000 sgtl5000 0-000a: sgtl5000 revision 0x11 sgtl5000 0-000a: Using internal LDO instead of VDDD: check ER1 imx-sgtl5000 sound: sgtl5000 <-> 50034000.ssi mapping ok #0: imx25-vmx25-sgtl5000
Input: Run alsamixer command
Output: Card imx-audio-sgtl5000 is available
root@vmx25:~# alsamixer lqqqqqqqqqqqqqqqqqqqqqqqqqqqqq AlsaMixer v1.1.4 qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk x Card: imx25-vmx25-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: -15.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 x x xaax xaax x x x x xaax xaax x x x x xaax xaax x x x x xaax xaax x x x x xaax xaax x x xaax xaax xaax x x xaax xaax xaax x x xaax xaax xaax x x xaax xaax xaax x x tqqu DAC lqqk mqqj tqqu x x xOOx xOOx xOOx x x mqqj mqqj mqqj x x 23<>23 75<>75 58<>58 x x < Headphone >Headphone Mux Headphone Pla PCM Lineout x mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj
Input: Plug headphones into HP_OUT connector
Output: Audio media is played into the headphones
root@vmx25:~# aplay multimedia/sample.wav Playing WAVE 'multimedia/sample.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
root@vmx25:~# aplay -D sysdefault:CARD=imx25vmx25sgtl5 multimedia/sample.wav Playing WAVE 'multimedia/sample.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
Input: Plug headphones into HP_OUT and microphone into LINE_IN connector
Output: Microphone sound is played in headphones
root@vmx25:~# arecord -D sysdefault:CARD=imx25vmx25sgtl5 -t wav -f cd | aplay -D sysdefault:CARD=imx25vmx25sgtl5 Recording WAVE 'stdin' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo Playing WAVE 'stdin' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
Input: Plug headphones with microphone feature into HP_OUT connector
Output: Sound is recorded and played afterwards
root@vmx25:~# arecord -D sysdefault:CARD=imx25vmx25sgtl5 -t wav -f cd -d 10 multimedia/recorded.wav Recording WAVE 'multimedia/recorded.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo root@vmx25:~# aplay -D sysdefault:CARD=imx25vmx25sgtl5 multimedia/recorded.wav Playing WAVE 'multimedia/recorded.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
User button
Input: Press the Home/Vol-/Vol+/Back buttons
Output: Button events are generated and received
root@vmx25:~# evtest /dev/input/by-path/platform-43fa8000.kpp-event Input driver version is 1.0.1 Input device ID: bus 0x19 vendor 0x0 product 0x0 version 0x0 Input device name: "43fa8000.kpp" Supported events: Event type 0 (EV_SYN) Event type 1 (EV_KEY) Event code 102 (KEY_HOME) Event code 114 (KEY_VOLUMEDOWN) Event code 115 (KEY_VOLUMEUP) Event code 158 (KEY_BACK) Event type 4 (EV_MSC) Event code 4 (MSC_SCAN) Key repeat handling: Repeat type 20 (EV_REP) Repeat code 0 (REP_DELAY) Value 250 Repeat code 1 (REP_PERIOD) Value 33 Properties: Testing ... (interrupt to exit) Event: time 1525810879.083353, type 4 (EV_MSC), code 4 (MSC_SCAN), value 01 Event: time 1525810879.083353, type 1 (EV_KEY), code 102 (KEY_HOME), value 1 Event: time 1525810879.083353, -------------- SYN_REPORT ------------ Event: time 1525810879.243271, type 4 (EV_MSC), code 4 (MSC_SCAN), value 01 Event: time 1525810879.243271, type 1 (EV_KEY), code 102 (KEY_HOME), value 0 Event: time 1525810879.243271, -------------- SYN_REPORT ------------ Event: time 1525810880.293285, type 4 (EV_MSC), code 4 (MSC_SCAN), value 11 Event: time 1525810880.293285, type 1 (EV_KEY), code 114 (KEY_VOLUMEDOWN), value 1 Event: time 1525810880.293285, -------------- SYN_REPORT ------------ Event: time 1525810880.443263, type 4 (EV_MSC), code 4 (MSC_SCAN), value 11 Event: time 1525810880.443263, type 1 (EV_KEY), code 114 (KEY_VOLUMEDOWN), value 0 Event: time 1525810880.443263, -------------- SYN_REPORT ------------ Event: time 1525810881.213298, type 4 (EV_MSC), code 4 (MSC_SCAN), value 03 Event: time 1525810881.213298, type 1 (EV_KEY), code 158 (KEY_BACK), value 1 Event: time 1525810881.213298, -------------- SYN_REPORT ------------ Event: time 1525810881.353266, type 4 (EV_MSC), code 4 (MSC_SCAN), value 03 Event: time 1525810881.353266, type 1 (EV_KEY), code 158 (KEY_BACK), value 0 Event: time 1525810881.353266, -------------- SYN_REPORT ------------ Event: time 1525810882.133271, type 4 (EV_MSC), code 4 (MSC_SCAN), value 13 Event: time 1525810882.133271, type 1 (EV_KEY), code 115 (KEY_VOLUMEUP), value 1 Event: time 1525810882.133271, -------------- SYN_REPORT ------------ Event: time 1525810882.263273, type 4 (EV_MSC), code 4 (MSC_SCAN), value 13 Event: time 1525810882.263273, type 1 (EV_KEY), code 115 (KEY_VOLUMEUP), value 0 Event: time 1525810882.263273, -------------- SYN_REPORT ------------
Alternate test
Input: Press the Home/Vol-/Vol+/Back buttons
Output: Button events are generated and received
root@vmx25:~# hexdump -C /dev/input/by-path/platform-43fa8000.kpp-event 00000000 4f 8a f8 5a cf 05 04 00 04 00 04 00 01 00 00 00 |O..Z............| 00000010 4f 8a f8 5a cf 05 04 00 01 00 66 00 01 00 00 00 |O..Z......f.....| 00000020 4f 8a f8 5a cf 05 04 00 00 00 00 00 00 00 00 00 |O..Z............| 00000030 4f 8a f8 5a 7f 01 06 00 04 00 04 00 01 00 00 00 |O..Z............| 00000040 4f 8a f8 5a 7f 01 06 00 01 00 66 00 00 00 00 00 |O..Z......f.....| 00000050 4f 8a f8 5a 7f 01 06 00 00 00 00 00 00 00 00 00 |O..Z............| 00000060 4f 8a f8 5a 7c bc 0a 00 04 00 04 00 11 00 00 00 |O..Z|...........| 00000070 4f 8a f8 5a 7c bc 0a 00 01 00 72 00 01 00 00 00 |O..Z|.....r.....| 00000080 4f 8a f8 5a 7c bc 0a 00 00 00 00 00 00 00 00 00 |O..Z|...........| 00000090 4f 8a f8 5a 3c b8 0c 00 04 00 04 00 11 00 00 00 |O..Z<...........| 000000a0 4f 8a f8 5a 3c b8 0c 00 01 00 72 00 00 00 00 00 |O..Z<.....r.....| 000000b0 4f 8a f8 5a 3c b8 0c 00 00 00 00 00 00 00 00 00 |O..Z<...........| 000000c0 50 8a f8 5a 4b cd 02 00 04 00 04 00 03 00 00 00 |P..ZK...........| 000000d0 50 8a f8 5a 4b cd 02 00 01 00 9e 00 01 00 00 00 |P..ZK...........| 000000e0 50 8a f8 5a 4b cd 02 00 00 00 00 00 00 00 00 00 |P..ZK...........| 000000f0 50 8a f8 5a fe c8 04 00 04 00 04 00 03 00 00 00 |P..Z............| 00000100 50 8a f8 5a fe c8 04 00 01 00 9e 00 00 00 00 00 |P..Z............| 00000110 50 8a f8 5a fe c8 04 00 00 00 00 00 00 00 00 00 |P..Z............| 00000120 50 8a f8 5a 10 5d 09 00 04 00 04 00 13 00 00 00 |P..Z.]..........| 00000130 50 8a f8 5a 10 5d 09 00 01 00 73 00 01 00 00 00 |P..Z.]....s.....| 00000140 50 8a f8 5a 10 5d 09 00 00 00 00 00 00 00 00 00 |P..Z.]..........| 00000150 50 8a f8 5a ce a6 0b 00 04 00 04 00 13 00 00 00 |P..Z............| 00000160 50 8a f8 5a ce a6 0b 00 01 00 73 00 00 00 00 00 |P..Z......s.....| 00000170 50 8a f8 5a ce a6 0b 00 00 00 00 00 00 00 00 00 |P..Z............|
Reset button
Input: Press the RESET button
Output: Module will execute bootloader immediately with "Reset cause: POR"
Note: Module should never freeze or hang after the reset button was pressed. Testing the operation 10 times gives a reliable result
barebox 2017.12.0-g952939f-dirty #3 Sat May 26 21:21:42 CEST 2018 Board: Voipac VMX25 SDRAM at 0x80000000: 32MB (256Mb, 13 ROWs, 9 COLs) SDRAM at 0x90000000: 32MB (256Mb, 13 ROWs, 9 COLs) mdio_bus: miibus0: probed nand: ONFI flash detected nand: NAND device: Manufacturer ID: 0x2c, Chip ID: 0xda (Micron MT29F2G08ABAEAWP), 256MiB, page size: 2048, OOB size: 64 Bad block table found at page 131008, version 0x01 Bad block table found at page 130944, version 0x01 netconsole: registered as netconsole-1 malloc space: 0x90efd700 -> 0x91dfadff (size 15 MiB) running /env/bin/init... DTB: /env/dtb/imx25-voipac-vmx25-264.dtb Hit m for menu or any other key to stop autoboot: 0
CAN
Input: None
Output: Device driver is registered and ready for use
root@vmx25:~# ip addr show dev can0 3: can0: <NOARP40000> mtu 16 qdisc noop qlen 10 link/[280] root@vmx25:~# ip addr show dev can1 4: can1: <NOARP40000> mtu 16 qdisc noop qlen 10 link/[280]
Ethernet
Input: None
Output: Device driver is available
Note: MAC address should be identical with the address on the sticker placed on module
oot@vmx25:~# ip addr show dev eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:0d:15:00:aa:13 brd ff:ff:ff:ff:ff:ff inet 192.168.1.11/24 brd 192.168.1.255 scope global eth0 valid_lft forever preferred_lft forever
Input: Plug Ethernet cable into connector and issue DHCP command
Output: IPv4 address is assigned
root@vmx25:~# dmesg | tail ... fec 50038000.ethernet eth0: Link is Down fec 50038000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx
root@vmx25:~# udhcpc -i eth0 udhcpc (v1.24.1) started Sending discover... Sending select for 192.168.1.11... Lease of 192.168.1.11 obtained, lease time 600 /etc/udhcpc.d/50default: Adding DNS 192.168.1.1 /etc/udhcpc.d/50default: Adding DNS 192.168.1.2
DVI output
Input: Connect LCD monitor to the base board
Output: Desktop UI is displayed correctly
I2C
Input: Scan I2C bus 0
Output: Available devices:
- SGTL5000 audio (0x0A)
- EEPROM memory (0x56/0x57)
- real time clock DS1339 (0x68)
root@vmx25:~# i2cdetect -y 0 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- UU -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- UU UU -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
Input: Trigger I2C EEPROM detection
Output: I2C EEPROM is detected
root@vmx25:~# echo -n "0-0056" > /sys/bus/i2c/drivers/at24/unbind root@vmx25:~# echo -n "0-0056" > /sys/bus/i2c/drivers/at24/bind at24 0-0056: 65536 byte 24c512 EEPROM, writable, 128 bytes/write
root@vmx25:~# echo -n "0-0057" > /sys/bus/i2c/drivers/at24/unbind root@vmx25:~# echo -n "0-0057" > /sys/bus/i2c/drivers/at24/bind at24 0-0057: 65536 byte 24c512 EEPROM, writable, 128 bytes/write
Alternate test
Input: Scan I2C bus 0
Output: Available devices:
- SGTL5000 audio (0x0A)
- EEPROM memory (0x56/0x57)
- real time clock DS1339 (0x68)
root@vmx25:~# ls /sys/bus/i2c/devices/i2c-0 | grep ^[0] 0-000a 0-0056 0-0057 0-0068
User LED
Input: None
Output: Script switches User LED ON and OFF in one second intervals
root@vmx25:~# for LED in /sys/devices/platform/leds/leds/* do echo Testing ${LED} echo -n "gpio" > ${LED}/trigger sleep 1 echo -n "1" > ${LED}/brightness sleep 1 echo -n "0" > ${LED}/brightness sleep 1 done root@vmx25:~# echo -n "heartbeat" > /sys/devices/platform/leds/leds/led1/trigger root@vmx25:~# echo -n "mmc0" > /sys/devices/platform/leds/leds/led2/trigger
DDR memory
Input: None
Output: Memory test passes without any errors
root@vmx25:~# memtester 32M 1 memtester version 4.3.0 (32-bit) Copyright (C) 2001-2012 Charles Cazabon. Licensed under the GNU General Public License version 2 (only). pagesize is 4096 pagesizemask is 0xfffff000 want 32MB (33554432 bytes) got 32MB (33554432 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.
NAND memory
Input: Check file system for disk space
Output: UBI type rootfs is ready with free space available
root@vmx25:~# df -h Filesystem Size Used Available Use% Mounted on ubi0:rootfs 109.1M 45.4M 63.8M 42% / devtmpfs 27.5M 0 27.5M 0% /dev tmpfs 27.6M 76.0K 27.5M 0% /run tmpfs 27.6M 40.0K 27.6M 0% /var/volatile
RTC clock
Input: Search kernel log for DS1307.
Output: RTC chip was detected
root@vmx25:~# dmesg | grep -i ds1307 rtc-ds1307 0-0068: SET TIME! rtc-ds1307 0-0068: registered as rtc0 rtc-ds1307 0-0068: setting system clock to 2000-01-01 00:34:09 UTC (946686849)
SD card
Input: Plug micro SD card into slot located on the module. Boot up the system
Output: Linux kernel detects inserted MMC0 device
root@vmx25:~# dmesg | grep -i 'sdhc\|mmc0' sdhci: Secure Digital Host Controller Interface driver sdhci: Copyright(c) Pierre Ossman sdhci-pltfm: SDHCI platform and OF driver helper mmc0 bounce up to 128 segments into one, max segment size 65536 bytes mmc0: SDHCI controller on 53fb4000.esdhc [53fb4000.esdhc] using DMA mmc0: host does not support reading read-only switch, assuming write-enable mmc0: new high speed SDHC card at address 59b4 mmcblk0: mmc0:59b4 SS04G 3.69 GiB
SPI Flash
Input: Trigger M25P80 flash detection
Output: SPI flash sst25vf032b is detected
root@vmx25:~# echo -n "spi0.0" > /sys/bus/spi/drivers/m25p80/unbind root@vmx25:~# echo -n "spi0.0" > /sys/bus/spi/drivers/m25p80/bind m25p80 spi0.0: found sst25vf032b, expected m25p80 m25p80 spi0.0: sst25vf032b (4096 Kbytes) root@vmx25:~# echo -n "spi0.1" > /sys/bus/spi/drivers/m25p80/unbind root@vmx25:~# echo -n "spi0.1" > /sys/bus/spi/drivers/m25p80/bind m25p80 spi0.1: found sst25vf032b, expected m25p80 m25p80 spi0.1: sst25vf032b (4096 Kbytes)
Input: Write and read data from M25P80 flash
Output: If successful, console text 'Data are the same' should appear
root@vmx25:~# mtdinfo /dev/mtd4 mtd4 Name: spi0.0 Type: nor Eraseblock size: 4096 bytes, 4.0 KiB Amount of eraseblocks: 1024 (4194304 bytes, 4.0 MiB) Minimum input/output unit size: 1 byte Sub-page size: 1 byte Character device major/minor: 90:8 Bad blocks are allowed: false Device is writable: true root@vmx25:~# echo -n "0123" > mtd_in root@vmx25:~# mtd_debug write /dev/mtd4 0 4 mtd_in Copied 4 bytes from mtd_in to address 0xffffffff00000000 in flash root@vmx25:~# mtd_debug read /dev/mtd4 0 4 mtd_out Copied 4 bytes from address 0xbed5ef1600000000 in flash to (null) root@vmx25:~# 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@vmx25:~# echo mem > /sys/power/state PM: suspend entry (deep) PM: Syncing filesystems ... done. Freezing user space processes ... (elapsed 0.002 seconds) done. OOM killer disabled. Freezing remaining freezable tasks ... (elapsed 0.001 seconds) done. Suspending console(s) (use no_console_suspend to debug) OOM killer enabled. Restarting tasks ... done. PM: suspend exit root@vmx25:~#
Touchscreen
Input: Connect touch panel into the base board connector, power up the board and press the panel
Output: Touch events are detected
root@vmx25:~# evtest /dev/input/by-path/platform-43fa4000.cspi-event Input driver version is 1.0.1 Input device ID: bus 0x0 vendor 0x0 product 0x0 version 0x0 Input device name: "ADS7846 Touchscreen" Supported events: Event type 0 (EV_SYN) Event type 1 (EV_KEY) Event code 330 (BTN_TOUCH) Event type 3 (EV_ABS) Event code 0 (ABS_X) Value 2409 Min 0 Max 8000 Event code 1 (ABS_Y) Value 2129 Min 0 Max 4800 Event code 24 (ABS_PRESSURE) Value 0 Min 0 Max 255 Properties: Testing ... (interrupt to exit) Event: time 1527375683.885927, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1 Event: time 1527375683.885927, type 3 (EV_ABS), code 0 (ABS_X), value 2223 Event: time 1527375683.885927, type 3 (EV_ABS), code 1 (ABS_Y), value 1562 Event: time 1527375683.885927, type 3 (EV_ABS), code 24 (ABS_PRESSURE), value 58 Event: time 1527375683.885927, -------------- SYN_REPORT ------------ Event: time 1527375683.905846, type 3 (EV_ABS), code 0 (ABS_X), value 2226 Event: time 1527375683.905846, type 3 (EV_ABS), code 1 (ABS_Y), value 1572 Event: time 1527375683.905846, type 3 (EV_ABS), code 24 (ABS_PRESSURE), value 7 Event: time 1527375683.905846, -------------- SYN_REPORT ------------ Event: time 1527375683.924951, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 0 Event: time 1527375683.924951, type 3 (EV_ABS), code 24 (ABS_PRESSURE), value 0 Event: time 1527375683.924951, -------------- SYN_REPORT ------------
UART serial console
Input: Connect RS-232 cable into the base board connector and open serial console with baud rate 115200 8n1
Output: The board is controlled and responsive to serial terminal commands
root@vmx25:~# uname -a Linux vmx25 4.14.21-yocto+g4a31b3d #2 PREEMPT Sat May 26 19:51:25 UTC 2018 armv5tejl GNU/Linux
USB
Input: Plug USB flash drives with single VFAT partition into the USB connectors
Output: USB Flash drives are listed and mounted without any errors
root@vmx25:~# 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@vmx25:~# mount /dev/sda1 /media/
Input: Plug USB flash drive into mini USB connector. A link should be placed on H401 jumper
Output: Plugged USB device is listed
root@vmx25:~# lsusb 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 Bus 002 Device 003: ID 125f:d31a A-DATA Technology Co., Ltd. Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Input: Generate a dummy file and copy it into USB flash drive
Output: Generated file and copied file have the same checksum
root@vmx25:~# rm -f file.txt /media/file.txt root@vmx25:~# dd if=/dev/urandom of=file.txt count=1024 bs=1024 1024+0 records in 1024+0 records out root@vmx25:~# cp file.txt /media/ root@vmx25:~# md5sum file.txt /media/file.txt 200a9fd3e9850fcedf85ed50d4c4733d file.txt 200a9fd3e9850fcedf85ed50d4c4733d /media/file.txt root@vmx25:~# rm file.txt /media/file.txt root@vmx25:~# umount /media
USB OTG
Input: Load USB serial gadget driver and connect base board to host PC over micro USB cable
Output: Driver is successfully loaded and host PC detects a new USB serial gadget device
i.MX25 SODIMM PC - Development Kit:
root@vmx25:~# modprobe -i g_serial g_serial gadget: Gadget Serial v2.4 g_serial gadget: g_serial ready g_serial gadget: high-speed config #2: CDC ACM config
Host PC:
user@voipac:~$ lsusb ... Bus 003 Device 012: ID 0525:a4a7 Netchip Technology, Inc. Linux-USB Serial Gadget (CDC ACM mode) ...
DVI output
Input: Connect VGA monitor to the base board
Output: Desktop UI is displayed correctly