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

Como gravar chips de bios com Arduino

Neste post vou explicar como fazer flash de chips de bios com um Arduino. Estaremos usando um Arduino Duemilnove (uno, mega ou clones também funcionam) e uma placa-mãe ASUS P5B que não inicializa mais após uma falha na atualização do BIOS.

Aqui está um resumo das etapas (algumas dessas etapas não são estritamente necessárias, mas achei que poderiam ajudar os não iniciados):

  1. Identificar placa
  2. Encontrar documentação para o conselho
  3. Localize e identifique o chip da bios
  4. Encontrar documentação para o chip
  5. Encontrar pinagem e tensões de operação (importante)
  6. Prepare o Arduino e instale o flashrom
  7. Conectando o Arduino ao chip
  8. Teste
  9. Piscando e verifique
  10. Solução de problemas

Identifique a placa e encontre a documentação

Como mencionado na introdução, estamos usando uma placa-mãe ASUS P5B. O manual desta placa pode ser encontrado no site da ASUS (um link direto pode ser encontrado na lista de referências).

Localize e identifique o chip da bios

No manual encontramos um layout de placa que mostra a localização do chip, à direita do slot pci 3.

Caso o local não esteja documentado, temos que encontrá-lo nós mesmos. A página a seguir fornece instruções sobre como localizar o chip bios: http://www.bios-chip24.com/Information/Bios-Chip-localization

O próximo passo é identificar com qual marca e tipo de chip estamos lidando para encontrar a ficha técnica. Normalmente, a escrita no chip é tudo o que precisamos, pois indica o fabricante e o número do modelo. O manual da placa-mãe menciona um “MXIC 25L8005” e se olharmos para a placa vemos que o modelo é de fato uma 25L8005 da Macronix.

MX25L8005

MX25L8005

Digitar o número do modelo no google retorna a folha de dados como um dos primeiros resultados. A informação que estamos procurando é a pinagem e a tensão de operação. A imagem a seguir mostra a pinagem do 25L8005:

Os nomes dos pinos não fazem muito sentido se você os estiver vendo pela primeira vez, então a folha de dados também inclui uma descrição dos nomes dos pinos:

Para obter mais informações sobre o que exatamente os pinos fazem, consulte a folha de dados.

Preparando o Arduino

Para que o Arduino possa atuar como um programador serial precisamos primeiro prepará-lo usando frser-duino. Os comandos a seguir irão baixar e instalar os pacotes necessários, instalar o flashrom, clonar o frser-duino e fazer o flash do Arduino.

sudo apt install git flashrom gcc-avr binutils-avr avr-libc avrdude
git clone --recursive https://github.com/tomvanveen/frser-duino.git
cd frser-duino
fazer ftdi 
sudo make flash-ftdi

Conectando o Arduino ao chip SPI

A imagem a seguir é um exemplo de esquema retirado do flashrom GitHub e mostra os pinos do Arduino e os pinos do chip ao qual eles devem se conectar (observe que o PB0 não precisa estar conectado):

Edição de emergência aqui: Eu sei entender porque as pessoas usam resistores entre os pinos do Arduino e o chip. O Arduino opera em 5V, o que significa que seus níveis lógicos também estão em 5V. Isso precisa ser reduzido para 3,3v usando um seletor de nível.

Piscando o chip SPI

Para verificar se tudo está funcionando corretamente, primeiro executamos o flashrom sem nenhuma operação:

sudo flashrom -p serprog:dev=/dev/ttyUSB0:2000000

A saída deve ficar assim:

flashrom v0.9.9-91-g0bfa819 no Linux 4.10.0-28-genérico (x86_64)
flashrom é um software livre, obtenha o código fonte em https://flashrom.org

Usando clock_gettime para loops de atraso (clk_id: 1, resolução: 1ns).
serprog: O nome do programador é "frser-duino"
Encontrado o chip flash Macronix "MX25L8005" (1024 kB, SPI) no serprog.
Nenhuma operação foi especificada.

Se o comando anterior funcionou como esperado, agora estamos prontos para nossa etapa final. Para gravar o novo BIOS no chip, usamos o seguinte comando:

sudo flashrom -p serprog:dev=/dev/ttyUSB0:2000000 -w [NEWBIOS]

A saída deve ficar assim:

flashrom v0.9.9-91-g0bfa819 no Linux 4.10.0-28-generic (x86_64) flashrom é software livre, obtenha o código fonte em https://flashrom.org Usando clock_gettime para loops de atraso (clk_id: 1, resolução: 1ns ). serprog: O nome do programador é "frser-duino" Encontrado o chip flash Macronix "MX25L8005" (1024 kB, SPI) no serprog. Lendo o conteúdo do chip flash antigo... feito. Apagando e gravando o chip flash... Apagar/gravar concluído. Verificando flash... VERIFICADO.

E é isso. Nós piscamos com sucesso um chip usando a interface SPI. Se você tiver alguma dúvida ou feedback sobre este post, deixe um comentário abaixo!

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