Skip to content

Fix stm32f723disco host/cdc_msc_hid HIL: UART RX starvation + DWC2 DMA split-IN NAK storm#3677

Open
hathach wants to merge 11 commits into
masterfrom
claude/stm32f7-host-uart-rx-priority
Open

Fix stm32f723disco host/cdc_msc_hid HIL: UART RX starvation + DWC2 DMA split-IN NAK storm#3677
hathach wants to merge 11 commits into
masterfrom
claude/stm32f7-host-uart-rx-priority

Conversation

@hathach

@hathach hathach commented Jun 5, 2026

Copy link
Copy Markdown
Owner

Fixes the host/cdc_msc_hid HIL CDC-echo failure on stm32f723disco (HS host with a hub; CDC+MSC behind it, so the FS CH9102 CDC is reached via USB split transactions). Two independent bugs:

1. stm32f7 host UART RX byte loss (7ae26d7)

The F7 USART has no hardware RX FIFO, so its single-byte RDR relies entirely on the RXNE interrupt. board_init() pinned that ISR at the lowest NVIC priority while the USB OTG IRQ ran at the default highest priority (0), so under heavy HS host traffic the RX ISR was starved, RDR overran (ORE), and ~85% of 115200-baud console bytes were dropped — surfacing as the CDC echo mismatch.

  • Raise the USART RX IRQ to priority 0 so it preempts the USB IRQ (the ISR only reads RDR into a lock-free fifo and makes no RTOS call, so this is safe even under FreeRTOS).
  • Demote OTG_FS/HS to priority 1 in the bare-metal path.
  • Grow the RX ring buffer 32 → 256 B to absorb a full forwarding burst when the main loop briefly stalls.

2. DWC2 DMA-mode split bulk-IN NAK storm (722f13c)

In buffer-DMA mode, handle_channel_in_dma() re-enabled a split bulk/control IN channel immediately on every NAK. When a full-speed device behind a hub keeps NAKing an idle bulk IN (a CDC stream polled with no data), this becomes an unthrottled start-split → complete-split → NAK ISR loop that starves the task context, so the host can no longer forward data, the device never echoes, and the endpoint wedges permanently. The slave build was unaffected because it channel_disable()s on NAK and retries on the separate halt interrupt.

Mirror the slave path, which the Synopsys DWC2 Programming Guide v4.20a also sanctions (p73: channel disable is permitted for NAK on split channels; §3.5 "Halting a Channel"): on a split IN NAK, disable the channel and re-issue the start-split on the resulting halt interrupt. The disable's arbitration/flush latency throttles the poll and yields to the task, with no frame deferral, so split timing is preserved. The change is confined to the DMA split IN NAK path.

Validation (CI HIL rig)

Full board suite, both flag variants (default/slave and CFG_TUH_DWC2_DMA_ENABLE), rebuilt fresh — 5/5 runs Total failed: 0, no device or host regressions.

Throughput unaffected / improved:

  • device cdc_msc_throughput: CDC read 508 / write 511 kBps, MSC 511/511 kBps (both variants)
  • host MSC read (msc_file_explorer, HS): 18.1 MB/s slave, 19.7 MB/s DMA

(Also includes a one-line doc path fix in AGENTS.md.)

🤖 Generated with Claude Code

hathach and others added 3 commits June 5, 2026 08:54
The F7 USART has no hardware RX FIFO, so its single-byte RDR relies entirely
on the RXNE interrupt. board_init() pinned that ISR at the lowest NVIC priority
while the USB OTG IRQ ran at the default priority 0, so under heavy HS host
traffic the RX ISR was starved, RDR overran (ORE), and ~85% of 115200-baud
console bytes were dropped. This showed up as the host/cdc_msc_hid HIL CDC echo
mismatch on stm32f723disco.

Raise the USART RX IRQ to priority 0 so it preempts the USB IRQ (the ISR only
reads RDR into a lock-free fifo and makes no RTOS call, so this is safe even
under FreeRTOS), demote OTG_FS/HS to priority 1 in the bare-metal path, and grow
the RX ring buffer 32 -> 256 B to absorb a full forwarding burst when the main
loop briefly stalls.

Validated on the CI HIL rig: host/cdc_msc_hid default variant now passes 5/5
(was 0%), device/cdc_msc unaffected.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…storm

In buffer DMA mode, handle_channel_in_dma() re-enabled a split bulk/control IN
channel immediately on every NAK. When a full-speed device behind a hub keeps
NAKing an idle bulk IN (e.g. a CDC stream polled with no data to send), this
becomes an unthrottled start-split -> complete-split -> NAK loop running at full
ISR rate. It starves the task context, so the host can no longer forward data to
the device, the device never has anything to return, and the endpoint wedges
permanently. This stalled host/cdc_msc_hid on stm32f723disco (HS host + hub) in
the DMA build, while the slave build was fine.

Mirror the slave path, which the Databook also sanctions (p73: channel disable is
allowed for NAK on split channels; 3.5 "Halting a Channel"): on a split IN NAK,
disable the channel and re-issue the start-split on the resulting halt interrupt
instead of re-enabling it immediately. The disable's arbitration/flush latency
throttles the poll and yields to the task, with no frame deferral so split timing
is preserved.

HIL host/cdc_msc_hid on stm32f723disco DMA build now passes. The change is
confined to the DMA split IN NAK path, so the slave build and device mode are
unaffected.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings June 5, 2026 05:40

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0c1d8dc90c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/portable/synopsys/dwc2/hcd_dwc2.c Outdated

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

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 addresses a HIL failure on stm32f723disco for the host/cdc_msc_hid example by (1) preventing STM32F7 UART RX starvation under heavy USB HS host interrupt load and (2) throttling a DWC2 buffer-DMA split bulk/control IN NAK retry path to avoid an interrupt storm when polling an idle full-speed device behind a hub.

Changes:

  • DWC2 HCD (DMA mode): disable split IN channels on NAK and re-arm on HALTED to avoid unthrottled NAK retry ISR loops.
  • STM32F7 BSP: increase UART RX ring buffer size and adjust NVIC priorities so UART RX can preempt USB OTG in bare-metal builds.
  • Documentation: fix a path in AGENTS.md.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.

File Description
src/portable/synopsys/dwc2/hcd_dwc2.c Adds split-IN NAK throttling logic in DMA mode via channel disable + re-arm on HALTED.
hw/bsp/stm32f7/family.c Adjusts UART RX buffering and interrupt priorities to prevent RX overrun under heavy USB host traffic.
AGENTS.md Updates a reference path string.

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

Comment thread src/portable/synopsys/dwc2/hcd_dwc2.c
Comment thread hw/bsp/stm32f7/family.c Outdated
@github-actions

github-actions Bot commented Jun 5, 2026

Copy link
Copy Markdown

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

file .text .rodata .data .bss size % diff
hcd_dwc2.c 5015 ➙ 5070 (+55) 25 1 513 ➙ 545 (+32) 5554 ➙ 5640 (+86) +1.5%
TOTAL 5015 ➙ 5070 (+55) 25 1 513 ➙ 545 (+32) 5554 ➙ 5640 (+86) +1.5%

Changes <1% in size

No entries.

No changes
file .text .rodata .data .bss size % diff
audio_device.c 2896 0 1259 1625 4515 +0.0%
cdc_device.c 1239 16 1092 735 1972 +0.0%
cdc_host.c 6413 487 15 994 7619 +0.0%
dcd_ch32_usbfs.c 1582 0 0 2444 4026 +0.0%
dcd_ch32_usbhs.c 1892 0 0 481 2373 +0.0%
dcd_ci_fs.c 1924 0 0 1290 3214 +0.0%
dcd_ci_hs.c 1756 0 0 1344 2534 +0.0%
dcd_da146xx.c 3067 0 0 144 3211 +0.0%
dcd_dwc2.c 4223 19 0 265 4506 +0.0%
dcd_eptri.c 2273 0 0 259 2532 +0.0%
dcd_ft9xx.c 3284 0 0 172 3456 +0.0%
dcd_khci.c 1952 0 0 1290 3242 +0.0%
dcd_lpc17_40.c 1481 0 0 648 1805 +0.0%
dcd_lpc_ip3511.c 1463 0 0 264 1683 +0.0%
dcd_mm32f327x_otg.c 1477 0 0 1290 2767 +0.0%
dcd_msp430x5xx.c 1801 0 0 176 1977 +0.0%
dcd_musb.c 2225 0 0 171 2396 +0.0%
dcd_nrf5x.c 2939 0 0 292 3231 +0.0%
dcd_nuc120.c 1096 0 0 78 1174 +0.0%
dcd_nuc121.c 1170 0 0 101 1270 +0.0%
dcd_nuc505.c 0 0 1533 157 1690 +0.0%
dcd_rp2040.c 840 0 764 653 2257 +0.0%
dcd_rusb2.c 2918 0 0 156 3074 +0.0%
dcd_samd.c 1036 0 0 266 1302 +0.0%
dcd_samg.c 1322 0 0 72 1394 +0.0%
dcd_stm32_fsdev.c 2558 0 0 291 2849 +0.0%
dfu_device.c 777 28 712 138 914 +0.0%
dfu_rt_device.c 157 0 134 0 157 +0.0%
dwc2_common.c 603 22 0 0 615 +0.0%
ecm_rndis_device.c 1059 0 1 2759 3818 +0.0%
ehci.c 2763 0 0 6274 7783 +0.0%
fsdev_common.c 180 0 0 0 180 +0.0%
hcd_ch32_usbfs.c 2491 0 0 502 2993 +0.0%
hcd_ci_hs.c 181 0 0 0 181 +0.0%
hcd_khci.c 2443 0 0 454 2897 +0.0%
hcd_musb.c 3071 0 0 157 3228 +0.0%
hcd_pio_usb.c 262 0 240 0 502 +0.0%
hcd_rp2040.c 1996 17 4 321 2338 +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 3257 0 1 420 3678 +0.0%
hid_device.c 1125 44 997 119 1244 +0.0%
hid_host.c 1241 0 0 1251 2492 +0.0%
hub.c 1384 8 8 30 1418 +0.0%
midi2_device.c 2634 52 1175 566 3222 +0.0%
midi2_host.c 1802 0 0 5921 7723 +0.0%
midi_device.c 1151 0 1007 624 1773 +0.0%
midi_host.c 1341 7 7 3635 4979 +0.0%
msc_device.c 2517 108 2281 806 3323 +0.0%
msc_host.c 1636 0 0 394 2030 +0.0%
mtp_device.c 1717 22 743 588 2312 +0.0%
ncm_device.c 1757 28 815 4354 6124 +0.0%
ohci.c 1925 0 0 2503 4428 +0.0%
printer_device.c 830 0 706 566 1394 +0.0%
rp2040_usb.c 386 35 619 11 1051 +0.0%
rusb2_common.c 160 0 16 0 176 +0.0%
tusb.c 455 0 387 3 457 +0.0%
tusb_fifo.c 854 0 486 0 849 +0.0%
typec_stm32.c 820 8 2 12 842 +0.0%
usbc.c 420 2 20 166 608 +0.0%
usbd.c 3519 58 91 355 3936 +0.0%
usbh.c 4967 57 82 1161 6233 +0.0%
usbtmc_device.c 2196 24 68 316 2544 +0.0%
vendor_device.c 641 0 534 565 1204 +0.0%
video_device.c 4443 5 1235 479 4914 +0.0%
TOTAL 119131 1047 17034 51677 172341 +0.0%

hathach and others added 3 commits June 5, 2026 12:56
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
codespell flagged ORE (USART overrun-error flag) as a typo; it is the correct register flag name (USART_ISR_ORE).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…demotion to UART_ID

Copilot + Codex flagged that the nak_disabled halt path could re-arm a channel during endpoint close (edpt_close also disables the channel), orphaning a DMA transfer. Complete the transfer instead of re-arming when xfer->closing is set.

Copilot also noted the bare-metal OTG priority demotion applied to all stm32f7 boards; scope it to boards with a UART console (UART_ID).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@hathach hathach requested a review from Copilot June 5, 2026 06:09
@hathach

hathach commented Jun 5, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Nice work!

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated no new comments.

@github-actions

github-actions Bot commented Jun 5, 2026

Copy link
Copy Markdown

MemBrowse Memory Report

Top 10 targets by memory change (%) (out of 2345 targets) View Project Dashboard →

target .text .rodata .data .bss total % diff
stlinkv3mini/hid_composite_freertos 4,492 → 4,716 (+224) 6,456 → 6,680 (+224) +3.5%
stlinkv3mini/audio_test_freertos 5,848 → 6,072 (+224) 7,840 → 8,064 (+224) +2.9%
stlinkv3mini/midi_test_freertos 6,220 → 6,444 (+224) 8,192 → 8,416 (+224) +2.7%
stlinkv3mini/audio_4_channel_mic_freertos 7,488 → 7,712 (+224) 9,480 → 9,704 (+224) +2.4%
stlinkv3mini/board_test 8,412 → 8,420 (+8) 388 → 612 (+224) 11,612 → 11,844 (+232) +2.0%
stlinkv3mini/dfu_runtime 13,916 → 13,924 (+8) 788 → 1,012 (+224) 17,796 → 18,028 (+232) +1.3%
stlinkv3mini/hid_generic_inout 14,984 → 14,992 (+8) 992 → 1,216 (+224) 18,900 → 19,132 (+232) +1.2%
stlinkv3mini/cdc_msc_freertos 8,380 → 8,604 (+224) 18,544 → 18,768 (+224) +1.2%
stlinkv3mini/hid_multiple_interface 15,628 → 15,636 (+8) 868 → 1,092 (+224) 19,588 → 19,820 (+232) +1.2%
stlinkv3mini/hid_boot_interface 15,688 → 15,696 (+8) 868 → 1,092 (+224) 19,604 → 19,836 (+232) +1.2%

@HiFiPhile

Copy link
Copy Markdown
Collaborator

I think it's worth to add a max NAK retry limit per frame like fsdev, especially on slave mode CPU is very high.

@hathach

hathach commented Jun 5, 2026

Copy link
Copy Markdown
Owner Author

I think it's worth to add a max NAK retry limit per frame like fsdev, especially on slave mode CPU is very high.

seem like I found one of the hil issue 😄

[693212.456278] usb 3-3.7: Not enough host controller resources for new device state.
[693212.456284] usb 3-3.7: can't set config #1, error -12
[693212.585359] xhci-pci-renesas 0000:01:00.0: Error while assigning device slot ID: No Slots Available Error
[693212.585856] xhci-pci-renesas 0000:01:00.0: Max number of devices this xHCI host supports is 32.
[693212.586188] usb 3-2-port4: couldn't allocate usb_device
[693212.707492] xhci-pci-renesas 0000:01:00.0: Error while assigning device slot ID: No Slots Available Error
[693212.707983] xhci-pci-renesas 0000:01:00.0: Max number of devices this xHCI host supports is 32.
[693212.708299] usb 3-4-port6: couldn't allocate usb_device
[693212.917310] xhci-pci-renesas 0000:01:00.0: Error while assigning device slot ID: No Slots Available Error
[693212.918133] xhci-pci-renesas 0000:01:00.0: Max number of devices this xHCI host supports is 32.
[693212.918801] usb 3-1.3-port4: couldn't allocate usb_device
[693213.040436] usb 3-1.3.2: USB disconnect, device number 106
[693213.224477] usb 3-3.1: new full-speed USB device number 111 using xhci-pci-renesas
[693213.333714] xhci-pci-renesas 0000:01:00.0: Error while assigning device slot ID: No Slots Available Error
[693213.334578] xhci-pci-renesas 0000:01:00.0: Max number of devices this xHCI host supports is 32.
[693213.335269] usb 3-1.3-port2: couldn't allocate usb_device

@HiFiPhile

Copy link
Copy Markdown
Collaborator

Max number of devices this xHCI host supports is 32.

Thats a lot haha.

@hathach

hathach commented Jun 5, 2026

Copy link
Copy Markdown
Owner Author

Max number of devices this xHCI host supports is 32.

Thats a lot haha.

half the device is actually jlink/flasher :(

hathach and others added 3 commits June 8, 2026 08:55
Move the USART RX NVIC priority into the OPT_OS_NONE and FreeRTOS init
branches alongside the OTG demotion, so the relative ordering is set in
one place. Under FreeRTOS, OTG drops to max-syscall+1 so the USART RX ISR
(at max-syscall) preempts it; bare-metal keeps OTG=1 / USART=0.

Guard the USARTn_IRQn references with UART_ID since that symbol is only
defined for boards with a UART console; OTG demotion stays unconditional
(all stm32f7 boards define UART_ID, so behavior is unchanged).

Validated on stm32f723disco HIL (both flag variants): Total failed: 0.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
In buffer-DMA mode a split bulk-OUT XactErr was retried immediately, so 3
back-to-back failures could exhaust HCD_XFER_ERROR_MAX and fail the transfer,
dropping a data segment (a rare CDC-echo-truncation mode for a full-speed
device behind a hub).

Mirror the slave path: on a split-OUT XactErr, rewind the buffer pointers,
channel_disable() the channel, and re-issue the start-split on the resulting
halt, so the disable's flush/arbitration latency gives the hub's transaction
translator a recovery gap instead of immediately re-firing the failing
transaction. Scoped to split (hcsplt.split_en); non-split XactErr keeps the
immediate re-init retry per Programming Guide v4.20a 5.1.1.2. The nak_disabled
flag is generalized to retry_disabled, shared by the IN-NAK and OUT-XactErr
throttles.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
handle_channel_out_dma() only handled NAK when bundled with XACT_ERR; a pure
split-OUT NAK left the channel halted and the transfer stalled, dropping data.
This was the dominant cause of intermittent CDC echo truncation for a
full-speed device behind a hub (isolation on stm32f723disco HIL, raw -r1:
NAK-fix-only 0/10 vs XactErr-fix-only 2/10).

Per the DWC2 Programming Guide v4.20a 5.1.4.2, on a split OUT NAK rewind the
buffer pointers and retry the start-split. Scoped to split (hcsplt.split_en):
non-split OUT NAK is auto-handled by the core (5.1.2.2).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@hathach hathach force-pushed the claude/stm32f7-host-uart-rx-priority branch from 3cf4d1f to 494f602 Compare June 8, 2026 16:01
@claude

claude Bot commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

Code review

Found 1 style issue: missing spaces around the binary + operator in configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY+1 (lines 159-160 of the stm32f7 family.c change). The project clang-format config (LLVM base style) requires spaces around binary operators, and pre-commit would flag this. Suggested fix: configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY + 1 (with spaces).

No bugs found. Checked for CLAUDE.md compliance.

@claude

claude Bot commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

Code review

1 issue found (style/clang-format)

Missing spaces around binary + operator — lines 159-160 of the stm32f7 BSP change (FreeRTOS OTG priority demotion):

Current:

NVIC_SetPriority(OTG_FS_IRQn, configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY+1);
NVIC_SetPriority(OTG_HS_IRQn, configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY+1);

Suggested:

NVIC_SetPriority(OTG_FS_IRQn, configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY + 1);
NVIC_SetPriority(OTG_HS_IRQn, configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY + 1);

The project uses LLVM-based clang-format which requires spaces around binary operators. Running pre-commit run --all-files would flag these two lines.


No bugs found. Checked for CLAUDE.md compliance.

…ions

channel_disable() is a no-op for periodic split channels, so throttling a
periodic split-OUT XactErr through it would never raise the halt that re-arms
retry_disabled, wedging the channel. Guard the throttle with !channel_is_periodic
(matching the IN NAK throttle); periodic and non-split fall back to the immediate
re-init retry. No effect on the bulk CDC path (non-periodic).

Also fix references (Databook -> Programming Guide v4.20a 3.5 "Halting a Channel"
p73; 5.1.1.2 -> 5.1.2.3 for non-split OUT) and tighten the throttle comments.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Jun 9, 2026

Copy link
Copy Markdown

Hardware-in-the-loop (HIL) Test Report

hfp-iar

Board cdc_dual_ports dfu cdc_msc cdc_msc_throughput audio_test_freertos dfu_runtime cdc_msc_freertos hid_boot_interface msc_dual_lun hid_generic_inout printer_to_cdc midi_test mtp
stm32l412nucleo C 627k/385k M 845k/816k
stm32f746disco
lpcxpresso43s67

Legend: ✅ pass · ❌ fail · ⚪ skipped · blank not run

hfp.json

Board cdc_dual_ports dfu cdc_msc cdc_msc_throughput audio_test_freertos dfu_runtime cdc_msc_freertos hid_boot_interface msc_dual_lun hid_generic_inout printer_to_cdc midi_test mtp
stm32l412nucleo C 627k/385k M 841k/816k
stm32f746disco
lpcxpresso43s67

Legend: ✅ pass · ❌ fail · ⚪ skipped · blank not run

tinyusb.json

Board cdc_dual_ports dfu cdc_msc cdc_msc_throughput audio_test_freertos dfu_runtime cdc_msc_freertos hid_boot_interface msc_dual_lun hid_generic_inout printer_to_cdc midi_test mtp host_info_to_device_cdc cdc_msc_hid msc_file_explorer msc_file_explorer_freertos device_info hid_composite_freertos
ek_tm4c123gxl C 762k/862k M 651k/874k
espressif_p4_function_ev rd 409KB/s
espressif_p4_function_ev-f1_CFG_TUD_DWC2_DMA_ENABLE_CFG_TUH_DWC2_DMA_ENABLE rd 409KB/s
espressif_s3_devkitm rd 409KB/s
espressif_s3_devkitm-f1_CFG_TUD_DWC2_DMA_ENABLE_CFG_TUH_DWC2_DMA_ENABLE
feather_nrf52840_express C 488k/555k M 562k/553k
max32666fthr C 7M/14.3M M 14.9M/20.6M
metro_m4_express C 483k/403k M 552k/424k
mimxrt1015_evk C 14.2M/8.3M M 25.2M/20.7M
mimxrt1064_evk C 14.1M/8M M 23.2M/18.5M rd 1368KB/s
lpcxpresso11u37 C 436k/312k M 508k/421k
ra4m1_ek C 616k/444k M 581k/584k
raspberry_pi_pico-f1_CFG_TUH_RPI_PIO_USB C 462k/459k M 603k/960k
raspberry_pi_pico_w rd 1106KB/s rd 1022KB/s
raspberry_pi_pico2 rd 1108KB/s rd 1022KB/s
adafruit_fruit_jam C 666k/492k M 649k/962k rd 62KB/s rd 62KB/s
stm32f072disco C 450k/291k M 560k/523k
stm32f407disco C 845k/520k M 878k/1M
stm32f723disco C 1M/733k M 1.1M/1M rd 18078KB/s rd 4096KB/s
stm32f723disco-f1_CFG_TUH_DWC2_DMA_ENABLE C 966k/592k M 1.1M/1M rd 19418KB/s rd 4096KB/s
stm32h743nucleo C 538k/525k M 511k/511k
stm32h743nucleo-f1_CFG_TUD_DWC2_DMA_ENABLE C 518k/349k M 601k/590k
stm32g0b1nucleo C 531k/481k M 450k/537k
stm32l476disco C 523k/532k M 520k/529k
stm32u083nucleo C 632k/403k M 731k/538k

Legend: ✅ pass · ❌ fail · ⚪ skipped · blank not run

@hathach

hathach commented Jun 9, 2026

Copy link
Copy Markdown
Owner Author

I think it's worth to add a max NAK retry limit per frame like fsdev, especially on slave mode CPU is very high.

will try to do that with follow up PR. I am trying to get this merge while fighting with hil on ci rig

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.

3 participants