HMI_MIPI + HMI_HDMI Test Procedure
The Argon Industria HMI is an industrial-grade Human Machine Interface solution designed for the Raspberry Pi 5. It combines an 8-inch capacitive touchscreen with a modular backplane system, supporting MIPI DSI display output, dual HDMI, NVMe storage expansion, Power-over-Ethernet (PoE), RS232/RS485 serial communication, and sidelight LED indicators via a Cytron board. This guide is intended for hardware validation technicians, makers, and developers performing a full end-to-end functional test of the assembled unit before deployment.
| Item | Quantity |
|---|---|
| 8-inch HMI case | 1 |
| 8-inch display screen | 1 |
| PCBA HMI MIPI board (8-inch) | 1 |
| HMI 8-inch display FFC cable | 1 |
| HMI HDMI board | 1 |
| HMI HDMI FFC cable | 1 |
| 2-Pin to 3-Pin power cable | 1 |
| Thermal columns | 1 set |
| Heatsinks | 1 set |
📝 Note: The Raspberry Pi 5, official PSU, SD card, and M.2 NVMe drive are not included and must be sourced separately.
| Component | Requirement |
|---|---|
| Raspberry Pi | Raspberry Pi 5 (4 GB or 8 GB recommended) |
| Operating System | Raspberry Pi OS (Bookworm, 64-bit) |
| Storage | SD card (Class 10 / A2) or M.2 NVMe SSD |
| Power Supply | Official Raspberry Pi 5 PSU (27 W / 5 V 5 A) |
| NVMe Form Factor | M.2 2230 / 2242 / 2280 (PCIe Gen 3) |
⚠️ Warning: Always use the official Raspberry Pi 5 PSU. Underpowered supplies will cause instability and may corrupt the OS during write-intensive NVMe tests.
Raspberry Pi 5 (4 GB or 8 GB)
CAM/DISP 0 connector. Ensure the cable is seated fully and the lock tab is closed.HDMI 0 port.⚠️ Warning: Handle all FFC cables with care. Insert them straight and ensure the locking tabs are fully engaged before applying power. A misaligned FFC cable will result in no display output or display artifacts.
📝 Note: If booting from NVMe, ensure the Raspberry Pi 5 EEPROM boot order is configured for PCIe NVMe before removing the SD card. See Section 7 for details.
Before running any tests, ensure the system packages are fully up to date. Open a terminal and run:
sudo apt update
sudo apt full-upgrade
Reboot after the upgrade completes:
sudo reboot
Open the firmware configuration file:
sudo nano /boot/firmware/config.txt
Scroll to the [all] section and add the following line:
dtoverlay=dwc2,dr_mode=host
Save and exit with Ctrl + O, then Ctrl + X. Reboot for the change to take effect:
sudo reboot
📝 Note: The boot configuration file path changed from
/boot/config.txtto/boot/firmware/config.txtin Raspberry Pi OS Bookworm. If you are running Bullseye or earlier, use the older path.
The display brightness is controlled over I2C using DDC/CI. Enable I2C through raspi-config:
sudo raspi-config
Navigate to:
Interface Options → I2C → Enable
Select Yes, then Finish. Reboot if prompted.
Install ddcutil, the DDC/CI display control utility:
sudo apt install ddcutil -y
Verify the display is detected correctly:
sudo ddcutil detect
Expected output includes the display model name and its I2C bus number (e.g., /dev/i2c-1). If no display is detected, check that I2C is enabled and the FFC cable is properly seated.
📝 Note: If
ddcutil detectreturnsNo displays found, verify that the correct I2C bus is active. You can list all I2C buses withsudo i2cdetect -land scan a specific bus withsudo i2cdetect -y 1(replace1with your bus number).
Run the following commands in sequence to test the full brightness range. VCP code 10 controls backlight brightness.
Set brightness to minimum (10%):
sudo ddcutil setvcp 10 10
Set brightness to maximum (100%):
sudo ddcutil setvcp 10 100
PASS Criteria: Screen brightness visibly changes between the two commands with no flicker or display dropout.
Switch between all 8 supported resolutions using the Display Settings panel or xrandr in the terminal.
To list available resolutions via terminal:
xrandr --display :0 --query
To switch to a specific resolution:
xrandr --display :0 --output HDMI-1 --mode 1920x1080
Replace HDMI-1 and 1920x1080 with the correct output name and target resolution from the xrandr query output.
Test Procedure:
PASS Criteria: All resolutions apply cleanly with no screen corruption, tearing, or loss of signal.
Open the following multi-touch test page in the Chromium browser:
https://naqtn.github.io/WBBMTT/
Test Procedure:
PASS Criteria:
See the Appendix: Stress & Overclock Test at the end of this document for full procedure and acceptance criteria.
⚠️ Warning: Remove the SD card before running NVMe boot tests. With both the SD card and NVMe present, the Pi 5 will default to SD card boot unless the EEPROM boot order has been changed.
Test each board in the following order:
| Order | Board |
|---|---|
| 1 | HMI_NVME |
| 2 | HMI_NVMEx2_ASM1182E |
| 3 | HMI_NVMEx2_ASM2806 |
| 4 | HMI_NVME Network Board |
With the OS flashed to the NVMe drive and the SD card removed, boot the system and run the speed test script:
sudo chmod 755 ~/Desktop/hddtestv8.sh
sudo ~/Desktop/hddtestv8.sh
PASS Criteria: Read/write result > 700 MB/s
Speed Test
Run the same speed test script as above.
PASS Criteria: Read/write result > 300 MB/s
📝 Note: The ASM1182E is a PCIe Gen 2 1-to-2 splitter. Maximum throughput is shared across both drives, so the per-drive speed threshold is lower than a single-drive configuration.
Boot Switch Test
To test booting from each of the two NVMe slots, edit the EEPROM configuration:
sudo rpi-eeprom-config --edit
📝 Note: The flag uses two dashes (
--edit), not an em dash. Ensure your terminal is not auto-correcting punctuation.
Add or modify the following line, replacing x with the target controller index (0 or 1):
NVME_CONTROLLER=x
Save, reboot, and confirm the system boots from the selected drive. Repeat for the second drive.
PASS Criteria: System boots successfully from both NVMe drives when the boot controller is switched.
The ASM2806 is a PCIe Gen 3 bifurcation switch and requires additional overlays in config.txt.
Open the firmware config file:
sudo nano /boot/firmware/config.txt
Under the [all] section, add:
dtparam=pciex1
dtparam=pciex1_gen=3
dtoverlay=pciex1-compat-pi5,no-mip,mmio-hi
Save and reboot:
sudo reboot
Firmware Flash
If the ASM2806 firmware needs to be updated, run:
sudo ./218xfwdl /U 240524_40_00_00.bin
⚠️ Warning: Do not interrupt power during the firmware flash. A failed flash may render the ASM2806 board unresponsive. Confirm the binary filename matches the version provided with your test package before executing.
Speed Test
Run the speed test script as in Section 7.1.
PASS Criteria: Read/write result > 700 MB/s
Speed Test
Run the speed test script as in Section 7.1.
PASS Criteria: Read/write result > 300 MB/s
Network Test
PASS Criteria: System detects wired connection, switches from Wi-Fi, and successfully loads a webpage.
PASS Criteria: Unit powers on via PoE and wired network connectivity is established without requiring the PSU.
Repeat the PoE power-on test above with the NVMe drive installed and the OS booted from NVMe storage.
Run the speed test:
sudo chmod 755 ~/Desktop/hddtestv8.sh
sudo ~/Desktop/hddtestv8.sh
PASS Criteria: Read/write result > 700 MB/s
Open the firmware config file:
sudo nano /boot/firmware/config.txt
Under the [all] section, add:
enable_uart=1
dtoverlay=uart0
dtoverlay=uart4
Save and reboot:
sudo reboot
Run the sidelight LED and buzzer test script:
python3 ~/Desktop/Cytron_light.py
PASS Criteria:
Connect the RS232 loopback or test device to the board's RS232 header, then run:
python3 ~/Desktop/Cytron_232.py
PASS Criteria: Script reports a valid response from the connected RS232 device or loopback.
Connect the RS485 sensor or test device to the board's RS485 header, then run:
python3 ~/Desktop/Cytron_485.py
PASS Criteria: Script reports a valid sensor response over RS485.
📝 Note: RS485 is a differential bus. Ensure the A/B polarity of the cable matches the sensor's wiring. Reversed polarity will result in no response rather than corrupted data.
HDMI 0 and HDMI 1 outputs on the Raspberry Pi 5 via the HMI HDMI board.PASS Criteria: Both HDMI outputs are active and all connected displays render correctly.
📝 Note: Raspberry Pi OS Bookworm defaults to mirror mode on dual HDMI. To enable extended desktop mode, open Screen Configuration from the desktop menu or use
xrandrto set the desired layout.
sudo apt install stress -y
pip3 install stressberry --user --break-system-packages
pip3 install --upgrade numpy --break-system-packages
📝 Note: The flags use two dashes (
--user,--break-system-packages,--upgrade). Auto-correct in some terminals or editors may convert these to em dashes, which will cause the command to fail.
/home/pi/.local/bin/stressberry-run -n "My Test" -d 1800 -i 300 -c 4 mytest.out
| Parameter | Value | Description |
|---|---|---|
-n |
"My Test" |
Label for the output file |
-d |
1800 |
Duration in seconds (30 minutes) |
-i |
300 |
Idle time before test begins (seconds) |
-c |
4 |
Number of CPU cores to stress |
| Metric | Requirement |
|---|---|
| CPU Frequency | Must not drop below 1500 MHz at any point during the test |
| Thermal Throttling | Must not occur |
| Peak Temperature | Must remain within the Raspberry Pi 5 safe operating range (≤ 85 °C) |
⚠️ Warning: If the CPU frequency drops below 1500 MHz or thermal throttling is detected, check that all heatsinks and thermal columns are properly installed and that the HMI case ventilation is not obstructed. Do not ship units that fail this test.
| Symptom | Likely Cause | Fix |
|---|---|---|
| No display output on power-on | FFC cable not fully seated or lock tab open | Power off, reseat the display FFC cable on both ends, ensure lock tabs are fully closed, and power on again |
ddcutil detect returns no displays |
I2C not enabled, or wrong I2C bus | Confirm I2C is enabled in raspi-config. Run sudo i2cdetect -l to list buses and sudo i2cdetect -y 1 to scan. Try bus numbers 0–4 |
| Touch input is offset or inaccurate | Touch calibration mismatch or wrong driver rotation | Verify the correct touch overlay is loaded in config.txt. Recalibrate using xinput_calibrator if available |
| NVMe drive not detected at boot | EEPROM boot order not set for PCIe, or PCIe overlay missing | Run sudo rpi-eeprom-config --edit and confirm BOOT_ORDER includes NVMe (0x6). For ASM2806, confirm PCIe overlays are added to config.txt |
| Speed test result below threshold | Drive seated incorrectly, PCIe Gen mismatch, or thermal throttling | Reseat the NVMe drive. Confirm dtparam=pciex1_gen=3 is set for Gen 3 boards. Check temperature — throttling reduces PCIe bandwidth |
| PoE board does not power on | PoE switch/injector does not supply sufficient wattage | Raspberry Pi 5 requires a 802.3af/at PoE source supplying at least 25.5 W. Verify your switch or injector meets this requirement |
| Cytron LEDs do not illuminate | UART overlays not loaded, or script path incorrect | Confirm enable_uart=1, dtoverlay=uart0, and dtoverlay=uart4 are present in config.txt. Verify the script exists at ~/Desktop/Cytron_light.py |
| RS485 script returns no response | A/B polarity reversed, or baud rate mismatch | Swap the A and B wires on the RS485 connector. Confirm the baud rate in the Python script matches the connected sensor |
| Stress test shows thermal throttling | Insufficient cooling | Verify heatsinks are bonded to all thermal pads. Ensure the HMI case air vents are unobstructed. Rerun the test |
stressberry-run command not found |
Install path not in PATH |
Run using the full path: /home/pi/.local/bin/stressberry-run. Alternatively, add ~/.local/bin to your PATH in ~/.bashrc |
Q: Can I use a Raspberry Pi 4 instead of a Raspberry Pi 5?
A: No. The Argon Industria HMI is designed specifically for the Raspberry Pi 5. The PCIe connector, MIPI CSI/DSI pinout, and power delivery are all Pi 5–specific. A Raspberry Pi 4 is not compatible.
Q: Does the 8-inch panel support 10-point multi-touch?
A: Yes. The capacitive touch panel supports up to 10 simultaneous touch points. Use the WBBMTT test page in Section 5 to verify full multi-touch functionality.
Q: Which NVMe form factors are supported?
A: The HMI NVMe boards support M.2 2230, 2242, 2260, and 2280 NVMe SSDs using the PCIe interface. SATA M.2 drives are not supported — the Raspberry Pi 5 PCIe interface does not support SATA.
Q: Do I need to flash the ASM2806 firmware on every unit?
A: Only if the board ships with an older firmware version than 240524_40_00_00. Check the firmware revision first using the utility's read command before flashing. Flashing an already up-to-date board is safe but unnecessary.
Q: Can the HMI unit run without the official Raspberry Pi PSU if PoE is available?
A: Yes — on units fitted with the Industrial PoE Board or Industrial PoE NVMe Board, the unit can be powered entirely from a compliant 802.3af/at PoE source. The official PSU is not required when PoE is in use.
Q: What operating system should I use for testing?
A: All procedures in this guide are validated against Raspberry Pi OS Bookworm (64-bit). Using an older release (Bullseye or earlier) may require path changes (e.g., /boot/config.txt instead of /boot/firmware/config.txt) and may not support all overlays used in Sections 7 and 9.
Q: What should I do if the brightness test passes but the backlight flickers at low brightness values?
A: This can occur at very low VCP values (below 10) on some panel batches. Set the minimum operational brightness to 10 (sudo ddcutil setvcp 10 10) and do not use values below this threshold in production configurations.
Complete all sections above before signing off. Mark each item as PASS or FAIL.
| Test Area | Check | Result |
|---|---|---|
| Display | No flicker, correct output on MIPI panel | |
| Brightness | Visibly changes from 10% to 100% | |
| Resolution | All 8 resolutions apply without corruption | |
| Touch | Accurate multi-touch, no ghost points, no dead zones | |
| NVMe (Single) | Speed > 700 MB/s | |
| NVMe (ASM1182E) | Speed > 300 MB/s, boots from both drives | |
| NVMe (ASM2806) | Speed > 700 MB/s | |
| NVMe Network | Speed > 300 MB/s, network connectivity confirmed | |
| PoE | Auto power-on, wired network active | |
| PoE NVMe | Speed > 700 MB/s | |
| Cytron LEDs | 14 LEDs illuminate, buzzer active | |
| Cytron RS232 | Valid response received | |
| Cytron RS485 | Valid sensor response received | |
| Dual HDMI | Both outputs active, all displays functional | |
| Stress Test | No throttling, frequency ≥ 1500 MHz, temp ≤ 85 °C |
⚠️ Warning: Do not approve a unit for shipment if any item in this checklist is marked FAIL. Escalate to the QA lead for rework or replacement.