Skip to main content
Visitor II
July 29, 2025
Question

STM32H745 + FUSB2805 (ULPI PHY) – USB HS Only Works at 12Mbps, Fails at 480Mbps

  • July 29, 2025
  • 2 replies
  • 556 views

Hi all,

I’m working with an STM32H745 controller and an external ULPI PHY (FUSB2805, pin-compatible with STULPI01A). All hardware connections are verified and correct – the PCB layout and power rails are within spec, and the ULPI lines are as per the datasheets/reference.

Problem:

  • If I configure the USB peripheral for HS External PHY and set the speed to 12Mbps (Full Speed), the port is detected and data transfers work using the external PHY. but only when the USB Clock Mux is set to RC48 (internal 48MHz)

    dplogiic_1-1753772416320.png
     
  • If I select 480Mbps (High Speed) mode (again with HS external PHY and same clock settings), USB does not work. The host gives a "device descriptor request failed" error during enumeration.

    For troubleshooting, I have tried selecting both RC48 and a 60MHz clock from PLL1 and PLL3 as the USB clock source, but the result is always the same: it fails to enumerate as a high-speed device.dplogiic_0-1753772352021.png

Could anyone clarify why HS mode fails at 480Mbps even though Full Speed works?
What is the correct clock configuration (PLL/clock mux settings) to achieve 480Mbps operation with an external ULPI PHY?

I tried both options, but with the first option (RC48), it only works if I select 12 Mbps speed with the external PHY. However, I want to use USB HS at 480 Mbps.

dplogiic_0-1753868453112.png

dplogiic_1-1753868488529.png

On the hardware side, I am using the FUSB2805 with a 26 MHz oscillator, and I observe a 60 MHz clock on the USB_OTG_HS_ULPI_CK pin.

However, in 480 Mbps (High-Speed) mode (again using the HS external PHY with the same clock settings), the USB does not work. The host shows a ‘device descriptor request failed’ error during enumeration.

Any help or working configuration examples would be appreciated.

    This topic has been closed for replies.

    2 replies

    dplogiicAuthor
    Visitor II
    July 29, 2025

    Duplicate - merged


    Hi all,

    I’m working with an STM32H745 controller and an external ULPI PHY (FUSB2805, pin-compatible with STULPI01A). All hardware connections are verified and correct – the PCB layout and power rails are within spec, and the ULPI lines are as per the datasheets/reference.

    Problem:

    • If I configure the USB peripheral for HS External PHY and set the speed to 12Mbps (Full Speed), the port is detected and data transfers work using the external PHY. but only when the USB Clock Mux is set to RC48 (internal 48MHz)

      dplogiic_1-1753772416320.png
       

       

       

       

    • If I select 480Mbps (High Speed) mode (again with HS external PHY and same clock settings), USB does not work. The host gives a "device descriptor request failed" error during enumeration.

      For troubleshooting, I have tried selecting both RC48 and a 60MHz clock from PLL1 and PLL3 as the USB clock source, but the result is always the same: it fails to enumerate as a high-speed device.dplogiic_0-1753772352021.png

    Could anyone clarify why HS mode fails at 480Mbps even though Full Speed works?
    What is the correct clock configuration (PLL/clock mux settings) to achieve 480Mbps operation with an external ULPI PHY?
    Any help or working configuration examples would be appreciated.

    Technical Moderator
    July 30, 2025

    Hi @dplogiic,

    Your observation is expected, and here is why:

    Firstly, double-check the ULPI pin assignments according to your schematics to ensure correct hardware connections. Second, the AHB clock frequency must be higher than 30 MHz to guarantee correct operation of the USB OTG HS peripheral. Also, the USB clock tolerance for STM32 devices should not exceed ±400 ppm to ensure reliable USB High-Speed functionality. For this reason, it is strongly recommended to use the HSE oscillator as the PLL clock source for USB HS operations.

    Additionally, verify that the ULPI interface clocking in the RCC is properly configured, with both USB1OTGHSULPIEN and USB1OTGHSEN enabled. 

    Technical Moderator
    July 31, 2025

    Hi @dplogiic 

    First, you need to ensure timing constraints are respected when choosing your ULPI PHY. After that, you can feed USB clock with HSE through PLL and make sure to adjust dividers properly. 

     PeriphClkInitStruct.UsbClockSelection = RCC_USBCLKSOURCE_PLL3;//instead of RCC_USBCLKSOURCE_HSI48