Difference between revisions of "iMX6 TinyRex EMC testing"

From Voipac Wiki
Jump to navigation Jump to search
Line 62: Line 62:
 
|style="width:396px; border:1px solid black;" |<br />[[image:iMX6_TinyRex_Development_kit_Max-EMC-RE_30MHz-1GHz_Hor_Pol.jpg|370px]]<br /><br />
 
|style="width:396px; border:1px solid black;" |<br />[[image:iMX6_TinyRex_Development_kit_Max-EMC-RE_30MHz-1GHz_Hor_Pol.jpg|370px]]<br /><br />
 
|-
 
|-
|colspan="3"|iMX6 TinyRex Development kit Max: 30kHZ - 1GHz
+
|colspan="3"|<br />iMX6 TinyRex Development kit Max: 30kHZ - 1GHz
 
|}
 
|}
  

Revision as of 07:59, 24 April 2021

Electromagnetic compatibility results for iMX6 TinyRex Development kit are shown on this page. Test setup and scripts are described in details.

These measurement were performed with boards using the actual hardware and software configuration of the web shop development kits.

Connected cables/devices

  • Power jack: +5V power supply was used for input voltage
  • SD card (Sandisk): preloaded with filesystem, used for booting and for read/write test
  • Ethernet: 1 meter 1m CAT Ethernet loopback cable connected. Forced to 100Mb and used for ping test
  • one of these two HDMI options was used:
    • HDMI loopback: when HDMI input is tested using loopback connection, HDMI input is connected to its HDMI output via a shielded 1 meter long HDMI micro to HDMI cable
    • HDMI input source and monitor used: a video source (played by another iMX6 TinyRex Development kit) is plugged into HDMI input using HDMI Micro cable. HDMI Output signal is connected to monitor through 1.8m HDMI cable, monitor is plugged into mains but not turned on. Both monitor and the second iMX6 TinyRex board lay flat on the floor to minimize its affect on results
  • 2x USB flash drive: each connected through a 2m extension cable. Both used during read/write test
  • SATA hard drive: used for read/write testing. The hard drive was placed alongside the tested board. SATA disk was not part of all the test setups (as per results below)
  • Wifi PCIE mini card: inserted, but not actively used. No antennas connected
  • Debug cable: FTDI TTL-3V3 UART to USB cable, used only to setup the board, not used and not plugged in during the measurements

800px

Test description

The main purpose of testing was to measure Radiated emission of iMX6 TinyRex Development kit performing under heavy load. Following tests were running during the measurement:

  • CPU stress test
  • Memory stress test
  • HDMI input (receiving a 720p 3Mbps video stream)
  • HDMI output (received HDMI stream is forwarded to HDMI output)
  • SD card test (read & write)
  • SATA stress test (read & write) (if applicable)
  • Ethernet ping (and Ethernet SSH session)

Results

All the results were measured in compliance with the emission limits for FCC Class B (EMC standard EN 55022B). Class B devices are suitable for both residential and industrial applications as the norm standards use more restrictive limits.

Graph description

Lower band 30kHz - 1 GHz

Radiated emission are measured and displayed as quasi-peak values. This relation is represented as a blue curve in the measurements. Class B limits are shown by red highlighted line 22F3M_B.

Higher band 1 GHz - 4GHz

Two plots displaying the power density are used to show results in higher bands. Similar to lower frequencies a blue curve represents quasi-peak values. Class B limits applied for quasi-peak measurements is plotted as the higher placed red line 22F_P_B.

Black curve depicts average-power values. Threshold for average-power measurement is shown with the lower placed limit line called 22F_AV_B.

iMX6 TinyRex Development kit Max with enclosure - PASS

Test description:

  • stressapptest for CPU and memory
  • Ethernet loopback
  • running heavy testing script for USB and SD card read/write test
  • HDMI input and output both tested with 720p video stream
  • Ethernet SSH session

This setup used HDMI option with separate video input source and monitor. Both the board and monitor were placed on the floor to minimize its effects. The power source was hidden inside the chamber tunnel under the testing table.

800px

Vertical polarization
Horizontal polarization

370px



370px


iMX6 TinyRex Development kit Max: 30kHZ - 1GHz


Heavy testing - PASS

Vertical polarization
Horizontal polarization

370px


370px

Conducted emission

Heavy testing - PASS

The Development kit was powered by VER Series AC/DC Adaptor during the tests.

Vertical polarization
Horizontal polarization
370px
370px

Preparing the test

SD card setup

Linux 4.1 kernel was used for this test. Modified Xubuntu filesystem can be accessed from here. To create a new SD card, these instructions can be followed.

Set booting parameters

SD card inserted into the edge SD slot will be used as a filesystem device. Following U-Boot commands enable SD card booting and set up other parameters:

setenv bootargs_mmc 'setenv bootargs ${bootargs} ip=192.168.10.91:::255.255.255.0 root=/dev/mmcblk1p1 rootwait video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB666 vmalloc=400M fbmem=28M fbcon=28M'
setenv bootcmd_mmc 'run bootargs_mmc ; mmc dev 1; ext2load mmc 1 0x10800000 imx6TinyRex-uImage-gpu-en-audio-fix-03-APR-2014 3915972; bootm 0x10800000'
saveenv

Running tests

Test scripts are displayed in the section below or can be downloaded: Standard test or Heavy test.

Locations of mounted devices are used as script parameters (without /dev/ prefix). The command to start the test has this structure:

./name-of-the-test.sh SATA_DIR USB0_DIR USB1_DIR MMC0_DIR

Running the standard test:

./emc-test1.sh sda1 sdb1 sdc1 mmcblk0p1

Running the heavy test:

./emc-test-all.sh sda1 sdb1 sdc1 mmcblk0p1

To locate directories where the devices are mapped, "fdisk -l" command can be useful:

fdisk -l
 
Disk /dev/sda: 7998 MB, 7998455808 bytes
108 heads, 63 sectors/track, 2296 cylinders, total 15621984 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x001c2022
 
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048    15621983     7809968   83  Linux
 
Disk /dev/mmcblk0: 3904 MB, 3904897024 bytes
4 heads, 16 sectors/track, 119168 cylinders, total 7626752 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xc44e7f69
 
        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1            2048     7626751     3812352   83  Linux
 
Disk /dev/mmcblk1: 1977 MB, 1977614336 bytes
61 heads, 62 sectors/track, 1021 cylinders, total 3862528 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
 
        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk1p1              62     3861421     1930680   83  Linux
 
Disk /dev/sdb: 16.2 GB, 16219373568 bytes
256 heads, 48 sectors/track, 2578 cylinders, total 31678464 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xc3072e18
 
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1              48     7372799     3686376    6  FAT16
 
Disk /dev/sdc: 16.0 GB, 16008609792 bytes
255 heads, 63 sectors/track, 1946 cylinders, total 31266816 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
 
   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1              32    31266815    15633392    c  W95 FAT32 (LBA)

Note: In the example above the device /dev/mmcblk1p1 is a filesystem device. This SD card is tested by running the operating system.

Test scripts

Standard test script

#!/bin/sh
 
mountDevice() {
  mount /dev/$1 /media/$2
  cat /etc/mtab | grep -F "/dev/$1 /media/$2"
  if [ "$?" -eq "0" ]; then
    echo "$2 mounted"
  else
    echo "$2 not mounted"; exit 2
  fi
}
 
# mount devices a test a status
mountDevice $1 sata
mountDevice $2 usb0
mountDevice $3 usb1
mountDevice $4 mmc0
 
# tell the X applications where they should run
export DISPLAY=:0
 
# run X window - wait for the procces
service lightdm start
 
# connect ethernet loopback and force the ethernet to 100Mbit
mii-tool -F 100baseTx-HD
 
# play a video file in an infinite loop
echo 0 > /sys/class/graphics/fb2/blank
sudo -u "ubuntu" xfce4-terminal --geometry=70x20+100+10 -x mplayer -vo fbdev2:/dev/fb2 -vf scale -zoom -loop 0 -xy 1024 /home/ubuntu/Clou$
 
# ping
sudo -u "ubuntu" xfce4-terminal --geometry=70x25+100+600 -x ping 192.168.10.1 &
 
# top
sudo -u "ubuntu" xfce4-terminal --geometry=90x50+900+10 -x top &
 
proceed=1
file1="blackbird.wav"
 
while [ $proceed -eq 1 ]
do
 
  cp1_done=`ps cax | grep $cp1_pid | grep cp`
  if [ -z "$cp1_done" ]; then # run cp only if previous cp is done
    cp /media/usb0/$file1 /media/sata &
    cp1_pid=$!
    echo "started cp from usb0 to sata"
  fi
 
  cp2_done=`ps cax | grep $cp2_pid | grep cp`
  if [ -z "$cp2_done" ]; then # run cp only if previous cp is done
    cp /media/usb1/$file1 /media/mmc0 &
    cp2_pid=$!
    echo "started cp from usb1 to mmc0"
  fi
 
  aud_done=`ps cax | grep $aud_pid | grep aplay`
  if [ -z "$aud_done" ]; then
    aplay -D hw:0,0 /home/ubuntu/blackbird.wav &
    aud_pid=$!
    echo "started play audio"
  fi
 
done
 
# kill all procceses if Ctrl+C detected
trap '$precced=0; kill $cp1_pid $cp2_pid &aud_pid;' 2
sleep 10000

Heavy test script

#!/bin/sh
 
mountDevice() {
  mount /dev/$1 /media/$2
  cat /etc/mtab | grep -F "/dev/$1 /media/$2"
  if [ "$?" -eq "0" ]; then
    echo "$2 mounted"
  else
    echo "$2 not mounted"; exit 2
  fi
}
 
# mount devices a test a status
mountDevice $1 sata
mountDevice $2 usb0
mountDevice $3 usb1
mountDevice $4 mmc0
 
# tell the X applications where they should run
export DISPLAY=:0
 
# run X windows - wait for the procces
service lightdm start
 
# connect Ethernet loopback and force the ethernet to 100Mbit
mii-tool -F 100baseTx-HD
 
# gpu test
cd /root/gpu-viv-bin-mx6q-3.10.9-1.0.0-hfp/opt/viv_samples/vdk
./tutorial7 &
gpu_pid=$!
cd
 
# play a video file on the lvds display
echo 0 > /sys/class/graphics/fb2/blank
mplayer -vo fbdev2:/dev/fb2 -vf scale -zoom -loop 0 -xy 1024 -really-quiet /home/ubuntu/Clouds.avi &
vid_pid=$!
 
# stressapptest - testing sata, 2x usb, sd card, 1 thread CPU, 1 thread memory
stressapptest  -f /media/sata/tmp-file1 -f /media/usb0/tmp-file1 -f /media/usb1/tmp-file1 -f /media/mmc0/tmp-file1  -s 600000 -M 50 -m 1 $
str_pid=$!
echo "Stressapptest: " $str_pid
 
# play a audio file
mplayer -loop 0 -really-quiet /home/ubuntu/blackbird.wav &
aud_pid=$!
 
# ping
ping 192.168.10.1 &
ping_pid=$!
 
# top
top
top_pid=$!
 
 
# kill all procceses if Ctrl+C detected
trap '$procced=0; kill $gpu_pid $vid_pid $aud_pid $str_pid $ping_pid;' 2
sleep 10000

Note: If the LVDS monitor is not included in the setup, these lines need to be comment out:

# echo 0 > /sys/class/graphics/fb2/blank
# mplayer -vo fbdev2:/dev/fb2 -vf scale -zoom -loop 0 -xy 1024 -really-quiet /home/ubuntu/Clouds.avi &

To disable LVDS Interface, following command is required:

echo 1 > /sys/class/graphics/fb2/blank


The original article can be accessed on the iMX6TinyRex.com website.