Débriquer le module Eachine ProDVR

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 :

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.

Avec un Arduino Pro Mini
Avec un Arduino Nano
Raccordement de l’Arduino à la flash Makonix MX25L1605 (SPI) du ProDVR

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 ! 🙂

4 réponses sur “Débriquer le module Eachine ProDVR”

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.