I made this post as a addition or supplement to my “Flashing a BIOS chip with an Arduino” post.
While doing some research online I found several articles/posts from people using a Raspberry Pi to flash SPI flash chips. Apparently the Raspberry Pi is very suitable for this kind of thing as it has a SPI interface and is able to run linux. I was eager to try this out for myself so I got out my Pi 3 model B and got to work. For this project I used a Winbond 25X80 salvaged from a motherboard I had lying around.
Preparing the RaspberryPi
Download the latest Rasbian release, I used the Jessie Lite version.
Install the packages needed by flashrom by using the following command:
flashrom 0.9.9-35-gd152fb9 on Linux 4.9.35-v7+ (armv7l)
flashrom is free software, get the source code at https://flashrom.org
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).
Found Winbond flash chip "W25X80" (1024 kB, SPI) on linux_spi.
Reading old flash chip contents... done.
Erasing and writing flash chip... Erase/write done.
Verifying flash... VERIFIED.
My cousin gave me this motherboard and asked me to have a look at it after a failed BIOS update turned his computer into paperweight. I’ve actually attempted to fix this board before using a method described here but I eventually gave up after I realised I lacked the necessary skills and shelved the project. Fast forward a year or so I come across a post on hackaday about a Arduino based BIOS flasher and decided the time had come to give it another try.
a BIOS chip compatible/supported by Flashrom, in my case a Macronix mx25L8005 (a list of all supported chips can be found here)
any of the supported Arduinos (I used a duemilanove):
any based on the ATmega328 (/168/88 will work with small changes too), like the Arduino Uno R3.
Arduino Mega or Mega2560, but notice that the software has a different branch for them.
a way to convert the 5V logic levels to 3.3V (except if 3.3V arduino, these are rarer)
git clone --recursive git://github.com/urjaman/frser-duino
Depending on the Arduino model:
For models with a FTDI chip:
make ftdi && make flash-ftdi
For models without a FTI chip:
make u2 && make flash-u2
Before you can actually flash the chip you must first connect the flasher to the chip. Some motherboards have a SPI header which makes connecting the Arduino a breeze. Other motherboards may have a removable chip which you transport to a breadboard. If your motherboard doesn’t have either one you will still be able to use this method but you might need some wires/clips specially designed for working with chips and or microprocessors.
The ASUS P5B motherboard has a SPI header located near the BIOS chip. The pinout can be seen in the picture below. Please note that pin names can differ between chips ( i.e. the SO pin can also be named MISO or DO depending on the chip).