All of the previous generations of Raspberry Pi contained all of their firmware on the SD card. Starting with the Raspberry Pi 4 the device actually has onboard upgradable firmware stored on an EEPROM chip separate from your storage. Updating this firmware is very important as one of the first released updates reduces power usage of the Pi by 30% which also reduces how hot it gets.
In this guide I’ll show you how to update the bootloader firmware (no, it’s not apt-get upgrade, it’s a new utility called rpi-eeprom!) and also show you how to make a recovery SD card if your firmware gets corrupted and needs to be reflashed.
If you are looking for information on how to change the boot order on the Raspberry Pi 4’s new bootloader firmware, check out my New Raspberry Pi 4 Bootloader USB Booting Guide.
Upgrading the Bootloader Firmware
Requirements
The Raspberry Pi 4 is available in different memory configurations all the way up to 8 GB. It’s about the size of a credit card and uses an extremely low amount of power making it ideal for all sorts of projects and ideas!
Links: AliExpress*, Amazon.com*, Amazon.ca*, Amazon.com.au*, Amazon*.co.jp*, Amazon.co.uk*, Amazon.de*, Amazon.es*, Amazon.fr*, Amazon.it*, Amazon.nl*, Amazon.pl*, Amazon.se*, Amazon.sg*
The Raspberry Pi 400 kit includes everything you need for a full Pi 400 desktop build. The Pi 400 is the fastest Raspberry Pi ever released and comes in the form factor of a keyboard!
Links: AliExpress*, Amazon.com*, Amazon.ca*, Amazon.com.au*, Amazon.co.jp*, Amazon.co.uk*, Amazon.de*, Amazon.es*, Amazon.fr*, Amazon.it*, Amazon.nl*, Amazon.pl*, Amazon.se*, Amazon.sg*
To upgrade the firmware you should be running the latest Raspberry Pi OS. Do not attempt this from another distribution. If you want to use another distribution afterward that is great!
Since the Raspberry Pi bootloader firmware is stored on a chip on the device you can update it to the latest with Raspberry Pi OS and then go right back to using whatever you want. I personally have a separate SD card just for Raspberry Pi OS that I use to periodically plug in and update the firmware.
The firmware and the utilities around it are changing so quickly that you are really playing with fire not attempting this with the latest and greatest officially supported distribution when you are talking about firmware / on-board chips / etc.
With that word of caution out of the way, let’s get started!
Install rpi-eeprom (older versions of Raspberry Pi OS / Raspbian)
Newer versions of Raspberry Pi OS come with this utility already but if you are upgrading / have upgraded from an older version you may not have it in some cases. We can install it with the following commands:
sudo apt update sudo apt full-upgrade sudo apt install rpi-eeprom
Once the utility is installed Raspberry Pi OS will check at boot whether there are any critical bootloader firmware updates for your Pi.
Checking for Updates Manually
If you are like me and don’t want to wait around for Raspberry Pi OS to decide whether do these updates there is a command to check for updates manually:
sudo rpi-eeprom-update
You will see output like this:
BCM2711 detected VL805 firmware in bootloader EEPROM BOOTLOADER: up-to-date CURRENT: Thu 3 Sep 12:11:43 UTC 2020 (1599135103) LATEST: Thu 3 Sep 12:11:43 UTC 2020 (1599135103) FW DIR: /lib/firmware/raspberrypi/bootloader/critical VL805: up-to-date CURRENT: 000138a1 LATEST: 000138a1
If the firmware isn’t up to date it will indicate an update is required like this:
BCM2711 detected VL805 firmware in bootloader EEPROM *** UPDATE AVAILABLE *** BOOTLOADER: update available CURRENT: Thu 3 Sep 12:11:43 UTC 2020 (1599135103) LATEST: Tue 24 Nov 15:08:04 UTC 2020 (1606230484) FW DIR: /lib/firmware/raspberrypi/bootloader/beta VL805: up-to-date CURRENT: 000138a1 LATEST: 000138a1
We now can see that there is updated firmware for our device. To install this update we will use the -a switch as well as the -d switch (which means to check the bootloader):
sudo rpi-eeprom-update -d -a
If there were updates available your output should look like this:
BCM2711 detected VL805 firmware in bootloader EEPROM *** INSTALLING EEPROM UPDATES *** BOOTLOADER: update available CURRENT: Thu 3 Sep 12:11:43 UTC 2020 (1599135103) LATEST: Tue 24 Nov 15:08:04 UTC 2020 (1606230484) FW DIR: /lib/firmware/raspberrypi/bootloader/beta VL805: up-to-date CURRENT: 000138a1 LATEST: 000138a1 BOOTFS /boot EEPROM updates pending. Please reboot to apply the update.
Reboot the Pi by typing sudo reboot and then run sudo rpi-eeprom-update again. This time it should tell you it is now up to date!
Changing rpi-eeprom’s Release Channel
By default you will only receive updates from Raspberry Pi OS “critical” channel. This is a very conservative firmware update channel that will only give you very well tested firmware updates that are considered critical fixes for the device. Another channel that is available is “stable”.
If you are trying to get USB boot support working and other recently added features I would try the “stable” channel first. It’s a lot more well tested and you’re less likely to run into any bleeding edge issues.
If you want to get the absolute latest firmware updates and fixes you may want to try the “beta” channel. These updates haven’t been tested as long and could potentially break your bootloader so Raspberry Pi OS only recommends using it if you are comfortable using the recovery tool to reflash your bootloader if something goes wrong. Check out the recovery section below for instructions on how to do this.
To switch to the beta channel we are going to edit the file /etc/default/rpi-eeprom-update:
sudo nano /etc/default/rpi-eeprom-update
Change the line FIRMWARE_RELEASE_STATUS=”critical” to:
FIRMWARE_RELEASE_STATUS="stable"
Or alternatively:
FIRMWARE_RELEASE_STATUS="beta"
Now you can run:
sudo rpi-eeprom-update -a
and you should see a new update available. You will need to reboot your Pi before the update is applied. I’d recommend rebooting it right away and run the check one more time and make sure it states you are now up to date.
View Bootloader Firmware Patch Notes
The latest official patch notes for all versions and changes are available in the rpi-eeprom GitHub repository
Disable Automatic Bootloader Firmware Updates
If you want to control when the updates are applied instead of leaving it up to Raspberry Pi OS the autoupdating service can be disabled with the following command:
sudo systemctl mask rpi-eeprom-update
The startup service has now been disabled and automatic bootloader firmware updates will only be applied if you do it manually.
To undo this and reenable the service we will use the unmask command:
sudo systemctl unmask rpi-eeprom-update
Now automatic firmware updates are enabled again!
Bootloader Recovery
The downside of having an onboard bootloader is that if something breaks reformatting your SD card will not fix it. In this section I will cover how to use the official tools to reflash and recover your Pi’s bootloader.
Requirements
To do this we need to prepare a SD card with the Raspberry Pi 4 EEPROM boot recovery tool. The easiest way to do this is to use the official Raspberry Pi Imager tool from the Raspberry Pi foundation to prepare the recovery image.
Here is how we create the recovery image inside the utility. Choose the “Misc utility images” category as shown below:
Next choose the “Bootloader (restore the factory default settings and change boot priority)” option:
This will take you to a menu where you will select the default boot device for your Raspberry Pi like this:
Notice that you are mostly just selecting the primary boot device. Modern versions of the firmware will fall back if the primary boot device fails. The first menu for example says “Boot from SD card if available, otherwise boot from USB”.
This means that if you took the SD card out you could still boot from a USB mass storage device if you selected the first option. Choosing the USB option would work similarly where if the USB mass storage boot failed it would fall back to booting from the SD card. Select the mode you would like and it should take you back to the main menu screen to pick the storage device to write to.
Next choose your SD card and then choose “Write”. Now unplug your Pi and put in the newly prepared SD card. Connect the power and let it boot. This will restore your bootloader to defaults. You should see a continuous rapid green blinking light. You may now disconnect the power and put your original SD card back / reinstall Raspberry Pi OS and boot the Pi normally!
When to Attempt Recovery
There is a simple procedure to tell if your bootloader is corrupt. Turn off your Pi completely and remove the SD card / all attached storage. Now plug your Pi back in with no storage media in it.
If your Pi’s bootloader is healthy you will see the green light blink a few times and then enter a pattern where it will blink 4 times and then have a long pause. It will repeat these 4 blinks / pause in an endless loop.
If your Pi’s bootloader is NOT healthy the green light will not blink. If this is the case it is time to do a bootloader recovery!
Another situation that can warrant a bootloader recovery is when your bootloader is missing a bunch of settings despite being up to date. For example other readers have seen cases where despite having the latest firmware according to rpi-eeprom-update they are missing key settings like the BOOT_ORDER setting. If anything is unusual with your settings many commenters have had success with this method when nothing else worked!
Recovery Procedure
Before powering up your device insert the “recovery” SD card that we made earlier in the requirements section above and make sure that all USB devices are removed. Even keyboards have been known to cause issues so make sure absolutely everything is unplugged!
Now insert the SD card into the Pi and connect the power.
If the bootloader recovery is successful the green activity light will start blinking rapidly continuously (forever). In this case you have successfully recovered your bootloader! You may now insert a normal fully imaged SD card and it will boot normally again.
If anything other than a continuous rapidly blinking green light happens the recovery was not successful.
If Recovery Doesn’t Work
- Try with a freshly imaged Raspberry Pi OS SD card. Sometimes there are unexpected things going on with an image that can prevent the newer firmware from being used (see next bullet point for example).
- Check your “boot” partition of your main OS and make sure there isn’t a file in there called “recovery.bin”. If this file is present it will load that version of the bootloader firmware instead of what is flashed on your Pi. This file should only be present on the “recovery” SD card we created but people are finding these files on their main OS “boot” partition. It’s worth checking to make sure it is not on the main OS SD card / drive you are trying to boot with.
- There is a known (and strange) issue with Raspberry Pi 4’s and 32 GB SD cards where the Pi will abort the boot. If this might apply to you then read this post.
- Make sure you created your SD card correctly. A common pitfall is using cards above 32 GB and formatting them with ex-FAT instead of regular FAT/FAT32.
- Make sure *all* USB devices are unplugged from the Pi
- Try a different SD card if you have one available. SD cards do go bad all the time. If there’s any doubt here check out my Raspberry Pi storage benchmarks page to see the highest performing SD cards (you definitely want an A1+ rated one).
- Check your power cord. Make sure you are using a high quality USB-C power cord that is compatible with the Pi. Even if it was working before I have had several old Pi power supplies that worked for years die on me. If there’s any doubt grab a known reliable one like the Canakit USB-C Raspberry Pi 4 Power Supply*
If you’ve gone through all the steps and are positive it’s not one of the above “gotcha” issues then it’s time to go deeper. You need to observe your Pi’s exact behavior when you plug it in (what the lights are doing). Here is a table of different blink patterns and what they mean:
If your Pi’s LED behavior matches any of these codes then we now have much more to go on to diagnose why your Pi won’t boot. Some of them are very obvious but they’re all worth a quick web search once you have matched it to a code.
If your Pi’s behavior does not match one of these codes head to the official sticky post on the Raspberry Pi forums and scroll to the very bottom (post #4 specifically for Raspberry Pi). This tracks ongoing boot issues with the Pi 4 that may affect your Pi and a whole bunch of things to try. If you get through that post go all the way up to post #1 and start going down the list.
Could My Pi Be Dead?
It’s absolutely possible. Things like power issues (surges etc), wiring breadboards incorrectly, etc. can kill your Pi completely. That being said, if you have a Pi 4 that appears to be dead and you’ve gone through all my troubleshooting steps / the official sticky post / you aren’t covered by warranty then I would hold onto it for now as it’s still very new and some problems are still being investigated with the bootloader.
I have definitely killed a couple myself. I had a 3B+ that I had been using for a year building images (basically beating the crap out of it) on that finally had a hardware failure and would no longer boot. I wasn’t too sad about this one because I absolutely beat the crud out of these devices and push them to the absolute limit.
My more heartbreaking one was that I have killed a 4 GB Pi 4 that I got right at the Pi 4’s launch. I left this Pi in a very hot area running an experimental image that didn’t have proper firmware on it for about 2.5 weeks and now upon powering it up the green light will start blinking like it’s about to start booting then the green light will freeze and stay stuck on forever. I have a couple other Pi 4’s so I know all my cards and power supplies are good.
Make sure you’ve reviewed the official sticky post I linked in the previous section before jumping to this conclusion though. These things are not fragile and over all the years of running this blog it’s pretty amazing I’ve only killed 2 of them with the insane things I try on them all the time.
I may be able to help if you want to leave a comment here with *exactly* what behavior you’re seeing when you try these procedures, when you plug it in with no SD card in it, when you plug it in with a SD card in it, any little details will help!
Other Resources
For headless configuration of your Raspberry Pi using the Pi Imager
If you’re trying to setup USB mass storage booting (like with a SSD) check out my Raspberry Pi 4 Native USB Booting Guide
If you want to see which Pi storage performs the fastest and get an idea of what kind of drives to look for check out my 2020’s Fastest Raspberry Pi 4 Storage Benchmarks
If you have one of the new Raspberry Pi 400 kits *then don’t miss my Pi 400 Overclocking and SSD Setup Guide
Hi James, hope you’re well.
I’m running “sudo rpi-eeprom-update -a”, and it says the bootloader is up to date, but files point to April 2021 rather than any more recent release. What can I do to update to the most recent version?
Also, I’m using a usb3 enclosure and ssd drive, do you know of any known stability problem with recent firmwares?
Lastly, which one is the more stable/safer option between latest and default? I find the terminology confusing.
Thanks a lot!
Luca
BOOTLOADER: up to date
CURRENT: Thu 29 Apr 2021 04:11:25 PM UTC (1619712685)
LATEST: Thu 29 Apr 2021 04:11:25 PM UTC (1619712685)
RELEASE: default (/lib/firmware/raspberrypi/bootloader/default)
Use raspi-config to change the release.
VL805_FW: Using bootloader EEPROM
VL805: up to date
CURRENT: 000138a1
LATEST: 000138a1
Hey Luca,
Welcome back! So I think the issues is that your release is on default. It’s definitely possible to go to newer ones though by changing the release. The terminology is confusing for sure.
The best way to change this is to change your release to “latest” by typing:
sudo raspi-config
Now we will choose menu 6 for “Advanced Options” and then you should see “Bootloader Version” as option #7 or A7. Choose that option and you should be able to switch from “default” to “latest”.
Now if you run it again it should take you to the latest release!
Thanks James!
Ok, mystery solved. I run sudo apt update to force update the repos and only then it flag that rpi-eeprom was out of date. Updating that revealed there were new bootloader versions available.
I’m currently using the stable version from Mar 2022.
Interestingly I didn’t need to run “sudo apt full-upgrade”. I have a two year old OS, but I fear running it for fear of breaking my retropie build.
Do you think would it be ok to have the latest repos but NOT updating the OS and using the latest bootloader be ok?
Best!
Hey Luca,
Excellent! That sounds right. The firmware versions are all actually stored on the Pi oddly enough. You actually have every version of every bootloader ever on your Pi that you can see here:
/lib/firmware/raspberrypi/bootloader/
This has different folders for beta, etc. and if you go in the folder you’ll see that it has every version like this:
pi@pi400:/lib/firmware $ ls /lib/firmware/raspberrypi/bootloader/stable
pieeprom-2020-04-16.bin pieeprom-2020-09-03.bin pieeprom-2021-02-16.bin pieeprom-2021-11-22.bin pieeprom-2022-03-10.bin
pieeprom-2020-06-15.bin pieeprom-2020-12-11.bin pieeprom-2021-03-18.bin pieeprom-2021-12-02.bin recovery.bin
pieeprom-2020-07-16.bin pieeprom-2021-01-11.bin pieeprom-2021-04-29.bin pieeprom-2022-01-25.bin vl805-000137ad.bin
pieeprom-2020-07-31.bin pieeprom-2021-01-16.bin pieeprom-2021-07-06.bin pieeprom-2022-02-08.bin vl805-000138a1.bin
These are updated through apt so your resolution makes perfect sense for this. It just didn’t have the newer files downloaded and “cached” on the device. You would think it would make more sense to just download the current one when you run rpi-eeprom-update but there’s probably upsides to doing it this way and letting the tool figure out a good time to automatically apply it (usually reboots).
Automatic deployment seems to be what it’s mostly set up for which is why running rpi-eeprom-update manually can be a little quirky (95-98% of Pis would probably never get a firmware update if this had to always be actively ran and that still happens a lot especially when not using Raspberry Pi OS or if apt is broken).
I’ve also seen the versions get “stuck” and rpi-eeprom-update be unable to update them. In those cases the SD card recovery image covered in this guide will fix it (and it’s the only thing that will from what I’ve seen once they’re frozen/stuck on an old version and rpi-eeprom-update can’t update it despite having the updates in those folders we covered earlier). After the flash with the SD card recovery image rpi-eeprom-update will start working again normally.
I think you’ll be totally fine not updating the OS yet. If you went to beta you can go all the way up to pieeprom-2022-04-26.bin but I wouldn’t recommend this without updating the OS. The beta version has optional drive encryption and new features. Although I’m not certain that it won’t work with an older OS version (it might) I would say it’s many, many times more likely that you may have some kind of of problem with “beta” which is usually why they keep it in that branch.
Latest should be okay!
Hi James,
I’m using a late Jan 2022 version of the Pi Imager but under Misc. there isn’t an option to create an EEPROM recovery disk. It looks like they have removed the option.
Thank you for the guide on updating the EEPROM. I had seen the file being downloaded but wondered how it got installed.
Hey Chris,
Oh wow, thanks for bringing this to my attention! It has to do with the new Raspberry Pi bootloader stuff they’re doing. For example you can now completely encrypt your Raspberry Pi’s storage which was never really possible (at least not with good performance) but this is native firmware-level support and should be fantastic.
The new option should be called “Bootloader” with the description of “Restore the factory default settings (for the bootloader) and change boot priority” in the “Misc Utility Images” section. It will pull up one more menu that will let you pick the default boot option you want (SD boot, USB boot, network boot, etc).
I’ll get the article updated as well!
I have ran the following command
sudo rpi-eeprom-update
I get the following message
*** UPDATE AVAILABLE ***
BOOTLOADER: update avaliable
CURRENT: Thu 3 Sep 12:11:43 UTC 2020 (1599135103)
LATEST: Tue 25 Jan 14:30:41 UTC 2022 (1643121041)
RELEASE: default (/lib/firmware/raspberrypi/boot loader/default)
Use raspi-config to change the release.
VL805_FW: Using Boot Loader EEPROM
VL805: up to date
CURRENT: 000138a1
LATEST: 000138a1
Saying use raspi-config to change the release.
How do I go about doing this.
Or is another easy way in doing the update.
Hey Loizos,
Try a:
sudo rpi-eppmrom-update -a
sudo reboot
Then when you run it again it should be running the latest version!
Hi James,
This may sound wied what I’m going to ask you!
When I run the following commands.
sudo rpi-eeprom-update -a
Sudo reboot
Do I need to have a ethernet cable plug into the Raspberry Pi 400 or or is this done over WiFi.
Or the firmware is on the SD card waiting to be updated.
Hey Loizos,
Don’t sweat it at all, that’s a great question! Let me see if I can break down how it works the best I can.
Basically all the updates are already on the device. You can see these updates on the filesystem at:
/lib/firmware/raspberrypi/bootloader/
You’ll see it has beta, stable, critical firmware updates and that not only are the firmware updates on there, pretty much *every* firmware version is already on there. These are upgraded with apt basically.
Now we can answer your question. Because they’re basically already on there it’s definitely totally safe to not have the network cable plugged in. Basically what is happening is that when you run the ‘-a’ flag it triggers upon reboot to load that version of the firmware if that makes sense.
It should be safe to do this. It’s basically on the SD to be upgraded like you said. Hopefully that helps!
Hi James,
The way you explained it makes a lot of sense now.
You been a very grateful to me in the source of information you supplied.
I greatly appreciate your help James.
Thank you James.
Hey Loizos,
No problem at all, thanks for the kind words and take care!
I have a Pi4 that was running Home Assistant – it stopped working one day and now will continuously have the 4 short blinks. I have tried 3 different SD cards and a SSD but i get the same behavior (4 blinks when SD card is not inserted too.
I have tried reloading the bootloader as discussed above but no change…….have i killed it?
Hey Graeme,
When you tried the bootloader recovery what behavior did you get? I had a monitor plugged in the last time to the HDMI that I did it and the monitor actually turned green afterward indicating it was done and successful.
I have had one that did this once and it was dead but I would try the recovery a couple of more times for sure and maybe plug in a screen so you can see if you’re getting that behavior or of something else is happening. Hopefully we can get it working / figured out!
James – screen stays blank, I get 6 LED blinks (possibly 7) when i restart and then it goes back to 4 blinks……
Hey Graeme,
I have had some like this before. One thing you should try first is to completely format your SD card with the SD card association’s tool (Windows and Mac).
The reason I suggest this is that often old partitions will interfere even if the SD card appears to be blank. It’s worth a shot because the alternative would probably mean your SD card or some internal Pi component is dead but I wouldn’t give up before trying this first and making sure it’s a completely blank SD card for sure. Hopefully that helps!
Firstly, my Pi 4 did boot and it showed the bootloader recovery section. It showed that my ‘sdcard’ was having not read, so I went and did a EEPROM configuration form RPI Imager. Then the green light never flashed again.
Is my Pi dead or defective?
Please help!
Hey Max,
I would assume that your SD card is dead before your Pi is dead, but it is possible the SD card slot is damaged as well. Do you have a spare SD card you could try?
You may also want to have it make the recovery image that it flashes to a SD card and try that way but it does sound like it’s having trouble reading that card!
My week old Pi 4 wouldn’t boot. Pie logo flashed then “No Signal” moving on screen. Screen then goes blank. Removed everything attached to my Pi. Flashed “boot from SD” recovery image using Pie Imager, put in SD card slot and powered on. Green light on never flashes, stays constantly on.
Out of options, tried every fix I could find.
Is my Pi dead, defective?
Please help!
Hey Charles,
This is not sounding good at all! If it’s only a week old I would exchange it. The green light not blinking is not a good sign. In the past I’ve seen it be the SD card slot that is defective (meaning it can’t read the recovery image). I’ve also seen it be something literally falling off the Pi before that where Robocoder resoldered to the board and got working here.
The other thing to double check is your SD card. If the SD card is actually the problem then the recovery image won’t read correctly either from it and in that case there may be nothing wrong with the Pi. SD card failures are many, many times more common than Pi hardware failures (SD cards are a wearable item with a limited number of write cycles and many are made dirt chip which further lowers reliability) so we always need to check this in this situation. It’s definitely worth trying a spare!
This is a serious failure though. If it’s only a week old then that means something has been wrong with it from the factory and either the SD card slot failed or something wasn’t soldered securely to the board at the factory and fell off like Robocoders. At any rate, with only a week in I would switch it out as I doubt you will have any trouble with a replacement!
I had a Pi 4B 2 GB that stopped booting. I suspected the bootloader, but as time wore on, I found that it was a hardware failure. A resistor fell off. I soldered it back on and the Pi is good as new.
Hey Robocoder,
Wow, that is not one I’d heard of before! I was able to find some other cases of similar things happening though like here.
That makes me wonder if I need to check some of my old Pis that won’t work anymore to see if any of these resistors/capacitors have fell off on those boards. I guess I always assumed some chip was internally fried or something like that but didn’t consider pieces literally falling off the Pi.
Thanks for leaving this, it’s something everyone should probably check on their boards that is having trouble as well (that there aren’t any pieces missing or broken off on the board if you compare it to a picture of a fully populated board)!