Early production units of the NVIDIA Jetson Orin Nano Developer Kits can flash their QSPI firmware to gain one more gigabyte of system memory. Looky here:
When you first boot up your Jetson Orin Nano Developer Kit, take a look at the available system memory. On early production units, we notice that even though there are 8GB of physical memory on the module, there are only 6.3GB available from the system. Normally we expect the system to reserve ~ 10% of memory on a system this size. That means that we have about 1GB less memory than we expect.
The firmware includes the bootloader(s), device configuration files and hardware configuration information.
Before the units go into production, there is typically “functional” firmware which may include extra memory carveouts for debugging and development. These extra carveouts are usually eliminated when the device enters production.
However, the early production units still have these memory carveouts in the firmware. Fortunately there is a firmware update which you can perform that will add back 1GB of system memory.
Jetson Orin Nano QSPI
The Jetson Orin Nano and Orin NX have a slightly different memory architecture from previous Jetson modules of the same form factor.
The previous Jetson Nano and Jetson Xavier NX are available in two flavors. The modules on the NVIDIA Jetson developer kits have a SD card. The firmware for these modules resides in a QSPI-NOR type of flash memory. The QSPI-NOR is a small chip on the Jetson module, which is commonly referred to as QSPI. NOR is a type of flash memory, QSPI is the serial interface which connects the flash memory to the Jetson Tegra chip. QSPI stands for Quad Serial Peripheral Interface.
On the other hand, the Jetson Nano and the Xavier NX production modules use a different type of flash memory called eMMC. This type of memory is similar to the flash memory in a USB thumb drive. The production modules do not have QSPI memory.
The bootloader firmware for the Jetson is kept on the eMMC. This is why the eMMC needs to be flashed before a system can boot from an external drive like a NVMe SSD. It is on the eMMC that the boot instructions reside.
There are advantages in the eMMC approach. One is parts count, simply using a eMMC chip of an appropriate size eliminates the need for all the support circuitry for an external drive. Reducing the parts count reduces the cost and complexity. If you can fit your application and data gathering requirements onto the eMMC, you can use a simpler carrier board.
However the major drawback is expandability. The eMMC for these modules can hold between 16 and 32GB. In the brave new world of machine learning, people simply didn’t have enough space to run their applications. The main advantage of having everything on the module disappears.
Orin Nano and Orin NX – No eMMC
There are probably a couple of reasons that there is no eMMC on the Orin Nano and Orin NX production modules. First is the reason above, plus bigger eMMC chips are expensive. Second has to do with parts availability. Having eMMC on board means another chip on board, with the usual parts availability issue.
In response NVIDIA simply adds a QSPI chip to the Orin small factor production modules. The QSPI chip holds the bootloader and hardware configuration files. The bootloader then loads Jetson Linux from a NVMe SSD attached to the carrier board.
Flashing the Orin Nano
There are a couple of ways to flash the new firmware on the Jetson Orin Nano Developer Kit. Remember that the developer kit is compatible with both the Orin Nano and the Orin NX modules. In order to flash the firmware, you will need an x86 PC, which we call the host. You will also need a data capable USB-C cable to connect the Orin Nano Dev Kit to the PC. Make sure that the cable is not only for charging, it must have data handling capabilities. You can use a GUI application that NVIDIA provides, called the SDK Manager. There is video on the JetsonHacks YouTube channel that provides a walk through of the process. If you are new to the flashing process, this is the NVIDIA preferred way to start.
Using the SDK Manager, you flash Jetson Linux to a new SD card and flash the QSPI firmware on the Jetson at the same time. An alternative method is to use the SDK Manager to flash Jetson Linux to a PCIe SSD and flash the QSPI firmware at the same time.
Flash the Orin Nano from the Command Line
The method here flashes only the QSPI. This is most useful for people that want to use the standard system SD card image that NVIDIA provides. Updating the QSPI firmware will gain the extra system memory, and any recent updates to the bootloader firmware. Note: If you are flashing the Orin Nano to boot from a SSD, then the QSPI firmware is also updated. You may not want to do the following procedure.
If you are a professional developer, or simply more comfortable using the Linux command line, you can flash the Orin Nano QSPI in the following manner. The entire process takes ~ 20 minutes, depending on the speed of your host machine and Internet connection.
Here is a link to the official NVIDIA documentation for flashing. The scripts here are convenience wrappers for those instructions.
$ git clone https://github.com/jetsonhacks/bootFromExternalStorage.git
$ cd bootFromExternalStorage
The get_jetson_files.sh script will download the Board Support Package (BSP) and sample root file system (rootfs) for the Jetson Orin and Xaviers. The script will then decompress the files and copy NVIDIA user space libraries into the rootfs (apply_binaries.sh). Last, the script will install the prerequisites libraries on the host to flash the Jetson.
Then, set the Jetson into force recovery mode. One way to do this is to remove the power, jumper pins 9 and 10 together on the J14 button header, and apply power to the Jetson. Connect the Jetson via the USB-C cable to the host machine. Running lsusb in a Terminal on the host should then show the Orin. The Orin Nano will show as 0955:7523 NVIDIA Corp. APX in force recovery mode.
You’re now ready to flash the QSPI. Switch over to the top level board support package directory, Linux_for_Tegra. For release 35.3.1, this will be:
$ cd R35.3.1/Linux_for_Tegra
$ sudo ./flash.sh -c ./bootloader/t186ref/cfg/flash_t234_qspi.xml jetson-orin-nano-devkit mmcblk0p1
The flash part will take ~ 15 minutes or so. After the flash is complete, you are ready to reboot your Jetson again. Make sure that you remove the jumper.
You should have ~ 7.2GB available on your system after this update.
The firmware update is a little inconvenient if you only use the SD card method of development. It’s an added bit of work to get your Jetson working to its desired potential. But with a little work, it’s certainly nice to have the extra system memory for running those memory intensive applications.