STM32H750 and USB3300-EZK Startup Issue
- March 25, 2026
- 3 replies
- 226 views
My design uses a STM32H750VBT6 MCU with the USB3300-EZK PHY for high-speed USB. The hardware and software implementations are complete and in general everything works extremely will.
The only issue I am seeing is that there are occasional startup problems with the host computer (both Mac and Linux) reading the device descriptor. This occurs about 10% of the time. The Linux error log is:
<6>[19177.992026] usb 1-1.1.4: new full-speed USB device number 75 using xhci-hcd
<3>[19178.072046] usb 1-1.1.4: device descriptor read/64, error -32
<3>[19178.260043] usb 1-1.1.4: device descriptor read/64, error -32
<6>[19178.448021] usb 1-1.1.4: new full-speed USB device number 76 using xhci-hcd
<3>[19178.528074] usb 1-1.1.4: device descriptor read/64, error -32
<3>[19178.716051] usb 1-1.1.4: device descriptor read/64, error -32
A normal connection log as follows:
<6>[19166.984026] usb 1-1.1.4: new high-speed USB device number 74 using xhci-hcd
<6>[19167.084645] usb 1-1.1.4: New USB device found, idVendor=0483, idProduct=5730, bcdDevice= 0.04
<6>[19167.084664] usb 1-1.1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
I don't believe there are any hardware issues. I am using an Epson CMOS Standard Clock Oscillator for the 3300 clock source. I could not find any documentation on any different setup needed for the 3300 to use a CMOS Clock Oscillator instead of a crystal directly.
In response to the descriptor error, I both reset and the 3300 and the MCU via software and do a full reboot. In about 90% of the cases the chip comes up correctly after the reboot. But in about 10% of the cases the chip continues to negotiate a full-speed connection with the host and the only solution is to fully power cycle the entire device.
I gather for some reason the "USB Chirp" negotiation is failing, but I am not set up to diagnose those kind of USB problems.
Simple questions: The STM32CubeH7 code base (which is excellent by the way!) does not provide a mechanism to access the external ULPI registers directly (yes I have look quite deeply; the earlier GRXFSP register does not seem to exist in the H7 series). So is there any setup of the 3300 required to use an external standard oscillator instead of a physical crystal?
In response to the failed speed negotiation, I am sometimes able to get the system to recover by using the USB3300 RESET line (active high), and doing a full MCU soft reset and reboot. But about 10% the time the USB3300 gets into a state where it will never connect to the host computer; the only solution in that case is to power cycle the entire device.
So second simple question, is there a way to fully reset the USB3300 from the MCU? I have tried using the USB3300 RESET pin (which documents that it does not reset the registers), as well as the Cube's PSV_PCD_Init, PSV_PCD_DeInit, USBD_Init and USBD_DeInit functions. 90% of the time those reset functions do allow me to reset the chip and the connection will succeed the second time. But about 10% of the time the 3300 will never connect with the host until the complete device is power-cycled.
Any hints?
