README.rst
1.. zephyr:code-sample:: testusb-app
2 :name: USB testing application
3 :relevant-api: _usb_device_core_api
4
5 Test USB device drivers using a loopback function.
6
7This sample implements a loopback function that can be used
8to test USB device drivers and the device stack connected to a Linux host
9and has a similar interface to "Gadget Zero" of the Linux kernel.
10The userspace tool ``testusb`` is needed to start the tests.
11
12Building and flashing
13*********************
14
15Follow the general procedure for building and flashing Zephyr device.
16
17Testing
18*******
19
20To run USB tests:
21
22#. Load the ``usbtest`` Linux kernel module on the Linux Host.
23
24 .. code-block:: console
25
26 $ sudo modprobe usbtest vendor=0x2fe3 product=0x0009
27
28 The ``usbtest`` module should claim the device:
29
30 .. code-block:: console
31
32 [21746.128743] usb 9-1: new full-speed USB device number 16 using uhci_hcd
33 [21746.303051] usb 9-1: New USB device found, idVendor=2fe3, idProduct=0009, bcdDevice= 2.03
34 [21746.303055] usb 9-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
35 [21746.303058] usb 9-1: Product: Zephyr testusb sample
36 [21746.303060] usb 9-1: Manufacturer: ZEPHYR
37 [21746.303063] usb 9-1: SerialNumber: 86FE679A598AC47A
38 [21746.306149] usbtest 9-1:1.0: matched module params, vend=0x2fe3 prod=0x0009
39 [21746.306153] usbtest 9-1:1.0: Generic USB device
40 [21746.306156] usbtest 9-1:1.0: full-speed {control} tests
41
42#. Use the ``testusb`` tool in ``linux/tools/usb`` inside Linux kernel source directory
43 to start the tests.
44
45 .. code-block:: console
46
47 $ sudo ./testusb -D /dev/bus/usb/009/016
48 /dev/bus/usb/009/016 test 0, 0.000007 secs
49 /dev/bus/usb/009/016 test 9, 4.994475 secs
50 /dev/bus/usb/009/016 test 10, 11.990054 secs
51
52#. To run all the tests the Zephyr's VID / PID should be inserted to USB
53 driver id table. The method for loading the ``usbtest`` driver for our
54 device is described here: https://lwn.net/Articles/160944/.
55
56 Since we use the "Gadget Zero" interface we specify reference device
57 ``0525:a4a0``.
58
59 .. code-block:: console
60
61 $ sudo sh -c "echo 0x2fe3 0x0009 0 0x0525 0xa4a0 > /sys/bus/usb/drivers/usbtest/new_id"
62
63#. Use the ``testusb`` tool in ``linux/tools/usb`` inside Linux kernel source directory
64 to start the tests.
65
66 .. code-block:: console
67
68 $ sudo ./testusb -v 512 -D /dev/bus/usb/009/016
69 /dev/bus/usb/009/017 test 0, 0.000008 secs
70 /dev/bus/usb/009/017 test 1, 2.000001 secs
71 /dev/bus/usb/009/017 test 2, 2.003058 secs
72 /dev/bus/usb/009/017 test 3, 1.054082 secs
73 /dev/bus/usb/009/017 test 4, 1.001010 secs
74 /dev/bus/usb/009/017 test 5, 57.962142 secs
75 /dev/bus/usb/009/017 test 6, 35.000096 secs
76 /dev/bus/usb/009/017 test 7, 30.000063 secs
77 /dev/bus/usb/009/017 test 8, 18.000159 secs
78 /dev/bus/usb/009/017 test 9, 4.984975 secs
79 /dev/bus/usb/009/017 test 10, 11.991022 secs
80 /dev/bus/usb/009/017 test 11, 17.030996 secs
81 /dev/bus/usb/009/017 test 12, 17.103034 secs
82 /dev/bus/usb/009/017 test 13, 18.022084 secs
83 /dev/bus/usb/009/017 test 14, 2.458976 secs
84 /dev/bus/usb/009/017 test 17, 2.001089 secs
85 /dev/bus/usb/009/017 test 18, 1.998975 secs
86 /dev/bus/usb/009/017 test 19, 2.010055 secs
87 /dev/bus/usb/009/017 test 20, 1.999911 secs
88 /dev/bus/usb/009/017 test 21, 2.440972 secs
89 /dev/bus/usb/009/017 test 24, 55.112078 secs
90 /dev/bus/usb/009/017 test 27, 56.911052 secs
91 /dev/bus/usb/009/017 test 28, 34.163089 secs
92 /dev/bus/usb/009/017 test 29, 3.983999 secs
93