Было у меня устройство Fiio BTR5 - усилитель для наушников и по совместительству bluetooth-гарнитура и внешняя звуковая карта. Изначально устройство поставлялось с прошивкой версии 1.06. Её можно было обновить до версии 2.0 программой с сайта производителя. Совсем новые устройства поставляются с прошивкой версии 2.1. Вот последнее мне и не давало покоя.
На китайском сайте производителя можно найти установщик для версии 2.1. На той же странице написано, что версия 2.1 отличается от 2.0 только тем, что её прошивают на заводе. Никаких новых функций и исправлений она не несёт. Но хочется же самого свежего!
Сначала я попробовал обновить устройство утилитой производителя в Windows. Перевёл его в режим DFU следующим способом:
- Включить устройство самой маленькой кнопкой на корпусе;
- Перевести устройство в режим сопряжения удержанием средней кнопки до появления надписи "PAIRING";
- Нажать и удерживать среднюю кнопку и кнопку увеличения громкости до короткого появления надписи "DFU" на экране.
После подключения к компьютеру устройство успешно определилось системой, но программа прошивать его отказывалась. Если не получается в Windows, то пойдём в Linux.
С форума 4PDA я узнал о существовании программы dfu-util, которая используется для загрузки прошивки по USB в различные устройства, которые поддерживают режим DFU. В репозитории Debian есть версия 0.9, с сайта программы можно скачать исходный код версии 0.10. Для сборки требуется библиотека libusb версии 1.0. Я использовал версию 0.10-dev из git-репозитория "git://git.code.sf.net/p/dfu-util/dfu-util".
Для обновления устройства нужно извлечь из архива образ прошивки и положить его по удобному пути. Файл называется "BTR5-FW2.1.C.dfu". Само устройство надо перевести в режим DFU по алгоритму выше и подключить к компьютеру. Если всё сделано правильно, то в выводе "lsusb" должна появиться похожая строка:
Bus 001 Device 004: ID 0a12:ffff Cambridge Silicon Radio, Ltd USB Bluetooth Device in DFU State
Теперь устройство можно прошивать:
$ sudo dfu-util -d 0a12:ffff -D BTR5-FW2.1.C.dfu dfu-util 0.10-dev Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc. Copyright 2010-2021 Tormod Volden and Stefan Schmidt This program is Free Software and has ABSOLUTELY NO WARRANTY Please report bugs to http://sourceforge.net/p/dfu-util/tickets/ Opening DFU capable USB device... Device ID 0a12:ffff Run-Time device DFU version 0101 Claiming USB DFU (Run-Time) Interface... Setting Alternate Interface zero... Determining device status... DFU state(0) = appIDLE, status(0) = No error condition is present Device really in Run-Time Mode, send DFU detach request... Resetting USB... Opening DFU USB Device... Claiming USB DFU Interface... Setting Alternate Interface #0 ... Determining device status... DFU state(2) = dfuIDLE, status(0) = No error condition is present DFU mode device DFU version 0101 Device returned transfer size 1023 Copying data from PC to DFU device Download [=========================] 100% 1090792 bytes Download done. dfu-util: unable to read DFU status after completion (LIBUSB_ERROR_TIMEOUT)
В самом конце может появиться сообщение с текстом "LIBUSB_ERROR_TIMEOUT". Если я правильно понял, то после установки прошивки устройству должна отправляться команда на перезагрузку, но программа "dfu-util" этого не делает. Тем не менее прошивка успешно устанавливается.
Для перевода устройства в штатный режим работы его надо сбросить долгим удержанием кнопки включения. Держать надо не менее 10 секунд. После этого устройство включится, но все настройки будут сброшены до заводских.