1| Supported Targets | ESP32-S2 | ESP32-S3 |
2| ----------------- | -------- | -------- |
3
4# TinyUSB Sample Descriptor
5
6(See the README.md file in the upper level 'examples' directory for more information about examples.)
7
8This example is demonstrating how to set up ESP chip to work as a Generic USB Device with a user-defined descriptor. You can specify a manufacturer, device's name, ID and other USB-devices parameters responsible for identification by host.
9
10As a USB stack, a TinyUSB component is used.
11
12## How to use example
13
14### Hardware Required
15
16Any ESP boards that have USB-OTG supported.
17
18#### Pin Assignment
19
20See common pin assignments for USB Device examples from [upper level](../README.md#common-pin-assignments).
21
22### Configure the project
23
24There are two ways to set up a descriptor - using Menuconfig tool and in-code
25
26#### In-code setting up
27
28For the manual descriptor configuration use the default example's settings and modify `my_descriptor` in [source code](main/tusb_sample_descriptor_main.c) according to your needs
29
30#### Menuconfig
31
32If you want to set up the descriptor using Menuconfig UI:
33
341. Execute in the terminal from the example's directory: `idf.py menuconfig`
35
362. Turn off `Set up a USB descriptor manually in code` parameter at `Example Configuration`
37
383. Follow `Component config -> TinyUSB -> Descriptor configuration` for all available configurations.
39
40### Build and Flash
41
42Build the project and flash it to the board, then run monitor tool to view serial output:
43
44```bash
45idf.py -p PORT flash monitor
46```
47
48(Replace PORT with the name of the serial port to use.)
49
50(To exit the serial monitor, type ``Ctrl-]``.)
51
52See the Getting Started Guide for full steps to configure and use ESP-IDF to build projects.
53
54## Example Output
55
56After the flashing you should see the output:
57
58```
59I (287) example: USB initialization
60I (287) tusb_desc:
61┌─────────────────────────────────┐
62│  USB Device Descriptor Summary  │
63├───────────────────┬─────────────┤
64│bDeviceClass       │ 0           │
65├───────────────────┼─────────────┤
66│bDeviceSubClass    │ 0           │
67├───────────────────┼─────────────┤
68│bDeviceProtocol    │ 0           │
69├───────────────────┼─────────────┤
70│bMaxPacketSize0    │ 64          │
71├───────────────────┼─────────────┤
72│idVendor           │ 0x303a      │
73├───────────────────┼─────────────┤
74│idProduct          │ 0x3000      │
75├───────────────────┼─────────────┤
76│bcdDevice          │ 0x101       │
77├───────────────────┼─────────────┤
78│iManufacturer      │ 0x1         │
79├───────────────────┼─────────────┤
80│iProduct           │ 0x2         │
81├───────────────────┼─────────────┤
82│iSerialNumber      │ 0x3         │
83├───────────────────┼─────────────┤
84│bNumConfigurations │ 0x1         │
85└───────────────────┴─────────────┘
86I (457) TinyUSB: TinyUSB Driver installed
87I (467) example: USB initialization DONE
88```
89
90From PC, running `lsusb -v`, you should find the device's descriptor like:
91```
92Bus 001 Device 007: ID 303a:3000 I My Custom Device
93Device Descriptor:
94  bLength                18
95  bDescriptorType         1
96  bcdUSB               2.00
97  bDeviceClass            0
98  bDeviceSubClass         0
99  bDeviceProtocol         0
100  bMaxPacketSize0        64
101  idVendor           0x303a
102  idProduct          0x3000
103  bcdDevice            1.01
104  iManufacturer           1 I
105  iProduct                2 My Custom Device
106  iSerial                 3 012-345
107  bNumConfigurations      1
108  Configuration Descriptor:
109    bLength                 9
110    bDescriptorType         2
111    wTotalLength       0x0009
112    bNumInterfaces          0
113    bConfigurationValue     1
114    iConfiguration          0
115    bmAttributes         0xa0
116      (Bus Powered)
117      Remote Wakeup
118    MaxPower              100mA
119can't get device qualifier: Resource temporarily unavailable
120can't get debug descriptor: Resource temporarily unavailable
121Device Status:     0x0000
122  (Bus Powered)
123```
124