USB 信号质量测试指南
USB 2.0 测试指南
完整的 USB 2.0 电气信号质量测试内容可以在 USB-IF 官网中找到:
主要有:
- 眼图
- 信号速率
- 上升下降时间
- 单调性测试
等测试项。
具体测试步骤根据相应测试仪器(示波器)或对应测试实验室的指南进行, 这里介绍如何让 K1 USB 控制器产生相应的测试波形。
USB2.0 的测试波形 (Test pattern) 选项有以下几种(具体可参考 USB 2.0 Spec 7.1.20 ):
- Test SE0 NAK
- Test J
- Test K
- Test Packet
- Test Force Enable
测试上升下降时间、眼图、抖动、其他动态波形规范等信号质量时选用的是 Test Packet 的 Test pattern,具体的测试包组成,参阅 USB 2.0 Spec 7.1.20 。
USB 2.0 Device 信号质量测试指南
Device 模式下,测试波形是支持以下两种方式,根据测试环境遍历任选其一即可:
- 上位机使用 xHCI Electrical Test Tool 配置测试波形: Host 安装 USB-IF 的标准测试工具 xHCI Electrical Test Tool ,向设备发送控制包 Set Feature(Test Packet) 实现。
- K1 使用 Linux DebugFS 进行配置: Device 端直接操作控制器,进行配置, K1 SDK 上是通过 linux debugfs 节点进行配置。
K1 USB2.0 OTG 控制器 Device 模式测试
测试时,请先保证 USB2.0 OTG 控制器工作在 Device 模式, 目前 Buildroot / Bianbu 都开机启动 USB2.0 OTG 控制器作为一个 USB ADB 设备。
如果采用特殊固件,可以使用 gadget-setup.sh 脚本进行配置:
USB_UDC=c0900100.udc gadget-setup.sh adb
具体的该脚本介绍可参考 USB Gadget 开发指南
上位机使用 xHCI Electrical Test Tool 配置测试波形
将 K1 开发板的 USB2.0 OTG 端口(原理图中的 USB0_DP/USB0_DN)通过 USB 线材和测试治具接入安装有 xHCI Electrical Test Tool 的上位机, 如图选择 VID/PID 0x361c/... 的 Device,选择 Device Command 发送 TEST_PACKET 选项,点击 EXECUTE 即可让 K1 USB2.0 OTG 控制器发送测试波形。

K1 使用 Linux DebugFS 进行配置
注:需要较新版本的 SpacemiT 内核才提供本节对 USB2.0 OTG 控制器 DebugFS 的支持
K1 开发板的 USB2.0 OTG 控制器在 Device 模式下,可通过 Linux DebugFS 节点直接操作控制器进行测试波形配置,具体操作如下:
-
确保开发板已启动并进入系统, USB2.0 OTG 控制器对应的 DebugFS 节点路径为
/sys/kernel/debug/usb/c0900100.udc/。 -
进入测试模式并发送测试波形:
echo test_packet > /sys/kernel/debug/usb/c0900100.udc/testmode
# 其他可选: test_j, test_k, test_se0_nak, test_force_enable -
查看当前高速测试模式状态:
cat /sys/kernel/debug/usb/c0900100.udc/testmode -
退出测试模式,恢复正常工作状态:
echo none > /sys/kernel/debug/usb/c0900100.udc/testmode
操作时,需将开发板的 USB2.0 OTG 端口通过 USB 线材连接至测试治具,执行上述命令后即可在测试治具端观测到对应的测试波形。
K1 USB3.0 DRD 控制器 Device 模式( HighSpeed 连接)测试
此测试只适用开发板 / 产品板有该 USB3.0 DRD 控制器做 Device 模式的规格,或者支持手动切换到 device 模式, 具体请参考 USB 通用开发指南 。
测试时,须保证 USB3.0 DRD 控制器工作在 Device 模式, 且测试夹具线材等为最大支持 USB2.0 High-Speed 规格,而不是 USB3.0 SuperSpeed 规格。
可以使用 gadget-setup.sh 脚本配置 USB3.0 DRD 控制器进入 Device 工作模式:
USB_UDC=c0a00000.dwc3 gadget-setup.sh hid
具体的该脚本介绍可参考 USB Gadget 开发指南
上位机使用 xHCI Electrical Test Tool 配置测试波形
将 K1 开发板的 USB3.0 DRD 端口(原理图中的 USB2_DP/USB2_DN)通过 USB 线材和测试治具接入安装有 xHCI Electrical Test Tool 的上位机, 如图选择 VID/PID 0x361c/... 的 Device,选择 Device Command 发送 TEST_PACKET 选项,点击 EXECUTE 即可让 K1 USB3.0 DRD 控制器发送测试波形。

K1 使用 Linux DebugFS 进行配置
K1 开发板的 USB3.0 DRD 控制器在 Device 模式下,可通过 Linux DebugFS 节点直接操作控制器进行 USB 2.0 HighSpeed 测试波形配置,具体操作如下:
-
确保开发板已启动并进入系统, USB3.0 DRD 控制器对应的 DebugFS 节点路径为
/sys/kernel/debug/usb/c0a00000.dwc3/。 -
进入测试模式并发送测试波形:
echo test_force_enable > /sys/kernel/debug/usb/c0a00000.dwc3/testmode
echo test_packet > /sys/kernel/debug/usb/c0a00000.dwc3/testmode
# 其他可选: test_j, test_k, test_se0_nak -
查看当前高速测试模式状态:
cat /sys/kernel/debug/usb/c0a00000.dwc3/testmode -
退出测试模式,恢复正常工作状态:
echo none > /sys/kernel/debug/usb/c0a00000.dwc3/testmode
操作时,需将开发板的 USB3.0 DRD 端口通过 USB 线材连接至测试治具,执行上述命令后即可在测试治具端观测到对应的测试波形。
USB 2.0 Host 信号质量测试指南
Host 模式下,只支持使用应用层工具进行配置,该工具支持所有 Host 的所有 USB 2.0 端口。
用户只需要找到对应的端口的总线号、设备号、端口号,无论是控制器 roothub 直出的端口还是下游 HUB 端口,均可以配置让对应端口发送测试波形。
测试需要使用命令行工作 porttest 工具源码在附录 - porttest 源码提供。
porttest 使用方法:
./porttest /dev/bus/usb/《 Bus 号码》/《 Dev 号码》 《端口号》 《测试 PATTERN 代号》
# e.g.:
# ./porttest /dev/bus/usb/001/001 1 4
# 其中测试 PATTERN 代号:
# - Reserved: 0
# - Test_J: 1
# - Test_K: 2
# - Test_SE0_NAK: 3
# - Test_Packet: 4 ,通常测试眼图等选用此波形
# - Test_Force_Enable: 5
如对特定端口执行了 Test Packet 的选项后,此时对应端口就会开始发送 Test Packet。
示波器看到的测试波形如下图所示:

K1 USB2.0 OTG 控制器 Host 模式测试
-
首先让 USB2.0 OTG 控制器对外端口(原理图中为 USB0_DN/USB0_DP) 进入 Host 模式,根据实际方案的端口形态做配置(如 Type-C 口,需接入 TypeC 转 Host 转接头)。
手动切换方案强制进入方法:
echo host > /sys/class/usb_role/mv-otg-role-switch/role -
找到该控制器 Host 模式下 RootHub Port 的设备路径。
首先执行命令
cat /sys/kernel/debug/usb/devices在输出中:
~ # cat /sys/kernel/debug/usb/devices
T: Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh= 1
B: Alloc= 0/800 us ( 0%), #Int= 0, #Iso= 0
D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=01 MxPS=64 #Cfgs= 1
P: Vendor=1d6b ProdID=0002 Rev= 6.01
S: Manufacturer=Linux 6.1.15+ ehci_hcd
S: Product=Spacemit EHCI
S: SerialNumber=mv-ehci
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub
E: Ad=81(I) Atr=03(Int.) MxPS= 4 Ivl=256ms找到其中
SerialNumber=mv-ehci的段落。记录下第一行 T: Bus.... 中的 Bus 和 Dev#=。如这里是:T: Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh= 1
# 这里是 01 , 1 -
执行命令进入 Test Packet 模式:
porttest /dev/bus/usb/< 上一步中得到的 Bus 序号 >/< 上一步中得到的 Dev# 序号 > 1 4
# 这里的 1 是指 roothub 的第一个 port, K1 的所有 roothub 都只有一个 port。举例(请按照本节完整步骤确定最终命令,不要直接运行举例中的命令!):
~ # porttest /dev/bus/usb/001/001 1 4
Setting port 1 to test mode 4 (Test_Packet)
Test mode successful
K1 USB2.0 HOST ONLY 控制器 Host 模式测试
-
找到该控制器 Host 模式下 RootHub Port 的设备路径。
首先执行命令
cat /sys/kernel/debug/usb/devices在输出中:
~ # cat /sys/kernel/debug/usb/devices
T: Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh= 1
B: Alloc= 0/800 us ( 0%), #Int= 0, #Iso= 0
D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=01 MxPS=64 #Cfgs= 1
P: Vendor=1d6b ProdID=0002 Rev= 6.01
S: Manufacturer=Linux 6.1.15+ ehci_hcd
S: Product=Spacemit EHCI
S: SerialNumber=mv-ehci1
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub
E: Ad=81(I) Atr=03(Int.) MxPS= 4 Ivl=256ms找到其中
SerialNumber=mv-ehci1的段落。记录下第一行 T: Bus.... 中的 Bus= 和 Dev#= 后面的数字。如这里是:T: Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh= 1
# 这里是 02 , 1 -
执行命令进入 Test Packet 模式:
porttest /dev/bus/usb/< 上一步中得到的 Bus 序号 >/< 上一步中得到的 Dev# 序号 > 1 4
# 这里的 1 是指 roothub 的第一个 port, K1 的所有 roothub 都只有一个 port。举例(请按照本节完整步骤确定最终命令,不要直接运行举例中的命令!):
~ # porttest /dev/bus/usb/001/001 1 4
Setting port 1 to test mode 4 (Test_Packet)
Test mode successful
K1 USB3.0 DRD 控制器 Host 模式( HighSpeed 连接)测试
-
首先让 USB3.0 DRD 控制器进入 Host 模式 (原理图中是 USB2_DN/DP) 进入 Host 模式。
DRD 模式时,强制进入方法:
echo host > /sys/kernel/debug/usb/c0a00000.dwc3/mode -
找到该控制器 Host 模式下 RootHub Port 的设备路径。
首先执行命令
cat /sys/kernel/debug/usb/devices