blob: 03219db3f589a1a96f24ee316301f92e82f31126 [file] [log] [blame]
Austin Schuh41baf202022-01-01 14:33:40 -08001.. figure:: docs/assets/logo.svg
2 :alt: TinyUSB
3
4|Build Status| |Documentation Status| |License|
5
6TinyUSB is an open-source cross-platform USB Host/Device stack for
7embedded system, designed to be memory-safe with no dynamic allocation
8and thread-safe with all interrupt events are deferred then handled in
9the non-ISR task function.
10
11Please take a look at the online `documentation <https://docs.tinyusb.org/>`__.
12
13.. figure:: docs/assets/stack.svg
14 :width: 500px
15 :alt: stackup
16
17::
18
19 .
20 ├── docs # Documentation
21 ├── examples # Sample with Makefile build support
22 ├── hw
23 │   ├── bsp # Supported boards source files
24 │   └── mcu # Low level mcu core & peripheral drivers
25 ├── lib # Sources from 3rd party such as freeRTOS, fatfs ...
26 ├── src # All sources files for TinyUSB stack itself.
27 ├── test # Unit tests for the stack
28 └── tools # Files used internally
29
30Supported MCUs
31==============
32
33The stack supports the following MCUs:
34
35- **Broadcom:** BCM2837, BCM2711
36- **Dialog:** DA1469x
37- **Espressif:** ESP32-S2, ESP32-S3
38- **GigaDevice:** GD32VF103
39- **Infineon:** XMC4500
40- **MicroChip:** SAMD11, SAMD21, SAMD51, SAME5x, SAMG55, SAML21, SAML22, SAME7x
41- **NordicSemi:** nRF52833, nRF52840, nRF5340
42- **Nuvoton:** NUC120, NUC121/NUC125, NUC126, NUC505
43- **NXP:**
44
45 - iMX RT Series: RT1011, RT1015, RT1021, RT1052, RT1062, RT1064
46 - Kinetis: KL25, K32L2
47 - LPC Series: 11u, 13, 15, 17, 18, 40, 43, 51u, 54, 55
48
49- **Raspberry Pi:** RP2040
50- **Renesas:** RX63N, RX65N, RX72N
51- **Silabs:** EFM32GG
52- **Sony:** CXD56
53- **ST:** STM32 series: F0, F1, F2, F3, F4, F7, H7, G4, L0, L1, L4, L4+
54- **TI:** MSP430, MSP432E4, TM4C123
55- **ValentyUSB:** eptri
56
57Here is the list of `Supported Devices`_ that can be used with provided examples.
58
59Device Stack
60============
61
62Supports multiple device configurations by dynamically changing USB descriptors, low power functions such like suspend, resume, and remote wakeup. The following device classes are supported:
63
64- Audio Class 2.0 (UAC2)
65- Bluetooth Host Controller Interface (BTH HCI)
66- Communication Device Class (CDC)
67- Device Firmware Update (DFU): DFU mode (WIP) and Runtinme
68- Human Interface Device (HID): Generic (In & Out), Keyboard, Mouse, Gamepad etc ...
69- Mass Storage Class (MSC): with multiple LUNs
70- Musical Instrument Digital Interface (MIDI)
71- Network with RNDIS, Ethernet Control Model (ECM), Network Control Model (NCM)
72- Test and Measurement Class (USBTMC)
73- Video class 1.5 (UVC): work in progress
74- Vendor-specific class support with generic In & Out endpoints. Can be used with MS OS 2.0 compatible descriptor to load winUSB driver without INF file.
75- `WebUSB <https://github.com/WICG/webusb>`__ with vendor-specific class
76
77If you have a special requirement, `usbd_app_driver_get_cb()` can be used to write your own class driver without modifying the stack. Here is how the RPi team added their reset interface [raspberrypi/pico-sdk#197](https://github.com/raspberrypi/pico-sdk/pull/197)
78
79Host Stack
80==========
81
82- Human Interface Device (HID): Keyboard, Mouse, Generic
83- Mass Storage Class (MSC)
84- Hub currently only supports 1 level of hub (due to my laziness)
85
86OS Abstraction layer
87====================
88
89TinyUSB is completely thread-safe by pushing all Interrupt Service Request (ISR) events into a central queue, then processing them later in the non-ISR context task function. It also uses semaphore/mutex to access shared resources such as Communication Device Class (CDC) FIFO. Therefore the stack needs to use some of the OS's basic APIs. Following OSes are already supported out of the box.
90
91- **No OS**
92- **FreeRTOS**
93- **Mynewt** Due to the newt package build system, Mynewt examples are better to be on its [own repo](https://github.com/hathach/mynewt-tinyusb-example)
94
95Local Docs
96==========
97
98- Info
99
100 - `Uses`_
101 - `Changelog`_
102 - `Contributors`_
103
104- `Reference`_
105
106 - `Supported Devices`_
107 - `Getting Started`_
108 - `Concurrency`_
109
110- `Contributing`_
111
112 - `Code of Conduct`_
113 - `Structure`_
114 - `Porting`_
115
116License
117=======
118
119All TinyUSB sources in the ``src`` folder are licensed under MIT
120license, the `Full license is here <LICENSE>`__. However, each file can be
121individually licensed especially those in ``lib`` and ``hw/mcu`` folder.
122Please make sure you understand all the license term for files you use
123in your project.
124
125
126.. |Build Status| image:: https://github.com/hathach/tinyusb/workflows/Build/badge.svg
127 :target: https://github.com/hathach/tinyusb/actions
128.. |Documentation Status| image:: https://readthedocs.org/projects/tinyusb/badge/?version=latest
129 :target: https://docs.tinyusb.org/en/latest/?badge=latest
130.. |License| image:: https://img.shields.io/badge/license-MIT-brightgreen.svg
131 :target: https://opensource.org/licenses/MIT
132
133
134.. _Uses: docs/info/uses.rst
135.. _Changelog: docs/info/changelog.rst
136.. _Contributors: CONTRIBUTORS.rst
137.. _Reference: docs/reference/index.rst
138.. _Supported Devices: docs/reference/supported.rst
139.. _Getting Started: docs/reference/getting_started.rst
140.. _Concurrency: docs/reference/concurrency.rst
141.. _Contributing: docs/contributing/index.rst
142.. _Code of Conduct: CODE_OF_CONDUCT.rst
143.. _Structure: docs/contributing/structure.rst
144.. _Porting: docs/contributing/porting.rst