cancel
Showing results for 
Search instead for 
Did you mean: 

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

dplogiic
Associate III

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.

3 REPLIES 3
dplogiic
Associate III

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.

FBL
ST Employee

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. 

To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.


Hello @FBL ,

I would like to clarify my hardware setup and get some advice on the correct oscillator configuration for the FUSB2805 ULPI PHY.

According to the datasheet, the FUSB2805 requires a 26 MHz clock on its CLIKIN pin to run its internal PLL and generate the 60 MHz ULPI clock for the STM32’s USB_OTG_HS_ULPI_CK pin.
So, I have connected a 26 MHz crystal oscillator directly to the PHY’s CLIKIN pin.

Issue:

When I use the 26 MHz oscillator, I observe a 26 MHz sine wave output at about 0.8 Vpp — but the PHY’s internal PLL does not lock and does not output the 60 MHz ULPI clock. So, the USB HS PHY is not fully active and it doesn't work in any mode.

dplogiic_1-1753943537009.pngdplogiic_2-1753943578422.png

above waveform output of oscillator.

To test this further, I disconnected the capacitor between the oscillator and the CLIKIN pin and instead connected my MCU’s RCC_OSC_OUT (running at 25 MHz, with HSE enabled in CubeMX) directly to the PHY CLIKIN pin.

dplogiic_3-1753943691208.png

 

With this workaround, the PHY generates the correct 60 MHz ULPI clock. The USB works with the external PHY if I set the speed to 12 Mbps and select RC48 in the USB Clock Mux.

However, when I set the speed to 480 Mbps High Speed, it does not work — the host shows a “device descriptor request failed” error during enumeration.

dplogiic_0-1753943521577.png

So how can I resolve this issue and Is it acceptable to feed the FUSB2805 CLIKIN pin directly with the MCU’s RCC_OSC_OUT (25 MHz) like this?

Is there a recommended type of oscillator or crystal for the FUSB2805 to ensure stable PLL lock?

What is the best way to ensure the PHY generates a stable 60 MHz ULPI clock so that the STM32 can run in true High Speed (480 Mbps) mode?


For reference, I have attached my STM32CubeMX project file below.