Перейти до вмісту

USB device firmware update class

Матеріал з Вікіпедії — вільної енциклопедії.

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

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

Є багато способів перевести пристрій у режим DFU.

  • затиснути кнопку BOOT (GPIO0 для ESP32, BOOT0 для STM32[1]) і натиснути кнопку 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 файлу.

Примітки

[ред. | ред. код]

Посилання

[ред. | ред. код]