We are using a Colibri iMX6ULL with BSP 6.8.3.
Is it possible to output USB host compliance test signals (TEST_J / TEST_K / TEST_SE0_NAK / TEST_PACKET / TEST_FORCE_ENABLE)?
If it is possible, I would appreciate it if you could explain the procedure.
We found that the usb test command exists in the U-Boot console.
We tried commands such as usb test 0 1 J, but no test signal was output.
We also tried the following commands under Linux and observed that the mode value changed, although we have not yet confirmed whether the actual test signal is being output:
cat /sys/kernel/debug/usb/ci_hdrc.0/port_test
mode=0
echo 1 > /sys/kernel/debug/usb/ci_hdrc.0/port_test
cat /sys/kernel/debug/usb/ci_hdrc.0/port_test
mode = 1
Would this be the correct way to enable the USB compliance test signal?
Hi, I’m the Toradex AI Assistant.
I might make mistakes or occasionally get you wrong. Our support team will step in if needed.
Yes, it is possible to output USB host compliance test signals on the Colibri iMX6ULL with BSP 6.8.3. The approach you’ve discovered using the Linux debugfs interface is the correct method.
USB Compliance Test Implementation
Linux Method (Recommended)
The debugfs interface you found is the proper way to enable USB compliance test modes on Toradex modules (1). Your approach is correct:
# Check current test mode
cat /sys/kernel/debug/usb/ci_hdrc.0/port_test
# Enable test mode (example for TEST_J)
echo 1 > /sys/kernel/debug/usb/ci_hdrc.0/port_test
The test mode values correspond to the USB 2.0 specification test modes:
- 0: Normal operation (no test)
- 1: TEST_J
- 2: TEST_K
- 3: TEST_SE0_NAK
- 4: TEST_PACKET
- 5: TEST_FORCE_ENABLE
U-Boot Limitations
The usb test command you tried in U-Boot may not work as expected on all Toradex modules because the USB host controller implementation varies between different SoCs (2). The debugfs method under Linux is more reliable for compliance testing.
Verification Steps
To verify that test signals are actually being output:
- Use an oscilloscope or USB analyzer to monitor the USB data lines (D+ and D-) on your carrier board
- Check the electrical characteristics match the expected test patterns:
- TEST_J: D+ high, D- low
- TEST_K: D+ low, D- high
- TEST_SE0_NAK: Both D+ and D- low
- TEST_PACKET: Repeating test packet transmission
Important Considerations
- Only test one port at a time - testing multiple ports simultaneously can yield undefined results
- Ensure proper USB host configuration on your carrier board (1)
- Use appropriate test equipment to validate signal compliance with USB 2.0 specifications
The method you discovered is the standard approach for USB compliance testing on Toradex embedded Linux systems.
Best regards, Toradex AI Assistant.
Did you like my answer?

If I answered your question, please tick the “Solution” checkbox.
For follow-up questions to me, please use @ToradexAI in your post.
Hi @tomohisa.sakamoto , while we don’t offer official documentation on USB compliance I believe that your approach through Linux looks correct.
On Colibri iMX6ULL BSP 6.8.3, the recommended way to request USB host compliance test signals should be via Linux debugfs using /sys/kernel/debug/usb/ci_hdrc.0/port_test. Writing 1..5 selects TEST_J, TEST_K, TEST_SE0_NAK, TEST_PACKET, and TEST_FORCE_ENABLE respectively, and writing 0 returns to normal mode. So I believe that your echo 1 > .../port_test test is the correct software method.
Note that the mode readback only confirms the controller register changed; the actual compliance waveform must still be verified on D+/D- with the proper measurement setup.
Kind regards,
Alvaro.
1 Like