J’ai acheté un module DVR Eachine ProDVR pour enregistrer le flux vidéo directement depuis mes lunettes FPV et j’ai réussi à le briquer en quelques minutes 🙂
Ne faites donc pas comme moi, ne débranchez pas l’alimentation du DVR pendant la mise à jour du firmware. Vous vous éviterez ainsi une pénible opération de sauvetage.
Heureusement je ne suis pas le premier à faire des bêtises et on trouve un bon article expliquant comment sauver son module briqué.
RCmontis, Restoring bricked Eachine ProDVR after firmware update.
Cet article explique bien les composants, câblages et logiciels à utiliser mais uniquement pour Windows. Si vous êtes comme moi sous macOS ou Linux ce qui va suivre va vous intéresser 🙂
Résumé des composants nécessaires pour débriquer le ProDVR :
- Un fer à souder
- Un module Arduino Nano (3,3$) (plus simple)
- ou Arduino Pro Mini (3$) + adaptateur USB série (6,5$)
J’ai utilisé un adaptateur usb série FTDI232 en 3.3v + Arduino Pro Mini.
1/ Transformation de l’Arduino en programmateur série
Lors de cette étape on flashe l’Arduino avec le firmware frser-duino.hex précompilé pour Atmega328p (voir flashrom.org/serprog).
Sous Windows on utiliser le logiciel XLoader pour ce faire. Sous Mac il existe une appli appelle HexUploader qui est équivalente mais j’ai eu beau m’acharner impossible de l’utiliser.
J’ai donc utilisé « avrdude » directement. Pour cela il faut installer les outils qui vont bien pour Mac ou Linux (avrdude, usblib, etc.). Ce guide d’installation de la toolchain AVR pour mac et linux est très bien.
Voici la commande que j’ai utilisé. Il faut bien sûr adapter avec les bons chemins de l’adaptateur série (-P et -b), du fichier à flasher (-U). Il faut aussi choisir le bon type de processeur (-p) et programmateur (-c).
grizz@mbpg:~$ avrdude -v -c avrisp -p atmega328p -b 57600 -P /dev/cu.usbserial-A50285BI -U flash:w:Downloads/frser-duino.hex avrdude: Version 6.3, compiled on Sep 17 2016 at 02:19:28 Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/ Copyright (c) 2007-2014 Joerg Wunsch System wide configuration file is "/usr/local/Cellar/avrdude/6.3/etc/avrdude.conf" User configuration file is "/Users/grizz/.avrduderc" User configuration file does not exist or is not a regular file, skipping Using Port : /dev/cu.usbserial-A50285BI Using Programmer : avrisp Overriding Baud Rate : 57600 AVR Part : ATmega328P Chip Erase delay : 9000 us PAGEL : PD7 BS2 : PC2 RESET disposition : dedicated RETRY pulse : SCK serial program mode : yes parallel program mode : yes Timeout : 200 StabDelay : 100 CmdexeDelay : 25 SyncLoops : 32 ByteDelay : 0 PollIndex : 3 PollValue : 0x53 Memory Detail : Block Poll Page Polled Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- --------- eeprom 65 20 4 0 no 1024 4 0 3600 3600 0xff 0xff flash 65 6 128 0 yes 32768 128 256 4500 4500 0xff 0xff lfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 hfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 efuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 lock 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00 signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00 Programmer Type : STK500 Description : Atmel AVR ISP Hardware Version: 2 Firmware Version: 1.16 Vtarget : 0.0 V Varef : 0.0 V Oscillator : Off SCK period : 0.1 us avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.04s avrdude: Device signature = 0x1e950f (probably m328p) avrdude: safemode: hfuse reads as 0 avrdude: safemode: efuse reads as 0 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 "Downloads/frser-duino.hex" avrdude: input file Downloads/frser-duino.hex auto detected as Intel Hex avrdude: writing flash (1368 bytes): Writing | ################################################## | 100% 0.70s avrdude: 1368 bytes of flash written avrdude: verifying flash memory against Downloads/frser-duino.hex: avrdude: load data flash data from input file Downloads/frser-duino.hex: avrdude: input file Downloads/frser-duino.hex auto detected as Intel Hex avrdude: input file Downloads/frser-duino.hex contains 1368 bytes avrdude: reading on-chip flash data: Reading | ################################################## | 100% 0.59s avrdude: verifying ... avrdude: 1368 bytes of flash verified avrdude: safemode: hfuse reads as 0 avrdude: safemode: efuse reads as 0 avrdude: safemode: Fuses OK (E:00, H:00, L:00) avrdude done. Thank you.
Si vous avez des messages d’erreur vérifiez bien que le programmateur et le processeur choisis sont corrects.
2/ Relier le programmateur à la puce bios du ProDVR
On va souder, se reporter à l’article source pour les schémas de câblage. Attention, l’alimentation vers le ProDVR doit être en 3.3V et non 5.
3/ Flasher le Firmware
Pour cette opération il faut installer l’utilitaire « flashrom » (‘brew install flashrom’ sous macOS). La mémoire flash du ProDVR est une Makonix MX25L1605.
On commence par lire la flash pour voir si cela fonctionne.
grizz@mbpg:~$ flashrom --programmer serprog:dev=/dev/cu.usbserial-A50285BI:115200 -c MX25L1605 --read Downloads/firmware.hex flashrom v0.9.8-r1888 on Darwin 16.5.0 (x86_64) 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 flash... done.
Tout va bien, on flashe donc le firmware (flash.hex)
grizz@mbpg:~$ flashrom -n --programmer serprog:dev=/dev/cu.usbserial-A50285BI:57600 -c MX25L1605 --write Downloads/flash.hex flashrom v0.9.8-r1888 on Darwin 16.5.0 (x86_64) 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... FAILED at 0x00131000! Expected=0xff, Found=0x00, failed byte count from 0x00130000-0x0013ffff: 0xefc1 ERASE FAILED! Reading current flash chip contents... done. Looking for another erase function. Erase/write done. Verifying flash... VERIFIED.
Comme j’ai eu une erreur j’ai relancé le flashage et visiblement c’était ok :
grizz@mbpg:~$ flashrom --programmer serprog:dev=/dev/cu.usbserial-A50285BI:115200 -c MX25L1605 -n --write Downloads/flash.hex flashrom v0.9.8-r1888 on Darwin 16.5.0 (x86_64) 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.
Après cette opération on débranche les fils et on croise le doigts. Le ProDVR s’allume de nouveau. Victoire !
On remonte le boîtier et on teste la mise à jour firmware sans débrancher l’installation cette fois-ci.
Ouf, on est sauvés ! 🙂
Well done! Congratulations on bringing your device back to life.
Thank you, the hard work was done on your side 🙂
how long did it take to « erasing and writing flash chip… »?