Answers checklist.
General issue report
Hardware:
Board: ESP32-P4 Function EV Board v1.4
IDF version: 5.5.4
Connection: USB Type-A port (powered via TPS2051C power switch)
USB extender: passive USB 2.0 over CAT5/6 extender (no driver required on Windows) — AliExpress link
Camera: SunplusIT VID=0x1BCF PID=0x0951 (UVC, MJPEG, HS capable)
Problem description:
When connecting a USB camera through a passive USB-over-CAT5 extender to the ESP32-P4 USB Type-A port (HS PHY, GPIO49/50), the USB host stack produces absolutely no log output at VERBOSE level — not a single message from USB_DWC, USB_PHY, ENUM, or HUB tags. The extender LED blinks slowly (~0.3 Hz), indicating it is powered but cannot establish a USB link with the host.
The exact same setup (same extender, same CAT5 cable, same camera) works perfectly on a Windows PC without any driver installation. On Windows, the extender LED blinks rapidly (~3 Hz) during enumeration, and the camera is fully recognized as a UVC device.
When the camera is connected directly to the ESP32-P4 Type-A port (without the extender), everything works perfectly — enumeration completes in under 1 second, UVC streaming works up to 2560×1440@30fps.
Logger configuration used for diagnosis (with my ESPhome component):
logger:
level: VERBOSE
logs:
USB_DWC: VERBOSE
USB_DWC_HAL: VERBOSE
USB_DWC_LL: VERBOSE
USB_PHY: VERBOSE
ENUM: VERBOSE
HUB: VERBOSE
Result: zero output from any of these tags during the entire session with the extender connected.
sdkconfig options tested (no effect):
CONFIG_USB_HOST_HW_INTERFACE_SELECT_HS=y
CONFIG_USB_HOST_CONTROL_TRANSFER_MAX_SIZE=4096
CONFIG_USB_HOST_DEBOUNCE_DELAY_MS=2000
CONFIG_USB_HOST_RESET_HOLD_MS=100
CONFIG_USB_HOST_RESET_RECOVERY_MS=1000
CONFIG_USB_HOST_SET_ADDR_RECOVERY_MS=500
Also tested with CONFIG_USB_HOST_HW_INTERFACE_SELECT_HS=n (FS mode) — same result, zero enumeration activity.
Analysis:
The complete silence of the USB_DWC and USB_PHY logs suggests the DWC controller never detects a physical connection event (VBUS/D+ detection). The extender's slow LED blink confirms it cannot complete the USB handshake with the P4 host PHY.
The key difference between the PC and the ESP32-P4 may be in how the host PHY presents itself electrically during connection detection and HS chirp negotiation. Specifically:
Does the ESP32-P4 HS PHY present the correct host-side termination resistances (15kΩ pull-down on D+ and D−) that passive extenders rely on to detect a valid USB host?
Is there a mechanism to force the PHY to start enumeration in FS mode before attempting HS negotiation (chirp K/J sequence), as some extenders may not handle the HS chirp correctly over CAT5 cable?
Is there any way to control the PHY's SE0/J/K state signaling timing that might help with extenders that have additional propagation delay?
Expected behavior: USB enumeration should begin (at minimum some USB_DWC or USB_PHY log output) when any USB 2.0 FS/HS device is connected to the Type-A port, including through a passive electrical extender.
Actual behavior: No enumeration activity whatsoever. The DWC controller appears to not detect any connection event.
Answers checklist.
General issue report
Hardware:
Board: ESP32-P4 Function EV Board v1.4
IDF version: 5.5.4
Connection: USB Type-A port (powered via TPS2051C power switch)
USB extender: passive USB 2.0 over CAT5/6 extender (no driver required on Windows) — AliExpress link
Camera: SunplusIT VID=0x1BCF PID=0x0951 (UVC, MJPEG, HS capable)
Problem description:
When connecting a USB camera through a passive USB-over-CAT5 extender to the ESP32-P4 USB Type-A port (HS PHY, GPIO49/50), the USB host stack produces absolutely no log output at VERBOSE level — not a single message from USB_DWC, USB_PHY, ENUM, or HUB tags. The extender LED blinks slowly (~0.3 Hz), indicating it is powered but cannot establish a USB link with the host.
The exact same setup (same extender, same CAT5 cable, same camera) works perfectly on a Windows PC without any driver installation. On Windows, the extender LED blinks rapidly (~3 Hz) during enumeration, and the camera is fully recognized as a UVC device.
When the camera is connected directly to the ESP32-P4 Type-A port (without the extender), everything works perfectly — enumeration completes in under 1 second, UVC streaming works up to 2560×1440@30fps.
Logger configuration used for diagnosis (with my ESPhome component):
logger:
level: VERBOSE
logs:
USB_DWC: VERBOSE
USB_DWC_HAL: VERBOSE
USB_DWC_LL: VERBOSE
USB_PHY: VERBOSE
ENUM: VERBOSE
HUB: VERBOSE
Result: zero output from any of these tags during the entire session with the extender connected.
sdkconfig options tested (no effect):
CONFIG_USB_HOST_HW_INTERFACE_SELECT_HS=y
CONFIG_USB_HOST_CONTROL_TRANSFER_MAX_SIZE=4096
CONFIG_USB_HOST_DEBOUNCE_DELAY_MS=2000
CONFIG_USB_HOST_RESET_HOLD_MS=100
CONFIG_USB_HOST_RESET_RECOVERY_MS=1000
CONFIG_USB_HOST_SET_ADDR_RECOVERY_MS=500
Also tested with CONFIG_USB_HOST_HW_INTERFACE_SELECT_HS=n (FS mode) — same result, zero enumeration activity.
Analysis:
The complete silence of the USB_DWC and USB_PHY logs suggests the DWC controller never detects a physical connection event (VBUS/D+ detection). The extender's slow LED blink confirms it cannot complete the USB handshake with the P4 host PHY.
The key difference between the PC and the ESP32-P4 may be in how the host PHY presents itself electrically during connection detection and HS chirp negotiation. Specifically:
Does the ESP32-P4 HS PHY present the correct host-side termination resistances (15kΩ pull-down on D+ and D−) that passive extenders rely on to detect a valid USB host?
Is there a mechanism to force the PHY to start enumeration in FS mode before attempting HS negotiation (chirp K/J sequence), as some extenders may not handle the HS chirp correctly over CAT5 cable?
Is there any way to control the PHY's SE0/J/K state signaling timing that might help with extenders that have additional propagation delay?
Expected behavior: USB enumeration should begin (at minimum some USB_DWC or USB_PHY log output) when any USB 2.0 FS/HS device is connected to the Type-A port, including through a passive electrical extender.
Actual behavior: No enumeration activity whatsoever. The DWC controller appears to not detect any connection event.