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