Unbricking
MrChromebox
Fixing a Chromebook bricked system with hardware disassembly and external devices.
There are two methods to flash the environment.
These 3 components are often bundled together at a lower cost (
Amazon link
), and if you're unsure if your device uses a 1.8v flash chip or a 3.3v one, it makes sense to have the adapter on hand if needed.
While this is somewhat device-specific, the main points are the same:
Most ChromeOS devices use a Winbond flash chip, though some use a compatible chip from another manufacturer, eg Gigadevices. It will be either an 8MB or 16MB chip, with the identifier W25Q64[xx] (8MB) or W25Q128[xx] (16MB) where [xx] is usually FV or DV. We do not want to touch the EC firmware chip, which is identified by W25X40[xx].
Unfortunately, many devices have the flash chip located on the top side of the main board, and require fully removing the main board in order to flash. This is true for most Baytrail and Braswell models.
Pin 1 of the flash chip will be notated by a dot/depression on the chip; be sure to align this with pin 1 on the chip clip wiring (a red strip on the example linked above).
Googling should locate a disassembly guide for most models. If you can't find one for your exact model, try to find one for another model of the same manufacturer as the bottom cover removal tends to be very similar.
Once you have your device disassembled and flash chip located, time to boot up the flashing environment. Most any Linux setup should do as long as either flashrom is available from the distro's software repositories, or it's 64-bit x86 (in which case you can download a statically compiled build of flashrom from my site). This guide will use a Ubuntu 23.04 live session booted from USB.
So let's get to it:
If you were flashing the UEFI firmware when things went sideways, then that's the easiest way to proceed. You can download the UEFI firmware for your device by examining
the sources.sh file from the Firmware Utility Script GitHub repository.
Simply concatenate the device-specific filename to the Full ROM base path:
If you're not sure which file to use for your device / don't know your device's board name, you can reference:
The firmware in all ChromeOS devices contains a section (RO_VPD) which stores board-specific data, like the serial number, localization settings, and on many devices which have an Ethernet port, the LAN MAC address as well. When flashing via the Firmware Utility Script, the script will automatically extract this from the running firmware and inject it into the firmware to be flashed, so the device serial, LAN MAC address, etc are all maintained. Without this, the device will use a default/generic LAN MAC address set by coreboot. While not ideal, this is only really an issue if two or more of the same device are on the same LAN segment (or you're statically assigning IP addresses based on MAC). But for completeness, if flashing the UEFI firmware or shellball ROM, we'll extract the VPD (either from the board itself or a backup made by the script) and inject it into the firmware to be flashed.
Now that everything is prepared, it is time to flash the device. To be thorough, we'll perform a 2nd verification after flashing to ensure the integrity of the flashed firmware.
If flashing your own backup created by the Firmware Utility Script (or any backup made from a live system), use:
or otherwise use:
Where
Even though flashrom does this as part of the write process, verifying the entire flash chip is quick and an easy way to ensure everything went as it should:
As before, if flashing your own backup created by the Firmware Utility Script (or any backup made from a live system), use:
or otherwise use:
using the same filename as before. If the verification passes, then disconnect the CH341a from the host machine, and then remove the chip clip.
CLEANING UP: Reassembly is the reverse of disassembly. Reconnect the internal battery and replace the bottom cover. Flip over the device, connect the external power, press the power button, and cross your fingers :)
As above, this is only needed if you failed to factory reset the CCD flags as part of disabling the device's firmware write-protection. While this is somewhat device-specific, the main points are the same:
Most any 64-bit Debian/Ubuntu based distro should work here, but this guide will use a Ubuntu 2304 live session booted from USB (since its version of flashrom supports Suzy-Q flashing).
So let's get to it:
This command should return 3 items: ttyUSB0, ttyUSB1, and ttyUSB2
If not, then your cable is connected to the wrong port or is upside down; adjust and repeat comment until the output is as expected.
Depending on your desired use for the device, you have 3 options for flashing:
If you're not sure which file to use for your device / don't know your device's board name, you can reference: https://mrchromebox.tech/#devices and/or https://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices.
The firmware in all ChromeOS devices contains a section (RO_VPD) which stores board-specific data, like the serial number, localization settings, and on many devices which have an Ethernet port, the LAN MAC address as well. When flashing via the Firmware Utility Script, the script will automatically extract this from the running firmware and inject it into the firmware to be flashed, so the device serial number, LAN MAC address, etc are all maintained. Without this, the device will use a default/generic LAN MAC address set by coreboot. While not ideal, this is only really an issue if two or more of the same device are on the same LAN segment (or you're statically assigning IP addresses based on MAC). But for completeness, if flashing the UEFI firmware or shellball ROM, we'll extract the VPD (either from the board itself or a backup made by the script) and inject it into the firmware to be flashed.
Now that everything is prepared, it is time to flash the device.
If flashing your own backup created by the Firmware Utility Script (or any backup made from a live system), use:
or otherwise, if using a UEFI Full ROM image or shellball/recovery-extracted image, use:
Where
CLEANING UP: Once flashing is complete, disconnect the Suzy-Q cable. If the internal battery was not disconnected, the device will likely reboot as soon as flashing has completed. If the internal battery was disconnected, reconnect it and replace the bottom cover. Flip over the device, connect external power, press the power button, and cross your fingers :)
Flashing with a CH341a USB programmer
Requirements
Instructions
Hardware Disassembly
Preparing to flash
cd;
sudo apt update
sudo apt install flashromsudo flashrom -p ch341a_spi
wget
wget https://mrchromebox.tech/files/firmware/full_rom/coreboot_tiano-edgar-mrchromebox_20180827.rom
wget https://mrchromebox.tech/files/firmware/full_rom/coreboot_tiano-edgar-mrchromebox_20180827.rom.sha1
sha1sum -c coreboot_tiano-edgar-mrchromebox_20180827.rom.sha1
wget
wget https://mrchromebox.tech/files/firmware/shellball/shellball.edgar.bin
https://mrchromebox.tech/#devices and/or https://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices.
Persisting the board's Vital Product Data (VPD):
wget https://mrchromebox.tech/files/util/cbfstool.tar.gz && tar -zxf cbfstool.tar.gz
sudo flashrom -p ch341a_spi -r badflash.rom
./cbfstool badflash.rom read -r RO_VPD -f vpd.bin./cbfstool stock-firmware-
./cbfstool
Flashing your device
sudo flashrom -p ch341a_spi --ifd -i bios -w
sudo flashrom -p ch341a_spi -w
sudo flashrom -p ch341a_spi --ifd -i bios -v
sudo flashrom -p ch341a_spi -v
Flashing with a Suzy-Q cable
Requirements
Instructions
Hardware Disassembly
Preparing to flash
cd;
sudo apt update
sudo apt install flashromls /dev/ttyUSB*
echo "ccd open" | sudo tee -a /dev/ttyUSB0 > /dev/null
wget
wget https://mrchromebox.tech/files/firmware/full_rom/coreboot_tiano-edgar-mrchromebox_20180827.rom
wget https://mrchromebox.tech/files/firmware/full_rom/coreboot_tiano-edgar-mrchromebox_20180827.rom.sha1
sha1sum -c coreboot_tiano-edgar-mrchromebox_20180827.rom.sha1
wget
wget https://mrchromebox.tech/files/firmware/shellball/shellball.edgar.bin
Persisting the board's Vital Product Data (VPD):
wget https://mrchromebox.tech/files/util/cbfstool.tar.gz && tar -zxf cbfstool.tar.gz
sudo flashrom -p raiden_debug_spi:target=AP -r badflash.rom
./cbfstool badflash.rom read -r RO_VPD -f vpd.bin./cbfstool stock-firmware-{devicename}-{date}.rom read -r RO_VPD -f vpd.bin
./cbfstool {shellball ROM/UEFI Full ROM filename} write -r RO_VPD -f vpd.bin
Flashing your device
sudo flashrom -p raiden_debug_spi:target=AP -i SI_BIOS -w
sudo flashrom -p raiden_debug_spi:target=AP -w