Skip to content

Fix DFU descriptor version from 1.0.1 to 1.1.0#3480

Merged
hathach merged 7 commits intomasterfrom
copilot/fix-dfu-descriptor-issue
Feb 3, 2026
Merged

Fix DFU descriptor version from 1.0.1 to 1.1.0#3480
hathach merged 7 commits intomasterfrom
copilot/fix-dfu-descriptor-issue

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Feb 3, 2026

Describe the PR
DFU functional descriptors were advertising version 0x0101 (1.0.1) despite TinyUSB implementing DFU 1.1 features. Per USB BCD format (0xJJMN for version JJ.M.N), version 1.1.0 is 0x0110.

Changed in src/device/usbd.h:

// Before
U16_TO_U8S_LE(0x0101)

// After  
U16_TO_U8S_LE(0x0110)

Both TUD_DFU_RT_DESCRIPTOR (line 822) and TUD_DFU_DESCRIPTOR (line 836) updated.

Additional context
Reference: DFU 1.1 specification §4.1.3 and USB 2.0 specification §9.6.1

Note: Zephyr build failures are due to an upstream Zephyr bug (zephyrproject-rtos/zephyr#103302) and are not addressed in this PR.

Original prompt

Fix this user feedback, double check with specs

Am I correct in thinking tinyUSB supports DFU 1.1? If so, should the descriptor below not be advertising 0x0110 (i.e. 1.1) instaed of 0x0101 (1.0.1)?

// DFU runtime descriptor
// Interface number, string index, attributes, detach timeout, transfer size
#define TUD_DFU_RT_DESCRIPTOR(_itfnum, _stridx, _attr, _timeout, _xfer_size) \
  /* Interface */ \
  9, TUSB_DESC_INTERFACE, _itfnum, 0, 0, TUD_DFU_APP_CLASS, TUD_DFU_APP_SUBCLASS, DFU_PROTOCOL_RT, _stridx, \
  /* Function */ \
  9, DFU_DESC_FUNCTIONAL, _attr, U16_TO_U8S_LE(_timeout), U16_TO_U8S_LE(_xfer_size), U16_TO_U8S_LE(0x0101)

See section 4.1.3 of https://www.usb.org/sites/default/files/DFU_1.1.pdf and the following from section 9.6.1 from the USB 2.0 specification

The bcdUSB field contains a BCD version number. The value of the bcdUSB field is 0xJJMN for version
JJ.M.N (JJ – major version number, M – minor version number, N – sub-minor version number), e.g.,
version 2.1.3 is represented with value 0x0213 and version 2.0 is represented with a value of 0x0200.


✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

Copilot AI and others added 2 commits February 3, 2026 08:20
Co-authored-by: hathach <249515+hathach@users.noreply.github.com>
Co-authored-by: hathach <249515+hathach@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix DFU runtime descriptor version to 1.1 Fix DFU descriptor version from 1.0.1 to 1.1.0 Feb 3, 2026
Copilot AI requested a review from hathach February 3, 2026 08:26
Copy link
Copy Markdown
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.

@copilot remove all other changes, only keep usbd.h changes

Copilot AI and others added 2 commits February 3, 2026 08:32
Co-authored-by: hathach <249515+hathach@users.noreply.github.com>
Copy link
Copy Markdown
Contributor Author

Copilot AI commented Feb 3, 2026

@copilot remove all other changes, only keep usbd.h changes

Done. Removed all other changes, only usbd.h changes remain. (commit a7b209d)

Copilot AI requested a review from hathach February 3, 2026 08:35
@hathach
Copy link
Copy Markdown
Owner

hathach commented Feb 3, 2026

@codex review

@chatgpt-codex-connector
Copy link
Copy Markdown

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

ℹ️ 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".

@github-actions
Copy link
Copy Markdown

github-actions bot commented Feb 3, 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

Copy link
Copy Markdown
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.

Co-authored-by: hathach <249515+hathach@users.noreply.github.com>
Copy link
Copy Markdown
Contributor Author

Copilot AI commented Feb 3, 2026

@copilot fix zephyr build failed https://github.com/hathach/tinyusb/actions/runs/21622974282/job/62316454733?pr=3480

Fixed. The Zephyr build was failing because newer Zephyr versions require the full board qualifier format. Updated from nrf52840dk to nrf52840dk/nrf52840. (commit 8a9e493)

Copilot AI changed the title Fix DFU descriptor version from 1.0.1 to 1.1.0 Fix DFU descriptor version from 1.0.1 to 1.1.0 and Zephyr build Feb 3, 2026
Copilot AI requested a review from hathach February 3, 2026 08:54
@HiFiPhile
Copy link
Copy Markdown
Collaborator

@hathach Zephyr build alias is bugged:

zephyrproject-rtos/zephyr#103302

@hathach
Copy link
Copy Markdown
Owner

hathach commented Feb 3, 2026

@hathach Zephyr build alias is bugged:

zephyrproject-rtos/zephyr#103302

ah thank, ok. Then we just make changes to usbd.h only, we can have the build failed for this PR.

@hathach
Copy link
Copy Markdown
Owner

hathach commented Feb 3, 2026

@copilot revert the zerphyr fix, since it is not our bug.

Co-authored-by: hathach <249515+hathach@users.noreply.github.com>
Copy link
Copy Markdown
Contributor Author

Copilot AI commented Feb 3, 2026

@copilot revert the zerphyr fix, since it is not our bug.

Reverted the Zephyr fix. Only usbd.h changes remain now. (commit d1486d4)

Copilot AI changed the title Fix DFU descriptor version from 1.0.1 to 1.1.0 and Zephyr build Fix DFU descriptor version from 1.0.1 to 1.1.0 Feb 3, 2026
@hathach hathach marked this pull request as ready for review February 3, 2026 10:23
Copilot AI review requested due to automatic review settings February 3, 2026 10:23
Copy link
Copy Markdown
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 corrects the DFU functional descriptor version from 0x0101 (1.0.1) to 0x0110 (1.1.0) to accurately reflect that TinyUSB implements DFU 1.1 features. The USB BCD format (0xJJMN for version JJ.M.N) requires version 1.1.0 to be represented as 0x0110, not 0x0101.

Changes:

  • Updated DFU runtime descriptor version from 0x0101 to 0x0110
  • Updated DFU mode descriptor version from 0x0101 to 0x0110

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

Copy link
Copy Markdown
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.

ignore zephyr build for now

@hathach hathach merged commit 707fb52 into master Feb 3, 2026
206 of 207 checks passed
@hathach hathach deleted the copilot/fix-dfu-descriptor-issue branch February 3, 2026 11:44
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.

4 participants