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
I’ve tried different versions of Raspbian but Jessie lite seems to works best for me. It is available for download here: https://downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2017-07-05/
Install the packages needed by flashrom by using the following command:
sudo apt-get install pciutils libpci-dev libusb-1.0 libusb-dev git
Build and install flashrom using the commands below:
git clone https://github.com/flashrom/flashrom.git cd flashrom make && make install
Before continuing we need to enable the SPI interfaces on the Raspberry Pi. This can be done either by editing the config file found at /boot/config.txt and uncommenting the line that says #dtparam=spi=on or by using raspi-config. Run raspi-config, and under interfaces enable SPI.
After rebooting the SPI interfaces are available under /dev/spidev0.0 and /dev/spidev0.1.
Connecting the Raspberry to the SPI flash chip
The table below show the connections between the RaspberryPi and the chip.
|RPi pin||SPI flash|
|17||VCC 3.3V and /HOLD and /WP|
In order to verify flashrom is working correctly and the chip is detected properly we run flashrom without any operation. Example output can be found below:
pi@raspberrypi:~ $ flashrom -p linux_spi:dev=/dev/spidev0.1 flashrom v0.9.9-91-g0bfa819 on Linux 4.9.35-v7+ (arm7l) 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. No operations were specified.
Now that we have verified everything is in order we can start writing the BIOS to the chip:
pi@raspberrypi:~ $ flashrom -p linux_spi:dev=/dev/spidev0.1 -w YOURBIOS flashrom v0.9.9-91-g0bfa819 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.
And that is that.