2024-10-13 07:33 AM
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
2024-10-13 08:38 AM
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?
2024-10-13 09:21 AM
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.
2024-10-13 06:42 PM
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
2024-10-14 12:13 AM - edited 2024-10-14 12:16 AM
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....
2024-10-14 02:48 AM
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.
2024-10-14 07:37 PM
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
2024-10-14 09:31 PM
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
2024-10-14 09:51 PM
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.
2024-10-15 01:01 AM
@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=sharing
========================== 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