Skip to content

fix stm32u0 data stride#3472

Merged
hathach merged 2 commits intomasterfrom
u0_fix
Feb 5, 2026
Merged

fix stm32u0 data stride#3472
hathach merged 2 commits intomasterfrom
u0_fix

Conversation

@HiFiPhile
Copy link
Collaborator

Describe the PR
STM32U0 has 1024 byte PMA and 32bit access width.

Signed-off-by: Zixun LI <admin@hifiphile.com>
Copilot AI review requested due to automatic review settings January 26, 2026 16:16
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adjusts TinyUSB’s STM32 FS device configuration so that STM32U0, which has a 1024-byte PMA but 32-bit access width, uses the correct data/address stride and access scheme.

Changes:

  • In tusb_option.h, special-cases STM32U0 so that although CFG_TUSB_FSDEV_PMA_SIZE is 1024, it uses the 32-bit FIFO data and address stride settings previously used only for 2048-byte PMA devices.
  • In fsdev_common.h, similarly special-cases STM32U0 so that it uses the 32-bit PMA access scheme and FSDEV_BUS_32BIT definitions instead of the generic 1024-byte (16-bit) scheme.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

File Description
src/tusb_option.h Adjusts FSDEV FIFO data/address stride macros so STM32U0 with 1024-byte PMA uses 32-bit (stride 4) configuration instead of the generic 16-bit configuration.
src/portable/st/stm32_fsdev/fsdev_common.h Updates PMA access scheme selection so STM32U0 is treated like a 32-bit bus device despite having a 1024-byte PMA.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@github-actions
Copy link

github-actions bot commented Jan 26, 2026

TinyUSB Average Code Size Metrics

File .text .rodata .data .bss size %
cdc_host.c 6596 487 15 1539 8357 5.2%
ehci.c 2761 0 0 5970 7537 4.7%
ncm_device.c 1514 28 1408 5830 7358 4.6%
usbh.c 4395 60 63 954 5436 3.4%
hcd_dwc2.c 4893 30 0 512 5434 3.4%
midi_host.c 1353 7 7 3740 5097 3.2%
video_device.c 4391 5 1851 472 4855 3.0%
audio_device.c 2849 0 1248 1673 4518 2.8%
dcd_dwc2.c 4101 24 0 263 4387 2.7%
ohci.c 1942 0 0 2414 4356 2.7%
dcd_ch32_usbfs.c 1472 0 0 2444 3916 2.4%
hcd_stm32_fsdev.c 3282 0 1 420 3703 2.3%
usbd.c 3190 57 89 276 3531 2.2%
ecm_rndis_device.c 1037 0 1 2272 3310 2.1%
dcd_khci.c 1953 0 0 1290 3243 2.0%
hcd_musb.c 3073 0 0 157 3230 2.0%
dcd_ci_fs.c 1925 0 0 1290 3215 2.0%
dcd_nrf5x.c 2919 0 0 292 3211 2.0%
dcd_da146xx.c 3067 0 0 144 3211 2.0%
hcd_rusb2.c 2923 0 0 245 3168 2.0%
dcd_rusb2.c 2917 0 0 156 3073 1.9%
msc_device.c 2503 108 2274 538 3041 1.9%
hcd_ch32_usbfs.c 2484 0 0 498 2982 1.9%
hcd_khci.c 2442 0 0 449 2891 1.8%
dcd_stm32_fsdev.c 2557 0 0 291 2848 1.8%
dcd_mm32f327x_otg.c 1478 0 0 1290 2768 1.7%
dcd_musb.c 2431 0 0 160 2591 1.6%
hcd_samd.c 2220 0 0 324 2544 1.6%
dcd_ci_hs.c 1762 0 0 1280 2530 1.6%
dcd_eptri.c 2270 0 0 259 2529 1.6%
usbtmc_device.c 2176 24 69 291 2500 1.6%
hid_host.c 1206 0 0 1250 2456 1.5%
mtp_device.c 1689 22 1449 579 2275 1.4%
dcd_rp2040.c 859 20 604 655 2138 1.3%
dcd_ch32_usbhs.c 1648 0 0 448 2096 1.3%
cdc_device.c 1328 16 19 661 1988 1.2%
msc_host.c 1589 0 0 394 1984 1.2%
dcd_msp430x5xx.c 1796 0 0 176 1972 1.2%
hcd_rp2040.c 976 73 416 384 1849 1.2%
dcd_lpc17_40.c 1470 0 0 648 1794 1.1%
midi_device.c 1127 0 991 589 1714 1.1%
dcd_nuc505.c 0 0 1529 157 1686 1.0%
dcd_lpc_ip3511.c 1463 0 0 264 1639 1.0%
dcd_samg.c 1319 0 0 72 1391 0.9%
dcd_samd.c 1032 0 0 266 1298 0.8%
hub.c 1235 8 8 29 1268 0.8%
dcd_nuc121.c 1167 0 0 101 1268 0.8%
hid_device.c 1118 44 997 115 1233 0.8%
dcd_nuc120.c 1093 0 0 78 1171 0.7%
vendor_device.c 624 0 530 464 1087 0.7%
rp2040_usb.c 172 75 718 4 969 0.6%
dfu_device.c 744 28 712 183 926 0.6%
typec_stm32.c 820 8 2 12 842 0.5%
tusb_fifo.c 843 0 477 0 838 0.5%
usbc.c 420 2 20 166 608 0.4%
usbd_control.c 523 0 474 78 600 0.4%
dwc2_common.c 582 29 0 0 597 0.4%
hcd_pio_usb.c 262 0 240 0 502 0.3%
tusb.c 429 0 368 3 430 0.3%
hcd_ci_hs.c 190 0 0 0 190 0.1%
fsdev_common.c 180 0 0 0 180 0.1%
rusb2_common.c 160 0 16 0 176 0.1%
dfu_rt_device.c 156 0 134 0 156 0.1%
TOTAL 113096 1155 16730 45509 160691 100.0%
Input files
  • cmake-build/cmake-build-adafruit_clue/metrics.json
  • cmake-build/cmake-build-apard32690/metrics.json
  • cmake-build/cmake-build-at32f403a_weact_blackpill/metrics.json
  • cmake-build/cmake-build-at_start_f402/metrics.json
  • cmake-build/cmake-build-at_start_f413/metrics.json
  • cmake-build/cmake-build-at_start_f415/metrics.json
  • cmake-build/cmake-build-at_start_f423/metrics.json
  • cmake-build/cmake-build-at_start_f425/metrics.json
  • cmake-build/cmake-build-at_start_f435/metrics.json
  • cmake-build/cmake-build-at_start_f455/metrics.json
  • cmake-build/cmake-build-b_g474e_dpow1/metrics.json
  • cmake-build/cmake-build-b_u585i_iot2a/metrics.json
  • cmake-build/cmake-build-ch32v103r_r1_1v0/metrics.json
  • cmake-build/cmake-build-ch32v203c_r0_1v0/metrics.json
  • cmake-build/cmake-build-ch32v307v_r1_1v0/metrics.json
  • cmake-build/cmake-build-cynthion_d11/metrics.json
  • cmake-build/cmake-build-da14695_dk_usb/metrics.json
  • cmake-build/cmake-build-double_m33_express/metrics.json
  • cmake-build/cmake-build-ea4088_quickstart/metrics.json
  • cmake-build/cmake-build-ea4357/metrics.json
  • cmake-build/cmake-build-ek_tm4c123gxl/metrics.json
  • cmake-build/cmake-build-feather_stm32f405/metrics.json
  • cmake-build/cmake-build-fomu/metrics.json
  • cmake-build/cmake-build-frdm_k32l2a4s/metrics.json
  • cmake-build/cmake-build-frdm_k64f/metrics.json
  • cmake-build/cmake-build-frdm_kl25z/metrics.json
  • cmake-build/cmake-build-frdm_mcxa153/metrics.json
  • cmake-build/cmake-build-frdm_rw612/metrics.json
  • cmake-build/cmake-build-hpm6750evk2/metrics.json
  • cmake-build/cmake-build-lpcxpresso11u37/metrics.json
  • cmake-build/cmake-build-lpcxpresso1347/metrics.json
  • cmake-build/cmake-build-lpcxpresso1549/metrics.json
  • cmake-build/cmake-build-lpcxpresso1769/metrics.json
  • cmake-build/cmake-build-lpcxpresso18s37/metrics.json
  • cmake-build/cmake-build-lpcxpresso51u68/metrics.json
  • cmake-build/cmake-build-lpcxpresso54114/metrics.json
  • cmake-build/cmake-build-metro_m0_express/metrics.json
  • cmake-build/cmake-build-metro_m4_express/metrics.json
  • cmake-build/cmake-build-metro_m7_1011/metrics.json
  • cmake-build/cmake-build-mm32f327x_mb39/metrics.json
  • cmake-build/cmake-build-msp_exp430f5529lp/metrics.json
  • cmake-build/cmake-build-msp_exp432e401y/metrics.json
  • cmake-build/cmake-build-nutiny_nuc126v/metrics.json
  • cmake-build/cmake-build-nutiny_sdk_nuc120/metrics.json
  • cmake-build/cmake-build-nutiny_sdk_nuc121/metrics.json
  • cmake-build/cmake-build-nutiny_sdk_nuc505/metrics.json
  • cmake-build/cmake-build-portenta_c33/metrics.json
  • cmake-build/cmake-build-raspberry_pi_pico/metrics.json
  • cmake-build/cmake-build-raspberrypi_cm4/metrics.json
  • cmake-build/cmake-build-raspberrypi_zero/metrics.json
  • cmake-build/cmake-build-samg55_xplained/metrics.json
  • cmake-build/cmake-build-sipeed_longan_nano/metrics.json
  • cmake-build/cmake-build-stlinkv3mini/metrics.json
  • cmake-build/cmake-build-stm32c071nucleo/metrics.json
  • cmake-build/cmake-build-stm32f070rbnucleo/metrics.json
  • cmake-build/cmake-build-stm32f103_bluepill/metrics.json
  • cmake-build/cmake-build-stm32f207nucleo/metrics.json
  • cmake-build/cmake-build-stm32f303disco/metrics.json
  • cmake-build/cmake-build-stm32g0b1nucleo/metrics.json
  • cmake-build/cmake-build-stm32h503nucleo/metrics.json
  • cmake-build/cmake-build-stm32h743eval/metrics.json
  • cmake-build/cmake-build-stm32h7s3nucleo/metrics.json
  • cmake-build/cmake-build-stm32l052dap52/metrics.json
  • cmake-build/cmake-build-stm32l412nucleo/metrics.json
  • cmake-build/cmake-build-stm32n6570dk/metrics.json
  • cmake-build/cmake-build-stm32u083cdk/metrics.json
  • cmake-build/cmake-build-stm32wb55nucleo/metrics.json
  • cmake-build/cmake-build-stm32wba_nucleo/metrics.json
  • cmake-build/cmake-build-xmc4500_relax/metrics.json

@github-actions
Copy link

github-actions bot commented Jan 26, 2026

MemBrowse Memory Report

at32f402_405-at_start_f402-cdc_msc

  • FLASH: .text +4 B (+0.0%, 18,200 B / 262,144 B, total: 7% used)

at32f403a_407-at32f403a_weact_blackpill-cdc_msc

  • FLASH: .text +4 B (+0.0%, 18,492 B / 262,144 B, total: 7% used)

at32f413-at_start_f413-cdc_msc

  • FLASH: .text +4 B (+0.0%, 18,464 B / 262,144 B, total: 7% used)

at32f423-at_start_f423-cdc_msc

  • FLASH: .text +4 B (+0.0%, 20,024 B / 262,144 B, total: 8% used)

at32f425-at_start_f425-cdc_msc

  • FLASH: .text +4 B (+0.0%, 27,672 B / 65,536 B, total: 42% used)

at32f435_437-at_start_f435-cdc_msc

  • FLASH: .text +4 B (+0.0%, 17,652 B / 4,128,768 B, total: 0% used)

ch32v10x-ch32v103r_r1_1v0-cdc_msc

  • FLASH: .text +4 B (+0.0%, 14,604 B / 65,536 B, total: 22% used)

ch32v20x-ch32v203c_r0_1v0-cdc_msc

  • FLASH: .text +8 B (+0.0%, 16,844 B / 65,536 B, total: 26% used)

ch32v30x-ch32v307v_r1_1v0-cdc_msc

  • FLASH: .text +8 B (+0.0%, 17,812 B / 131,072 B, total: 14% used)

da1469x-da14695_dk_usb-cdc_msc

  • FLASH: .text +8 B (+0.1%, 14,324 B / 1,048,576 B, total: 1% used)

fomu-fomu-cdc_msc

  • rom: .text +16 B (+0.1%, 19,154 B / 1,835,008 B, total: 1% used)

hpmicro-hpm6750evk2-cdc_msc

  • FLASH: .text +8 B (+0.0%, 29,464 B / 16,777,216 B, total: 0% used)

kinetis_k-frdm_k64f-cdc_msc

  • m_text: .text +8 B (+0.1%, 15,156 B / 1,047,536 B, total: 1% used)

kinetis_k32l2-frdm_k32l2a4s-cdc_msc

  • m_text: .text +16 B (+0.1%, 15,008 B / 523,248 B, total: 3% used)

kinetis_kl-frdm_kl25z-cdc_msc

  • m_text: .text +16 B (+0.1%, 22,260 B / 130,032 B, total: 17% used)

lpc11-lpcxpresso11u37-cdc_msc

  • MFlash128: .text +16 B (+0.1%, 20,448 B / 131,072 B, total: 16% used)

lpc13-lpcxpresso1347-cdc_msc

  • MFlash64: .text +4 B (+0.0%, 20,404 B / 65,536 B, total: 31% used)

lpc15-lpcxpresso1549-cdc_msc

  • MFlash256: .text +4 B (+0.0%, 21,824 B / 262,144 B, total: 8% used)

lpc17-lpcxpresso1769-cdc_msc

  • MFlash512: .text +8 B (+0.1%, 12,524 B / 524,288 B, total: 2% used)

lpc18-lpcxpresso18s37-cdc_msc

  • MFlashA512: .text +4 B (+0.0%, 14,590 B / 524,288 B, total: 3% used)

lpc40-ea4088_quickstart-cdc_msc

  • MFlash512: .text +8 B (+0.1%, 12,564 B / 524,288 B, total: 2% used)

lpc43-ea4357-cdc_msc

  • MFlashA512: .text +4 B (+0.0%, 15,766 B / 524,288 B, total: 3% used)

lpc51-lpcxpresso51u68-cdc_msc

  • m_text: .text +16 B (+0.1%, 14,068 B / 261,376 B, total: 5% used)

maxim-apard32690-cdc_msc

  • FLASH: .text +4 B (+0.0%, 18,864 B / 3,407,872 B, total: 1% used)

mcx-frdm_mcxa153-cdc_msc

  • m_text: .text +8 B (+0.0%, 16,052 B / 130,560 B, total: 12% used)

mm32-mm32f327x_mb39-cdc_msc

  • FLASH: .text +8 B (+0.1%, 13,356 B / 524,288 B, total: 3% used)

msp430-msp_exp430f5529lp-cdc_msc

  • ROM: .text +28 B (+0.1%, 23,782 B / 48,000 B, total: 50% used)

msp432e4-msp_exp432e401y-cdc_msc

  • MAIN_FLASH: .text +12 B (+0.1%, 14,964 B / 1,048,576 B, total: 1% used)

nrf-adafruit_clue-cdc_msc

  • FLASH: .text +4 B (+0.0%, 16,840 B / 1,048,576 B, total: 2% used)

nuc100_120-nutiny_sdk_nuc120-cdc_msc

  • FLASH: .text +16 B (+0.1%, 21,564 B / 131,072 B, total: 16% used)

nuc121_125-nutiny_sdk_nuc121-cdc_msc

  • FLASH: .text +16 B (+0.1%, 20,984 B / 32,768 B, total: 64% used)

nuc126-nutiny_nuc126v-cdc_msc

  • FLASH: .text +16 B (+0.1%, 12,812 B / 262,144 B, total: 5% used)

ra-portenta_c33-cdc_msc

  • FLASH: .text +4 B (+0.0%, 16,268 B / 2,097,152 B, total: 1% used)

samd11-cynthion_d11-cdc_dual_ports

  • rom: .text +16 B (+0.2%, 9,468 B / 14,336 B, total: 66% used)

samd5x_e5x-metro_m4_express-cdc_msc

  • rom: .text +4 B (+0.0%, 12,228 B / 507,904 B, total: 2% used)

samg-samg55_xplained-cdc_msc

  • rom: .text +4 B (+0.0%, 12,312 B / 524,288 B, total: 2% used)

stm32c0-stm32c071nucleo-cdc_msc

  • FLASH: .text +16 B (+0.1%, 17,124 B / 131,072 B, total: 13% used)

stm32f0-stm32f070rbnucleo-cdc_msc

  • FLASH: .text +16 B (+0.1%, 26,968 B / 131,072 B, total: 21% used)

stm32f1-stm32f103_bluepill-cdc_msc

  • FLASH: .text +4 B (+0.0%, 16,480 B / 65,536 B, total: 25% used)

stm32f2-stm32f207nucleo-cdc_msc

  • FLASH: .text +4 B (+0.0%, 17,876 B / 1,048,576 B, total: 2% used)

stm32f3-stm32f303disco-cdc_msc

  • FLASH: .text +4 B (+0.0%, 17,372 B / 262,144 B, total: 7% used)

stm32f4-feather_stm32f405-cdc_msc

  • FLASH: .text +4 B (+0.0%, 18,632 B / 1,048,576 B, total: 2% used)

stm32f7-stlinkv3mini-cdc_msc

  • FLASH: .text +4 B (+0.0%, 20,104 B / 524,288 B, total: 4% used)

stm32g0-stm32g0b1nucleo-cdc_msc

  • FLASH: .text +16 B (+0.1%, 19,164 B / 524,288 B, total: 4% used)

stm32g4-b_g474e_dpow1-cdc_msc

  • FLASH: .text +4 B (+0.0%, 20,124 B / 524,288 B, total: 4% used)

stm32h5-stm32h503nucleo-cdc_msc

  • FLASH: .text +4 B (+0.0%, 19,800 B / 524,288 B, total: 4% used)

stm32h7-stm32h743eval-cdc_msc

  • FLASH: .text +4 B (+0.0%, 29,984 B / 2,097,152 B, total: 1% used)

stm32h7rs-stm32h7s3nucleo-cdc_msc

  • FLASH: .text +4 B (+0.0%, 27,356 B / 65,536 B, total: 42% used)

stm32l0-stm32l052dap52-cdc_msc

  • FLASH: .text +16 B (+0.1%, 26,680 B / 65,536 B, total: 41% used)

stm32l4-stm32l412nucleo-cdc_msc

  • FLASH: .text +8 B (+0.0%, 19,616 B / 131,072 B, total: 15% used)

stm32n6-stm32n6570dk-cdc_msc

  • ROM: .text +12 B (+0.0%, 40,352 B / 261,120 B, total: 15% used)

stm32u0-stm32u083cdk-cdc_msc

  • FLASH: .text +24 B (+0.1%, 20,012 B / 262,144 B, total: 8% used)

stm32u5-b_u585i_iot2a-cdc_msc

  • FLASH: .text +8 B (+0.0%, 28,472 B / 4,194,304 B, total: 1% used)

stm32wb-stm32wb55nucleo-cdc_msc

  • FLASH: .text +4 B (+0.0%, 20,448 B / 524,288 B, total: 4% used)

stm32wba-stm32wba_nucleo-cdc_msc

  • FLASH: .text +4 B (+0.0%, 21,044 B / 1,048,576 B, total: 2% used)

tm4c-ek_tm4c123gxl-cdc_msc

  • FLASH: .text +4 B (+0.0%, 14,212 B / 262,144 B, total: 5% used)

No memory changes detected for:

@hathach
Copy link
Owner

hathach commented Feb 5, 2026

Describe the PR STM32U0 has 1024 byte PMA and 32bit access width.

ah thanks, look like the access scheme is flexible for 1KB ram

Copy link
Owner

@hathach hathach left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

perfect, thank you. I reverse the size check order to reduce duplication. U0 is indeed 32-bit access

Image

@hathach hathach merged commit cdf7499 into master Feb 5, 2026
200 of 201 checks passed
@hathach hathach deleted the u0_fix branch February 5, 2026 10:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants