| # DFU Runtime | |
| A minimal device that exposes a DFU runtime interface, advertising to the host that it can be switched into DFU (bootloader) mode. | |
| ## What it does | |
| - Exposes a single DFU runtime interface alongside normal operation. | |
| - On a DFU_DETACH request, it does not actually reboot into a bootloader; instead it speeds up the LED blink as an indicator (this example is intentionally minimal). | |
| - Provides a BOS / Microsoft OS 2.0 descriptor so Windows binds the WinUSB driver. | |
| - LED blink rate indicates bus state (not mounted / mounted / suspended / DFU detach). | |
| ## USB Descriptors | |
| | Interface | Class driver | | |
| |-----------|--------------| | |
| | 0 | DFU Runtime | | |
| ## Configuration | |
| Notable `tusb_config.h` settings: | |
| ```c | |
| #define CFG_TUD_DFU_RUNTIME 1 | |
| ``` | |
| ## Building | |
| CMake: | |
| ```bash | |
| mkdir build && cd build | |
| cmake -DBOARD=raspberry_pi_pico .. | |
| cmake --build . | |
| ``` | |
| Make: | |
| ```bash | |
| make BOARD=raspberry_pi_pico all | |
| ``` | |
| ## Try it | |
| List the device; it appears in Runtime mode: | |
| ```bash | |
| dfu-util -l | |
| ``` | |
| Request a switch to DFU mode: | |
| ```bash | |
| dfu-util -e | |
| ``` | |
| This sends a DETACH request. Since the example is minimal it does not enter a real bootloader; it instead changes the LED to a fast blink as confirmation. |