Skip to main content

Unitree Go2 Expansion Dock Upgrade: Orin Nano 8G → Orin NX 16G

Two Expansion Dock Variants

The Unitree Go2 Expansion Dock comes in two configurations, each equipped with a different NVIDIA Jetson Orin module:

Jetson Orin Nano 8GBJetson Orin NX 16GB
AI Compute40 TOPS100 TOPS
Memory8 GB16 GB
CPU6-core Arm Cortex-A78AE8-core Arm Cortex-A78AE
Max TDP15W25W

Two Expansion Dock variants

The NX 16G delivers 2.5× more AI inference performance than the Nano 8G, making it better suited for running more complex perception or control models on the robot. This guide documents the complete procedure for replacing the Nano 8G module with the NX 16G.


Why You Cannot Simply Swap the Module

A brand-new Jetson Orin NX 16G module ships with JetPack 6.2 (NVIDIA Jetson Linux 36.4.3), while the Unitree factory Expansion Dock runs JetPack 5.1.1 (NVIDIA Jetson Linux 35.3.1).

JetPack VersionJetson Linux Version
Unitree factory SSDJetPack 5.1.135.3.1
New NX 16G moduleJetPack 6.236.4.3

Upgrading from JetPack 5.x to JetPack 6.x is a major version jump, with low-level changes spanning the kernel, driver stack, and BSP structure. More critically, the Jetson module contains a dedicated QSPI-NOR Flash, which stores QSPI firmware (also known as Bootloader / MB2 / CBoot components) that must match the version of Jetson Linux being run.

NVIDIA's official documentation explicitly states that the QSPI firmware for Jetson Linux 35.x (JetPack 5.x) and Jetson Linux 36.x (JetPack 6.x) are incompatible with each other. If the QSPI firmware version does not match the OS version on the SSD, the Jetson will fail to boot — the boot chain cannot complete its handshake, resulting in a boot loop with no way to enter the system.

Reference: Flashing Support — NVIDIA Jetson Linux 36.4.4 Developer Guide (section: Updating Jetson Orin Nano Devkit from JetPack 5 to JetPack 6)

Official quote: "The halt is because of a mismatch between the bootloader in the QSPI and the file system in the SD card. The bootloader version is JetPack 6, and the file system is JetPack 5. JetPack 6 bootloader does not support the JetPack 5 file system."


Solution: Downgrade the QSPI Firmware on the NX 16G Module

Before inserting the NX 16G module into the Unitree Expansion Dock, you must first downgrade its QSPI firmware to a version compatible with JetPack 5.1.1 (Jetson Linux 35.3.1).

Required Hardware

  • A Jetson Carrier Board (to put the NX 16G into Force Recovery flashing mode)
  • A USB Type-C or Micro-USB cable (depending on the carrier board model)
  • A Linux host machine running Ubuntu

Steps to Flash the QSPI Firmware

  1. Install the NX 16G module onto the Jetson Carrier Board (do not insert the Unitree SSD at this point)
  2. Follow the carrier board instructions to enter Force Recovery Mode (typically by holding the Recovery button while powering on)
  3. Download the NVIDIA Jetson Linux 35.3.1 Driver Package (BSP) on the Linux host
  4. Flash only the QSPI — do not flash the rootfs, so there is no need to download the Sample Root Filesystem

For the exact QSPI-only flash command, refer to the following guide (it uses a JetPack 6 downgrade as the example, but the approach is identical — just substitute the corresponding BSP version):

Reference: GR00T JetPack Flashing Guide

Consult your carrier board's documentation to confirm the exact method for entering Recovery Mode and the correct cable connections.


After Flashing: Updating System Configuration Files

Once the QSPI firmware downgrade is complete, insert the NX 16G module into the Unitree Expansion Dock and boot from the original SSD. The system will come up, but the kernel will still be loading Nano 8G hardware descriptors and power management will be constrained to the Nano 8G profile. Three files need to be replaced so the system correctly identifies the NX 16G hardware.

Source of replacement files: Mount the NX 16G's Unitree factory image SSD on the current system (e.g. at /media/unitree/7073f027-1f76-471e-8386-b7ac9f58e0e6/) and copy the files directly from it.


1. Replace the Power Management Config nvpmodel.conf

FieldDetail
Source/media/unitree/7073f027-.../etc/nvpmodel.conf (NX 16G factory SSD)
Target/etc/nvpmodel.conf (current running system)
BackupBack up the original as /etc/nvpmodel.conf.nano8g.bak
BeforeOnly two power modes: 15W / 7W
AfterFour power modes available: MAXN / 10W / 15W / 25W
sudo cp /etc/nvpmodel.conf /etc/nvpmodel.conf.nano8g.bak
sudo cp /media/unitree/7073f027-.../etc/nvpmodel.conf /etc/nvpmodel.conf

2. Replace the Device Tree Blob (DTB)

The kernel uses the DTB (Device Tree Blob) to identify hardware. The Nano 8G and NX 16G use different DTB files; copy the correct file from the NX 16G factory SSD to overwrite the one in the current system.

FieldDetail
Source/media/unitree/7073f027-.../boot/dtb/kernel_tegra234-p3767-0000-p3768-0000-a0.dtb (NX 16G factory SSD)
Target/boot/dtb/kernel_tegra234-p3767-0000-p3768-0000-a0.dtb (current system)
sudo cp /media/unitree/7073f027-.../boot/dtb/kernel_tegra234-p3767-0000-p3768-0000-a0.dtb \
/boot/dtb/kernel_tegra234-p3767-0000-p3768-0000-a0.dtb

3. Update the Boot Config extlinux.conf

The FDT line in /boot/extlinux/extlinux.conf tells the kernel which DTB to load at boot. The Nano 8G and NX 16G DTB filenames differ by only one number segment:

FieldDetail
File/boot/extlinux/extlinux.conf
BackupBack up as /boot/extlinux/extlinux.conf.nano8g.bak
BeforeFDT /boot/dtb/kernel_tegra234-p3767-**0003**-p3768-0000-a0.dtb (Nano 8G)
AfterFDT /boot/dtb/kernel_tegra234-p3767-**0000**-p3768-0000-a0.dtb (NX 16G)
sudo cp /boot/extlinux/extlinux.conf /boot/extlinux/extlinux.conf.nano8g.bak
sudo sed -i 's/p3767-0003-p3768/p3767-0000-p3768/g' /boot/extlinux/extlinux.conf

After editing, verify that the FDT line in the file points to the p3767-0000 DTB.


Reboot and Verify

After completing all three steps, reboot:

sudo reboot

After rebooting, the kernel will load the NX 16G hardware descriptors. The system platform will correctly identify as Orin NX, power management will unlock the 25W and MaxN modes, and any EMC (memory controller) related errors will be gone.

Verify with the following commands:

# Check module model
cat /proc/device-tree/model

# Check available power modes
sudo nvpmodel -q

References