Difference between revisions of "iMX8M Industrial Environmental chamber testing"

From Voipac Wiki
Jump to navigation Jump to search
 
(139 intermediate revisions by 2 users not shown)
Line 3: Line 3:
 
<div style="float:right">__TOC__</div>
 
<div style="float:right">__TOC__</div>
  
On this page environmental stress testing results of iMX8M Industrial Development Kit are displayed. Detailed instructions how to setup boards are also shown.
+
On this page environmental stress testing results of iMX8M Industrial Development Kit are displayed. Detailed instructions how to setup kits are also shown.
  
 
== Hardware configuration ==
 
== Hardware configuration ==
Line 9: Line 9:
 
<br />
 
<br />
 
* 1x iMX8M Industrial Development Kit in [[iMX8M Industrial Max|Max configuration]]
 
* 1x iMX8M Industrial Development Kit in [[iMX8M Industrial Max|Max configuration]]
** i.MX 8M Quad 1.5GHz CPU - extended industrial temperature range (-40°C to +105°C)
+
** i.MX 8M Quad 1.3GHz CPU - extended industrial temperature range (-40°C to +105°C)
** 4GB LPDDR4 Memory - extended industrial temperature range (-40°C to +105°C)
+
** 4GB LPDDR4 Memory - extended industrial temperature range (-40°C to +95°C)
** eMMC 32GB - industrial temperature range (-40°C to +85°C)
+
** eMMC 32GB - industrial temperature range (-40°C to +85°C)
** WiFi & Bluetooth - industrial temperature range (-40°C to +85°C)
+
** SPB228-D-3 WiFi & Bluetooth Module - industrial temperature range (-40°C to +85°C)
 
<br />
 
<br />
 
* 1x iMX8M Industrial Development Kit in [[iMX8M Industrial Pro|Pro configuration]]
 
* 1x iMX8M Industrial Development Kit in [[iMX8M Industrial Pro|Pro configuration]]
** i.MX 8M Quad 1.5GHz CPU - extended industrial temperature range (-40°C to +105°C)
+
** i.MX 8M QuadLite 1.3GHz CPU - extended industrial temperature range (-40°C to +105°C)
** 2GB LPDDR4 Memory - automotive temperature range (-40°C to +125°C)
+
** 2GB LPDDR4 Memory - automotive temperature range (-40°C to +95°C)
** eMMC 16GB - industrial temperature range (-40°C to +85°C)
+
** eMMC 16GB - industrial temperature range (-40°C to +85°C)
** WiFi & Bluetooth - industrial temperature range (-40°C to +85°C)
+
** SPB228-D-3 WiFi & Bluetooth Module - industrial temperature range (-40°C to +85°C)
 
<br />
 
<br />
* 1x iMX8M Industrial Development Kit in [[iMX8M Industrial Pro|Pro Commercial configuration]]
+
* 1x iMX8M Industrial Development Kit in [[iMX8M Industrial Basic|Basic configuration]]
** i.MX 8M Quad 1.5GHz CPU - extended industrial temperature range (0°C to +95°C)
+
** i.MX 8M Dual 1.3GHz CPU - extended industrial temperature range (-40°C to +105°C)
** 2GB LPDDR4 Memory - automotive temperature range (-40°C to +125°C)
+
** 1GB LPDDR4 Memory - industrial temperature range (-40°C to +95°C)
** eMMC 16GB - industrial  temperature range (-40°C to +85°C)
+
** eMMC 8GB - industrial temperature range (-40°C to +85°C)
** WiFi & Bluetooth - industrial temperature range (-40°C to +85°C)
 
 
<br />
 
<br />
* 1x iMX8M Industrial Development Kit in [[iMX8M Industrial Basic|Basic configuration]]
+
* 1x iMX8M Industrial Development Kit in [[iMX8M Industrial Max|Max configuration]]
** i.MX 8M Quad 1.5GHz CPU - extended industrial  temperature range (-40°C to +105°C)
+
** i.MX 8M Quad 1.5GHz CPU - extended commercial temperature range (0°C to +95°C)
** 1GB LPDDR4 Memory - industrial temperature range (-40°C to +95°C)
+
** 4GB LPDDR4 Memory - industrial temperature range (-30°C to +85°C)
** eMMC 8GB - industrial  temperature range (-40°C to +85°C)
+
** eMMC 32GB - extended temperature range (-25°C to +85°C)
** WiFi & Bluetooth - industrial temperature range (-40°C to +85°C)
+
** CM-276NF WiFi & Bluetooth Module - industrial temperature range (-30°C to +85°C)
 
<br />
 
<br />
All of the tested development kits used standard configuration of iMX6 TinyRex Base Board with extended temperature range (-20°C to +85°C). The majority of tested kits used a standard heatsink. This heatsink sized 35x35x10mm is included in every development kit package. Thus these measurements show the actual performance of web shop based configuration. Some of the boards were mounted into a custom build [https://www.voipac.com/#iMX6-ALC-00000000 iMX6 TinyRex aluminium case].
+
All of the tested modules used standard configuration of iMX Development Baseboard with extended temperature range (-20°C to +70°C). The majority of tested kits used the standard heatsink sized 25x25x25mm, which is included in every development kit package, thus showcasing that this standardised heatsink performs even in very harsh conditions. One of the kits was mounted with a larger heatsink and one of the standard heatsinks was mounted with an active fan to test its impact on the performance.<br />
 +
To test the performance of the video capturing capabilities of the development kits under extreme conditions, NXP MIPI-CSI and Digilent MIPI-CSI cameras were included in the tested setups.
 
<br />
 
<br />
  
 
The setup in the environmental chamber:<br />
 
The setup in the environmental chamber:<br />
[[image:iMX6_TinyRex_Development_Kit-Env_chamber-Boards_in_the_chamber.jpg|800px]]
+
[[image:iMX8M_Industrial_Development_Kits-Enviromental_chamber_overview_with_description.jpg|800px]]
  
 
== Test description ==
 
== Test description ==
Three iMX6 TinyRex Development Kits (one in Max, one in Pro and one in Basic version) were running full peripheral test and stressed all the peripherals in different range of temperatures. All the rest of the boards were running CPU and memory tests to check the reliability and stability of the firmware and hardware design.<br /><br />
+
Four iMX8M Industrial Development Kits (one in Max Industrial configuration, one in Pro Industrial configuration, one in Basic Industrial configuration and one in Max Commercial configuration) were running CPU and memory tests to stress out all the most significant peripherals in the whole Industrial temperature scale, ranging from -40°C to +85°C, to check the reliability and stability of the firmware and hardware design.<br /><br />
  
 
Configuration, software and testing threads in details:<br /><br />
 
Configuration, software and testing threads in details:<br /><br />
  
'''3x iMX6 TinyRex peripheral stress testing'''
+
'''1x iMX8M Industrial Development Kit [setup no. 4] in [[iMX8M Industrial Max|Max configuration]] and Industrial temperature range<br />CPU and memory stress testing'''
* 1 thread of extensive Memory stress test
+
* 1 thread of extensive DDR4 Memory stress test
 
* 1 thread of CPU stress test
 
* 1 thread of CPU stress test
* SATA stress test (applied for Max and Pro versions only)
+
* sending HDMI Output to external monitor
* receiving and processing HDMI Input signal through video input circuitry
+
* all the messages were displayed on the serial console connected via Micro USB cable
* sending this video stream over HDMI Output to external monitor
+
* firmware running from eMMC Flash memory
* copying a file from the first USB drive to SD card and vice versa
+
* Ethernet cable connected to network switch placed outside of the chamber
* copying a file from the second USB device to SATA hard drive and vice versa (applied for Max and Pro versions)
+
* 2x USB device connected and placed outside of the chamber
* copying a file from the second USB drive to SD card and vice versa (applied for Basic version)
+
* WiFi and Bluetooth module active, connected to the antennas and running discovery mode
* pinging the host PC via Ethernet
+
* large 48x48x16mm heatsink
* all the messages were printed out on the serial console through connected FTDI cable
 
* firmware running from SD card
 
* standard 35x35x10mm heatsink
 
 
<br />
 
<br />
'''2x iMX6 TinyRex Max Memory stress testing'''
+
'''1x iMX8M Industrial Development Kit [setup no. 2] in [[iMX8M Industrial Pro|Pro configuration]] and Industrial temperature range<br />CPU and memory stress testing'''
* 4 threads of extensive Memory stress test
+
* 1 thread of extensive DDR4 Memory stress test
* 4 threads of CPU stress test
+
* 1 thread of CPU stress test
* reading CPU temperature via SSH Ethernet session
+
* sending HDMI Output to external monitor
* serial FTDI cable used for displaying messages
+
* NXP MIPI-CSI camera connected and capturing video stream
* firmware running from SD card
+
* all the messages were displayed on the serial console connected via Micro USB cable
* one set mounted inside the aluminium case
+
* firmware running from eMMC Flash memory
 +
* Ethernet cable connected to network switch placed outside of the chamber
 +
* 2x USB device connected and placed outside of the chamber
 +
* WiFi and Bluetooth module active, connected to the antennas and running discovery mode
 +
* standard 25x25x25mm heatsink
 
<br />
 
<br />
'''2x iMX6 TinyRex Pro Memory stress testing'''
+
'''1x iMX8M Industrial Development Kit [setup no. 1] in [[iMX8M Industrial Basic|Basic configuration]] and Industrial temperature range<br />CPU and memory stress testing'''
* 2 threads of extensive Memory stress test
+
* 1 thread of extensive DDR4 Memory stress test
* 2 threads of CPU stress test
+
* 1 thread of CPU stress test
* reading CPU temperature via SSH Ethernet session
+
* sending HDMI Output to external monitor
* serial FTDI cable used for displaying messages
+
* all the messages were displayed on the serial console connected via Micro USB cable
* firmware running from SD card
+
* firmware running from eMMC Flash memory
* one set mounted inside the aluminium case
+
* Ethernet cable connected to network switch placed outside of the chamber
 +
* 2x USB device connected and placed outside of the chamber
 +
* WiFi PCI Express card plugged in, connected to the antennas and running discovery mode
 +
* standard 25x25x25mm heatsink
 
<br />
 
<br />
'''2x iMX6 TinyRex Basic Memory stress testing'''
+
'''1x iMX8M Industrial Development Kit [setup no. 3] in [[iMX8M Industrial Max|Max configuration]] and Commercial temperature range<br />CPU and memory stress testing'''
* 1 threads of extensive Memory stress test
+
* 1 thread of extensive DDR4 Memory stress test
* 1 threads of CPU stress test
+
* 1 thread of CPU stress test
* reading CPU temperature via SSH Ethernet session
+
* sending HDMI Output to external monitor
* serial FTDI cable used for displaying messages
+
* Digilent MIPI-CSI camera connected and capturing video stream
* firmware running from SD card
+
* all the messages were displayed on the serial console connected via Micro USB cable
* one set mounted inside the aluminium case
+
* firmware running from eMMC Flash memory
 +
* Ethernet cable connected to network switch placed outside of the chamber
 +
* 2x USB device connected and placed outside of the chamber
 +
* WiFi and Bluetooth module active, connected to the antennas and running discovery mode
 +
* standard 25x25x25mm heatsink including a fan
 
<br />
 
<br />
USB flash devices and SATA hard drives were placed outside the environmental chamber. All the scripts running during the test and the board setup instructions can be found in section [[#Preparing the test|How to prepare the test]].
+
Power sources, USB flash devices, network switch, HDMI monitor and controlling PC were placed outside the environmental chamber. All the scripts running during the test and the board setup instructions can be found in section [[#Preparing the test|How to prepare the test]].
  
 
== Testing Results ==
 
== Testing Results ==
The picture below shows the temperature profile during the whole testing process:<br />
+
The picture below shows the temperature profile during the whole testing process. Humidity was not controlled. The temperature gradient for the environment chamber was set to 1°C/min.<br />
[[image:iMX6_TinyRex_Development_Kit-Env_chamber-Temperature_profile.png|680px]]
+
[[image:iMX8M_Industrial_Development_Kit-Env_chamber_temperature_profile.png|800px]]
  
=== Running the boards at -40°C – PASS ===
+
=== Running the development kits at -40°C – PASS ===
Test description: CPU, Memory and peripheral stress tests were running at -40°C. All the tested kits were working without errors during the whole time, even if some components used for iMX6 TinyRex Module Basic were only rated for temperature range between -20°C and +105°C. iMX6 TinyRex Base Boards were running at this temperature with components certified only from -20°C to +85°C temperature range.<br /><br />
+
Test description: CPU, Memory and peripheral stress tests were running at -40°C. All the tested kits were working without errors during the whole time, even if some components used for iMX8M Industrial Development Kit Max in Commercial temperature range were only rated for the temperature range between 0°C and +95°C.<br /><br />
  
 
A closer image on the temperature chamber displaying the minimum temperature is shown below. These readouts are available on the display:
 
A closer image on the temperature chamber displaying the minimum temperature is shown below. These readouts are available on the display:
* the first number shows relative humidity
+
* the first number shows current temperature
* the second one current temperature  
+
* the second one set temperature
* the last one the dew point
+
* the last two shows relative humidity. Humidity was not controlled during testing process.
[[image:iMX6_TinyRex_Development_Kit-Env_chamber-Boards_at_40°C.jpg|800px]]
+
[[image:iMX8M Industrial Kit-Env chamber-Boards at 40°C.png|800px]]
 +
<br /><br />
 +
[[image:iMX8M_Industrial_Development_Kit-Env_chamber_at_-40C.jpg|800px]]
  
=== Running the kits at high temperatures (from +60°C to +100°C) – PASS ===
+
=== Running the development kits at +85°C – PASS ===
Test description: The ambient temperature was gradually increasing (from 60°C up to 100°C) while CPU, Memory and peripheral stress tests were running. The moment when CPU frequency had decreased was used as a test threshold (this occurred when CPU temperature reached +70°C up to +100°C). Components used for iMX6 TinyRex Base Boards were only rated from -20°C to +85°C operating temperature range.<br />
+
Test description: The pre-set temperature profile was followed until the development kits gradually reached +85°C. The kits remained around this temperature for the duration of two hours and at the end of this whole cycle all the kits were running.<br />
[[image:iMX6_TinyRex_Development_Kit-Env_chamber-Boards_at_+100°C.jpg|800px]]
+
[[image:iMX8M Industrial Kit-Env chamber-Boards at 86°C.png|800px]]
 +
<br /><br />
 +
[[image:iMX8M_Industrial_Development_Kit-Env_chamber_at_+85C.jpg|800px]]
  
=== Temperature stress test – quick change from -40°C to -10°C and back – PASS ===
+
=== Switch OFF/ON test at -40°C – PASS ===
Test description: The ambient temperature was quickly increased from -40°C to -10°C and then back to -40°C. The boards were running CPU, Memory and peripheral stress tests. All the boards were working correctly.
+
Test description: At temperature -40°C the development kits were switched OFF, left OFF for at least 15 minutes (to cool down completely) and then switched ON to see if they boot up without problems. Once booted up into Linux, the test script was launched to test RAM memory and all peripherals. The kits were turned OFF and ON again multiple times to see potential issues at the lowest temperature level. All of the tested setups booted up successfully.
  
=== Temperature stress test – quick change from +90°C to +30°C and back – PASS ===
+
<br />
Test description: The ambient temperature was quickly decreased from +90°C to +30°C and back to +90°C while running CPU, Memory and peripheral stress tests. All boards were working without errors.<br /><br />
+
[[image:iMX8M Industrial Kit-Env chamber-Boards snow.png|800px]]
 
 
Thermal camera focused on the boards as the set temperature inside the chamber reached +85°C:<br />
 
[[image:iMX6_TinyRex_Development_Kit-Env_chamber-Thermo_camera_capture_at_+85°C.png|800px]]
 
 
 
=== Switch ON/OFF test – PASS ===
 
Test description: At temperatures from -30°C to -40°C the boards were switched OFF, left OFF for at least 5 minutes (to cool down completely) and then switched ON to see if they boot up without problems. Once booted up into Linux, the boards were turned off again. All of the tested boards booted up successfully. This test was performed 3 times at -30°C, -35°C and -40°C temperatures.
 
 
 
=== Cooling performance at high temperatures ===
 
Test description: As mentioned above, different heatsinks and enclosures were utilized in order to compare the cooling abilities. All these tests were performed with Max version which generate the most heat by itself. All setup reached temperature +85°C in the chamber while still successfully running. The board in the enclosure with the biggest height and cooling fins on the top size reached +100°C.<br />
 
{|
 
|[[image:iMX6_TinyRex_Development_Kit-Env_chamber-Board_in_enclosure.jpg|396px]]
 
|[[image:iMX6 TinyRex Development Kit-Env chamber-Enclosure.jpg|396px]]
 
|}
 
  
 
== PC setup ==
 
== PC setup ==
During the test DHCP and FTP servers were utilised. The PC was also used during Ethernet ping test while controlling all the boards through SSH and serial console sessions. The control computer was running Windows 7 operating system.
+
The PC was used during the test to control / monitor all the kits through serial console sessions. The control computer was running Windows 10 operating system.
 
 
=== Setting the network ===
 
Disable firewall (PC will not be connected to the Internet) and setup a static IP address: Press Windows button -> go to Control Panel -> Network and Internet -> Network and Sharing Center -> Change adapter settings (on the right side in the bar) -> double click on Local Area Connection -> Properties -> In the tab Networking go to Internet Protocol Version 4 (TCP/IPv4) -> type the static IP address and subnet mask as shown below:<br />
 
[[image:iMX6_TinyRex_Development_Kit-Env_chamber-Network_settings.png|400px]]
 
 
 
=== Enabling sharing ===
 
iMX6 TinyRex Development kits and the control PC are connected via Gigabit Ethernet switch. To ensure correct IP address assignment, turn on the PC first, connect it with the switch and only after that turn the switch on. To be able to download the files from the FTP server, sharing option need to be enabled first. This can be done by setting up the network as a ''work network''. Sharing can be enabled in Control Panel -> Network and Internet -> Network and Sharing Center -> Click to Choose homegroup and sharing options:<br />
 
[[image:iMX6_TinyRex_Development_Kit-Env_chamber-Network_sharing.png|710px]]
 
 
 
===  Setting up the TFTP and DHCP servers ===
 
Tftpd32 software supports both TFTP and DHCP server options. For more details about DHCP configuration, follow the screenshots below:<br />
 
[[image:iMX6_TinyRex_Development_Kit-Env_chamber-DHCP_settings.png|360px]]<br /><br />
 
[[image:iMX6_TinyRex_Development_Kit-Env_chamber-DHCP_control.png|460px]]
 
  
=== SSH and Serial consoles ===
+
=== HDMI Outputs and Serial consoles ===
To control iMX6 TinyRex Development Kits, one TeraTerm serial console was opened per board. SSH clients were used to read temperature. For the boards with the peripheral test, an extra SSH client was established to be able to spot possible errors or warnings if occurred.<br />
+
To control iMX8M Industrial Development Kits, one TeraTerm serial console was opened for each setup. The kits were connected to the external HDMI switch to monitor HDMI outputs.
[[image:iMX6_TinyRex_Development_Kit-Env_chamber-Serial_console.png|800px]]
 
 
<br /><br />
 
<br /><br />
The setup of the environmental chamber cables and out-of-chamber equipment:<br />
+
The setup of the environmental chamber cables and out-of-chamber equipment:
[[image:iMX6_TinyRex_Development_Kit-Env_chamber-Setup_overview.jpg|800px]]
+
<br />
 +
[[image:iMX8M Industrial Development Kit-Climate chamber overview.jpg|800px]]
  
 
== Preparing the test ==
 
== Preparing the test ==
 
=== Boot device and software ===
 
=== Boot device and software ===
SD card was selected as a booting device for all the boards. U-Boot settings were not adjusted as the default configuration was used. The only change compared to standard software package was running a multimedia filesystem. To prepare a fresh SD card follow [[iMX6 TinyRex Max Creating Bootable microSD Card|these instructions]]. Here is an example of creating a SD card suitable for Max configuration:
+
The eMMC memory was selected as a booting device for all the kits. Device tree files were not adjusted as the default configuration was used. The only change compared to standard software package was running the test script. In order to flash a fresh firmware into the eMMC Memory follow [[iMX8M_Industrial_Flashing_Procedure|these instructions]].
<syntaxhighlight lang="bash">
 
git clone https://github.com/voipac/imx6tinyrex_bin_linux
 
cd imx6tinyrex_bin_linux/
 
sudo ./fsl-sdcard-partition.sh -max /dev/mmcblk0
 
</syntaxhighlight>
 
  
 
=== Downloading stress test ===
 
=== Downloading stress test ===
Stressapptest package was selected to check CPU and memory integrity. Placing this file into the same directory where the testing script will be stored is important:
+
Stress-ng package was selected to check CPU and memory integrity. Placing this file into the same directory where the testing script will be stored is important:
<syntaxhighlight lang="bash">
 
wget http://downloads.voipac.com/files/iMX6_TinyRex_Development_Kit/module/documents/Environmental_chamber_testing/stressapptest
 
</syntaxhighlight>
 
 
 
=== Setup the cron ===
 
To be able to check the CPU temperature every minute a new cron job was setup. For Ubuntu file systems ''postfix'' package installation is required:
 
<syntaxhighlight lang="bash">
 
sudo apt-get install postfix
 
</syntaxhighlight>
 
 
 
To setup a cron tab, the file containing all cron jobs needs to be altered. Before running the crontab for the first time, selecting a text editor is required:
 
<syntaxhighlight lang="bash">
 
sudo crontab -e
 
</syntaxhighlight>
 
 
 
Paste the following line to the end of the cron list file. The output time format will be set the same as for stressapptest. Cron job performs a current CPU temperature readout and the data are saved in the log file. The log format was selected identical to the one used by stressapptest package:
 
<syntaxhighlight lang="bash">
 
* * * * * { echo -n $(date +%Y/%m/%d-%T); echo -n "("; echo -n $(date +%Z); echo -n ") "; cat /sys/devices/virtual/thermal/thermal_zone0/temp; } >> ~/testing-env-chamber/cpu-temp.log
 
</syntaxhighlight>
 
'''''Note:''''' The percent sign '%' has a special purpose in the cron file. As this sign is needed to write the date formats, the backslash is required to be placed before the percent sign: '\%'.
 
 
 
===  Setting up the date ===
 
If the master PC is equipped with a timeserver, server date and time can be automatically obtained using this Linux feature:
 
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
ntpdate 192.168.0.2
+
wget https://downloads.voipac.com/files/iMX8M_Industrial_Development_Kit/module/documents/Thermal_stress_resistance/imx8mq-voipac-peripheral-test.sh
</syntaxhighlight>
 
 
 
Time and date can also be set up manually (use format MMDDhhmmYYYY e.g. 07th of July 2016 4:27 pm):
 
<syntaxhighlight lang="bash">
 
date 071116272016
 
</syntaxhighlight>
 
 
 
=== Setup the CPU temperature printout ===
 
Open one SSH client per board where CPU temperature will be shown. Tail command is utilized to display the last part of the log file, which is filled up as the CRON job outputs the current readouts:
 
<syntaxhighlight lang="bash">
 
tail -F cpu-temp-measuring.log
 
</syntaxhighlight>
 
 
 
=== Error checking during peripheral test ===
 
To make sure tests are running smoothly, potential errors can be detected by opening another SSH session:
 
<syntaxhighlight lang="bash">
 
tail -f env-chamber-testing.log | grep -i "error"
 
</syntaxhighlight>
 
 
 
=== Play video file for peripheral test ===
 
To be able to test HDMI Input during the peripheral testing, a video file was played from boards which were running memory stress tests only. Infinite loop is opened in another SSH session:
 
<syntaxhighlight lang="bash">
 
while [ true ]; do gst-play-1.0 /media/ploughing.mp4; done
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
=== Start CPU and memory stress test ===
 
=== Start CPU and memory stress test ===
Navigate into the directory, where stressapptest feature and test are stored.<br /><br />
+
Navigate into the directory, where stress test feature and the testing script are stored.<br /><br />
  
Stress command for Max configuration:
+
Stress sequence script:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
./stressapptest -s 600000 -M 1000 -m 4 -C 4 -W -l ~/env-chamber-testing/stressapptest.log --printsec 100
+
for d in $(seq 1 1 99999)
</syntaxhighlight>
+
do
 
+
uptime
Stress command for Pro configuration:
+
echo "Test $a Test $b Test $c  $d times"
<syntaxhighlight lang="bash">
+
echo "Start stress-ng --iomix 1 -t 10 -v"
./stressapptest -s 600000 -M 700 -m 2 -C 2 -W -l ~/env-chamber-testing/stressapptest.log --printsec 100
+
stress-ng --iomix 1 -t 10 -v
</syntaxhighlight>
+
echo "End"
 
+
echo "Start stress-ng --cpu 2 --vm 4 -t 10"
Stress command for Basic configuration:
+
stress-ng --cpu 2 --vm 4 -t 10
<syntaxhighlight lang="bash">
+
echo "End"
./stressapptest -s 600000 -M 150 -m 1 -C 1 -W -l ~/env-chamber-testing/stressapptest.log --printsec 100
+
echo "Start stress-ng --shm 0 -t 10"
 +
stress-ng --shm 0 -t 10
 +
echo "End"
 +
echo "Start stress-ng --seq 0 -t 2 --tz -v"
 +
stress-ng --seq 0 -t 2 --tz -v
 +
echo "End"
 +
echo "Start Thermal zone information"
 +
stress-ng --matrix 0 --tz -t 10 --log-brief -t 10
 +
echo "End"
 +
done
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
=== Start peripheral test ===
 
=== Start peripheral test ===
Before the test start it is a good practice to make sure that all the devices were plugged in successfully. To find out where the devices were mounted following command can be used:
+
Plug the development kit into mains and connect it to the controlling PC via console. Before the first time usage of the script, permissions need to be granted by the following command:  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
fdisk -l
+
chmod +x imx8m-voipac-peripheral-test.sh
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
<br />
 +
Testing scripts command consists of the following arguments:
 +
* the first parameter - configuration of tested development kit (Max, Pro or Basic)
 +
* the second parameter - USB drive 1 location
 +
* the third parameter - USB drive 2 location
 +
* the fourth parameter - SD card location
 +
<br />
 +
Several commands used during environmental chamber testing are shown below:
  
The testing script uses multiple variables to specify its operation. As the first parameter board configuration is used (-max, -pro or -basic). As other parameters device names
+
* iMX8M Industrial Development Kit Max:
are written in the following order: the first USB stick, the second USB, SD card and SATA drive (if used). All logs are stored into a single file.<br /><br />
 
 
 
Starting peripheral test for Max configuration:
 
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
./imx6-tinyrex-v1i1-peripheral-test.sh -max sdb1 sdc1 mmcblk2p2 sda2 2>&1 | tee -i trx-env-chamber-testing.log
+
./imx8m-voipac-peripheral-test.sh -max sda1 sdb1 mmcblk1p1 | tee -i imx8m-env-testing.log
 
</syntaxhighlight>
 
</syntaxhighlight>
 
+
* iMX8M Industrial Development Kit Pro:
Starting peripheral test for Pro configuration:
 
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
./imx6-tinyrex-v1i1-peripheral-test.sh -pro sdb1 sdc1 mmcblk2p2 sda1 2>&1 | tee -i trx-env-chamber-testing.log
+
./imx8m-voipac-peripheral-test.sh -pro sda1 sdb1 mmcblk1p1 | tee -i imx8m-env-testing.log
 
</syntaxhighlight>
 
</syntaxhighlight>
 
+
* iMX8M Industrial Development Kit Basic:
Starting peripheral test for Basic configuration:
 
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
./imx6-tinyrex-v1i1-peripheral-test.sh -basic sda1 sdb1 mmcblk2p2 2>&1 | tee -i trx-env-chamber-testing.log
+
./imx8m-voipac-peripheral-test.sh -basic sda1 sdb1 mmcblk1p1 | tee -i imx8m-env-testing.log
 
</syntaxhighlight>
 
</syntaxhighlight>
 
+
<br />
The complete script can be found in [http://downloads.voipac.com/files/iMX6_TinyRex_Development_Kit/module/documents/Environmental_chamber_testing/imx6-tinyrex-v1i1-peripheral-test.sh the download section] or down below:
+
The complete script can be found in [https://downloads.voipac.com/files/iMX8M_Industrial_Development_Kit/module/documents/Thermal_stress_resistance/imx8mq-voipac-peripheral-test.sh the downloads section] or down below:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
#!/bin/sh
 
#!/bin/sh
Line 316: Line 263:
 
trap finish_test_now 2
 
trap finish_test_now 2
 
   
 
   
# play a video stream from HDMI input - testing also HDMI output
+
# play a video stream
 
gst-launch-1.0 -q imxv4l2src ! autovideosink &
 
gst-launch-1.0 -q imxv4l2src ! autovideosink &
 
   
 
   
# stressapptest - one thread CPU, one thread memory, sata thread (if possible)
+
# stressapptest - CPU threads and RAM memory threads
 
if [ "${basic}" -eq "1" ]; then
 
if [ "${basic}" -eq "1" ]; then
 
   stress-ng --cpu 2 --vm 4 &
 
   stress-ng --cpu 2 --vm 4 &
Line 359: Line 306:
 
do
 
do
 
   
 
   
   ping -q -c1 127.0.0.1 >> env-chamber-testing.log
+
   ping -q -c1 192.168.0.2 >> env-chamber-testing.log
 
   if [ $? -ne 0 ]
 
   if [ $? -ne 0 ]
 
   then
 
   then
 
     echo "$(date +\%Y/\%m/\%d-\%T)($(date +\%Z)) ERROR: Ping failed"
 
     echo "$(date +\%Y/\%m/\%d-\%T)($(date +\%Z)) ERROR: Ping failed"
  else
 
    echo "$(date +\%Y/\%m/\%d-\%T)($(date +\%Z)) Ping OK"
 
 
   fi
 
   fi
 
    
 
    
Line 404: Line 349:
 
    
 
    
 
done
 
done
 +
</syntaxhighlight>
  
 +
=== Starting camera capture ===
 +
==== Digilent camera ====
 +
To initiate the camera to start the capturing of video stream, following command can be used:
 +
<syntaxhighlight lang="bash">
 +
GST_DEBUG=GST_BUFFER:5 gst-launch-1.0 v4l2src device=/dev/video1 ! 'video/x-raw,framerate=30/1' ! autovideosink
 
</syntaxhighlight>
 
</syntaxhighlight>
  
<br />
+
==== NXP camera ====
 +
To initiate the camera to start the capturing of video stream, following command can be used:
 +
<syntaxhighlight lang="bash">
 +
GST_DEBUG=GST_BUFFER:5 gst-launch-1.0 v4l2src device=/dev/video0 ! 'video/x-raw,framerate=30/1' ! autovideosink
 +
</syntaxhighlight>

Latest revision as of 14:50, 11 September 2024

On this page environmental stress testing results of iMX8M Industrial Development Kit are displayed. Detailed instructions how to setup kits are also shown.

Hardware configuration

All of the modules used standard specification except of the temperature ranges for the key components as described below:

  • 1x iMX8M Industrial Development Kit in Max configuration
    • i.MX 8M Quad 1.3GHz CPU - extended industrial temperature range (-40°C to +105°C)
    • 4GB LPDDR4 Memory - extended industrial temperature range (-40°C to +95°C)
    • eMMC 32GB - industrial temperature range (-40°C to +85°C)
    • SPB228-D-3 WiFi & Bluetooth Module - industrial temperature range (-40°C to +85°C)


  • 1x iMX8M Industrial Development Kit in Pro configuration
    • i.MX 8M QuadLite 1.3GHz CPU - extended industrial temperature range (-40°C to +105°C)
    • 2GB LPDDR4 Memory - automotive temperature range (-40°C to +95°C)
    • eMMC 16GB - industrial temperature range (-40°C to +85°C)
    • SPB228-D-3 WiFi & Bluetooth Module - industrial temperature range (-40°C to +85°C)


  • 1x iMX8M Industrial Development Kit in Basic configuration
    • i.MX 8M Dual 1.3GHz CPU - extended industrial temperature range (-40°C to +105°C)
    • 1GB LPDDR4 Memory - industrial temperature range (-40°C to +95°C)
    • eMMC 8GB - industrial temperature range (-40°C to +85°C)


  • 1x iMX8M Industrial Development Kit in Max configuration
    • i.MX 8M Quad 1.5GHz CPU - extended commercial temperature range (0°C to +95°C)
    • 4GB LPDDR4 Memory - industrial temperature range (-30°C to +85°C)
    • eMMC 32GB - extended temperature range (-25°C to +85°C)
    • CM-276NF WiFi & Bluetooth Module - industrial temperature range (-30°C to +85°C)


All of the tested modules used standard configuration of iMX Development Baseboard with extended temperature range (-20°C to +70°C). The majority of tested kits used the standard heatsink sized 25x25x25mm, which is included in every development kit package, thus showcasing that this standardised heatsink performs even in very harsh conditions. One of the kits was mounted with a larger heatsink and one of the standard heatsinks was mounted with an active fan to test its impact on the performance.
To test the performance of the video capturing capabilities of the development kits under extreme conditions, NXP MIPI-CSI and Digilent MIPI-CSI cameras were included in the tested setups.

The setup in the environmental chamber:
iMX8M Industrial Development Kits-Enviromental chamber overview with description.jpg

Test description

Four iMX8M Industrial Development Kits (one in Max Industrial configuration, one in Pro Industrial configuration, one in Basic Industrial configuration and one in Max Commercial configuration) were running CPU and memory tests to stress out all the most significant peripherals in the whole Industrial temperature scale, ranging from -40°C to +85°C, to check the reliability and stability of the firmware and hardware design.

Configuration, software and testing threads in details:

1x iMX8M Industrial Development Kit [setup no. 4] in Max configuration and Industrial temperature range
CPU and memory stress testing

  • 1 thread of extensive DDR4 Memory stress test
  • 1 thread of CPU stress test
  • sending HDMI Output to external monitor
  • all the messages were displayed on the serial console connected via Micro USB cable
  • firmware running from eMMC Flash memory
  • Ethernet cable connected to network switch placed outside of the chamber
  • 2x USB device connected and placed outside of the chamber
  • WiFi and Bluetooth module active, connected to the antennas and running discovery mode
  • large 48x48x16mm heatsink


1x iMX8M Industrial Development Kit [setup no. 2] in Pro configuration and Industrial temperature range
CPU and memory stress testing

  • 1 thread of extensive DDR4 Memory stress test
  • 1 thread of CPU stress test
  • sending HDMI Output to external monitor
  • NXP MIPI-CSI camera connected and capturing video stream
  • all the messages were displayed on the serial console connected via Micro USB cable
  • firmware running from eMMC Flash memory
  • Ethernet cable connected to network switch placed outside of the chamber
  • 2x USB device connected and placed outside of the chamber
  • WiFi and Bluetooth module active, connected to the antennas and running discovery mode
  • standard 25x25x25mm heatsink


1x iMX8M Industrial Development Kit [setup no. 1] in Basic configuration and Industrial temperature range
CPU and memory stress testing

  • 1 thread of extensive DDR4 Memory stress test
  • 1 thread of CPU stress test
  • sending HDMI Output to external monitor
  • all the messages were displayed on the serial console connected via Micro USB cable
  • firmware running from eMMC Flash memory
  • Ethernet cable connected to network switch placed outside of the chamber
  • 2x USB device connected and placed outside of the chamber
  • WiFi PCI Express card plugged in, connected to the antennas and running discovery mode
  • standard 25x25x25mm heatsink


1x iMX8M Industrial Development Kit [setup no. 3] in Max configuration and Commercial temperature range
CPU and memory stress testing

  • 1 thread of extensive DDR4 Memory stress test
  • 1 thread of CPU stress test
  • sending HDMI Output to external monitor
  • Digilent MIPI-CSI camera connected and capturing video stream
  • all the messages were displayed on the serial console connected via Micro USB cable
  • firmware running from eMMC Flash memory
  • Ethernet cable connected to network switch placed outside of the chamber
  • 2x USB device connected and placed outside of the chamber
  • WiFi and Bluetooth module active, connected to the antennas and running discovery mode
  • standard 25x25x25mm heatsink including a fan


Power sources, USB flash devices, network switch, HDMI monitor and controlling PC were placed outside the environmental chamber. All the scripts running during the test and the board setup instructions can be found in section How to prepare the test.

Testing Results

The picture below shows the temperature profile during the whole testing process. Humidity was not controlled. The temperature gradient for the environment chamber was set to 1°C/min.
iMX8M Industrial Development Kit-Env chamber temperature profile.png

Running the development kits at -40°C – PASS

Test description: CPU, Memory and peripheral stress tests were running at -40°C. All the tested kits were working without errors during the whole time, even if some components used for iMX8M Industrial Development Kit Max in Commercial temperature range were only rated for the temperature range between 0°C and +95°C.

A closer image on the temperature chamber displaying the minimum temperature is shown below. These readouts are available on the display:

  • the first number shows current temperature
  • the second one set temperature
  • the last two shows relative humidity. Humidity was not controlled during testing process.

iMX8M Industrial Kit-Env chamber-Boards at 40°C.png

iMX8M Industrial Development Kit-Env chamber at -40C.jpg

Running the development kits at +85°C – PASS

Test description: The pre-set temperature profile was followed until the development kits gradually reached +85°C. The kits remained around this temperature for the duration of two hours and at the end of this whole cycle all the kits were running.
iMX8M Industrial Kit-Env chamber-Boards at 86°C.png

iMX8M Industrial Development Kit-Env chamber at +85C.jpg

Switch OFF/ON test at -40°C – PASS

Test description: At temperature -40°C the development kits were switched OFF, left OFF for at least 15 minutes (to cool down completely) and then switched ON to see if they boot up without problems. Once booted up into Linux, the test script was launched to test RAM memory and all peripherals. The kits were turned OFF and ON again multiple times to see potential issues at the lowest temperature level. All of the tested setups booted up successfully.


iMX8M Industrial Kit-Env chamber-Boards snow.png

PC setup

The PC was used during the test to control / monitor all the kits through serial console sessions. The control computer was running Windows 10 operating system.

HDMI Outputs and Serial consoles

To control iMX8M Industrial Development Kits, one TeraTerm serial console was opened for each setup. The kits were connected to the external HDMI switch to monitor HDMI outputs.

The setup of the environmental chamber cables and out-of-chamber equipment:
iMX8M Industrial Development Kit-Climate chamber overview.jpg

Preparing the test

Boot device and software

The eMMC memory was selected as a booting device for all the kits. Device tree files were not adjusted as the default configuration was used. The only change compared to standard software package was running the test script. In order to flash a fresh firmware into the eMMC Memory follow these instructions.

Downloading stress test

Stress-ng package was selected to check CPU and memory integrity. Placing this file into the same directory where the testing script will be stored is important:

wget https://downloads.voipac.com/files/iMX8M_Industrial_Development_Kit/module/documents/Thermal_stress_resistance/imx8mq-voipac-peripheral-test.sh

Start CPU and memory stress test

Navigate into the directory, where stress test feature and the testing script are stored.

Stress sequence script:

for d in $(seq 1 1 99999)
do
	uptime
	echo "Test $a Test $b Test $c  $d times"
	echo "Start stress-ng --iomix 1 -t 10 -v"
	stress-ng --iomix 1 -t 10 -v
	echo "End"
	echo "Start stress-ng --cpu 2 --vm 4 -t 10"
	stress-ng --cpu 2 --vm 4 -t 10
	echo "End"
	echo "Start stress-ng --shm 0 -t 10"
	stress-ng --shm 0 -t 10
	echo "End"
	echo "Start stress-ng --seq 0 -t 2 --tz -v"
	stress-ng --seq 0 -t 2 --tz -v
	echo "End"
	echo "Start Thermal zone information"
	stress-ng --matrix 0 --tz -t 10 --log-brief -t 10
	echo "End"
done

Start peripheral test

Plug the development kit into mains and connect it to the controlling PC via console. Before the first time usage of the script, permissions need to be granted by the following command:

chmod +x imx8m-voipac-peripheral-test.sh


Testing scripts command consists of the following arguments:

  • the first parameter - configuration of tested development kit (Max, Pro or Basic)
  • the second parameter - USB drive 1 location
  • the third parameter - USB drive 2 location
  • the fourth parameter - SD card location


Several commands used during environmental chamber testing are shown below:

  • iMX8M Industrial Development Kit Max:
./imx8m-voipac-peripheral-test.sh -max sda1 sdb1 mmcblk1p1 | tee -i imx8m-env-testing.log
  • iMX8M Industrial Development Kit Pro:
./imx8m-voipac-peripheral-test.sh -pro sda1 sdb1 mmcblk1p1 | tee -i imx8m-env-testing.log
  • iMX8M Industrial Development Kit Basic:
./imx8m-voipac-peripheral-test.sh -basic sda1 sdb1 mmcblk1p1 | tee -i imx8m-env-testing.log


The complete script can be found in the downloads section or down below:

#!/bin/sh
 
# iMX8MQ environmental chamber peripheral test
  
mountDevice() {
  mkdir -p "/media/$2"
  mount /dev/$1 /media/$2
  cat /proc/mounts | grep -F "/dev/$1 /media/$2"
  if [ "$?" -eq "0" ]; then
    echo "$2 mounted"
  else
    echo "$2 not mounted"; exit 2
  fi
}
 
# prepare files
cd ~/
mkdir -p env-chamber-testing/
cd env-chamber-testing/
   
touch env-chamber-testing.log
touch cpu-temp.log
 
basic=0
pro=0
max=0
case $1 in
  -basic)  basic=1 ;;
  -pro)  pro=1 ;;
  -max)  max=1 ;;
  *)
esac
  
# mount devices
mountDevice $2 usb0
mountDevice $3 usb1
mountDevice $4 mmc0
 
updateLogFiles() {
  # obtain board ID from IP address - be sure addresses are allocated based on MAC
  boardID=$(/sbin/ip -o -4 addr list eth0 | awk '{print $4}' | cut -d/ -f1 | cut -d'.' -f4 | cut -d'2' -f2);
  # be sure time server is running on DHCP server
  currentTime=`date +%Y-%m-%d.%H:%M`
   
  mv env-chamber-testing.log trx-board-$boardID-env-chamber.log.$currentTime
  mv cpu-temp.log trx-board-$boardID-env-cpu-temp.log.$currentTime
}
 
finish_test_now() {
  echo "$(date +\%Y/\%m/\%d-\%T)($(date +\%Z)) Ctrl+C Detected: End of the test"
  precced=0;
  #kill -INT $vid_pid $str_pid $log_pid;
  sleep 3;
  test_status=`cat env-chamber-testing.log | grep -i "error" | grep -v -e "0 errors" -e "no corrected errors"`
  if [ -z "$test_status" ]
  then
    echo "*********TEST PASS*********"
  else
    echo "*********TEST FAIL*********"
    echo "List of detected errors:"
    cat env-chamber-testing.log | grep -i "error" | grep -v -e "0 errors" -e "no corrected errors" -e "List of detected errors:"
  fi
  updateLogFiles
  exit;
}
  
# kill all processes if Ctrl+C is detected
trap finish_test_now 2
 
# play a video stream
gst-launch-1.0 -q imxv4l2src ! autovideosink &
 
# stressapptest - CPU threads and RAM memory threads
if [ "${basic}" -eq "1" ]; then
  stress-ng --cpu 2 --vm 4 &
  str_pid=$!
fi
if [ "${pro}" -eq "1" ]; then
  stress-ng --cpu 4 --vm 4 &
  str_pid=$!
fi
if [ "${max}" -eq "1" ]; then
  stress-ng --cpu 4 --vm 4 &
  str_pid=$!
fi
echo "$(date +\%Y/\%m/\%d-\%T)($(date +\%Z)) Starting stressapptest with PID: " $str_pid
  
proceed=1
# create test files
file1_path=`mktemp`
file2_path=`mktemp`
file1=`basename $file1_path`
file2=`basename $file2_path`

dd if=/dev/urandom of=$file1_path bs=1024 count=10000
dd if=/dev/urandom of=$file2_path bs=1024 count=10000
 
cp1_from="/media/mmc0/"
cp1_to="/media/usb0/"
 
cp2_from="/media/usb0/"
cp2_to="/media/usb1/"
 
#copy files in case they are missing
cp $file1_path $cp1_from
cp $file1_path $cp1_to
cp $file2_path $cp2_from
cp $file2_path $cp2_to
  
while [ $proceed -eq 1 ]
do
 
  ping -q -c1 192.168.0.2 >> env-chamber-testing.log
  if [ $? -ne 0 ]
  then
    echo "$(date +\%Y/\%m/\%d-\%T)($(date +\%Z)) ERROR: Ping failed"
  fi
  
  cp1_done=`ps | grep $cp1_pid | grep cp`
  if [ -z "$cp1_done" ]; then # copy finished
    if cmp -s $cp1_from$file1 $cp1_to$file1; then
      echo "$(date +\%Y/\%m/\%d-\%T)($(date +\%Z)) PASS: Copying file from $cp1_from to $cp1_to successful"
    else
      echo "$(date +\%Y/\%m/\%d-\%T)($(date +\%Z)) ERROR: Difference between files on $cp1_from and $cp1_to detected"
    fi
    cp1_temp=$cp1_from # swap destinations
    cp1_from=$cp1_to
    cp1_to=$cp1_temp
      
    rm $cp1_to$file1 # remove destination file
      
    cp $cp1_from$file1 $cp1_to$file1 &
    cp1_pid=$!
    echo "$(date +\%Y/\%m/\%d-\%T)($(date +\%Z)) Started copying file from $cp1_from to $cp1_to"
  fi
    
  cp2_done=`ps | grep $cp2_pid | grep cp`
  if [ -z "$cp2_done" ]; then # copy finished
    if cmp -s $cp2_from$file2 $cp2_to$file2; then
      echo "$(date +\%Y/\%m/\%d-\%T)($(date +\%Z)) PASS: Copying file from $cp2_from to $cp2_to successful"
    else
      echo "$(date +\%Y/\%m/\%d-\%T)($(date +\%Z)) ERROR: Difference between files on $cp2_from and $cp2_to detected"
    fi
    cp2_temp=$cp2_from # swap destinations
    cp2_from=$cp2_to
    cp2_to=$cp2_temp
      
    rm $cp2_to$file2 # remove destination file
      
    cp $cp2_from$file2 $cp2_to$file2 &
    cp2_pid=$!
    echo "$(date +\%Y/\%m/\%d-\%T)($(date +\%Z)) Started copying file from $cp2_from to $cp2_to"
  fi
  
done

Starting camera capture

Digilent camera

To initiate the camera to start the capturing of video stream, following command can be used:

GST_DEBUG=GST_BUFFER:5 gst-launch-1.0 v4l2src device=/dev/video1 ! 'video/x-raw,framerate=30/1' ! autovideosink

NXP camera

To initiate the camera to start the capturing of video stream, following command can be used:

GST_DEBUG=GST_BUFFER:5 gst-launch-1.0 v4l2src device=/dev/video0 ! 'video/x-raw,framerate=30/1' ! autovideosink