10 апреля 2021

Как я Fiio BTR5 в Linux прошивал.

 
Было у меня устройство Fiio BTR5 - усилитель для наушников и по совместительству bluetooth-гарнитура и внешняя звуковая карта. Изначально устройство поставлялось с прошивкой версии 1.06. Её можно было обновить до версии 2.0 программой с сайта производителя. Совсем новые устройства поставляются с прошивкой версии 2.1. Вот последнее мне и не давало покоя.

На китайском сайте производителя можно найти установщик для версии 2.1. На той же странице написано, что версия 2.1 отличается от 2.0 только тем, что её прошивают на заводе. Никаких новых функций и исправлений она не несёт. Но хочется же самого свежего!

Сначала я попробовал обновить устройство утилитой производителя в Windows. Перевёл его в режим DFU следующим способом:
  1. Включить устройство самой маленькой кнопкой на корпусе;
  2. Перевести устройство в режим сопряжения удержанием средней кнопки до появления надписи "PAIRING";
  3. Нажать и удерживать среднюю кнопку и кнопку увеличения громкости до короткого появления надписи "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 секунд. После этого устройство включится, но все настройки будут сброшены до заводских.

-->