• Raspberry Pi
    4 min | 1758

    #Raspberry Pi 4: booting from an SSD (no MicroSD required!)

    Raspberry Pi | 4 min | 1758


    There are already many tutorials that explain how to boot the Raspberry Pi 4 from an SSD disk without any MicroSD card. This is just another one; but, it includes some tips that I founded on Google, because the other tutorials didn't work, nor did they explain the details.

    Let's start with some technical details. The Raspberry Pi 4 has an SPI-attached EEPROM, which contains code to boot up the system and more. The firmware of this EEPROM can be updated to include more functionalities or solves problems. The firmware release notes describe the functionalities added to each new release. As you can see, the beta release 2020-05-15 included the option to boot the Raspberry Pi from an SSD disk without any MicroSD card.

    This article is part of a series of tutorials for Raspberry Pi 4:

    Software and Hardware

    This software and hardware will be needed in this tutorial.

    DIY Instructions

    To get the Raspberry Pi 4 to boot from an SSD, you need (at the time of writing this article) to update the EEPROM. To do that, you need first to boot the Raspberry Pi using a MicroSD card. This card should have the Raspberry Pi OS installed. You need this card only once to update the EEPROM.

    After booting the Raspberry Pi using the MicroSD card, open a Terminal and type the following:

    sudo apt-get install rpi-eeprom
    You don't need to use the beta release anymore. The 2020-07-31 release was promoted to STABLE and this release includes the SSD booting option.

    Then, you need to switch the firmware to the beta "branch", editing the rpi-eeprom-update file:

    sudo nano /etc/default/rpi-eeprom-update

    to change the file section as follows:

    FIRMWARE_RELEASE_STATUS="critical"
    # To:
    FIRMWARE_RELEASE_STATUS="beta"

    Finally, run:

    sudo rpi-eeprom-update

    I got the following:

    BCM2711 detected
    Dedicated VL805 EEPROM detected
    *** UPDATE AVAILABLE ***
    BOOTLOADER: update available
    CURRENT: Thu 16 Apr 2020 05:11:26 PM UTC (1587057086)
     LATEST: Fri 31 Jul 2020 01:43:39 PM UTC (1596203019)
     FW DIR: /lib/firmware/raspberrypi/bootloader/beta
    VL805: update available
    CURRENT: 000137ad
     LATEST: 000138a1

    To flash the EEPROM firmware, just type the following:

    sudo rpi-eeprom-update -d -f /lib/firmware/raspberrypi/bootloader/beta/pieeprom-2020-07-31.bin

    and reboot the system.

    The EEPROM firmware version changes rapidly. Therefore, if you don't find the pieeprom-2020-07-31.bin file, just ls the folder to see the last beta version available i.e. ls /lib/firmware/raspberrypi/bootloader/beta/.

    After rebooting the system, you can check if the EEPROM firmware was installed, typing:

    $ vcgencmd bootloader_version
    
    Jul 31 2020 14:43:39
    version f8d1dc69144b10b4bd78b4b6d08658ac3005726d (release)
    timestamp 1596203019

    which matches the lastest firmware (LATEST: Fri 31 Jul 2020 01:43:39 PM UTC (1596203019)) described above.

    Additionally, if you type:

    $ vcgencmd bootloader_config
    
    [all]
    BOOT_UART=0
    WAKE_ON_GPIO=1
    POWER_OFF_ON_HALT=0
    DHCP_TIMEOUT=45000
    DHCP_REQ_TIMEOUT=4000
    TFTP_FILE_TIMEOUT=30000
    ENABLE_SELF_UPDATE=1
    DISABLE_HDMI=0
    BOOT_ORDER=0xf41

    The BOOT_ORDER with value 0xf41 means the following:

    0x1 - SD CARD
    0x4 - USB mass storage boot # needed for booting using an SSD
    0xf - RESTART (loop) - start again with the first boot order field

    Then, shut down the Raspberry Pi and remove the MicroSD card.

    Now, you need to flash Raspberry Pi OS on the SSD. You can use Rufus or the Raspberry Pi Imager on your PC and flash the OS image on the SSD.

    After you flash the image, replace the boot files with the newest *.dat and *.elf files from here: raspberrypi/firmware. Otherwise, you'll get the error USB-MSD boot requires newer software.

    Therefore, follow these steps:

    1. Download or clone the raspberrypi/firmware repository:
      git clone https://github.com/raspberrypi/firmware.git --depth 1
    2. Mount the SSD to the PC on which you flashed Raspberry Pi OS (just connect it to a USB port).
    3. Replace the files of the boot partition with the files inside the downloaded boot folder.

    Connect the SSD to a blue USB port of the Raspberry Pi and switch on the system. The Raspberry Pi will boot from the SSD without any MicroSD card.

    Performance

    I tested the SSD speed using agnostics (sudo apt-get install agnostics) and I got following results on an old SSD 840 EVO 250G:

    Raspberry Pi Diagnostics - version 0.4
    Sat Aug  8 17:21:22 2020
    
    Test : SD Card Speed Test
    Run 1
    prepare-file;0;0;29062;56
    seq-write;0;0;29088;56
    rand-4k-write;0;0;16574;4143
    rand-4k-read;22890;5722;0;0
    Sequential write speed 29088 KB/sec (target 10000) - PASS
    Random write speed 4143 IOPS (target 500) - PASS
    Random read speed 5722 IOPS (target 1500) - PASS
    Test PASS

    You can check your system using a MicroSD card, typing the following:

    sudo apt-get install agnostics
    
    agnostics

    If you got considerably worse results, you should think about changing your MicroSD card or using this tutorial to boot from an SSD :).


    Comments

    Isabellgracia 09.15.2020

    hi, I have checked so many website, your website is very amazing.