Клас USB-пристроїв, що оновлюють прошивку (або USB DFU) — клас USB пристроїв, що можуть отримувати свою «прошивку» по відкритому протоколу USB DFU.

З 2010 року з'явилось багато мікроконтролерних плат, основною периферією яких є USB. Щоб позбавити розробників необхідності придбання спеціалізованих плат для доступу до відлагоджувальних портів таких як JTAG та унеможливлювати «оцеглинювання» пристроїв, виробники добавили в ROM окремий завантажувач, котрий працює з USB протоколом DFU та вміє «прошивати» власне вбудоване програмне забезпечення.

Є багато способів перевести пристрій у режим DFU. затиснути кнопку BOOT (GPIO0 для ESP32, BOOT0 для STM32https://www.st.com/resource/en/application_note/an3156-how-to-use-usb-dfu-protocol-in-bootloader-on-stm32-mcus-stmicroelectronics.pdf) і натиснути кнопку RESET (вимкнути і ввімкнути). послати USB команду DFU_DETACH, яка припинить всі поточні операції з пристроєм і змінить його клас на DFU. деякі пристрої переходять в режим DFU одразу після їх вимикання.

Протокол DFU Команди: DFU_DETACH — посилається хостом працюючому пристрою для його переведення в режим DFU. DFU_DNLOAD — передає блок прошивки з хоста на пристрій. DFU_UPLOAD — передає блок прошивки з пристрою на хост. DFU_GETSTATUS — посилається хостом, щоб дізнатись чи пристрій закінчив запис і готовий отримати наступний блок.

UF2 бутлоадер Для подальшого спрощення процесу прошивання, Microsoft запропонувала новий формат файлу прошивки .UF2 в якому вказуються адреси для окремих шматків прошивки.

А також окремий UF2 бутлоадер (який запускається або з прошивки або затисканням іншої комбінації кнопок під час включення). Цей бутлоадер є складнішим і не знаходиться в ROM, він декларує клас USB MSC і емулює віртуальний диск. Після копіювання на нього файлу прошивки стандартним копіюванням операційної системи хоста, здійснюється прошивання. Цей метод більш гнучкий і дозволяє обновити окремі розділи прошивки чи сам UF2 бутлоадер, оскільки це залежить лише від вмісту .UF2 файлу.

Примітки

Посилання https://dfu-util.sourceforge.net https://devanlai.github.io/projects/webdfu/ — DFU через WebUSB