How to reflash firmware onto a bricked Hero3+ Black over USB

Discuss the GoPro Hero3 Black+ General, Issues and Trouble Shooting.
Joined: December 13th, 2017, 2:31 pm

December 13th, 2017, 2:35 pm #21

Worked great with my Go Pro Hero 3+. Amazing work, evilwombat! Unfortunately I'm not able to update later to v.3.03 or 2.x. Totally freeze after the update. I would also like to try it directly with the 3.03 firmware. Are the files anywhere available besides the original dropbox links?
Quote
Like
Share

Joined: February 27th, 2018, 4:23 pm

February 27th, 2018, 4:38 pm #22

Hello,

How to reflash firmware onto a bricked Hero 3+ Silver ?
Mine is bricked ☹

Matou67
Quote
Like
Share

Joined: October 21st, 2012, 5:55 am

February 28th, 2018, 9:15 pm #23

matou67 wrote: Hello,

How to reflash firmware onto a bricked Hero 3+ Silver ?
Mine is bricked ☹

Matou67
Sorry, I do not have a recovery tool for Hero3+ Silver, and I don't think I will ever be able to make one. I started writing one around 2014 but quickly ran into problems because GoPro's open-source disclosure page did not have a GPL release of the kernel I needed. I tried to make do with what was available (which was basically a disclosure for an older camera), but either the available kernel wasn't close enough, or I was doing something wrong (or some combination of both).

You could try contacting GoPro Support and seeing if they will replace your camera.
Quote
Like
Share

Joined: February 27th, 2018, 4:23 pm

March 1st, 2018, 5:43 am #24

Hi,
Gopro does not offer a technical solution.
He offers just a 20% discount for a other product (hero 5 or hero 6).
Pfff...
Quote
Like
Share

Joined: October 21st, 2012, 5:55 am

March 3rd, 2018, 5:16 am #25

Sorry, I cannot help you there. Granted, they are better cameras in a lot of ways, but still....
Quote
Like
Share

Joined: February 27th, 2018, 4:23 pm

March 7th, 2018, 7:58 am #26

evilwombat wrote: Sorry, I cannot help you there. Granted, they are better cameras in a lot of ways, but still....
OK thank you.

For the operation you describe, do you use the original drivers of the gopro ? 
Quote
Like
Share

Joined: October 21st, 2012, 5:55 am

March 7th, 2018, 8:16 am #27

What do you mean? The "drivers" used by my loader are just libusb stub drivers - all they do is provide raw access to USB devices. All the logic for talking to the camera exists in the gpboot program itself, which implements the ambarella directusb protocol, which had been reverse-engineered back in Hero2 days and remained unchanged though at least Hero4. So to answer your question, I guess the loader would probably need little to no changes, but the hard part would be writing and loading a payload that gets sent to the camera and does what you want. Most of my camera repair tools work by loading a piece of code onto the camera's RAM (Linux kernel and a ramdisk), which runs on the camera and programs new firmware into flash. THAT's the tricky bit here - without proper Linux sources, I could not write a kernel that could boot to the point of being useful, which kind of makes the rest of the stuff dead in the water.
Quote
Like
Share

Joined: February 27th, 2018, 4:23 pm

March 7th, 2018, 8:31 am #28

evilwombat wrote: What do you mean? The "drivers" used by my loader are just libusb stub drivers - all they do is provide raw access to USB devices. All the logic for talking to the camera exists in the gpboot program itself, which implements the ambarella directusb protocol, which had been reverse-engineered back in Hero2 days and remained unchanged though at least Hero4. So to answer your question, I guess the loader would probably need little to no changes, but the hard part would be writing and loading a payload that gets sent to the camera and does what you want. Most of my camera repair tools work by loading a piece of code onto the camera's RAM (Linux kernel and a ramdisk), which runs on the camera and programs new firmware into flash. THAT's the tricky bit here - without proper Linux sources, I could not write a kernel that could boot to the point of being useful, which kind of makes the rest of the stuff dead in the water.

Thanks for these informations.
Quote
Like
Share

Joined: April 28th, 2012, 6:40 pm

March 20th, 2018, 5:44 pm #29

evilwombat wrote: This is essentially the Hero3+ Black version of this thread: how-to-reflash-firmware-onto-a-bricked-hero4-camera-over-usb-t23149.html
It is an experimental guide on how to boot Linux on a bricked Hero3+ Black camera and then try to flash stock firmware onto it. Although this had worked somewhat nicely for Hero4, I believe some users have encountered mixed results in early testing. So, I just kind of put this on hold for a while, but after a few minor tweaks to the method, I wonder if this might actually help someone.

With that out of the way...

For advanced firmware people who are good with computers, I made the following tool that tries to boot a hard-bricked Hero3+ Black camera over USB. By "hard-bricked" I mean a camera that will not turn on at all, and shows absolutely no signs of life. But, if the camera is not turning on because of corrupted firmware (such as from an interrupted update), it may be possible to boot it up into a low-level USB command mode, and use this mode to send over a fresh set of firmware. If the camera is failing to turn on because of a hardware problem, the firmware tools will probably not help you. But, if it's a firmware problem, you might have some luck.

Only try this if you have a hard-bricked out-of-warranty Hero3+ Black camera that you are about to otherwise throw in the garbage, and only if you are willing to accept all risk and all consequences of using this HIGHLY EXPERIMENTAL software. This method *will* void your warranty, so if you can otherwise get warranty from GoPro, by all means do that first! The method described here is only slightly tested, risky, and experimental, and has shown mixed results, and the last thing we want is people trying to fix their cameras using this method, messing them up further, and THEN crying to GoPro for help.

You take full responsibility and liability for any and all consequences arising from the use of this HIGHLY ADVANCED AND EXPERIMENTAL SOFTWARE.

With that out of the way, here's the (rather unofficial) debricking guide.

You will need:
    * Your bricked Hero3+ Black camera* A computer running Windows or Linux (sorry Mac OS users - I don't have a Mac to recompile the tool for Mac OS after adding H3+B support)* A USB cable* A blank microSD card of size 32GB or smaller* A microSD card reader* Some special software* Some luck
Part 1: Preparation
1. Download https://github.com/evilwombat/gopro-usb ... master.zip

2. Unzip the file somewhere on your computer

3. Insert the microSD card into the card reader, and plug card reader into your computer. Note that the card must be 32GB or smaller.
Advanced users: the card can be of any size, but must be formatted with the FAT (FAT32) filesystem. Larger cards tend to be formatted with exFAT, which will not work here. So, as long as your card is FAT-formatted, the size doesn't really matter.

4. Inside the 'gopro-usb-tools-master' directory, look for a file called h3pb-recovery.tgz. Copy this file onto the root directory of the card.
Note1 : this is the "recovery payload". It contains a copy of the firmware we are going to flash, plus some scripts to actually do the flashing. We put it onto the card because loading this whole thing over USB would take a very long time. The default h3pb-recovery.tgz file contains firmware v1.04, which seemed to have worked a little better in testing than v3.03.

Note 2: If the main version gives you trouble, you can try one of the following alternative versions, both of which are based on FW v3.03 (but are slightly different). After downloading, you need to rename the file to h3pb-recovery.tgz before putting it on the card.
Alternative 1: https://dl.dropboxusercontent.com/u/797 ... skipbb.tgz
Alternative 2: https://dl.dropboxusercontent.com/u/797 ... -v3.03.tgz


5. Cleanly eject the card from your computer, and insert it into the camera.


Part 2: USB Command Mode
1. Remove the battery from your camera, and unplug USB from camera (in case you had it plugged in). Leave the card in the camera.

2. Plug one end of the USB cable into your PC.
Note: try to use a USB 2.0 port if you can. The camera's USB mode is a bit flaky with USB 3.0, especially on my Thinkpad (and on Mac OS in general). This is a behavior of the camera, and I have no control over this. The USB 3.0 ports tend to be blue, so avoid those if you can, especially on Linux / Windows. But, your mileage may vary.

2. Press and HOLD the Shutter button on the camera.

3. While still holding the Shutter button, plug the other end of the USB cable into the camera.

4. Let go of the Shutter button.


Part 3: Drivers
At this point, Windows might ask you to install a driver. Linux users do not need drivers and can skip this part.

Windows users have two options for installing drivers.
Option 1: Install my pre-made driver from gopro-usb-tools-master/UsbDrivers/. Try this first if it works for you - this is the easiest.

Option 2: Use Zadig to make a driver.
    1. Download Zadig from http://zadig.akeo.ie/ and install it2. Run Zadig. You should seen an unknown USB device with Vendor ID 4255 and Product ID 00033. If Windows is still asking your for drivers, click 'Cancel' for now.4. Use Zadig to install a libusbK driver for your camera (see screenshot). I would have expected you to need the plain "libusb" driver, but for some reason that doesn't work for me, but "libusbK" works, at least on my Virtual Machine running Windows XP. /shrug. I guess.... if the recovery tool doesn't see the camera, try the other driver? I am mainly on Linux, so this stuff is a bit foreign to me.Note: You don't have to actually type in the device title "Hero3+ Black Camera (USB Command Mode)" if you don't want to. The title doesn't do anything, but it's there for your own information.

Part 4: Running the debricker tool
1. Start the tool!
    Windows users: Find and double-click on "h3pb_recover_win.bat". Things should start loading.Linux users: Open a terminal, cd into 'gopro-usb-tools-master', and run 'make' to build the tool. You might need to 'sudo apt-get install libusb-1.0.0-dev' to compile it. Once the tool is built, run "./h3pb_recover_linux.sh". You will need to type your password, for raw access to USB devices, though some creative udev rules can get around this.
In all cases, the scripts are basically just going to run "gpboot --h3pb-recovery".

2. You will hopefully see the loader start to load things onto the camera, even though the front screen will be blank. Things might take a while to load, especially on Windows. Be patient. If the percentages are going up, then it's loading.


Part 5: Actually flashing the firmware
1. A few seconds after the loader is done, you should start seeing some messages on the camera screen. This is the recovery kernel booting up.

2. A few seconds after that, you should see some messages that the camera is accessing the memory card. Remember that 'h3pb-recovery.tgz' file that you dropped on the card? This is being read now. If the card is accessible and the recovery file looks valid, the camera will give you a five-second countdown before erasing all firmware inside the camera (if any) and trying to rewrite it. If you are nervous, this is your last chance to turn back.
Note: If there is a problem with the card or with the recovery file, the camera will prompt you to check the card and try again. If this happens, you can pull out the card (carefully), make sure it's formatted properly and the recovery file is on it, and put it back in. You don't need to repeat the whole loading process again for this.

3. Hopefully, the camera should start flashing firmware. You should see some section names scrolling by. The whole flashing process should take less than five minutes, but some parts are bigger than others. Be patient. When the flashing is done, the camera will tell you to reboot it. At one point, the camera will say that it is flashing a certain section "again". This is because it has to be flashed to two places (it doesn't mean there was an error flashing the first time). This is normal.


Part 6: First boot procedure
1. After flashing is done, unplug USB from the camera. Leave the card in the camera.

2. Insert a battery into the camera.

3. Wait 10 seconds (do not skip this step!)

4. Press the Power button on the camera. With any luck, it should power up, and perform a quick update-like procedure. This is normal. It may reboot one or two times. After this is done, the camera should be ready for use. When powered on for the first time, the camera's beeps might be delayed, and it might say "NO SD" for a few seconds before proceeding to the update step. This is normal too.


GOOD LUCK! And remember, you are solely responsible for the consequences of what happens, and these tools and instructions come with absolutely no warranty. Use at your own risk!

Please let me know how well this works. It has worked for me on my Hero3+ Black camera, but some users have had less luck, especially on earlier versions of the procedure. Your mileage may vary, especially since cameras can die for multiple reasons, with firmware being only one of them. You could also try one of the "alternative" h3pb-recovery files, listed above.

-evilwombat


So, how does this actually work?
Basically, the USB loader (gpboot) loads a Linux kernel and a small initrd onto the camera, and boots them up. A script in the initrd mounts the memory card, and unpacks the recovery file off the card. The recovery file actually contains GoPro's v1.04 firmware, along with a script for flashing it, and a few other things. This script then erases (most of) the NAND and writes the different firmware sections where they need to go. The whole firmware is something like 27MB, so we use the memory card to save ourselves the loading time, and only load the bare minimum over USB.
Hello evilwombat: Do you know anyone who has a similar approach for unbricking a Hero3 Silver? Thanks!
Quote
Like
Share