Skip to content

Conversation

@ceedriic
Copy link
Contributor

@ceedriic ceedriic commented Jan 8, 2026

Describe the PR
This is a proof-of-concept patch to support Full-Speed USB on DWC2 on a board with High-Speed ULPI

Additional context
I've a stm32h747 board with a high-speed external PHY.
But for testing/reliability purposes I want to limit the speed to Full-Speed.

I tried with:

#define BOARD_TUH_MAX_SPEED OPT_MODE_HIGH_SPEED
#define CFG_TUH_MAX_SPEED OPT_MODE_FULL_SPEED

In my tusb_config.h, but with bad results (hang in trying to setup the low-speed phy)

This patch is just a proof-of-concept that it is not too difficult to make that work, In the hope that someone can clean that up :)

@github-actions
Copy link

github-actions bot commented Jan 8, 2026

Size Difference Report

Because TinyUSB code size varies by port and configuration, the metrics below represent the averaged totals across all example builds.

Note: If there is no change, only one value is shown.

Changes >1% in size

No entries.

Changes <1% in size

No entries.

No changes
file .text .rodata .data .bss size % diff
audio_device.c 2855 0 1248 1679 4529 +0.0%
cdc_device.c 1331 16 20 670 2000 +0.0%
cdc_host.c 6596 487 15 1539 8357 +0.0%
dcd_ch32_usbfs.c 1472 0 0 2444 3916 +0.0%
dcd_ch32_usbhs.c 1648 0 0 448 2096 +0.0%
dcd_ci_fs.c 1925 0 0 1290 3215 +0.0%
dcd_ci_hs.c 1762 0 0 1280 2530 +0.0%
dcd_da146xx.c 3067 0 0 144 3211 +0.0%
dcd_dwc2.c 4160 25 0 263 4447 +0.0%
dcd_eptri.c 2270 0 0 259 2529 +0.0%
dcd_khci.c 1953 0 0 1290 3243 +0.0%
dcd_lpc17_40.c 1470 0 0 648 1794 +0.0%
dcd_lpc_ip3511.c 1463 0 0 264 1639 +0.0%
dcd_mm32f327x_otg.c 1478 0 0 1290 2768 +0.0%
dcd_msp430x5xx.c 1796 0 0 176 1972 +0.0%
dcd_musb.c 2079 0 0 160 2239 +0.0%
dcd_nrf5x.c 2919 0 0 292 3211 +0.0%
dcd_nuc120.c 1093 0 0 78 1171 +0.0%
dcd_nuc121.c 1167 0 0 101 1268 +0.0%
dcd_nuc505.c 0 0 1529 157 1686 +0.0%
dcd_rp2040.c 736 20 580 1029 2365 +0.0%
dcd_rusb2.c 2917 0 0 156 3073 +0.0%
dcd_samd.c 1032 0 0 266 1298 +0.0%
dcd_samg.c 1319 0 0 72 1391 +0.0%
dcd_stm32_fsdev.c 2556 0 0 291 2847 +0.0%
dfu_device.c 744 28 712 184 929 +0.0%
dfu_rt_device.c 157 0 134 0 156 +0.0%
dwc2_common.c 594 29 0 0 610 +0.0%
ecm_rndis_device.c 1037 0 1 2272 3310 +0.0%
ehci.c 2761 0 0 5970 7537 +0.0%
fsdev_common.c 180 0 0 0 180 +0.0%
hcd_ch32_usbfs.c 2484 0 0 498 2982 +0.0%
hcd_ci_hs.c 190 0 0 0 190 +0.0%
hcd_dwc2.c 4893 30 0 512 5434 +0.0%
hcd_khci.c 2442 0 0 449 2891 +0.0%
hcd_musb.c 3073 0 0 157 3230 +0.0%
hcd_pio_usb.c 262 0 240 0 502 +0.0%
hcd_rp2040.c 936 73 420 512 1941 +0.0%
hcd_rusb2.c 2923 0 0 245 3168 +0.0%
hcd_samd.c 2220 0 0 324 2544 +0.0%
hcd_stm32_fsdev.c 3282 0 1 420 3703 +0.0%
hid_device.c 1120 44 997 115 1235 +0.0%
hid_host.c 1206 0 0 1250 2456 +0.0%
hub.c 1235 8 8 29 1268 +0.0%
midi_device.c 1129 0 991 596 1723 +0.0%
midi_host.c 1353 7 7 3740 5097 +0.0%
msc_device.c 2506 108 2274 538 3044 +0.0%
msc_host.c 1589 0 0 394 1984 +0.0%
mtp_device.c 1622 22 1385 578 2208 +0.0%
ncm_device.c 1517 28 1408 5824 7354 +0.0%
ohci.c 1942 0 0 2414 4356 +0.0%
rp2040_usb.c 124 70 574 4 772 +0.0%
rusb2_common.c 160 0 16 0 176 +0.0%
tusb.c 418 0 359 3 420 +0.0%
tusb_fifo.c 844 0 477 0 839 +0.0%
typec_stm32.c 820 8 2 12 842 +0.0%
usbc.c 420 2 20 166 608 +0.0%
usbd.c 3179 57 90 276 3519 +0.0%
usbd_control.c 524 0 474 78 601 +0.0%
usbh.c 4374 60 63 954 5415 +0.0%
usbtmc_device.c 2178 24 70 294 2504 +0.0%
vendor_device.c 636 0 538 470 1105 +0.0%
video_device.c 4402 6 1851 471 4865 +0.0%
TOTAL 112540 1152 16504 46035 160493 +0.0%

@hathach hathach marked this pull request as draft January 9, 2026 03:34
@hathach hathach changed the title Introduce DWC2_I_WANT_FS_ON_HS_BOARD hack - do not merge [Do Not Merge] Introduce DWC2_I_WANT_FS_ON_HS_BOARD hack Jan 9, 2026
@hathach
Copy link
Owner

hathach commented Jan 9, 2026

why not use the built-in FS PHY instead ? does the mcu only has 1 phy, and that is used by the other usb controller ?

@ceedriic
Copy link
Contributor Author

ceedriic commented Jan 9, 2026

why not use the built-in FS PHY instead ? does the mcu only has 1 phy, and that is used by the other usb controller ?

You're right, I could use the built-in FS PHY of the MCU, but the board has been designed with the USB3315C external PHY, to be high-speed capable. So the built-in FS PHY pins are not connected.

At the moment, for some reasons I'm trying to understand, high-speed devices do not enumerate on that board with the latest TinyUSB, but full-speed devices work well. So with this patch I'm able to run high-speed devices in full speed mode.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants