Сначала суть проблемы. Иногда у рекордеров ProDVR/HMDVR слетает прошивка. Это может произойти во время включения, во время обновления прошивки или по другой причине. Устройство просто перестает подавать признаки жизни и не реагирует на органы управления. Именно это у меня и случилось при обновлении прошивки DVR на шлеме Eachine VR D2 и еще раньше на HMDVR.
Для восстановления потребуется пара вещей, которые наверняка есть у большинства FPV-шников. Это китайский клон Arduino Nano и регулятор напряжения на 3.3 вольта. Последний может быть любым. Таким, таким, таким, таким или таким. В общем, лишь бы мог преобразовывать напряжение из 5 вольт в 3.3 вольта.
Прошивка содержится в чипе памяти MX25L1605, который может работать в диапазоне напряжений 2.7-3.6 вольт. Более высокое напряжение убьет чип. Это важно!
Восстановление проходит в два этапа: создание программатора и собственно прошивка чипа памяти. Программатором будет выступать немного модифицированная Arduino Nano. Сделал так, чтобы Arduino Nano могла работать от напряжения 3.3 вольта. Для этого просто удалил диод, который стоит на входе питания, и в этот разрыв подключил регулятор напряжения на 3.3 вольта. Если регулятор напряжения с подстроечным резистором, то надо заранее выставить выходное напряжение в диапазоне 3.0-3.3 вольта. Не забываем, это важно!
Затем залил в Arduino Nano прошивку frser-duino, чтобы получился программатор для чипа памяти. Так как у меня на компьютере используется Ubuntu, то и команды в первую очередь буду давать под нее. Но и про пользователей Windows не забуду, продублирую операции:)
Для Ubuntu нужно установить дополнительные программы flashrom и avrdude. Затем создать каталог "recoverdvr" и скачать туда все необходимое. Просто открываю терминал и выполняю следующий набор команд:
# sudo apt-get install flashrom avrdude
# mkdir ~/recoverdvr
# cd ~/recoverdvr
# wget http://mcheli.ru/files/prodvr/frser-duino.hex
# wget http://mcheli.ru/files/prodvr/prodvr-dump.hex
Все готово для начала создания программатора. Подключаю модифицированную Arduino Nano и выполняю в терминале команду прошивки:
# avrdude -c arduino -p m328p -P /dev/ttyUSB0 -b 57600 -U flash:w:frser-duino.hex
Результат должен получиться таким:
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "frser-duino.hex"
avrdude: input file frser-duino.hex auto detected as Intel Hex
avrdude: writing flash (1368 bytes):
Writing | ################################################## | 100% 0.43s
avrdude: 1368 bytes of flash written
avrdude: verifying flash memory against frser-duino.hex:
avrdude: load data flash data from input file frser-duino.hex:
avrdude: input file frser-duino.hex auto detected as Intel Hex
avrdude: input file frser-duino.hex contains 1368 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 0.33s
avrdude: verifying ...
avrdude: 1368 bytes of flash verified
avrdude: safemode: Fuses OK (E:00, H:00, L:00)
avrdude done. Thank you.
Вот и готов программатор! Легко, не правда ли?
Для Windows все будет не так просто и несколькими командами не отделаешься:) Сначала нужно скачать и установить драйвера для китайского клона Arduino Nano и убедить Windows в их безопасности. У меня это получилось только через перезагрузку и выбор загрузки без проверки подписи драйверов. Подключил Arduino Nano и в диспетчере устройств в разделе "Порты (COM и LPT)" нашел устройство "USB SERIAL CH340", а в скобочках рядом был указан виртуальный COM-порт. У меня был "COM3". Запомните этот номер порта, он потребуется ниже.
Затем создал каталог "c:\recoverdvr" и в дальнейшем все складывал туда. Скачал flashrom в эту папочку, затем скачал XLoader и распаковал так же в эту папочку. Скачал файлы прошивок frser-duino.hex и prodvr-dump.hex в ту же папочку "c:\recoverdvr".
В Windows программа XLoader - это просто оболочка для запуска программы avrdude, которую использовал в Ubuntu. Запускаем XLoader.exe, в поле "Hex file" выбираем файл прошивки frser-duino.hex. Остальное, как на скриншоте, кроме поля "COM port". Тут надо указать тот порт, который нужно было запомнить выше.
Затем жму кнопку Upload и, если все в порядке, в нижней строке будет сообщение "1368 bytes uploaded". Все, теперь и тут получился программатор:) На эту процедуру у меня ушло в несколько раз больше времени, чем в случае с Ubuntu.
Раз программатор готов, надо его проверить. Для начала нужно измерить напряжение на выводах D10 и D11 программатора. Должно быть тоже самое напряжение, что и поступает на модифицированную Arduino Nano с регулятора напряжения, то есть 3.3 вольта. Если с этим в порядке, то надо проверить возможность работы программы flashrom с программатором. В Ubuntu выполняю следующую команду:
# flashrom --programmer serprog:dev=/dev/ttyUSB0:115200
Вывод команды будет такой:
flashrom v0.9.9-rc1-r1942 on Linux 4.4.0-22-generic (x86_64)
flashrom is free software, get the source code at https://flashrom.org
Calibrating delay loop... OK.
serprog: Programmer name is "frser-duino"
No EEPROM/flash device found.
Note: flashrom can never write if the flash chip isn't found automatically.
А в Windows запускаю командную строку CMD и выполняю аналогичную команду. Не забываем указать в параметрах свой, запомненный ранее, номер COM-порта:
c:\recoverdvr\mingw32-w64-flashrom-r1781.exe --programmer serprog:dev=COM3:115200
В этом случае вывод будет такой:
flashrom v0.9.7-r1781 on Windows 6.1 (x86)
flashrom is free software, get the source code at http://www.flashrom.org
Calibrating delay loop... OK.
serprog: Programmer name is "frser-duino"
Found Generic flash chip "unknown SPI chip (RDID)" (0 kB, SPI) on serprog.
===
This flash part has status NOT WORKING for operations: PROBE READ ERASE WRITE
The test status of this chip may have been updated in the latest development
version of flashrom. If you are running the latest development version,
please email a report to flashrom@flashrom.org if any of the above operations
work correctly for you with this flash part. Please include the flashrom
output with the additional -V option for all operations you tested (-V, -Vr,
-VE, -Vw), and mention which mainboard or programmer you tested.
Please mention your board in the subject line. Thanks for your help!
No operations were specified.
Во всем этом пока что интересна только одна строка "serprog: Programmer name is "frser-duino"". Это значит, что программа flashrom может общаться с новоиспеченным программатором.
Осталось только подпаять программатор к чипу памяти и наконец-то восстановить в нем прошивку. Схема подключения получается следующая:
В собранном виде оно выглядит так:
Чип памяти довольно крупный, подпаивать провода к нему легко. Если все готово, то пробую залить прошивку. В Ubuntu это делается такой командой:
# flashrom --programmer serprog:dev=/dev/ttyUSB0:115200 -c MX25L1605 -w prodvr-dump.hex
Программа flashrom работает довольно долго, минут 12-15. Вот результат работы:
flashrom v0.9.9-rc1-r1942 on Linux 4.4.0-22-generic (x86_64)
flashrom is free software, get the source code at https://flashrom.org
Calibrating delay loop... OK.
serprog: Programmer name is "frser-duino"
Found Macronix flash chip "MX25L1605" (2048 kB, SPI) on serprog.
Reading old flash chip contents... done.
Erasing and writing flash chip... FAILED at 0x00001000! Expected=0xff, Found=0x2b, failed byte count from 0x00000000-0x0000ffff: 0xed13
ERASE FAILED!
Reading current flash chip contents... done. Looking for another erase function.
Erase/write done.
Verifying flash... VERIFIED.
Как видно, в чип памяти удачно залилась прошивка. Ура!
Теперь тоже самое проделаю в Windows. В ранее открытой командной строке ввожу следующую похожую команду. Снова не забываем в ней заменить номер COM-порта на свой:
c:\recoverdvr\mingw32-w64-flashrom-r1781.exe --programmer serprog:dev=COM3:115200 -c MX25L1605 -w c:\recoverdvr\prodvr-dump.hex
flashrom v0.9.7-r1781 on Windows 6.1 (x86)
flashrom is free software, get the source code at http://www.flashrom.org
Calibrating delay loop... OK.
serprog: Programmer name is "frser-duino"
Found Macronix flash chip "MX25L1605" (2048 kB, SPI) on serprog.
Reading old flash chip contents... done.
Erasing and writing flash chip...
Warning: Chip content is identical to the requested image.
Erase/write done.
Прошивка и здесь удачно залилась!
Вот и весь процесс восстановления. Теперь, отпаяв все провода, можно попробовать залить обновленную прошивку обычным способом, через карту памяти. Лучше это сделать сразу, пока не производилось никаких настроек через меню DVR, тогда шансов на удачное обновление прошивки будет больше. Если DVR после обновления снова "окирпичится", то можно повторить весь процесс снова:) Удачной прошивки!
Дошёл до последнего этапа. Программатор прошил, чип распознал.
ОтветитьУдалитьНо на строке "Reading old flash chip contents..." виснет наглухо. Ждал больше часа, но так ничего и не произошло :(
Можно попробовать запустить эту команду с дополнительной опцией "-V", будет больше информации на экране. Может тогда будет понятно, что происходит. Еще можно попробовать полностью почистить чип командой "c:\recoverdvr\mingw32-w64-flashrom-r1781.exe --programmer serprog:dev=COM3:115200 -c MX25L1605 -E".
УдалитьЗапустил с опцией -V
УдалитьОбнаруживает чип, читает его регистр и зависает на чтении данных:
Found Macronix flash chip "MX25L1605" (2048 kB, SPI) on serprog.
Chip status register is 0x00.
Chip status register: Status Register Write Disable (SRWD, SRP, ...) is not set
Chip status register: Bit 6 is not set
Chip status register: Bit 5 is not set
Chip status register: Block Protect 2 (BP2) is not set
Chip status register: Block Protect 1 (BP1) is not set
Chip status register: Block Protect 0 (BP0) is not set
Chip status register: Write Enable Latch (WEL) is not set
Chip status register: Write In Progress (WIP/BUSY) is not set
Reading old flash chip contents...
И всё. Виснет насовсем.
Иногда происходит при попытке стереть или прочитать происходит следующее:
Probing for Macronix MX25L1605, 2048 kB: probe_spi_rdid_generic: id1 0xc2, id2 0
x2015
Found Macronix flash chip "MX25L1605" (2048 kB, SPI) on serprog.
Chip status register is 0x00.
Chip status register: Status Register Write Disable (SRWD, SRP, ...) is not set
Chip status register: Bit 6 is not set
Chip status register: Bit 5 is not set
Chip status register: Block Protect 2 (BP2) is not set
Chip status register: Block Protect 1 (BP1) is not set
Chip status register: Block Protect 0 (BP0) is not set
Chip status register: Write Enable Latch (WEL) is not set
Chip status register: Write In Progress (WIP/BUSY) is not set
Reading old flash chip contents... Error: invalid response 0xFF from device
FAILED.
Error: invalid response 0xFF from device
serprog: serprog_shutdown: Warning: could not disable output buffers
Кстати, попробовал для интереса другой чип, оказавшийся под рукой: AT45DB041B. Результат получился такой же:
Found Atmel flash chip "AT45DB041D" (528 kB, SPI) on serprog.
Reading flash... Error: invalid response 0xFF from device
spi_read_at45db: error sending read command!
Read operation failed!
FAILED.
Error: invalid response 0xFF from device
serprog: serprog_shutdown: Warning: could not disable output buffers
Похоже, проблема может быть не в чипе, а в программаторе :(
Так что заказал пока новый ProDVR, если не получится оживить этот :)
Тоже было бесконечно "Reading old flash chip contents...", оказалось надо запускать командную строку с правами администратора. Я еще подумал, светодиоды TX/RX что-то редко мигают (раз в минут 5), а как запустил от администратора сразу замигали часто.
УдалитьНовый DVR уже пришёл, но хотелось ради спортивного интереса всё же восстановить тот.
ОтветитьУдалитьПроблема оказалась в программаторе, так и не удалось заставить его писать и читать флешку. Поэтому пришлось, вооружившись даташитом, написать простенькую программу и уже ею посылать команды записи и файл прошивки на микросхему, и тогда всё удалось :)
Принципиально ли запитывать всю ардуину от 3.3В или можно просто напрямую на чип MX25L1605 подать напряжение со стабилизатора DC/DC ?
ОтветитьУдалитьДумаю, что да, нужно всю ардуину запитывать, ибо у нее с выходов идет это напряжение.
УдалитьIf anybody is searching for the same instructions in English, follow this link:
ОтветитьУдалитьhttps://rcmontis.blogspot.com/2016/11/Restoring-bricked-Eachine-ProDVR-after-firmware-update-for-PAL-fix.html
Спасибо за статью, прошивку восстановил без проблем!
ОтветитьУдалитьВот только при восстоновления что то подпалил походу, критически пропала дальность приема, коптер отлетел на 20 метров и видеосвязь теряется, подскажите пожалуйста, что это может быть - хана приемникам? спасибо
Там DVR и приемник никак не связаны. Может при сборке что-то повредилось?
УдалитьПонимаю что прошивка DVR не причем! Визуально все целое. Шлем ловит видеосигнал очень хорошо на расстоянии до 20 метров, причем диверстии работает, если верить переключением светодиодов, несколько больше 20 метров - видео резко пропадает. Интересно, что без антенн очки ловят видео всего на 5 метров меньше, метров 10-15 то есть при вкручивании антенн дальность почти не увеличивается. RX5808 - может с ними что произошло? Судя по Вашему блогу, Вы достаточно хорошо понимаете в подобной электронике, буду рад любому совету(с чего начать) неохота шлем в утиль отправлять(
УдалитьСначала я бы проверил передатчик, попробовал бы шлем с другим квадриком. Затем бы проверил питание на шлеме, проверил бы питание на самих приемниках. Там должно быть 3.3В. Распиновка ищется за пару секунд по запросу RX5808. Можно попробовать снять кофр с модулей и посмотреть внутри. Мне один раз там попалась капля олова, размазанная по всем элементам:) Хорошо еще не включал - выгорело бы сразу. Но я на 99% уверен, что дело в передатчике:) Может просто гнездо под антенну повредилось. Например, был случай у друга. Он пассатижами антенну накручивал на разъем и дошло до того, что сдвинул центральный пин в разъеме, да так, что тот дорожку порвал на плате передатчика. И все, сигнал стал пропадать на 20-30 метров. Долго не могли найти причину, внешне-то все целое. Только когда я увидел как он антенну зажимает, тогда до меня дошло в чем дело:)
УдалитьПередатчик проверил сразу, проверил на нескольких передатчиках - одинаково теряется связь. Причем у меня есть монитор, я отхожу одновременно с монитором и шлемом - монитор ловит на обычную сосиску, видеосвязь со шлемом теряется. причем светодиоды мигают диверссти переключается межу приемниками. Вот думаю неужели они оба подгорели??))) Что еще может быть ума не приложу(
Удалить