Manual
do
Maker
.
com
Se você tem um Raspberry Pi 3B e quer fazer boot por USB, uma das opções é gravar o OTP ("One Time Programmable"). Se fizer alguma modificação no OTP, tendo em vista o significado do acrônimo, está claro que é irreversível. Bem, por qual razão alguém quereria selecionar o modo de boot por GPIO no Raspberry? - Pra tudo há uma razão. Explico.
Tenho um Raspberry Pi 3B que precisava de refrigeração, devido ao calor que tem feito esses dias, e não poderia expô-lo a riscos por causa da temperatura, uma vez que o utilizo para diversos fins, inclusive trabalho. Só que ao colocá-lo em um case cometi a estupidez de não remover o cartão de memória previamente e consequentemente o destruí. Na ausência de um novo cartão, parti para o óbvio; boot pela USB. Só que o boot pela USB não estava habilitado. "Sem problemas" - pensei. Bastaria gravar o OTP para habilitar o boot na USB. Para isso, basta editar o arquivo /boot/config.txt do sistema contido em um cartão micro SD (em um computador com Linux, claro) e adicionar a linha:
program_usb_boot_mode=1
Para tal, peguei o cartão de outro Raspberry, apenas para fazer essa gravação. Após o boot, basta desligar o sistema e iniciar o boot pela USB. Já fiz esse procedimento em outra Raspberry e funcionou, mas por alguma razão, não funcionou nessa. Tudo estaria perdido? - Claro que não. Havia ainda uma possibilidade um pouco mais radical. Lembre-se: Não há como reverter o processo.
Existe uma outra opção extremamente radical (do meu ponto de vista pessoal), que é fazer a seleção do boot através de pinos de GPIO. Isso é interessante por exemplo quando se tem as duas possiblidades conectadas ao Raspberry, sendo que o micro SD é prioritário. Se a Raspberry estiver em um ambiente fechado, uma chave exposta poderia definir a prioridade de boot.
No meu caso, a gravação da OTP não surtiu efeito (será que já havia sido gravada com 0?), então restara apenas essa possibilidade. O ponto mais negativo é que os GPIO do 22 ao 26 se tornariam inutilizáveis, uma vez que reconfigurados para esse propósito de boot. Se fizer essa modificação, o Raspberry não fará mais boot de modo algum se não for colocado o respectivo pino de GPIO em pullup.
Para tal, edite o mesmo arquivo /boot/config.txt e adicione a linha:
program_gpio_bootmode=1
Não use o banco 2 por nada. Nada. A tabela a seguir foi tirada da documentação. Após fazer o boot com o cartão micro SD, desligue o sistema e não se esqueça de remover a linha acima do arquivo config.txt. A partir de então, coloque um jumper do 3v3 ao pino correspondente ao GPIO22 para boot pelo SD ou GPIO26 para boot pela USB. Se não colocar o jumper, não haverá boot de modo algum. Use um resistor de 5k no jumper. Eu não usei nada, esses jumpers são uma piada, tem uma resistência alta e para teste não haveria problemas. Posteriormente coloquei um jumper, mas eu não tinha um de 5k, então coloquei um de 330Ohms. Também funcionou, então já tem mais resistência que apenas o jumper.
Bank 1 | Bank 2 | boot type |
---|---|---|
22 | 39 | SD0 |
23 | 40 | SD1 |
24 | 41 | NAND (no Linux support at present) |
25 | 42 | SPI (no Linux support at present) |
26 | 43 | USB |
Nesse artigo você tem as referências dos GPIO.
Nesse caso, o pinout muda um pouco:
Bank 1 | Bank 2 | boot type |
---|---|---|
20 | 37 | SD0 |
21 | 38 | SD1 |
22 | 39 | NAND (no Linux support at present) |
23 | 40 | SPI (no Linux support at present) |
24 | 41 | USB device |
25 | 42 | USB host - mass storage device |
26 | 43 | USB host - ethernet |
Esse foi um tutorial simples só para o caso de alguém passar pelo mesmo problema. Espero que venha a ser útil para alguém, mas é igual tatoo; não tem volta.
Inscreva-se no nosso canal Manual do Maker no YouTube.
Também estamos no Instagram.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.