You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The USB peripheral working normally after returning from light sleep. (I know clock to USB is gated during sleep)
What is the actual behavior?
At 40MHz CPU frequency, USB-OTG works fine. However, after entering light-sleep and resuming, the USB peripheral is frozen. It doesn't matter if the peripheral was initialized or not. If uninitialized, the driver_install function will stall - if it was already initialized, the peripheral just stops handling any USB events.
Briefly switching to 80MHz and back to 40MHz after wakeup "fixes" the issue.
github-actionsbot
changed the title
ESP32-S3 USB peripheral freezes after light sleep at 40MHz
ESP32-S3 USB peripheral freezes after light sleep at 40MHz (IDFGH-14711)
Feb 23, 2025
Answers checklist.
IDF version.
v5.4 release
Espressif SoC revision.
ESP32-S3 (QFN56) revision 0.2
Operating System used.
Windows
How did you build your project?
VS Code IDE
If you are using Windows, please specify command line type.
None
Development Kit.
YD-ESP32-23 (ESP32-S3-WROOM-1)
Power Supply used.
USB
What is the expected behavior?
The USB peripheral working normally after returning from light sleep. (I know clock to USB is gated during sleep)
What is the actual behavior?
At 40MHz CPU frequency, USB-OTG works fine. However, after entering light-sleep and resuming, the USB peripheral is frozen. It doesn't matter if the peripheral was initialized or not. If uninitialized, the driver_install function will stall - if it was already initialized, the peripheral just stops handling any USB events.
Briefly switching to 80MHz and back to 40MHz after wakeup "fixes" the issue.
Steps to reproduce.
Here is a reproducuction using the
tusb_hid
sample: https://github.com/dbeinder/esp32s3-tusb-hidChanges to the sample: dbeinder/esp32s3-tusb-hid@4a43223
tinyusb_driver_install()
will stall inreset_core()
indwc2_common.c
- see watchdog backtrace.Uncommenting the two lines to switch to 80MHz and back to 40MHz makes the initialization work again.
Debug Logs.
More Information.
No response
The text was updated successfully, but these errors were encountered: