Home / Blog / Eletrônica / Como gravar de chips de bios com Raspberry Pi

Como gravar de chips de bios com Raspberry Pi

Ao fazer algumas pesquisas on-line, encontrei vários artigos / postagens de pessoas que usam um Raspberry Pi para fazer flash de chips flash SPI. Aparentemente, o Raspberry Pi é muito adequado para esse tipo de coisa, pois possui uma interface SPI e é capaz de rodar linux. Eu estava ansioso para experimentar isso por mim mesmo, então peguei meu Pi 3 modelo B e comecei a trabalhar. Para este projeto eu usei um Winbond 25X80 recuperado de uma placa-mãe que eu tinha por aí.

Esquema das etapas:

  • Preparando o Raspberry Pi
    • Habilitando a interface SPI
    • Instalando o flashrom (da fonte ou via apt get)
  • Conectando o Raspberry Pi ao chip
  • Usando flashrom para interagir com o chip

Preparando o Raspberry Pi

Como outros apontaram, a versão mais recente do Raspbian (Stretch) também funcionará adicionando o parâmetro spispeed ao comando Flashrom.

Habilitando a interface SPI

A interface SPI é habilitada digitando  sudo raspi-config  e selecionando  P4 SPI  nas  opções de interface. Depois disso, a interface SPI ficará disponível em:

  • /dev/spidev0.0
  • /dev/spidev0.1

Em raspi-config selecione a opção 5: Opções de interface

Nas opções de interfaces, selecione P4 SPI

Instalando flashrom

A instalação do flashrom pode ser feita através de um simples apt-get ou da fonte. Para instalar a partir da fonte, primeiro instale as dependências:

sudo apt install git libpci-dev libusb-1.0 libusb-dev

Termine clonando o repositório do flashrom, compilando e instalando o flashrom:

git clone https://github.com/flashrom/flashrom.git
cd flashrom
make
sudo make install

Conectando o Raspberry ao chip flash SPI

A tabela abaixo mostra as conexões entre o RaspberryPi e o chip.

pino RPi Flash SPI
25 GND
24 CS
23
SCK
21 DO
19 DI
17 VCC 3.3V e /HOLD e /WP

Interagindo com o chip

Para verificar se o flashrom identifica corretamente o chip, executamos o flashrom sem nenhuma operação.

$ flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=512
 

flashrom p1.0-76-g291764a on Linux 4.14.34-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.
No operations were specified.

Agora que o Flashrom identifica corretamente o Winbond W25X80, podemos continuar a fazer backup do BIOS atual.

$ flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=512 -r [
oldbios]

flashrom p1.0-76-g291764a on Linux 4.14.34-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 flash... done.

Depois de fazer o backup do BIOS antigo, podemos gravar com segurança o novo BIOS de volta no chip.

$ flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=512 -w [newbios] 


flashrom p1.0-76-g291764a on Linux 4.14.34-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... 
Warning: Chip content is identical to the requested image.
Erase/write done.

Referências:

Sobre Zenilto Gonçalves de Freitas

Zenilto Gonçalves de Freitas
Fotografo, Desenhista, Técnico em Informática, Professor, Web Designer, Programador e Blogueiro. Meu hobbie é escrever e sou amante de tecnologia