Skip to content

Commit ec38d47

Browse files
committed
feat(usb): Add ESP32-H4 support in tinyusb
Add ESP32-H4 as a supported MCU in TinyUSB and wire it into build/runtime: - CMakeLists: map IDF target esp32h4 → OPT_MCU_ESP32H4, family=esp32sx - tusb_option.h: define OPT_MCU_ESP32H4 - tusb_mcu.h: enable DWC2 USBIP for H4 - dcd_dwc2.c: add H4 USB_WRAP field aliases (wrap_* → legacy names) - dwc2_esp32.h: add H4 controller entry (FS base/IRQ, ep caps) - family.c: include H4 in USB init/PHY setup - idf_component.yml: add esp32h4 target This enables TinyUSB examples to build for ESP32-H4.
1 parent 63c21ab commit ec38d47

File tree

7 files changed

+28
-4
lines changed

7 files changed

+28
-4
lines changed

CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ elseif(${target} STREQUAL "esp32s2")
99
elseif(${target} STREQUAL "esp32p4")
1010
set(tusb_mcu "OPT_MCU_ESP32P4")
1111
set(tusb_family "esp32px")
12+
elseif(${target} STREQUAL "esp32h4")
13+
set(tusb_mcu "OPT_MCU_ESP32H4")
14+
set(tusb_family "esp32sx")
1215
endif()
1316

1417
set(compile_options

README.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,8 @@ Supported CPUs
118118
| Espressif | S2, S3 |||| dwc2 or esp32sx | |
119119
| ESP32 +-----------------------------+--------+------+-----------+------------------------+-------------------+
120120
| | P4 |||| dwc2 | |
121+
| +-----------------------------+--------+------+-----------+------------------------+-------------------+
122+
| | H4 |||| dwc2 | |
121123
+--------------+----+------------------------+--------+------+-----------+------------------------+-------------------+
122124
| GigaDevice | GD32VF103 || || dwc2 | |
123125
+--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+

hw/bsp/espressif/boards/family.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ void board_init(void) {
8888
gpio_set_direction(BUTTON_PIN, GPIO_MODE_INPUT);
8989
gpio_set_pull_mode(BUTTON_PIN, BUTTON_STATE_ACTIVE ? GPIO_PULLDOWN_ONLY : GPIO_PULLUP_ONLY);
9090

91-
#if TU_CHECK_MCU(OPT_MCU_ESP32S2, OPT_MCU_ESP32S3, OPT_MCU_ESP32P4)
91+
#if TU_CHECK_MCU(OPT_MCU_ESP32S2, OPT_MCU_ESP32S3, OPT_MCU_ESP32H4, OPT_MCU_ESP32P4)
9292
usb_init();
9393
#endif
9494

@@ -103,7 +103,7 @@ void board_init(void) {
103103
#endif
104104
}
105105

106-
#if TU_CHECK_MCU(OPT_MCU_ESP32S2, OPT_MCU_ESP32S3)
106+
#if TU_CHECK_MCU(OPT_MCU_ESP32S2, OPT_MCU_ESP32S3, OPT_MCU_ESP32H4)
107107

108108
#endif
109109

@@ -158,7 +158,7 @@ int board_getchar(void) {
158158
// PHY Init
159159
//--------------------------------------------------------------------
160160

161-
#if TU_CHECK_MCU(OPT_MCU_ESP32S2, OPT_MCU_ESP32S3, OPT_MCU_ESP32P4)
161+
#if TU_CHECK_MCU(OPT_MCU_ESP32S2, OPT_MCU_ESP32S3, OPT_MCU_ESP32H4, OPT_MCU_ESP32P4)
162162
#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 3, 0)
163163

164164
#include "esp_private/usb_phy.h"

idf_component.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@ targets:
99
- esp32s2
1010
- esp32s3
1111
- esp32p4
12+
- esp32h4

src/common/tusb_mcu.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,7 @@
363363
//--------------------------------------------------------------------+
364364
// Espressif
365365
//--------------------------------------------------------------------+
366-
#elif TU_CHECK_MCU(OPT_MCU_ESP32S2, OPT_MCU_ESP32S3)
366+
#elif TU_CHECK_MCU(OPT_MCU_ESP32S2, OPT_MCU_ESP32S3, OPT_MCU_ESP32H4)
367367
#define TUP_USBIP_DWC2
368368
#define TUP_USBIP_DWC2_ESP32
369369
#define TUP_DCD_ENDPOINT_MAX 7 // only 5 TX FIFO for endpoint IN

src/portable/synopsys/dwc2/dwc2_esp32.h

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,23 @@ static const dwc2_controller_t _dwc2_controller[] = {
4747
{ .reg_base = DWC2_FS_REG_BASE, .irqnum = ETS_USB_INTR_SOURCE, .ep_count = 7, .ep_in_count = 5, .ep_fifo_size = 1024 }
4848
};
4949

50+
#elif TU_CHECK_MCU(OPT_MCU_ESP32H4)
51+
// H4's USB_WRAP register block uses "wrap_*" field names. Map them to the
52+
// names used by TinyUSB's DWC2 port to keep the source unchanged.
53+
#define otg_conf wrap_otg_conf
54+
#define pad_pull_override wrap_pad_pull_override
55+
#define dp_pullup wrap_dp_pullup
56+
#define dp_pulldown wrap_dp_pulldown
57+
#define dm_pullup wrap_dm_pullup
58+
#define dm_pulldown wrap_dm_pulldown
59+
60+
#define DWC2_FS_REG_BASE 0x60040000UL
61+
#define DWC2_EP_MAX 7
62+
63+
static const dwc2_controller_t _dwc2_controller[] = {
64+
{ .reg_base = DWC2_FS_REG_BASE, .irqnum = ETS_USB_OTG11_INTR_SOURCE, .ep_count = 7, .ep_in_count = 5, .ep_fifo_size = 1024 }
65+
};
66+
5067
#elif TU_CHECK_MCU(OPT_MCU_ESP32P4)
5168
#define DWC2_FS_REG_BASE 0x50040000UL
5269
#define DWC2_HS_REG_BASE 0x50000000UL

src/tusb_option.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@
127127
#define OPT_MCU_ESP32C2 905 ///< Espressif ESP32-C2
128128
#define OPT_MCU_ESP32H2 906 ///< Espressif ESP32-H2
129129
#define OPT_MCU_ESP32P4 907 ///< Espressif ESP32-P4
130+
#define OPT_MCU_ESP32H4 910 ///< Espressif ESP32-H4, 908, 909 are already used in the upstream
130131
#define TUSB_MCU_VENDOR_ESPRESSIF (CFG_TUSB_MCU >= 900 && CFG_TUSB_MCU < 1000) // check if Espressif MCU
131132
#define TUP_MCU_ESPRESSIF TUSB_MCU_VENDOR_ESPRESSIF // for backward compatibility
132133

0 commit comments

Comments
 (0)