diff --git a/idf_component.yml b/idf_component.yml index dfc53c5d..267eb60f 100644 --- a/idf_component.yml +++ b/idf_component.yml @@ -23,4 +23,5 @@ targets: - esp32s2 - esp32s3 - esp32p4 - - esp32s31 \ No newline at end of file + - esp32s31 + - esp32h4 \ No newline at end of file diff --git a/osal/idf/usb_config.h b/osal/idf/usb_config.h index 7b713af0..d08d8955 100644 --- a/osal/idf/usb_config.h +++ b/osal/idf/usb_config.h @@ -273,6 +273,12 @@ #define CONFIG_USBDEV_MAX_BUS 1 #define CONFIG_USBHOST_MAX_BUS 1 #define CONFIG_USB_HS +#elif CONFIG_IDF_TARGET_ESP32H4 +#define ESP_USB_FS0_BASE 0x60040000 +#define ESP_USBD_BASE ESP_USB_FS0_BASE +#define ESP_USBH_BASE ESP_USB_FS0_BASE +#define CONFIG_USBDEV_MAX_BUS 1 +#define CONFIG_USBHOST_MAX_BUS 1 #else #error "Unsupported SoC" #endif diff --git a/port/dwc2/README.md b/port/dwc2/README.md index 86498075..a4f3179b 100644 --- a/port/dwc2/README.md +++ b/port/dwc2/README.md @@ -36,7 +36,7 @@ Please note that host must support dma mode. ### Espressif -- ESP32S2、ESP32S3、ESP32P4、ESP32S31 +- ESP32S2、ESP32S3、ESP32P4、ESP32S31、ESP32H4 ### Sophgo diff --git a/port/dwc2/usb_glue_esp.c b/port/dwc2/usb_glue_esp.c index 59e47165..08987718 100644 --- a/port/dwc2/usb_glue_esp.c +++ b/port/dwc2/usb_glue_esp.c @@ -45,6 +45,11 @@ #define GET_USB_PHY_TARGET(reg_base) USB_PHY_TARGET_UTMI #undef GET_USB_PHY_SPEED #define GET_USB_PHY_SPEED(reg_base) USB_PHY_SPEED_HIGH +#elif CONFIG_IDF_TARGET_ESP32H4 +#define DEFAULT_CPU_FREQ_MHZ CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ +#define DEFAULT_USB_INTR_SOURCE ETS_USB_OTG11_INTR_SOURCE +#undef GET_USB_INTR_SOURCE +#define GET_USB_INTR_SOURCE(reg_base) DEFAULT_USB_INTR_SOURCE #else #define DEFAULT_CPU_FREQ_MHZ 160 #endif @@ -53,7 +58,7 @@ uint32_t SystemCoreClock = (DEFAULT_CPU_FREQ_MHZ * 1000 * 1000); static usb_phy_handle_t s_phy_handle[SOC_USB_OTG_PERIPH_NUM] = {NULL}; static intr_handle_t s_interrupt_handle[SOC_USB_OTG_PERIPH_NUM] = {NULL}; -#if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 +#if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32H4 const struct dwc2_user_params param_fs = { .phy_type = DWC2_PHY_TYPE_PARAM_FS, .device_dma_enable = true, @@ -273,7 +278,7 @@ void usb_hc_low_level_deinit(struct usbh_bus *bus) void dwc2_get_user_params(uint32_t reg_base, struct dwc2_user_params *params) { -#if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 +#if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32H4 memcpy(params, ¶m_fs, sizeof(struct dwc2_user_params)); #elif CONFIG_IDF_TARGET_ESP32P4 if (reg_base == ESP_USB_HS0_BASE) { diff --git a/tests/espressif/device/main/main.c b/tests/espressif/device/main/main.c index 5bac5dc7..098594fa 100644 --- a/tests/espressif/device/main/main.c +++ b/tests/espressif/device/main/main.c @@ -19,7 +19,7 @@ void app_main(void) { USB_LOG_INFO("Hello CherryUSB!\n"); - cdc_acm_msc_init(0, 0x60080000); + cdc_acm_msc_init(0, ESP_USBD_BASE); while(1) { vTaskDelay(10); diff --git a/tests/espressif/host/main/main.c b/tests/espressif/host/main/main.c index e67052f6..23b0e59d 100644 --- a/tests/espressif/host/main/main.c +++ b/tests/espressif/host/main/main.c @@ -29,7 +29,7 @@ void app_main(void) // Create default event loop that running in background ESP_ERROR_CHECK(esp_event_loop_create_default()); - usbh_initialize(0, 0x60080000, NULL); + usbh_initialize(0, ESP_USBH_BASE, NULL); while(1) { vTaskDelay(10);