From 42f3bca5a1ca0b1314f3f6d12a15f68411d4bb03 Mon Sep 17 00:00:00 2001 From: morris Date: Fri, 9 Jul 2021 11:09:28 +0800 Subject: [PATCH 1/3] usb: update LL to support PHY selection ESP32-S3 has two USB peripheral, one is USB_OTG, another is USB_JTAG_SERIAL A new mux has been introduced to select internal/external PHY interface. --- components/esp32s3/ld/esp32s3.peripherals.ld | 1 + components/hal/esp32s3/include/hal/usb_ll.h | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/components/esp32s3/ld/esp32s3.peripherals.ld b/components/esp32s3/ld/esp32s3.peripherals.ld index 6d86e13bfd..5b15a44618 100644 --- a/components/esp32s3/ld/esp32s3.peripherals.ld +++ b/components/esp32s3/ld/esp32s3.peripherals.ld @@ -37,5 +37,6 @@ PROVIDE ( DMA = 0x6003F000 ); PROVIDE ( APB_SARADC = 0x60040000 ); PROVIDE ( LCD_CAM = 0x60041000 ); PROVIDE ( USB_SERIAL_JTAG = 0x60038000 ); +PROVIDE ( USB0 = 0x60080000 ); PROVIDE ( USBH = 0x60080000 ); PROVIDE ( USB_WRAP = 0x60039000 ); diff --git a/components/hal/esp32s3/include/hal/usb_ll.h b/components/hal/esp32s3/include/hal/usb_ll.h index 2be637f55c..81950021d2 100644 --- a/components/hal/esp32s3/include/hal/usb_ll.h +++ b/components/hal/esp32s3/include/hal/usb_ll.h @@ -17,17 +17,28 @@ #include "soc/system_reg.h" #include "soc/gpio_sig_map.h" #include "soc/usb_periph.h" +#include "soc/rtc_cntl_struct.h" static inline void usb_ll_int_phy_enable(void) { USB_WRAP.otg_conf.pad_enable = 1; + // USB_OTG use internal PHY USB_WRAP.otg_conf.phy_sel = 0; + // phy_sel is controlled by the following register value + RTCCNTL.usb_conf.sw_hw_usb_phy_sel = 1; + // phy_sel=sw_usb_phy_sel=1, USB_OTG is connected with internal PHY + RTCCNTL.usb_conf.sw_usb_phy_sel = 1; } static inline void usb_ll_ext_phy_enable(void) { USB_WRAP.otg_conf.pad_enable = 1; + // USB_OTG use external PHY USB_WRAP.otg_conf.phy_sel = 1; + // phy_sel is controlled by the following register value + RTCCNTL.usb_conf.sw_hw_usb_phy_sel = 1; + // phy_sel=sw_usb_phy_sel=0, USB_OTG is connected with external PHY through GPIO Matrix + RTCCNTL.usb_conf.sw_usb_phy_sel = 0; } static inline void usb_ll_int_phy_pullup_conf(bool dp_pu, bool dp_pd, bool dm_pu, bool dm_pd) From 2218204aa780825c55e240d2ff8a32aa961b6163 Mon Sep 17 00:00:00 2001 From: morris Date: Wed, 30 Jun 2021 16:04:37 +0800 Subject: [PATCH 2/3] doc: update tinyusb document to support esp32s3 1. Renamed SOC_USB_SUPPORTED to SOC_USB_OTG_SUPPORTED for the reason of another USB related peripheral: USB_JTAG_SERIAL 2. correct related document --- components/soc/esp32s2/include/soc/soc_caps.h | 2 +- components/soc/esp32s3/include/soc/soc_caps.h | 1 + docs/_static/usb-board-connection.png | Bin 95518 -> 95347 bytes docs/conf_common.py | 4 ++-- docs/en/api-guides/index.rst | 4 ++-- docs/en/api-guides/performance/speed.rst | 4 ++-- docs/en/api-reference/peripherals/index.rst | 2 +- .../peripherals/{usb.rst => usb_device.rst} | 13 +++++++++---- .../system/freertos_additions.rst | 6 +++--- docs/page_redirects.txt | 1 + docs/zh_CN/api-guides/index.rst | 4 ++-- .../zh_CN/api-reference/peripherals/index.rst | 2 +- docs/zh_CN/api-reference/peripherals/usb.rst | 1 - .../api-reference/peripherals/usb_device.rst | 1 + 14 files changed, 26 insertions(+), 19 deletions(-) rename docs/en/api-reference/peripherals/{usb.rst => usb_device.rst} (94%) delete mode 100644 docs/zh_CN/api-reference/peripherals/usb.rst create mode 100644 docs/zh_CN/api-reference/peripherals/usb_device.rst diff --git a/components/soc/esp32s2/include/soc/soc_caps.h b/components/soc/esp32s2/include/soc/soc_caps.h index 63326b098a..13ef55669e 100644 --- a/components/soc/esp32s2/include/soc/soc_caps.h +++ b/components/soc/esp32s2/include/soc/soc_caps.h @@ -44,7 +44,7 @@ #define SOC_DEDICATED_GPIO_SUPPORTED 1 #define SOC_SUPPORTS_SECURE_DL_MODE 1 #define SOC_RISCV_COPROC_SUPPORTED 1 -#define SOC_USB_SUPPORTED 1 +#define SOC_USB_OTG_SUPPORTED 1 #define SOC_PCNT_SUPPORTED 1 #define SOC_ULP_SUPPORTED 1 #define SOC_RTC_SLOW_MEM_SUPPORTED 1 diff --git a/components/soc/esp32s3/include/soc/soc_caps.h b/components/soc/esp32s3/include/soc/soc_caps.h index a97f63c52a..1242ad4f64 100644 --- a/components/soc/esp32s3/include/soc/soc_caps.h +++ b/components/soc/esp32s3/include/soc/soc_caps.h @@ -15,6 +15,7 @@ #define SOC_CPU_CORES_NUM 2 #define SOC_CACHE_SUPPORT_WRAP 1 #define SOC_ULP_SUPPORTED 1 +#define SOC_USB_OTG_SUPPORTED 1 #define SOC_RTC_SLOW_MEM_SUPPORTED 1 #define SOC_CCOMP_TIMER_SUPPORTED 1 #define SOC_DIG_SIGN_SUPPORTED 0 diff --git a/docs/_static/usb-board-connection.png b/docs/_static/usb-board-connection.png index cdb81eccf33cd667d527f933083cf8e7067eb96f..76bed54cf830900060ed1be3c394d5ae923b3201 100644 GIT binary patch literal 95347 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

i9WBh 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�b-mM%g|ALsy}$OerG1gn{p7uStp4A; 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 Vhp+aA@+IKTsHdx+%Q~loCIG639n=5- literal 95518 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ξ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%0A_`hAt3 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

  • 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 diff --git a/docs/conf_common.py b/docs/conf_common.py index 322b3198f2..390b106f95 100644 --- a/docs/conf_common.py +++ b/docs/conf_common.py @@ -164,7 +164,7 @@ LEGACY_DOCS = ['api-guides/build-system-legacy.rst', 'api-guides/unit-tests-legacy.rst', 'get-started-legacy/**'] -USB_DOCS = ['api-reference/peripherals/usb.rst', +USB_DOCS = ['api-reference/peripherals/usb_device.rst', 'api-guides/usb-otg-console.rst', 'api-guides/dfu.rst'] @@ -212,7 +212,7 @@ conditional_include_dict = {'SOC_BT_SUPPORTED':BT_DOCS, 'SOC_SDMMC_HOST_SUPPORTED':SDMMC_DOCS, 'SOC_SDIO_SLAVE_SUPPORTED':SDIO_SLAVE_DOCS, 'SOC_MCPWM_SUPPORTED':MCPWM_DOCS, - 'SOC_USB_SUPPORTED':USB_DOCS, + 'SOC_USB_OTG_SUPPORTED':USB_DOCS, 'SOC_USB_SERIAL_JTAG_SUPPORTED':USB_SERIAL_JTAG_DOCS, 'SOC_DEDICATED_GPIO_SUPPORTED':DEDIC_GPIO_DOCS, 'SOC_SPIRAM_SUPPORTED':SPIRAM_DOCS, diff --git a/docs/en/api-guides/index.rst b/docs/en/api-guides/index.rst index b2b750bfbb..22ce505dbd 100644 --- a/docs/en/api-guides/index.rst +++ b/docs/en/api-guides/index.rst @@ -12,7 +12,7 @@ API Guides Build System :esp32: Build System (Legacy GNU Make) Deep Sleep Wake Stubs - :SOC_USB_SUPPORTED: Device Firmware Upgrade through USB + :SOC_USB_OTG_SUPPORTED: Device Firmware Upgrade through USB Error Handling :SOC_BT_SUPPORTED: ESP-BLE-MESH ESP-WIFI-MESH @@ -41,6 +41,6 @@ API Guides Unit Testing (Target) Unit Testing (Linux Host) :esp32: Unit Testing (Legacy GNU Make) - :SOC_USB_SUPPORTED: USB OTG Console + :SOC_USB_OTG_SUPPORTED: USB OTG Console :SOC_USB_SERIAL_JTAG_SUPPORTED: USB Serial/JTAG Controller Console WiFi Driver diff --git a/docs/en/api-guides/performance/speed.rst b/docs/en/api-guides/performance/speed.rst index 87693a9f4e..b97132d11c 100644 --- a/docs/en/api-guides/performance/speed.rst +++ b/docs/en/api-guides/performance/speed.rst @@ -91,8 +91,8 @@ Although standard output is buffered, it's possible for an application to be lim .. list:: - Reduce the volume of log output by lowering the app :ref:`CONFIG_LOG_DEFAULT_LEVEL` (the equivalent bootloader setting is :ref:`CONFIG_BOOTLOADER_LOG_LEVEL`). This also reduces the binary size, and saves some CPU time spent on string formatting. - :not SOC_USB_SUPPORTED: - Increase the speed of logging output by increasing the :ref:`CONFIG_ESP_CONSOLE_UART_BAUDRATE` - :SOC_USB_SUPPORTED: - Increase the speed of logging output by increasing the :ref:`CONFIG_ESP_CONSOLE_UART_BAUDRATE`. (Unless using internal USB-CDC for serial console, in which case the serial throughput doesn't depend on the configured baud rate.) + :not SOC_USB_OTG_SUPPORTED: - Increase the speed of logging output by increasing the :ref:`CONFIG_ESP_CONSOLE_UART_BAUDRATE` + :SOC_USB_OTG_SUPPORTED: - Increase the speed of logging output by increasing the :ref:`CONFIG_ESP_CONSOLE_UART_BAUDRATE`. (Unless using internal USB-CDC for serial console, in which case the serial throughput doesn't depend on the configured baud rate.) Not Recommended ^^^^^^^^^^^^^^^ diff --git a/docs/en/api-reference/peripherals/index.rst b/docs/en/api-reference/peripherals/index.rst index 889d273945..d52fbd8e7f 100644 --- a/docs/en/api-reference/peripherals/index.rst +++ b/docs/en/api-reference/peripherals/index.rst @@ -33,6 +33,6 @@ Peripherals API :esp32s2: Touch Element TWAI UART - :SOC_USB_SUPPORTED: USB + :SOC_USB_OTG_SUPPORTED: USB Device Code examples for this API section are provided in the :example:`peripherals` directory of ESP-IDF examples. \ No newline at end of file diff --git a/docs/en/api-reference/peripherals/usb.rst b/docs/en/api-reference/peripherals/usb_device.rst similarity index 94% rename from docs/en/api-reference/peripherals/usb.rst rename to docs/en/api-reference/peripherals/usb_device.rst index 72bda70c93..6e3d1c1c91 100644 --- a/docs/en/api-reference/peripherals/usb.rst +++ b/docs/en/api-reference/peripherals/usb_device.rst @@ -1,6 +1,9 @@ -USB Driver -========== +USB Device Driver +================= + +{IDF_TARGET_USB_DP_GPIO_NUM:default="20"} +{IDF_TARGET_USB_DM_GPIO_NUM:default="19"} Overview -------- @@ -21,12 +24,14 @@ Hardware USB Connection - Any board with the {IDF_TARGET_NAME} chip with USB connectors or with exposed USB's D+ and D- (DATA+/DATA-) pins. -If the board has no USB connector but has the pins, connect pins directly to the host (e.g. with do-it-yourself cable from any USB connection cable). For example, connect GPIO19/20 to D-/D+ respectively for an ESP32-S2 board: +If the board has no USB connector but has the pins, connect pins directly to the host (e.g. with do-it-yourself cable from any USB connection cable). + +On {IDF_TARGET_NAME}, connect GPIO {IDF_TARGET_USB_DP_GPIO_NUM} and {IDF_TARGET_USB_DM_GPIO_NUM} to D+/D- respectively: .. figure:: ../../../_static/usb-board-connection.png :align: center - :alt: Connection of a board to a host ESP32-S2 + :alt: Connection of a board to a host ESP chip :figclass: align-center Driver Structure diff --git a/docs/en/api-reference/system/freertos_additions.rst b/docs/en/api-reference/system/freertos_additions.rst index 189611c0a0..df312052fd 100644 --- a/docs/en/api-reference/system/freertos_additions.rst +++ b/docs/en/api-reference/system/freertos_additions.rst @@ -25,8 +25,8 @@ Ring Buffers The ESP-IDF FreeRTOS ring buffer is a strictly FIFO buffer that supports arbitrarily sized items. Ring buffers are a more memory efficient alternative to FreeRTOS queues in situations where the size of items is variable. The capacity of a ring buffer is not measured by the number of items -it can store, but rather by the amount of memory used for storing items. The ring buffer provides API -to send an item, or to allocate space for an item in the ring buffer to be filled manually by the user. +it can store, but rather by the amount of memory used for storing items. The ring buffer provides API +to send an item, or to allocate space for an item in the ring buffer to be filled manually by the user. For efficiency reasons, **items are always retrieved from the ring buffer by reference**. As a result, all retrieved items *must also be returned* to the ring buffer by using :cpp:func:`vRingbufferReturnItem` or :cpp:func:`vRingbufferReturnItemFromISR`, in order for them to be removed from the ring buffer completely. @@ -531,6 +531,6 @@ Hooks API Reference Component Specific Properties ----------------------------- -Besides standart component variables that could be gotten with basic cmake build properties FreeRTOS component also provides an arguments (only one so far) for simpler integration with other modules: +Besides standard component variables that could be gotten with basic cmake build properties FreeRTOS component also provides an arguments (only one so far) for simpler integration with other modules: - `ORIG_INCLUDE_PATH` - contains an absolute path to freertos root include folder. Thus instead of `#include "freertos/FreeRTOS.h"` you can refer to headers directly: `#include "FreeRTOS.h"`. diff --git a/docs/page_redirects.txt b/docs/page_redirects.txt index 33a5583ea1..e5725f82e2 100644 --- a/docs/page_redirects.txt +++ b/docs/page_redirects.txt @@ -16,6 +16,7 @@ api-reference/ethernet/esp_eth api-reference/network/esp_eth api-reference/mesh/index api-reference/network/index api-reference/mesh/esp_mesh api-reference/network/esp_mesh api-reference/peripherals/can api-reference/peripherals/twai +api-reference/peripherals/usb api-reference/peripherals/usb_device api-reference/wifi/index api-reference/network/index api-reference/wifi/esp_now api-reference/network/esp_now api-reference/wifi/esp_smartconfig api-reference/network/esp_smartconfig diff --git a/docs/zh_CN/api-guides/index.rst b/docs/zh_CN/api-guides/index.rst index 842f38da88..e23b69ae91 100644 --- a/docs/zh_CN/api-guides/index.rst +++ b/docs/zh_CN/api-guides/index.rst @@ -12,7 +12,7 @@ API 指南 构建系统 :esp32: 构建系统 (传统 GNU Make) 深度睡眠唤醒存根 - :esp32s2: 通过 USB 升级设备固件 + :SOC_USB_OTG_SUPPORTED: 通过 USB 升级设备固件 错误处理 :SOC_BT_SUPPORTED: ESP-BLE-MESH ESP-WIFI-MESH @@ -41,6 +41,6 @@ API 指南 单元测试 (Target) 单元测试 (Linux Host) :esp32: 单元测试 (传统 GNU Make) - :SOC_USB_SUPPORTED: USB 控制台 + :SOC_USB_OTG_SUPPORTED: USB 控制台 :SOC_USB_SERIAL_JTAG_SUPPORTED: USB Serial/JTAG Controller Console Wi-Fi 驱动 diff --git a/docs/zh_CN/api-reference/peripherals/index.rst b/docs/zh_CN/api-reference/peripherals/index.rst index 8aca2ff658..373b041ed5 100644 --- a/docs/zh_CN/api-reference/peripherals/index.rst +++ b/docs/zh_CN/api-reference/peripherals/index.rst @@ -33,6 +33,6 @@ :esp32s2: Touch Element TWAI UART - :SOC_USB_SUPPORTED: USB + :SOC_USB_OTG_SUPPORTED: USB Device 本部分的 API 示例代码存放在 ESP-IDF 示例项目的 :example:`peripherals` 目录下。 \ No newline at end of file diff --git a/docs/zh_CN/api-reference/peripherals/usb.rst b/docs/zh_CN/api-reference/peripherals/usb.rst deleted file mode 100644 index 6fc57107c6..0000000000 --- a/docs/zh_CN/api-reference/peripherals/usb.rst +++ /dev/null @@ -1 +0,0 @@ -.. include:: ../../../en/api-reference/peripherals/usb.rst diff --git a/docs/zh_CN/api-reference/peripherals/usb_device.rst b/docs/zh_CN/api-reference/peripherals/usb_device.rst new file mode 100644 index 0000000000..eeb934409f --- /dev/null +++ b/docs/zh_CN/api-reference/peripherals/usb_device.rst @@ -0,0 +1 @@ +.. include:: ../../../en/api-reference/peripherals/usb_device.rst From 81448dcae8a5517a5c13c1ccbbd3a46c392468f6 Mon Sep 17 00:00:00 2001 From: morris Date: Fri, 9 Jul 2021 11:15:26 +0800 Subject: [PATCH 3/3] tiny_usb: rename Kconfig name 1. Renamed Kconfig file of tinyusb (distinguish tinyusb stack from usb peripheral) 2. bugfix/typofix/doc update of tinyusb --- components/esp_system/Kconfig | 5 +- components/tinyusb/CMakeLists.txt | 139 +++++----- components/tinyusb/Kconfig | 255 +++++++++--------- .../tinyusb/additions/include/tinyusb.h | 27 +- .../tinyusb/additions/include/tinyusb_types.h | 2 +- .../tinyusb/additions/include/tusb_config.h | 81 +++--- .../tinyusb/additions/include/tusb_tasks.h | 16 +- .../include_private/descriptors_control.h | 2 +- .../additions/src/descriptors_control.c | 52 ++-- components/tinyusb/additions/src/tinyusb.c | 68 ++--- .../tinyusb/additions/src/tusb_cdc_acm.c | 6 +- components/tinyusb/additions/src/tusb_tasks.c | 34 +-- .../tinyusb/additions/src/usb_descriptors.c | 32 +-- components/tinyusb/sdkconfig.rename | 22 ++ components/usb/CMakeLists.txt | 21 +- components/usb/Kconfig | 9 + examples/peripherals/usb/README.md | 23 ++ .../peripherals/usb/tusb_console/README.md | 73 ++--- .../usb/tusb_console/sdkconfig.defaults | 5 +- .../usb/tusb_sample_descriptor/README.md | 104 ++++--- .../main/tusb_sample_descriptor_main.c | 2 +- .../tusb_sample_descriptor/sdkconfig.defaults | 11 +- .../usb/tusb_serial_device/README.md | 88 +++--- .../main/tusb_serial_device_main.c | 4 +- .../usb/tusb_serial_device/sdkconfig.defaults | 5 +- 25 files changed, 589 insertions(+), 497 deletions(-) create mode 100644 components/tinyusb/sdkconfig.rename create mode 100644 components/usb/Kconfig create mode 100644 examples/peripherals/usb/README.md diff --git a/components/esp_system/Kconfig b/components/esp_system/Kconfig index 0c5faff0e9..509fbbb4aa 100644 --- a/components/esp_system/Kconfig +++ b/components/esp_system/Kconfig @@ -201,9 +201,8 @@ menu "ESP System Settings" bool "Default: UART0" config ESP_CONSOLE_USB_CDC bool "USB CDC" - # The naming is confusing: USB_ENABLED means that TinyUSB driver is enabled, not USB in general. - # && !USB_ENABLED is because the ROM CDC driver is currently incompatible with TinyUSB. - depends on (IDF_TARGET_ESP32S2 || IDF_TARGET_ESP32S3) && !USB_ENABLED + # && !TINY_USB is because the ROM CDC driver is currently incompatible with TinyUSB. + depends on (IDF_TARGET_ESP32S2 || IDF_TARGET_ESP32S3) && !TINY_USB config ESP_CONSOLE_USB_SERIAL_JTAG bool "USB Serial/JTAG Controller" select ESPTOOLPY_NO_STUB if IDF_TARGET_ESP32S3 #ESPTOOL-251 diff --git a/components/tinyusb/CMakeLists.txt b/components/tinyusb/CMakeLists.txt index a711abf598..b180c75e23 100644 --- a/components/tinyusb/CMakeLists.txt +++ b/components/tinyusb/CMakeLists.txt @@ -1,78 +1,81 @@ idf_build_get_property(target IDF_TARGET) -idf_component_register(REQUIRES esp_rom freertos vfs soc) -if(CONFIG_USB_ENABLED) +set(srcs) +set(includes_public) +set(includes_private) +set(compile_options) - if(target STREQUAL "esp32s3") - set(tusb_mcu "OPT_MCU_ESP32S3") - set(tusb_family "esp32sx") - elseif(target STREQUAL "esp32s2") - set(tusb_mcu "OPT_MCU_ESP32S2") - set(tusb_family "esp32sx") - else() - message("TinyUSB does not support ${target}.") - return() - endif() +if(CONFIG_TINYUSB) + if(target STREQUAL "esp32s3") + set(tusb_mcu "OPT_MCU_ESP32S3") + set(tusb_family "esp32sx") + elseif(target STREQUAL "esp32s2") + set(tusb_mcu "OPT_MCU_ESP32S2") + set(tusb_family "esp32sx") + else() + # CONFIG_TINYUSB dependency has been garanteed by Kconfig logic, + # So it's not possible that cmake goes here + message(FATAL_ERROR "TinyUSB is not support on ${target}.") + return() + endif() - ### variables ### - ################# - set(compile_options - "-DCFG_TUSB_MCU=${tusb_mcu}" - "-DCFG_TUSB_DEBUG=${CONFIG_USB_DEBUG_LEVEL}" - "-Wno-type-limits" # needed for the vanila tinyusb with turned off classes - ) + list(APPEND compile_options + "-DCFG_TUSB_MCU=${tusb_mcu}" + "-DCFG_TUSB_DEBUG=${CONFIG_TINYUSB_DEBUG_LEVEL}" + ) - idf_component_get_property(FREERTOS_ORIG_INCLUDE_PATH freertos - ORIG_INCLUDE_PATH) - set(includes_private - # tusb: - "${COMPONENT_DIR}/tinyusb/hw/bsp/" - "${COMPONENT_DIR}/tinyusb/src/" - "${COMPONENT_DIR}/tinyusb/src/device" - # espressif: - "${COMPONENT_DIR}/additions/include_private" - ) + idf_component_get_property(freertos_component_dir freertos COMPONENT_DIR) + + list(APPEND includes_private + "tinyusb/hw/bsp/" + "tinyusb/src/" + "tinyusb/src/device" + "additions/include_private" + ) + + list(APPEND includes_public + "tinyusb/src/" + "additions/include" + # The FreeRTOS API include convention in tinyusb is different from esp-idf + "${freertos_component_dir}/include/freertos" + ) - set(includes_public - # tusb: - "${FREERTOS_ORIG_INCLUDE_PATH}" - "${COMPONENT_DIR}/tinyusb/src/" - # espressif: - "${COMPONENT_DIR}/additions/include") - set(srcs - # espressif: - "${COMPONENT_DIR}/additions/src/descriptors_control.c" - "${COMPONENT_DIR}/additions/src/tinyusb.c" - "${COMPONENT_DIR}/additions/src/tusb_tasks.c" - "${COMPONENT_DIR}/additions/src/usb_descriptors.c" - # tusb: - "${COMPONENT_DIR}/tinyusb/src/portable/espressif/${tusb_family}/dcd_${tusb_family}.c" - "${COMPONENT_DIR}/tinyusb/src/class/cdc/cdc_device.c" - "${COMPONENT_DIR}/tinyusb/src/class/hid/hid_device.c" - "${COMPONENT_DIR}/tinyusb/src/class/midi/midi_device.c" - "${COMPONENT_DIR}/tinyusb/src/class/msc/msc_device.c" - "${COMPONENT_DIR}/tinyusb/src/class/vendor/vendor_device.c" - "${COMPONENT_DIR}/tinyusb/src/common/tusb_fifo.c" - "${COMPONENT_DIR}/tinyusb/src/device/usbd_control.c" - "${COMPONENT_DIR}/tinyusb/src/device/usbd.c" - "${COMPONENT_DIR}/tinyusb/src/tusb.c") - # cdc stuff if turned on - if(CONFIG_USB_CDC_ENABLED) list(APPEND srcs - "${COMPONENT_DIR}/additions/src/cdc.c" - "${COMPONENT_DIR}/additions/src/tusb_cdc_acm.c" - "${COMPONENT_DIR}/additions/src/tusb_console.c" - "${COMPONENT_DIR}/additions/src/vfs_tinyusb.c") - endif() + "tinyusb/src/portable/espressif/${tusb_family}/dcd_${tusb_family}.c" + "tinyusb/src/class/cdc/cdc_device.c" + "tinyusb/src/class/hid/hid_device.c" + "tinyusb/src/class/midi/midi_device.c" + "tinyusb/src/class/msc/msc_device.c" + "tinyusb/src/class/vendor/vendor_device.c" + "tinyusb/src/common/tusb_fifo.c" + "tinyusb/src/device/usbd_control.c" + "tinyusb/src/device/usbd.c" + "tinyusb/src/tusb.c" + "additions/src/descriptors_control.c" + "additions/src/tinyusb.c" + "additions/src/tusb_tasks.c" + "additions/src/usb_descriptors.c" + ) - ### tinyusb lib ### - ################### - add_library(tinyusb STATIC ${srcs}) - target_include_directories( - tinyusb - PUBLIC ${includes_public} - PRIVATE ${includes_private}) - target_compile_options(tinyusb PRIVATE ${compile_options}) - target_link_libraries(${COMPONENT_TARGET} INTERFACE tinyusb) + # when no builtin class driver is enabled, an uint8_t data compared with `BUILTIN_DRIVER_COUNT` will always be false + set_source_files_properties("tinyusb/src/device/usbd.c" PROPERTIES COMPILE_FLAGS "-Wno-type-limits") + if(CONFIG_TINYUSB_CDC_ENABLED) + list(APPEND srcs + "additions/src/cdc.c" + "additions/src/tusb_cdc_acm.c" + "additions/src/tusb_console.c" + "additions/src/vfs_tinyusb.c" + ) + endif() # CONFIG_TINYUSB_CDC_ENABLED +endif() # CONFIG_TINYUSB + +idf_component_register(SRCS ${srcs} + INCLUDE_DIRS ${includes_public} + PRIV_INCLUDE_DIRS ${includes_private} + PRIV_REQUIRES "vfs" + ) + +if(CONFIG_TINYUSB) + target_compile_options(${COMPONENT_LIB} PRIVATE ${compile_options}) endif() diff --git a/components/tinyusb/Kconfig b/components/tinyusb/Kconfig index 59cf899495..9e28a67713 100644 --- a/components/tinyusb/Kconfig +++ b/components/tinyusb/Kconfig @@ -1,150 +1,155 @@ -menu "TinyUSB" +menu "TinyUSB Stack" + visible if USB_OTG_SUPPORTED - config USB_ENABLED - bool "Enable TinyUSB driver" + config TINYUSB + bool "Use TinyUSB Stack" + depends on USB_OTG_SUPPORTED default n - depends on IDF_TARGET_ESP32S2 || IDF_TARGET_ESP32S3 - select FREERTOS_USE_AUTHENTIC_INCLUDE_PATHS help - Adds support for TinyUSB + Enable TinyUSB stack support. + Note that, esp-idf only uses the device stack provided by TinyUSB. - menu "USB task configuration" - depends on USB_ENABLED - - config USB_DO_NOT_CREATE_TASK - bool "Do not create a TinyUSB task" - default n + if TINYUSB + config TINYUSB_DEBUG_LEVEL + int "TinyUSB log level (0-3)" + default 0 + range 0 3 help - This option allows to not create the FreeRTOS task during the driver initialization. User will have - to handle TinyUSB events manually + Specify verbosity of TinyUSB log output. - config USB_TASK_PRIORITY - int "Set a priority of the TinyUSB task" - default 5 - depends on !USB_DO_NOT_CREATE_TASK - help - User can change the priority of the main task according the application needs + menu "TinyUSB task configuration" + config TINYUSB_NO_DEFAULT_TASK + bool "Do not create a TinyUSB task" + default n + help + This option allows to not create the FreeRTOS task during the driver initialization. + User will have to handle TinyUSB events manually. - endmenu + config TINYUSB_TASK_PRIORITY + int "TinyUSB task priority" + default 5 + depends on !TINYUSB_NO_DEFAULT_TASK + help + Set the priority of the default TinyUSB main task. - menu "Descriptor configuration" - depends on USB_ENABLED + config TINYUSB_TASK_STACK_SIZE + int "TinyUSB task stack size (bytes)" + default 4096 + depends on !TINYUSB_NO_DEFAULT_TASK + help + Set the stack size of the default TinyUSB main task. + endmenu - config USB_DESC_USE_ESPRESSIF_VID - bool "VID: Use an Espressif's default value" - default y - help - Long description + menu "Descriptor configuration" + config TINYUSB_DESC_USE_ESPRESSIF_VID + bool "VID: Use Espressif's vendor ID" + default y + help + Enable this option, USB device will use Espressif's vendor ID as its VID. + This is helpful at product develop stage. - config USB_DESC_CUSTOM_VID - hex "Custom VID value" - default 0x1234 - depends on !USB_DESC_USE_ESPRESSIF_VID - help - Custom Vendor ID + config TINYUSB_DESC_CUSTOM_VID + hex "VID: Custom vendor ID" + default 0x1234 + depends on !TINYUSB_DESC_USE_ESPRESSIF_VID + help + Custom Vendor ID. - config USB_DESC_USE_DEFAULT_PID - bool "PID: Use a default PID assigning" - default y - help - Default TinyUSB PID assigning uses values 0x4000...0x4007 + config TINYUSB_DESC_USE_DEFAULT_PID + bool "PID: Use a default PID assigned to TinyUSB" + default y + help + Default TinyUSB PID assigning uses values 0x4000...0x4007. - config USB_DESC_CUSTOM_PID - hex "Custom PID value" - default 0x5678 - depends on !USB_DESC_USE_DEFAULT_PID - help - Custom Product ID + config TINYUSB_DESC_CUSTOM_PID + hex "PID: Custom product ID" + default 0x5678 + depends on !TINYUSB_DESC_USE_DEFAULT_PID + help + Custom Product ID. - config USB_DESC_BCDDEVICE - hex "bcdDevice" - default 0x0100 - help - Version of the firmware of the USB device + config TINYUSB_DESC_BCD_DEVICE + hex "bcdDevice" + default 0x0100 + help + Version of the firmware of the USB device. - config USB_DESC_MANUFACTURER_STRING - string "Manufacturer" - default "Espressif Systems" - help - Name of the manufacturer of the USB device + config TINYUSB_DESC_MANUFACTURER_STRING + string "Manufacturer name" + default "Espressif Systems" + help + Name of the manufacturer of the USB device. - config USB_DESC_PRODUCT_STRING - string "Product" - default "Espressif Device" - help - Name of the USB device + config TINYUSB_DESC_PRODUCT_STRING + string "Product name" + default "Espressif Device" + help + Name of the USB device. - config USB_DESC_SERIAL_STRING - string "Serial string" - default "123456" - help - Specify serial number of the USB device + config TINYUSB_DESC_SERIAL_STRING + string "Serial string" + default "123456" + help + Serial number of the USB device. - config USB_DESC_CDC_STRING - string "CDC Device String" - default "Espressif CDC Device" - depends on USB_CDC_ENABLED - help - Specify name of the CDC device + config TINYUSB_DESC_CDC_STRING + depends on TINYUSB_CDC_ENABLED + string "CDC Device String" + default "Espressif CDC Device" + help + Name of the CDC device. - config USB_DESC_MSC_STRING - string "MSC Device String" - default "Espressif MSC Device" - depends on USB_MSC_ENABLED - help - Specify name of the MSC device + config TINYUSB_DESC_MSC_STRING + depends on TINYUSB_MSC_ENABLED + string "MSC Device String" + default "Espressif MSC Device" + help + Name of the MSC device. - config USB_DESC_HID_STRING - string "HID Device String" - default "Espressif HID Device" - depends on USB_HID_ENABLED - help - Specify name of the HID device + config TINYUSB_DESC_HID_STRING + depends on TINYUSB_HID_ENABLED + string "HID Device String" + default "Espressif HID Device" + help + Name of the HID device + endmenu # "Descriptor configuration" - endmenu + menu "Massive Storage Class (MSC)" + config TINYUSB_MSC_ENABLED + bool "Enable TinyUSB MSC feature" + default n + help + Enable TinyUSB MSC feature. - config USB_MSC_ENABLED - bool "Enable USB MSC TinyUSB driver" - default n - depends on USB_ENABLED - help - Enable USB MSC TinyUSB driver. + config TINYUSB_MSC_BUFSIZE + depends on TINYUSB_MSC_ENABLED + int "MSC FIFO size" + default 512 + help + MSC FIFO size, in bytes. + endmenu # "Massive Storage Class" - config USB_MSC_BUFSIZE - int "MSC FIFO size" - default 512 - depends on USB_MSC_ENABLED - help - MSC FIFO size + menu "Communication Device Class (CDC)" + config TINYUSB_CDC_ENABLED + bool "Enable TinyUSB CDC feature" + default n + help + Enable TinyUSB CDC feature. - config USB_CDC_ENABLED - bool "Enable USB Serial (CDC) TinyUSB driver" - default n - depends on USB_ENABLED - help - Enable USB Serial (CDC) TinyUSB driver. + config TINYUSB_CDC_RX_BUFSIZE + depends on TINYUSB_CDC_ENABLED + int "CDC FIFO size of RX channel" + default 64 + help + CDC FIFO size of RX channel. - config USB_CDC_RX_BUFSIZE - int "CDC FIFO size of RX" - default 64 - depends on USB_CDC_ENABLED - help - CDC FIFO size of RX + config TINYUSB_CDC_TX_BUFSIZE + depends on TINYUSB_CDC_ENABLED + int "CDC FIFO size of TX channel" + default 64 + help + CDC FIFO size of TX channel. + endmenu # "Communication Device Class" + endif # TINYUSB - config USB_CDC_TX_BUFSIZE - int "CDC FIFO size of TX" - default 64 - depends on USB_CDC_ENABLED - help - CDC FIFO size of TX - - - config USB_DEBUG_LEVEL - int "TinyUSB log level (0-3)" - default 0 - range 0 3 - depends on USB_ENABLED - help - Define amount of log output from TinyUSB - -endmenu +endmenu # "TinyUSB Stack" diff --git a/components/tinyusb/additions/include/tinyusb.h b/components/tinyusb/additions/include/tinyusb.h index 6704becf7d..aaa48fa725 100644 --- a/components/tinyusb/additions/include/tinyusb.h +++ b/components/tinyusb/additions/include/tinyusb.h @@ -27,9 +27,9 @@ extern "C" { /* tinyusb uses buffers with type of uint8_t[] but in our driver we are reading them as a 32-bit word */ -#if (CFG_TUD_ENDOINT0_SIZE < 4) -# define CFG_TUD_ENDOINT0_SIZE 4 -# warning "CFG_TUD_ENDOINT0_SIZE was too low and was set to 4" +#if (CFG_TUD_ENDPOINT0_SIZE < 4) +# define CFG_TUD_ENDPOINT0_SIZE 4 +# warning "CFG_TUD_ENDPOINT0_SIZE was too low and was set to 4" #endif #if TUSB_OPT_DEVICE_ENABLED @@ -72,13 +72,30 @@ extern "C" { */ typedef struct { tusb_desc_device_t *descriptor; /*!< Pointer to a device descriptor */ - char **string_descriptor; /*!< Pointer to an array of string descriptors */ + const char **string_descriptor; /*!< Pointer to an array of string descriptors */ bool external_phy; /*!< Should USB use an external PHY */ } tinyusb_config_t; +/** + * @brief This is an all-in-one helper function, including: + * 1. USB device driver initialization + * 2. Descriptors preparation + * 3. TinyUSB stack initialization + * 4. Creates and start a task to handle usb events + * + * @note Don't change Custom descriptor, but if it has to be done, + * Suggest to define as follows in order to match the Interface Association Descriptor (IAD): + * bDeviceClass = TUSB_CLASS_MISC, + * bDeviceSubClass = MISC_SUBCLASS_COMMON, + * + * @param config tinyusb stack specific configuration + * @retval ESP_ERR_INVALID_ARG Install driver and tinyusb stack failed because of invalid argument + * @retval ESP_FAIL Install driver and tinyusb stack failed because of internal error + * @retval ESP_OK Install driver and tinyusb stack successfully + */ esp_err_t tinyusb_driver_install(const tinyusb_config_t *config); -// TODO esp_err_t tinyusb_driver_uninstall(void); (IDF-1474) +// TODO esp_err_t tinyusb_driver_uninstall(void); (IDF-1474) #ifdef __cplusplus } diff --git a/components/tinyusb/additions/include/tinyusb_types.h b/components/tinyusb/additions/include/tinyusb_types.h index ad4a22de26..0f226f3fa1 100644 --- a/components/tinyusb/additions/include/tinyusb_types.h +++ b/components/tinyusb/additions/include/tinyusb_types.h @@ -25,7 +25,7 @@ typedef enum{ TINYUSB_USBDEV_0, } tinyusb_usbdev_t; -typedef char *tusb_desc_strarray_device_t[USB_STRING_DESCRIPTOR_ARRAY_SIZE]; +typedef const char *tusb_desc_strarray_device_t[USB_STRING_DESCRIPTOR_ARRAY_SIZE]; #ifdef __cplusplus } diff --git a/components/tinyusb/additions/include/tusb_config.h b/components/tinyusb/additions/include/tusb_config.h index 05509d5e4a..81ae270076 100644 --- a/components/tinyusb/additions/include/tusb_config.h +++ b/components/tinyusb/additions/include/tusb_config.h @@ -25,6 +25,7 @@ */ #pragma once + #include "tusb_option.h" #include "sdkconfig.h" @@ -32,11 +33,27 @@ extern "C" { #endif -/* */ -/* COMMON CONFIGURATION */ -/* */ +#ifndef CONFIG_TINYUSB_CDC_ENABLED +# define CONFIG_TINYUSB_CDC_ENABLED 0 +#endif -#define CFG_TUSB_RHPORT0_MODE OPT_MODE_DEVICE +#ifndef CONFIG_TINYUSB_MSC_ENABLED +# define CONFIG_TINYUSB_MSC_ENABLED 0 +#endif + +#ifndef CONFIG_TINYUSB_HID_ENABLED +# define CONFIG_TINYUSB_HID_ENABLED 0 +#endif + +#ifndef CONFIG_TINYUSB_MIDI_ENABLED +# define CONFIG_TINYUSB_MIDI_ENABLED 0 +#endif + +#ifndef CONFIG_TINYUSB_CUSTOM_CLASS_ENABLED +# define CONFIG_TINYUSB_CUSTOM_CLASS_ENABLED 0 +#endif + +#define CFG_TUSB_RHPORT0_MODE OPT_MODE_DEVICE | OPT_MODE_FULL_SPEED #define CFG_TUSB_OS OPT_OS_FREERTOS /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. @@ -51,55 +68,29 @@ extern "C" { #endif #ifndef CFG_TUSB_MEM_ALIGN -# define CFG_TUSB_MEM_ALIGN TU_ATTR_ALIGNED(4) +# define CFG_TUSB_MEM_ALIGN TU_ATTR_ALIGNED(4) #endif -/* */ -/* DRIVER CONFIGURATION */ -/* */ - -#define CFG_TUD_MAINTASK_SIZE 4096 -#define CFG_TUD_ENDOINT0_SIZE 64 +#ifndef CFG_TUD_ENDPOINT0_SIZE +#define CFG_TUD_ENDPOINT0_SIZE 64 +#endif // CDC FIFO size of TX and RX -#define CFG_TUD_CDC_RX_BUFSIZE CONFIG_USB_CDC_RX_BUFSIZE -#define CFG_TUD_CDC_TX_BUFSIZE CONFIG_USB_CDC_TX_BUFSIZE +#define CFG_TUD_CDC_RX_BUFSIZE CONFIG_TINYUSB_CDC_RX_BUFSIZE +#define CFG_TUD_CDC_TX_BUFSIZE CONFIG_TINYUSB_CDC_TX_BUFSIZE -// MSC Buffer size of Device Mass storage: -#define CFG_TUD_MSC_BUFSIZE CONFIG_USB_MSC_BUFSIZE +// MSC Buffer size of Device Mass storage +#define CFG_TUD_MSC_BUFSIZE CONFIG_TINYUSB_MSC_BUFSIZE // HID buffer size Should be sufficient to hold ID (if any) + Data -#define CFG_TUD_HID_BUFSIZE CONFIG_USB_HID_BUFSIZE +#define CFG_TUD_HID_BUFSIZE CONFIG_TINYUSB_HID_BUFSIZE -#define CFG_TUD_CDC CONFIG_USB_CDC_ENABLED -#define CFG_TUD_MSC CONFIG_USB_MSC_ENABLED -#define CFG_TUD_HID CONFIG_USB_HID_ENABLED -#define CFG_TUD_MIDI CONFIG_USB_MIDI_ENABLED -#define CFG_TUD_CUSTOM_CLASS CONFIG_USB_CUSTOM_CLASS_ENABLED - -/* */ -/* KCONFIG */ -/* */ - -#ifndef CONFIG_USB_CDC_ENABLED -# define CONFIG_USB_CDC_ENABLED 0 -#endif - -#ifndef CONFIG_USB_MSC_ENABLED -# define CONFIG_USB_MSC_ENABLED 0 -#endif - -#ifndef CONFIG_USB_HID_ENABLED -# define CONFIG_USB_HID_ENABLED 0 -#endif - -#ifndef CONFIG_USB_MIDI_ENABLED -# define CONFIG_USB_MIDI_ENABLED 0 -#endif - -#ifndef CONFIG_USB_CUSTOM_CLASS_ENABLED -# define CONFIG_USB_CUSTOM_CLASS_ENABLED 0 -#endif +// Enabled device class driver +#define CFG_TUD_CDC CONFIG_TINYUSB_CDC_ENABLED +#define CFG_TUD_MSC CONFIG_TINYUSB_MSC_ENABLED +#define CFG_TUD_HID CONFIG_TINYUSB_HID_ENABLED +#define CFG_TUD_MIDI CONFIG_TINYUSB_MIDI_ENABLED +#define CFG_TUD_CUSTOM_CLASS CONFIG_TINYUSB_CUSTOM_CLASS_ENABLED #ifdef __cplusplus } diff --git a/components/tinyusb/additions/include/tusb_tasks.h b/components/tinyusb/additions/include/tusb_tasks.h index 94ed4eafce..7f3209db51 100644 --- a/components/tinyusb/additions/include/tusb_tasks.h +++ b/components/tinyusb/additions/include/tusb_tasks.h @@ -16,26 +16,28 @@ #include "esp_err.h" - #ifdef __cplusplus extern "C" { #endif /** - * @brief This API starts a task with a wrapper function of tud_task and default task parameters. + * @brief This helper function creates and starts a task which wraps `tud_task()`. * - * The wrapper function basically wraps tud_task and some log. Default parameters: stack size and priority as configured, argument = NULL, - * not pinned to any core. + * The wrapper function basically wraps tud_task and some log. + * Default parameters: stack size and priority as configured, argument = NULL, not pinned to any core. * If you have more requirements for this task, you can create your own task which calls tud_task as the last step. * - * @return ESP_OK or ESP_FAIL + * @retval ESP_OK run tinyusb main task successfully + * @retval ESP_FAIL run tinyusb main task failed of internal error + * @retval ESP_ERR_INVALID_STATE tinyusb main task has been created before */ esp_err_t tusb_run_task(void); /** - * @brief Stops a FreeRTOS task + * @brief This helper function stops and destroys the task created by `tusb_run_task()` * - * @return ESP_OK or ESP_FAIL + * @retval ESP_OK stop and destory tinyusb main task successfully + * @retval ESP_ERR_INVALID_STATE tinyusb main task hasn't been created yet */ esp_err_t tusb_stop_task(void); diff --git a/components/tinyusb/additions/include_private/descriptors_control.h b/components/tinyusb/additions/include_private/descriptors_control.h index 4ef341932f..461ffa85e9 100644 --- a/components/tinyusb/additions/include_private/descriptors_control.h +++ b/components/tinyusb/additions/include_private/descriptors_control.h @@ -61,7 +61,7 @@ enum { }; bool tusb_desc_set; -void tusb_set_descriptor(tusb_desc_device_t *desc, char **str_desc); +void tusb_set_descriptor(tusb_desc_device_t *desc, const char **str_desc); tusb_desc_device_t *tusb_get_active_desc(void); char **tusb_get_active_str_desc(void); void tusb_clear_descriptor(void); diff --git a/components/tinyusb/additions/src/descriptors_control.c b/components/tinyusb/additions/src/descriptors_control.c index 659deeaf36..d7fbf0bda7 100644 --- a/components/tinyusb/additions/src/descriptors_control.c +++ b/components/tinyusb/additions/src/descriptors_control.c @@ -130,26 +130,40 @@ uint8_t const *tud_hid_descriptor_report_cb(void) // Driver functions // ============================================================================= -void tusb_set_descriptor(tusb_desc_device_t *desc, char **str_desc) +void tusb_set_descriptor(tusb_desc_device_t *dev_desc, const char **str_desc) { - ESP_LOGI(TAG, "Setting of a descriptor: \n" - ".bDeviceClass = %u\n" - ".bDeviceSubClass = %u,\n" - ".bDeviceProtocol = %u,\n" - ".bMaxPacketSize0 = %u,\n" - ".idVendor = 0x%08x,\n" - ".idProduct = 0x%08x,\n" - ".bcdDevice = 0x%08x,\n" - ".iManufacturer = 0x%02x,\n" - ".iProduct = 0x%02x,\n" - ".iSerialNumber = 0x%02x,\n" - ".bNumConfigurations = 0x%02x\n", - desc->bDeviceClass, desc->bDeviceSubClass, - desc->bDeviceProtocol, desc->bMaxPacketSize0, - desc->idVendor, desc->idProduct, desc->bcdDevice, - desc->iManufacturer, desc->iProduct, desc->iSerialNumber, - desc->bNumConfigurations); - s_descriptor = *desc; + ESP_LOGI(TAG, "\n" + "┌─────────────────────────────────┐\n" + "│ USB Device Descriptor Summary │\n" + "├───────────────────┬─────────────┤\n" + "│bDeviceClass │ %-4u │\n" + "├───────────────────┼─────────────┤\n" + "│bDeviceSubClass │ %-4u │\n" + "├───────────────────┼─────────────┤\n" + "│bDeviceProtocol │ %-4u │\n" + "├───────────────────┼─────────────┤\n" + "│bMaxPacketSize0 │ %-4u │\n" + "├───────────────────┼─────────────┤\n" + "│idVendor │ %-#10x │\n" + "├───────────────────┼─────────────┤\n" + "│idProduct │ %-#10x │\n" + "├───────────────────┼─────────────┤\n" + "│bcdDevice │ %-#10x │\n" + "├───────────────────┼─────────────┤\n" + "│iManufacturer │ %-#10x │\n" + "├───────────────────┼─────────────┤\n" + "│iProduct │ %-#10x │\n" + "├───────────────────┼─────────────┤\n" + "│iSerialNumber │ %-#10x │\n" + "├───────────────────┼─────────────┤\n" + "│bNumConfigurations │ %-#10x │\n" + "└───────────────────┴─────────────┘", + dev_desc->bDeviceClass, dev_desc->bDeviceSubClass, + dev_desc->bDeviceProtocol, dev_desc->bMaxPacketSize0, + dev_desc->idVendor, dev_desc->idProduct, dev_desc->bcdDevice, + dev_desc->iManufacturer, dev_desc->iProduct, dev_desc->iSerialNumber, + dev_desc->bNumConfigurations); + s_descriptor = *dev_desc; if (str_desc != NULL) { memcpy(s_str_descriptor, str_desc, diff --git a/components/tinyusb/additions/src/tinyusb.c b/components/tinyusb/additions/src/tinyusb.c index 9b709e2ab8..130a5884a0 100644 --- a/components/tinyusb/additions/src/tinyusb.c +++ b/components/tinyusb/additions/src/tinyusb.c @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "esp_log.h" -#include "esp_rom_gpio.h" +#include "sdkconfig.h" #include "driver/gpio.h" #include "driver/periph_ctrl.h" -#include "freertos/FreeRTOS.h" -#include "freertos/task.h" +#include "esp_log.h" +#include "esp_check.h" +#include "esp_rom_gpio.h" #include "hal/gpio_ll.h" #include "hal/usb_hal.h" #include "soc/gpio_periph.h" @@ -26,8 +26,6 @@ #include "descriptors_control.h" #include "tusb.h" #include "tusb_tasks.h" -#include "sdkconfig.h" -#include "esp_rom_gpio.h" const static char *TAG = "TinyUSB"; @@ -57,62 +55,30 @@ static void configure_pins(usb_hal_context_t *usb) } } - -/** - * @brief Initializes the tinyUSB driver. - * - * Note: Do not change any Custom descriptor, but - * if it used it is recomended to define: bDeviceClass = TUSB_CLASS_MISC, - * bDeviceSubClass = MISC_SUBCLASS_COMMON and bDeviceClass = TUSB_CLASS_MISC - * to match with Interface Association Descriptor (IAD) for CDC - * - * @param config if equal to NULL the default descriptor will be used - * @return esp_err_t Errors during the initialization - */ esp_err_t tinyusb_driver_install(const tinyusb_config_t *config) { - tusb_desc_device_t *descriptor; - int res; - char **string_descriptor; - ESP_LOGI(TAG, "Driver installation..."); - - periph_module_reset(PERIPH_USB_MODULE); + tusb_desc_device_t *dev_descriptor; + const char **string_descriptor; + ESP_RETURN_ON_FALSE(config, ESP_ERR_INVALID_ARG, TAG, "invalid argument"); + // Enable APB CLK to USB peripheral periph_module_enable(PERIPH_USB_MODULE); - - // Hal init + periph_module_reset(PERIPH_USB_MODULE); + // Initialize HAL layer usb_hal_context_t hal = { .use_external_phy = config->external_phy }; usb_hal_init(&hal); configure_pins(&hal); - if (config->descriptor == NULL) { - descriptor = &descriptor_kconfig; - } else { - descriptor = config->descriptor; - } + dev_descriptor = config->descriptor ? config->descriptor : &descriptor_kconfig; + string_descriptor = config->string_descriptor ? config->string_descriptor : descriptor_str_kconfig; + tusb_set_descriptor(dev_descriptor, string_descriptor); - if (config->string_descriptor == NULL) { - string_descriptor = descriptor_str_kconfig; - } else { - string_descriptor = config->string_descriptor; - } - - tusb_set_descriptor(descriptor, - string_descriptor); - - if (!tusb_init()) { - ESP_LOGE(TAG, "Can't initialize the TinyUSB stack."); - return ESP_FAIL; - } -#if !CONFIG_USB_DO_NOT_CREATE_TASK - res = tusb_run_task(); - if (res != ESP_OK) { - ESP_LOGE(TAG, "Can't create the TinyUSB task."); - return res; - } + ESP_RETURN_ON_FALSE(tusb_init(), ESP_FAIL, TAG, "Init TinyUSB stack failed"); +#if !CONFIG_TINYUSB_NO_DEFAULT_TASK + ESP_RETURN_ON_ERROR(tusb_run_task(), TAG, "Run TinyUSB task failed"); #endif - ESP_LOGI(TAG, "Driver installed"); + ESP_LOGI(TAG, "TinyUSB Driver installed"); return ESP_OK; } diff --git a/components/tinyusb/additions/src/tusb_cdc_acm.c b/components/tinyusb/additions/src/tusb_cdc_acm.c index b29c483bca..f2e536c64b 100644 --- a/components/tinyusb/additions/src/tusb_cdc_acm.c +++ b/components/tinyusb/additions/src/tusb_cdc_acm.c @@ -103,7 +103,7 @@ void tud_cdc_rx_cb(uint8_t itf) while (tud_cdc_n_available(itf)) { int read_res = tud_cdc_n_read( itf, acm->rx_tfbuf, - CONFIG_USB_CDC_RX_BUFSIZE ); + CONFIG_TINYUSB_CDC_RX_BUFSIZE ); int res = xRingbufferSend(acm->rx_unread_buf, acm->rx_tfbuf, read_res, 0); @@ -312,7 +312,7 @@ esp_err_t tinyusb_cdcacm_write_flush(tinyusb_cdcacm_itf_t itf, uint32_t timeout_ if (!timeout_ticks) { // if no timeout - nonblocking mode int res = tud_cdc_n_write_flush(itf); if (!res) { - ESP_LOGW(TAG, "flush fauled (res: %d)", res); + ESP_LOGW(TAG, "flush failed (res: %d)", res); return ESP_FAIL; } else { if (tud_cdc_n_write_occupied(itf)) { @@ -396,7 +396,7 @@ esp_err_t tusb_cdc_acm_init(const tinyusb_config_cdcacm_t *cfg) return ESP_ERR_NO_MEM; } - acm->rx_tfbuf = malloc(CONFIG_USB_CDC_RX_BUFSIZE); + acm->rx_tfbuf = malloc(CONFIG_TINYUSB_CDC_RX_BUFSIZE); if (!acm->rx_tfbuf) { ESP_LOGE(TAG, "Creation buffer error"); free_obj(itf); diff --git a/components/tinyusb/additions/src/tusb_tasks.c b/components/tinyusb/additions/src/tusb_tasks.c index e70e69cf94..731247380a 100644 --- a/components/tinyusb/additions/src/tusb_tasks.c +++ b/components/tinyusb/additions/src/tusb_tasks.c @@ -12,13 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "esp_log.h" +#include "sdkconfig.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" -#include "hal/usb_hal.h" +#include "esp_log.h" +#include "esp_check.h" #include "tinyusb.h" #include "tusb_tasks.h" -#include "sdkconfig.h" const static char *TAG = "tusb_tsk"; static TaskHandle_t s_tusb_tskh; @@ -34,29 +34,21 @@ static void tusb_device_task(void *arg) } } - esp_err_t tusb_run_task(void) { + // This function is not garanteed to be thread safe, if invoked multiple times without calling `tusb_stop_task`, will cause memory leak + // doing a sanity check anyway + ESP_RETURN_ON_FALSE(!s_tusb_tskh, ESP_ERR_INVALID_STATE, TAG, "TinyUSB main task already started"); // Create a task for tinyusb device stack: - xTaskCreate(tusb_device_task, "tinyUSB: main task", CFG_TUD_MAINTASK_SIZE, NULL, CONFIG_USB_TASK_PRIORITY, &s_tusb_tskh); - if (!s_tusb_tskh) { - return ESP_FAIL; - } else { - return ESP_OK; - } + xTaskCreate(tusb_device_task, "TinyUSB", CONFIG_TINYUSB_TASK_STACK_SIZE, NULL, CONFIG_TINYUSB_TASK_PRIORITY, &s_tusb_tskh); + ESP_RETURN_ON_FALSE(s_tusb_tskh, ESP_FAIL, TAG, "create TinyUSB main task failed"); + return ESP_OK; } esp_err_t tusb_stop_task(void) { - if ( s_tusb_tskh != NULL ) { - vTaskDelete(s_tusb_tskh); - } else { - ESP_LOGE(TAG, "tinyusb task is not started"); - return ESP_FAIL; - } - if (s_tusb_tskh) { - return ESP_FAIL; - } else { - return ESP_OK; - } + ESP_RETURN_ON_FALSE(s_tusb_tskh, ESP_ERR_INVALID_STATE, TAG, "TinyUSB main task not started yet"); + vTaskDelete(s_tusb_tskh); + s_tusb_tskh = NULL; + return ESP_OK; } diff --git a/components/tinyusb/additions/src/usb_descriptors.c b/components/tinyusb/additions/src/usb_descriptors.c index 98491e5f00..3b24337f83 100644 --- a/components/tinyusb/additions/src/usb_descriptors.c +++ b/components/tinyusb/additions/src/usb_descriptors.c @@ -35,7 +35,7 @@ tusb_desc_device_t descriptor_tinyusb = { .bDeviceProtocol = 0x00, #endif - .bMaxPacketSize0 = CFG_TUD_ENDOINT0_SIZE, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, .idVendor = 0xCafe, .idProduct = USB_TUSB_PID, @@ -78,21 +78,21 @@ tusb_desc_device_t descriptor_kconfig = { .bDeviceProtocol = 0x00, #endif - .bMaxPacketSize0 = CFG_TUD_ENDOINT0_SIZE, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, -#if CONFIG_USB_DESC_USE_ESPRESSIF_VID +#if CONFIG_TINYUSB_DESC_USE_ESPRESSIF_VID .idVendor = USB_ESPRESSIF_VID, #else - .idVendor = CONFIG_USB_DESC_CUSTOM_VID, + .idVendor = CONFIG_TINYUSB_DESC_CUSTOM_VID, #endif -#if CONFIG_USB_DESC_USE_DEFAULT_PID +#if CONFIG_TINYUSB_DESC_USE_DEFAULT_PID .idProduct = USB_TUSB_PID, #else - .idProduct = CONFIG_USB_DESC_CUSTOM_PID, + .idProduct = CONFIG_TINYUSB_DESC_CUSTOM_PID, #endif - .bcdDevice = CONFIG_USB_DESC_BCDDEVICE, + .bcdDevice = CONFIG_TINYUSB_DESC_BCD_DEVICE, .iManufacturer = 0x01, .iProduct = 0x02, @@ -104,24 +104,24 @@ tusb_desc_device_t descriptor_kconfig = { tusb_desc_strarray_device_t descriptor_str_kconfig = { // array of pointer to string descriptors (char[]){0x09, 0x04}, // 0: is supported language is English (0x0409) - CONFIG_USB_DESC_MANUFACTURER_STRING, // 1: Manufacturer - CONFIG_USB_DESC_PRODUCT_STRING, // 2: Product - CONFIG_USB_DESC_SERIAL_STRING, // 3: Serials, should use chip ID + CONFIG_TINYUSB_DESC_MANUFACTURER_STRING, // 1: Manufacturer + CONFIG_TINYUSB_DESC_PRODUCT_STRING, // 2: Product + CONFIG_TINYUSB_DESC_SERIAL_STRING, // 3: Serials, should use chip ID -#if CONFIG_USB_CDC_ENABLED - CONFIG_USB_DESC_CDC_STRING, // 4: CDC Interface +#if CONFIG_TINYUSB_CDC_ENABLED + CONFIG_TINYUSB_DESC_CDC_STRING, // 4: CDC Interface #else "", #endif -#if CONFIG_USB_MSC_ENABLED - CONFIG_USB_DESC_MSC_STRING, // 5: MSC Interface +#if CONFIG_TINYUSB_MSC_ENABLED + CONFIG_TINYUSB_DESC_MSC_STRING, // 5: MSC Interface #else "", #endif -#if CONFIG_USB_HID_ENABLED - CONFIG_USB_DESC_HID_STRING // 6: HIDs +#if CONFIG_TINYUSB_HID_ENABLED + CONFIG_TINYUSB_DESC_HID_STRING // 6: HIDs #else "", #endif diff --git a/components/tinyusb/sdkconfig.rename b/components/tinyusb/sdkconfig.rename new file mode 100644 index 0000000000..6aea8579ac --- /dev/null +++ b/components/tinyusb/sdkconfig.rename @@ -0,0 +1,22 @@ +# sdkconfig replacement configurations for deprecated options formatted as +# CONFIG_DEPRECATED_OPTION CONFIG_NEW_OPTION +CONFIG_USB_ENABLED CONFIG_TINYUSB +CONFIG_USB_DO_NOT_CREATE_TASK CONFIG_TINYUSB_NO_DEFAULT_TASK +CONFIG_USB_TASK_PRIORITY CONFIG_TINYUSB_TASK_PRIORITY +CONFIG_USB_DESC_USE_ESPRESSIF_VID CONFIG_TINYUSB_DESC_USE_ESPRESSIF_VID +CONFIG_USB_DESC_CUSTOM_VID CONFIG_TINYUSB_DESC_CUSTOM_VID +CONFIG_USB_DESC_USE_DEFAULT_PID CONFIG_TINYUSB_DESC_USE_DEFAULT_PID +CONFIG_USB_DESC_CUSTOM_PID CONFIG_TINYUSB_DESC_CUSTOM_PID +CONFIG_USB_DESC_BCDDEVICE CONFIG_TINYUSB_DESC_BCD_DEVICE +CONFIG_USB_DESC_MANUFACTURER_STRING CONFIG_TINYUSB_DESC_MANUFACTURER_STRING +CONFIG_USB_DESC_PRODUCT_STRING CONFIG_TINYUSB_DESC_PRODUCT_STRING +CONFIG_USB_DESC_SERIAL_STRING CONFIG_TINYUSB_DESC_SERIAL_STRING +CONFIG_USB_DESC_CDC_STRING CONFIG_TINYUSB_DESC_CDC_STRING +CONFIG_USB_DESC_MSC_STRING CONFIG_TINYUSB_DESC_MSC_STRING +CONFIG_USB_DESC_HID_STRING CONFIG_TINYUSB_DESC_HID_STRING +CONFIG_USB_MSC_ENABLED CONFIG_TINYUSB_MSC_ENABLED +CONFIG_USB_MSC_BUFSIZE CONFIG_TINYUSB_MSC_BUFSIZE +CONFIG_USB_CDC_ENABLED CONFIG_TINYUSB_CDC_ENABLED +CONFIG_USB_CDC_RX_BUFSIZE CONFIG_TINYUSB_CDC_RX_BUFSIZE +CONFIG_USB_CDC_TX_BUFSIZE CONFIG_TINYUSB_CDC_TX_BUFSIZE +CONFIG_USB_DEBUG_LEVEL CONFIG_TINYUSB_DEBUG_LEVEL diff --git a/components/usb/CMakeLists.txt b/components/usb/CMakeLists.txt index 0145f81e2a..20d143ea6e 100644 --- a/components/usb/CMakeLists.txt +++ b/components/usb/CMakeLists.txt @@ -1,11 +1,16 @@ -idf_build_get_property(target IDF_TARGET) +set(srcs) +set(include) +set(priv_include) +set(priv_require) -#USB Host is currently only supported on ESP32-S2, ESP32S3 chips -if(NOT "${target}" MATCHES "^esp32s[2-3]") - return() +if(CONFIG_USB_OTG_SUPPORTED) + list(APPEND srcs "hcd.c") + list(APPEND priv_include "private_include") + list(APPEND priv_require "hal" "driver") endif() -idf_component_register(SRCS "hcd.c" - INCLUDE_DIRS "" - PRIV_INCLUDE_DIRS "private_include" - PRIV_REQUIRES hal driver) +idf_component_register(SRCS ${srcs} + INCLUDE_DIRS ${include} + PRIV_INCLUDE_DIRS ${priv_include} + PRIV_REQUIRES ${priv_require} + ) diff --git a/components/usb/Kconfig b/components/usb/Kconfig new file mode 100644 index 0000000000..2be5c9da6b --- /dev/null +++ b/components/usb/Kconfig @@ -0,0 +1,9 @@ +menu "USB-OTG" + visible if IDF_TARGET_ESP32S2 || IDF_TARGET_ESP32S3 + + # Invisible item, enabled when USB_OTG peripheral does exist + config USB_OTG_SUPPORTED + bool + default y if IDF_TARGET_ESP32S2 || IDF_TARGET_ESP32S3 + +endmenu diff --git a/examples/peripherals/usb/README.md b/examples/peripherals/usb/README.md new file mode 100644 index 0000000000..2d23a497d7 --- /dev/null +++ b/examples/peripherals/usb/README.md @@ -0,0 +1,23 @@ +# USB-OTG Examples + +See the [README.md](../README.md) file in the upper level [examples](../) directory for more information about examples. + +## Common Pin Assignments + +Pin assignment is only needed for ESP chips that have an USB-OTG peripheral. +If your board doesn't have a USB connector connected to the USB-OTG dedicated GPIOs, you may have to DIY a cable and connect **D+** and **D-** to the pins listed below. + +``` +ESP BOARD USB CONNECTOR (type A) + -- + | || VCC +[USBPHY_DM_NUM] ------> | || D- +[USBPHY_DP_NUM] ------> | || D+ + | || GND + -- +``` +Refer to `soc/usb_pins.h` to find the real GPIO number of **USBPHY_DP_NUM** and **USBPHY_DM_NUM**. + +| | USB_DP | USB_DM | +| ----------- | ------ | ------ | +| ESP32-S2/S3 | GPIO20 | GPIO19 | diff --git a/examples/peripherals/usb/tusb_console/README.md b/examples/peripherals/usb/tusb_console/README.md index 4b656c0147..0c263df0b4 100644 --- a/examples/peripherals/usb/tusb_console/README.md +++ b/examples/peripherals/usb/tusb_console/README.md @@ -1,11 +1,11 @@ -| Supported Targets | ESP32-S2 | -| ----------------- | -------- | +| Supported Targets | ESP32-S2 | ESP32-S3 | +| ----------------- | -------- | -------- | # TinyUSB Sample Descriptor (See the README.md file in the upper level 'examples' directory for more information about examples.) -This example shows how to set up ESP32-S2 chip to get log output via Serial Device connection +This example shows how to set up ESP chip to get log output via Serial Device connection. As a USB stack, a TinyUSB component is used. @@ -13,21 +13,11 @@ As a USB stack, a TinyUSB component is used. ### Hardware Required -- Any board with the ESP32-S2 chip with USB connectors or with exposed USB's D+ and D- (DATA+/DATA-) pins. +Any ESP boards that have USB-OTG supported. -If the board has no USB connector, but has the pins connect pins directly to the host (e.g. with DIY cable from any USB connection cable) +#### Pin Assignment -``` -ESP32-S2 BOARD USB CONNECTOR (type A) - -- - | || VCC - [GPIO 19] --------> | || D- - [GPIO 20] --------> | || D+ - | || GND - -- -``` - -You can also use power from the USB connector. +See common pin assignments for USB Device examples from [upper level](../README.md#common-pin-assignments). ### Build and Flash @@ -54,24 +44,36 @@ Note: if you want to send data to the target see how to implement it via `tud_cd After the flashing you should see the output at idf monitor: ``` -I (340) example: USB initialization -I (340) TinyUSB: Driver installation... -I (340) TinyUSB - Descriptors Control: Setting of a descriptor: -.bDeviceClass = 239 -.bDeviceSubClass = 2, -.bDeviceProtocol = 1, -.bMaxPacketSize0 = 64, -.idVendor = 0x0000303a, -.idProduct = 0x00004001, -.bcdDevice = 0x00000100, -.iManufacturer = 0x01, -.iProduct = 0x02, -.iSerialNumber = 0x03, -.bNumConfigurations = 0x01 - -I (373) TinyUSB: Driver installed -I (373) example: USB initialization DONE -I (383) example: log -> UART +I (288) example: USB initialization +I (288) tusb_desc: +┌─────────────────────────────────┐ +│ USB Device Descriptor Summary │ +├───────────────────┬─────────────┤ +│bDeviceClass │ 239 │ +├───────────────────┼─────────────┤ +│bDeviceSubClass │ 2 │ +├───────────────────┼─────────────┤ +│bDeviceProtocol │ 1 │ +├───────────────────┼─────────────┤ +│bMaxPacketSize0 │ 64 │ +├───────────────────┼─────────────┤ +│idVendor │ 0x303a │ +├───────────────────┼─────────────┤ +│idProduct │ 0x4001 │ +├───────────────────┼─────────────┤ +│bcdDevice │ 0x100 │ +├───────────────────┼─────────────┤ +│iManufacturer │ 0x1 │ +├───────────────────┼─────────────┤ +│iProduct │ 0x2 │ +├───────────────────┼─────────────┤ +│iSerialNumber │ 0x3 │ +├───────────────────┼─────────────┤ +│bNumConfigurations │ 0x1 │ +└───────────────────┴─────────────┘ +I (458) TinyUSB: TinyUSB Driver installed +I (468) example: USB initialization DONE +I (468) example: log -> UART example: print -> stdout example: print -> stderr ... @@ -80,8 +82,7 @@ example: print -> stderr Other log will be printed to USB: ``` -I (5382) example: log -> USB +I (3478) example: log -> USB example: print -> stdout example: print -> stderr -... ``` diff --git a/examples/peripherals/usb/tusb_console/sdkconfig.defaults b/examples/peripherals/usb/tusb_console/sdkconfig.defaults index 67c45c3f45..cb49d0ea40 100644 --- a/examples/peripherals/usb/tusb_console/sdkconfig.defaults +++ b/examples/peripherals/usb/tusb_console/sdkconfig.defaults @@ -1,3 +1,2 @@ -CONFIG_IDF_TARGET="esp32s2" -CONFIG_USB_ENABLED=y -CONFIG_USB_CDC_ENABLED=y +CONFIG_TINYUSB=y +CONFIG_TINYUSB_CDC_ENABLED=y diff --git a/examples/peripherals/usb/tusb_sample_descriptor/README.md b/examples/peripherals/usb/tusb_sample_descriptor/README.md index 6b463f195d..35dce6b572 100644 --- a/examples/peripherals/usb/tusb_sample_descriptor/README.md +++ b/examples/peripherals/usb/tusb_sample_descriptor/README.md @@ -1,11 +1,11 @@ -| Supported Targets | ESP32-S2 | -| ----------------- | -------- | +| Supported Targets | ESP32-S2 | ESP32-S3 | +| ----------------- | -------- | -------- | # TinyUSB Sample Descriptor (See the README.md file in the upper level 'examples' directory for more information about examples.) -This example is demonstrating how to set up ESP32-S2 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. +This 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. As a USB stack, a TinyUSB component is used. @@ -13,21 +13,11 @@ As a USB stack, a TinyUSB component is used. ### Hardware Required -- Any board with the ESP32-S2 chip with USB connectors or with exposed USB's D+ and D- (DATA+/DATA-) pins. +Any ESP boards that have USB-OTG supported. -If the board has no USB connector, but has the pins connect pins directly to the host (e.g. with DIY cable from any USB connection cable) +#### Pin Assignment -``` -ESP32-S2 BOARD USB CONNECTOR (type A) - -- - | || VCC - [GPIO 19] --------> | || D- - [GPIO 20] --------> | || D+ - | || GND - -- -``` - -You can also use power from the USB connector. +See common pin assignments for USB Device examples from [upper level](../README.md#common-pin-assignments). ### Configure the project @@ -35,7 +25,7 @@ There are two ways to set up a descriptor - using Menuconfig tool and in-code #### In-code setting up -For the manual descriptor's configuration use the default example's settings and modify `tusb_sample_descriptor.c` according to your needs +For the manual descriptor configuration use the default example's settings and modify `my_descriptor` in [source code](tusb_sample_descriptor_main.c) according to your needs #### Menuconfig @@ -66,20 +56,68 @@ See the Getting Started Guide for full steps to configure and use ESP-IDF to bui After the flashing you should see the output: ``` -I (349) TinyUSB: Driver installation... -I (349) TinyUSB - Descriptors Control: Setting of a descriptor: -.bDeviceClass = 0 -.bDeviceSubClass = 0, -.bDeviceProtocol = 0, -.bMaxPacketSize0 = 64, -.idVendor = 0x0000303a, -.idProduct = 0x00003000, -.bcdDevice = 0x00000101, -.iManufacturer = 0x01, -.iProduct = 0x02, -.iSerialNumber = 0x03, -.bNumConfigurations = 0x01 - -I (389) TinyUSB: Driver installed -I (389) example: USB initialization DONE +I (287) example: USB initialization +I (287) tusb_desc: +┌─────────────────────────────────┐ +│ USB Device Descriptor Summary │ +├───────────────────┬─────────────┤ +│bDeviceClass │ 0 │ +├───────────────────┼─────────────┤ +│bDeviceSubClass │ 0 │ +├───────────────────┼─────────────┤ +│bDeviceProtocol │ 0 │ +├───────────────────┼─────────────┤ +│bMaxPacketSize0 │ 64 │ +├───────────────────┼─────────────┤ +│idVendor │ 0x303a │ +├───────────────────┼─────────────┤ +│idProduct │ 0x3000 │ +├───────────────────┼─────────────┤ +│bcdDevice │ 0x101 │ +├───────────────────┼─────────────┤ +│iManufacturer │ 0x1 │ +├───────────────────┼─────────────┤ +│iProduct │ 0x2 │ +├───────────────────┼─────────────┤ +│iSerialNumber │ 0x3 │ +├───────────────────┼─────────────┤ +│bNumConfigurations │ 0x1 │ +└───────────────────┴─────────────┘ +I (457) TinyUSB: TinyUSB Driver installed +I (467) example: USB initialization DONE +``` + +From PC, running `lsusb -v`, you should find the device's descriptor like: +``` +Bus 001 Device 007: ID 303a:3000 I My Custom Device +Device Descriptor: + bLength 18 + bDescriptorType 1 + bcdUSB 2.00 + bDeviceClass 0 + bDeviceSubClass 0 + bDeviceProtocol 0 + bMaxPacketSize0 64 + idVendor 0x303a + idProduct 0x3000 + bcdDevice 1.01 + iManufacturer 1 I + iProduct 2 My Custom Device + iSerial 3 012-345 + bNumConfigurations 1 + Configuration Descriptor: + bLength 9 + bDescriptorType 2 + wTotalLength 0x0009 + bNumInterfaces 0 + bConfigurationValue 1 + iConfiguration 0 + bmAttributes 0xa0 + (Bus Powered) + Remote Wakeup + MaxPower 100mA +can't get device qualifier: Resource temporarily unavailable +can't get debug descriptor: Resource temporarily unavailable +Device Status: 0x0000 + (Bus Powered) ``` diff --git a/examples/peripherals/usb/tusb_sample_descriptor/main/tusb_sample_descriptor_main.c b/examples/peripherals/usb/tusb_sample_descriptor/main/tusb_sample_descriptor_main.c index c0923529af..edd76c4926 100644 --- a/examples/peripherals/usb/tusb_sample_descriptor/main/tusb_sample_descriptor_main.c +++ b/examples/peripherals/usb/tusb_sample_descriptor/main/tusb_sample_descriptor_main.c @@ -29,7 +29,7 @@ void app_main(void) .bDescriptorType = TUSB_DESC_DEVICE, .bcdUSB = 0x0200, // USB version. 0x0200 means version 2.0 .bDeviceClass = TUSB_CLASS_UNSPECIFIED, - .bMaxPacketSize0 = CFG_TUD_ENDOINT0_SIZE, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, .idVendor = 0x303A, .idProduct = 0x3000, diff --git a/examples/peripherals/usb/tusb_sample_descriptor/sdkconfig.defaults b/examples/peripherals/usb/tusb_sample_descriptor/sdkconfig.defaults index 4d3be63997..9e66e7cc08 100644 --- a/examples/peripherals/usb/tusb_sample_descriptor/sdkconfig.defaults +++ b/examples/peripherals/usb/tusb_sample_descriptor/sdkconfig.defaults @@ -1,6 +1,5 @@ -CONFIG_IDF_TARGET="esp32s2" -CONFIG_USB_ENABLED=y -CONFIG_USB_DESC_USE_ESPRESSIF_VID=n -CONFIG_USB_DESC_CUSTOM_VID=0x303A -CONFIG_USB_DESC_USE_DEFAULT_PID=n -CONFIG_USB_DESC_CUSTOM_PID=0x3000 +CONFIG_TINYUSB=y +CONFIG_TINYUSB_DESC_USE_ESPRESSIF_VID=n +CONFIG_TINYUSB_DESC_CUSTOM_VID=0x303A +CONFIG_TINYUSB_DESC_USE_DEFAULT_PID=n +CONFIG_TINYUSB_DESC_CUSTOM_PID=0x3000 diff --git a/examples/peripherals/usb/tusb_serial_device/README.md b/examples/peripherals/usb/tusb_serial_device/README.md index 1f7943df98..371a0f1403 100644 --- a/examples/peripherals/usb/tusb_serial_device/README.md +++ b/examples/peripherals/usb/tusb_serial_device/README.md @@ -1,11 +1,11 @@ -| Supported Targets | ESP32-S2 | -| ----------------- | -------- | +| Supported Targets | ESP32-S2 | ESP32-S3 | +| ----------------- | -------- | -------- | # TinyUSB Sample Descriptor (See the README.md file in the upper level 'examples' directory for more information about examples.) -This example shows how to set up ESP32-S2 chip to work as a USB Serial Device. +This example shows how to set up ESP chip to work as a USB Serial Device. As a USB stack, a TinyUSB component is used. @@ -13,21 +13,11 @@ As a USB stack, a TinyUSB component is used. ### Hardware Required -- Any board with the ESP32-S2 chip with USB connectors or with exposed USB's D+ and D- (DATA+/DATA-) pins. +Any ESP boards that have USB-OTG supported. -If the board has no USB connector, but has the pins connect pins directly to the host (e.g. with DIY cable from any USB connection cable) +#### Pin Assignment -``` -ESP32-S2 BOARD USB CONNECTOR (type A) - -- - | || VCC - [GPIO 19] --------> | || D- - [GPIO 20] --------> | || D+ - | || GND - -- -``` - -You can also use power from the USB connector. +See common pin assignments for USB Device examples from [upper level](../README.md#common-pin-assignments). ### Build and Flash @@ -43,37 +33,55 @@ idf.py -p PORT flash monitor See the Getting Started Guide for full steps to configure and use ESP-IDF to build projects. -## Serial Connection - -After program's start and getting of the message of readiness (`Serial device is ready to connect`) you can connect to the board using any serial port terminal application (e.g. CoolTerm). - ## Example Output After the flashing you should see the output: ``` -I (346) example: USB initialization -I (346) TinyUSB: Driver installation... -I (346) TinyUSB - Descriptors Control: Setting of a descriptor: -.bDeviceClass = 239 -.bDeviceSubClass = 2, -.bDeviceProtocol = 1, -.bMaxPacketSize0 = 64, -.idVendor = 0x0000303a, -.idProduct = 0x00004001, -.bcdDevice = 0x00000100, -.iManufacturer = 0x01, -.iProduct = 0x02, -.iSerialNumber = 0x03, -.bNumConfigurations = 0x01 - -I (362) TinyUSB: Driver installed -I (362) example: USB initialization DONE -I (922) example: Line state changed! dtr:0, rst:0 +I (285) example: USB initialization +I (285) tusb_desc: +┌─────────────────────────────────┐ +│ USB Device Descriptor Summary │ +├───────────────────┬─────────────┤ +│bDeviceClass │ 239 │ +├───────────────────┼─────────────┤ +│bDeviceSubClass │ 2 │ +├───────────────────┼─────────────┤ +│bDeviceProtocol │ 1 │ +├───────────────────┼─────────────┤ +│bMaxPacketSize0 │ 64 │ +├───────────────────┼─────────────┤ +│idVendor │ 0x303a │ +├───────────────────┼─────────────┤ +│idProduct │ 0x4001 │ +├───────────────────┼─────────────┤ +│bcdDevice │ 0x100 │ +├───────────────────┼─────────────┤ +│iManufacturer │ 0x1 │ +├───────────────────┼─────────────┤ +│iProduct │ 0x2 │ +├───────────────────┼─────────────┤ +│iSerialNumber │ 0x3 │ +├───────────────────┼─────────────┤ +│bNumConfigurations │ 0x1 │ +└───────────────────┴─────────────┘ +I (455) TinyUSB: TinyUSB Driver installed +I (465) example: USB initialization DONE ``` -Let's try to send a string "espressif" and get the return string in your console on PC: +Connect to the serial port (e.g. on Linux, it should be `/dev/ttyACM0`) by any terminal application (e.g. `picocom /dev/ttyACM0`), typing a string "espressif" and you will get the exactly same string returned. + +The monitor tool will also print the communication process: ``` -I (18346) example: Got data (9 bytes): espressif +I (146186) example: Line state changed! dtr:1, rst:1 +I (147936) example: Got data (1 bytes): e +I (148136) example: Got data (1 bytes): s +I (148336) example: Got data (1 bytes): p +I (148416) example: Got data (1 bytes): r +I (148446) example: Got data (1 bytes): e +I (148676) example: Got data (1 bytes): s +I (148836) example: Got data (1 bytes): s +I (148956) example: Got data (1 bytes): i +I (149066) example: Got data (1 bytes): f ``` diff --git a/examples/peripherals/usb/tusb_serial_device/main/tusb_serial_device_main.c b/examples/peripherals/usb/tusb_serial_device/main/tusb_serial_device_main.c index 8e1d74e3b8..bafc064c9d 100644 --- a/examples/peripherals/usb/tusb_serial_device/main/tusb_serial_device_main.c +++ b/examples/peripherals/usb/tusb_serial_device/main/tusb_serial_device_main.c @@ -20,7 +20,7 @@ #include "sdkconfig.h" static const char *TAG = "example"; -static uint8_t buf[CONFIG_USB_CDC_RX_BUFSIZE + 1]; +static uint8_t buf[CONFIG_TINYUSB_CDC_RX_BUFSIZE + 1]; void tinyusb_cdc_rx_callback(int itf, cdcacm_event_t *event) { @@ -28,7 +28,7 @@ void tinyusb_cdc_rx_callback(int itf, cdcacm_event_t *event) size_t rx_size = 0; /* read */ - esp_err_t ret = tinyusb_cdcacm_read(itf, buf, CONFIG_USB_CDC_RX_BUFSIZE, &rx_size); + esp_err_t ret = tinyusb_cdcacm_read(itf, buf, CONFIG_TINYUSB_CDC_RX_BUFSIZE, &rx_size); if (ret == ESP_OK) { buf[rx_size] = '\0'; ESP_LOGI(TAG, "Got data (%d bytes): %s", rx_size, buf); diff --git a/examples/peripherals/usb/tusb_serial_device/sdkconfig.defaults b/examples/peripherals/usb/tusb_serial_device/sdkconfig.defaults index 67c45c3f45..cb49d0ea40 100644 --- a/examples/peripherals/usb/tusb_serial_device/sdkconfig.defaults +++ b/examples/peripherals/usb/tusb_serial_device/sdkconfig.defaults @@ -1,3 +1,2 @@ -CONFIG_IDF_TARGET="esp32s2" -CONFIG_USB_ENABLED=y -CONFIG_USB_CDC_ENABLED=y +CONFIG_TINYUSB=y +CONFIG_TINYUSB_CDC_ENABLED=y