cancel
Showing results for 
Search instead for 
Did you mean: 

USB Device Not Recognized Using USB3300 PHY on STM32 Nucleo-F446ZE

Hyatt
Associate II

I am working with an STM32 development board and an external PHY (USB3300) to establish communication using USB High Speed. However, the USB is not being recognized, and I would greatly appreciate any advice or guidance on how to resolve this issue. Thank you in advance for your help.

Objective
For now, I would like the USB device to be recognized by my PC. Eventually, I aim to send serial data through the external PHY.

Problem
I have connected the devices as shown below, but when I check the Device Manager on my PC, the USB device is not recognized.

My Guess at the Cause
Could it be because PA11 and PA12 are connected to STLINK-USB_DM and STLINK-USB_DP?

Device Manager Output
Unknown USB Device (Device Descriptor Request Failed)
This device has been stopped because it reported problems. (Code 43)
The USB device descriptor request failed.

Connections
PC --(USB cable)-- USB3300 --(jumper wires)-- NUCLEO-F446ZE (powered via USB)

Jumper Wire Details
USB3300 | NUCLEO-F446ZE
---------------------------------
5V : 5V
3.3V : 3.3V
GND : GND
USB_OTG_HS_ULPI_STP : PC0
USB_OTG_HS_ULPI_DIR : PC2
USB_OTG_HS_ULPI_NXT : PC3
USB_OTG_HS_ULPI_CK : PA5
USB_OTG_HS_ULPI_D0 : PA3
USB_OTG_HS_ULPI_D1 : PB0
USB_OTG_HS_ULPI_D2 : PB1
USB_OTG_HS_ULPI_D3 : PB10
USB_OTG_HS_ULPI_D4 : PB2
USB_OTG_HS_ULPI_D5 : PB12
USB_OTG_HS_ULPI_D6 : PB13
USB_OTG_HS_ULPI_D7 : PB5
RESET : PA0
---------------------------------
(Note: PB0 was connected to an on-board LED through SB120, so I cut SB120 to disconnect it.)

Steps Taken
Created a project using STM32CubeIDE
Configured the pins in the pinout view (see image linked below)
Set USB_OTG_HS to "External PHY" and "Device_Only" under Connectivity, and enabled the USB On The Go HS Global interrupt in NVIC Settings
Set the Class for HS IP to "CDC" under Middleware and Software Packs
Wrote the code for main.c (see below URL)
https://drive.google.com/file/d/1854QExJgEYuRdi5xYT4wJ6Gb2AY0DqzF/view?usp=sharing

Components
USB3300
STM32 NUCLEO-F446ZE

Files
Project ZIP file: https://drive.google.com/file/d/1My02udvdlEIywo-0WPoB5JbLTEOwl58R/view?usp=sharingPin configuration image: https://drive.google.com/file/d/1zbRGbeE4PeWx54Zo8dzgwkAvvmwYYh9-/view?usp=sharing

Photo of actual setup: https://drive.google.com/file/d/1J7RatqFqVUSRP269folbYCTjD8h050nB/view?usp=sharing

Board schematic: https://oshwlab.com/wgsxsm/NUCLEO_F446ZE-UMYy85rpZ

Keywords: Microcontroller, Arduino, STM32, HS USB 2.0, Electronics, Circuit Design

10 REPLIES 10
AScha.3
Chief III

So you expect a 480Mbit connection and PHY working on a jumper wire connection and a breadboard ?

Very naive , i think.

What experiences have you had with 50 Mbit connections on breadboards?

If you feel a post has answered your question, please click "Accept as Solution".

Thanks for the help!

> So you expect a 480Mbit connection and PHY working on a jumper wire connection and a breadboard ?
Yes.

> What experiences have you had with 50 Mbit connections on breadboards?

I have no such experience. Could the use of jumper wires and a breadboard cause the device to show up as 'Unknown USB Device (Device Descriptor Request Failed)'?

I am thinking of creating a shield to connect the development board and PHY using a universal PCB.

 

As  AScha.3 noticed, 

You may use jump wire for full speed USB, but for USB high speed, it is impossible.

The high speed USB not only frequency increase, the signal voltage VPP only 0.44V.

Richard

 

 

Ok, so you might have a chance to get it running, if wires from chip to chip are short, let me say, shorter than 80mm or so. ( This means: board to board wires should be max. 40mm ! )

With your jumper wires - never.

To get short connection, as needed here, it's possible if: you mount the PHY board on bottom of Nucleo board with double sided tape. Back to back, with these foam type tape, to get good isolation and some small distance between boards. And solder as short as possible wires to the header pins. GND is most important, short and more than one wire, to closest GND you can find, if PHY board has more GND pins than one.

Then try again....

If you feel a post has answered your question, please click "Accept as Solution".
FBL
ST Employee

Hi @Hyatt 

I agree as well with @AScha.3  and @Richard Li , NUCLEO-F446ZE board is not designed to support High speed operations. STM32446E_EVAL board could be used instead as reference board. You need to check line length matching, Also, AHB frequency has to be higher than 30 MHz and crystal oscillator is required to guarantee clock precision.

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.

Thanks for the help!

I tried your solution, and it worked. thanks so much!
But, I couldn't receive "Hello World" via the serial monitor. 

 

code for main.c: https://drive.google.com/file/d/1qhAVHpmE8YTxBzh6OTw-7OyXdQzXE5hh/view?usp=sharing

vs code serial monitor output: https://drive.google.com/file/d/1XpSgxi50n2FgdIBYnoXeJt2oFSuEADrB/view?usp=sharing

Photo of actual setup: https://drive.google.com/file/d/1CaISDs0JhdvX8R-v1aF5v3VRw-qJxJu7/view?usp=sharing

USB Device Tree Viewer: https://drive.google.com/file/d/1VMC-ssH2HegwjDNyY9PAutBeFFSj1LSf/view?usp=sharing

@Hyatt,

Good for you passed first step!

I guess your board in full speed mode, the PHY support full speed too.

If you have scope, you can look for D+ or D-, USB 2 first use full speed (~3.3V VPP), then drop to ~0.5V for the "chirp" signal, if pass this, change to high speed , if not, go back to full speed, you can find the waveform drop first, then rising. Please look for attached picture. (You can look for https://www.usbmadesimple.co.uk/index.html)

But even full speed, I don't think you can make signal pass without error, your wire totally for low speed (If you twist 

and shield D+ and D- , may help a lit bit)

Regards,

Richard

One suggestion for your test, please add one 1.5K resistor between D- and 3.3V, force running in low speed mode, if lucky, it may work.

Hyatt
Associate II

@Richard Li 
Thanks for the help!
I tried changing the cable(support usb2.0, U2C-MF50BK), but result was the same .

I think it is probably recognized in HS because USB Device Tree Viewer show high speed.

USB Device Tree Viewer: https://drive.google.com/file/d/1VMC-ssH2HegwjDNyY9PAutBeFFSj1LSf/view?usp=sharingusb.png

      ========================== Summary =========================
Vendor ID                : 0x0483 (STMicroelectronics)
Product ID               : 0x5740
USB version              : 2.00
Port maximum Speed       : High-Speed
Device maximum Speed     : High-Speed
Device Connection Speed  : High-Speed
Self Powered             : yes
Demanded Current         : 100 mA
Used Endpoints           : 4