How to Upgrade X410-X440 MCU Firmware
From Ettus Knowledge Base
Application Note Number and Authors
AN-111 by Michael Dickens (draft of 2024-07-15)
Abstract
This document details how to download, extract, and install the X410/X440 USRP microcontroller ("MCU") firmware updates. This specific guide shows how to do the update to MCU firmware version 0.0.13823-82c52e33a
for any revision X410/X440 USRP (currently 5, 6, or 7).
NOTE: This guide assumes the following:
- A Linux host computer (we use Ubuntu / aptitude-based; others will work);
- The X410/X440 USRP is accessible to the Linux host computer via a USB cable connected to the USRP USB JTAG port;
- The X410/X440 USRP has power but is not powered on / is shut down;
- The X410/X440 USRP is the only USRP device connected in any form to the Linux host computer;
- This procedure should work regardless whether the USRP can boot or not.
Procedure from Linux Host
- Make sure
openocd
is installed on the Linux host computer/server. The following command works for Ubuntu / aptitude-based:sudo apt-get -y install openocd
. - Make sure the USRP and host computer are connected via the USB cable as noted in (b) above.
- Use
screen
to access the MCU on serial port 2:
sudo screen /dev/serial/by-id/usb-Digilent_Digilent_USB_Device_XXXX-if02-port0 115200
NOTE:XXXX
will be some unique string for this specific serial device and Linux configuration, for example25163520B2FE
. If you copy/paste the first part of the command, up tousb-
and then press the<tab>
key once or twice then all the options will be listed; use the entry forif02
and then finish off the command as noted with115200
. - Press the
<return>
key and the prompt>
should appear; assuming it does then enter the command:
eepromdump mb
NOTE: The first few lines of output will look something like the following
For an X410 USRP:
cache hit mb
For an X440 USRP:
usrp_eeprom_board_info (0x10) pid: 0x0410, rev: 0x0005, compat_rev: 0x0005, serial: 320B2FE
usrp_eeprom_module_info (0x11) pid: 0xa410, rev: 0x0003, serial: 32190B4
cache hit mb
usrp_eeprom_board_info (0x10) pid: 0x0440, rev: 0x0006, compat_rev: 0x0006, serial: 3284FCB
usrp_eeprom_module_info (0x11) pid: 0xa440, rev: 0x0004, serial: 32896F8
- Note the
compat_rev
part ofusrp_eeprom_board_info
, in this case for the X410 USRP5
and for the X440 USRP6
; this value can currently be 5, 6, or 7 and, in the future, higher numbers.
- Detach from screen via pressing the keys
^a
(<control>
thena
) then\
, then for the prompt (at the bottom) press they
key, which will come back to the usual shell prompt. - Download and extract the archive to the Linux host computer to the
~/Downloads
directory and then go into that directory (watch line wrap on the first command):
curl -o ~/Downloads/upgrade_mcu_titanium_v0.0.13823-82c52e33a.tar.gz https://files.ettus.com/binaries/misc/upgrade_mcu_titanium_v0.0.13823-82c52e33a.tar.gz
cd ~/Downloads
tar zxf upgrade_mcu_titanium_v0.0.13823-82c52e33a.tar.gz
cd upgrade_mcu_titanium_v0.0.13823-82c52e33a
- Run the MCU updater script:
sudo ./flash-firmware-from-host.sh
NOTE: This script will print the following:
This script updates the microcontroller firmware (RO and RW). The change is persistent across power cycles for the RO part. Running this script incorrectly can brick the device. This script may take upto a minute to run successfully.
Ensure that only one X410/X440 device is connected to the host machine at a time.
Steps:
1. Power off the X410/X440 device by running "shutdown -h now" or "poweroff" command from the Linux console. But leave the power connected and turned on.
2. Connect your X410/X440 device using the USB JTAG port to the host machine using a USB cable.
3. Ensure that only one X440/X410 device is connected at a time. No other USRP device should be connected.
4. Run this script.
5. Do not disconnect USB cable while the script is running as it may result in bricking of the device.
6. Power cycle the device after script has completed running successfully.
Updating the microcontroller firmware (RO part) is only required if the Ettus
Research support told you to do so.
Press "y" to continue
- Press the
y
key; the script will print:
Please enter the motherboard compat_rev number:
- Enter the
#
from thecompat_rev
info from step (5) (in this case5
for the X410 USRP or6
for the X440 USRP but use whatever you determined & the printout below will change accordingly), then press the<return>
key. The script will now print:The compat_rev 5 is within the supported range.
Hardare Rev: 5
Will use firmware file /home/uhd/Desktop/upgrade_mcu_titanium_v0.0.13823-82c52e33a/ec-titanium-rev5.bin
Press "y" to continue
- Press the
y
key; the script will now print out something like the following then terminate as well as try to boot the USRP:
Flashing ec-titanium-rev5.bin on hardware...
Open On-Chip Debugger 0.11.0
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
titanium
/home/uhd/Desktop/upgrade_mcu_titanium_v0.0.13823-82c52e33a
DEPRECATED! use 'adapter driver' not 'interface'
DEPRECATED! use 'adapter speed' not 'adapter_khz'
Info : clock speed 2000 kHz
Info : JTAG tap: stm32f4x.cpu tap/device found: 0x4ba00477 (mfg: 0x23b (ARM Ltd), part: 0xba00, ver: 0x4)
Info : JTAG tap: stm32f4x.bs tap/device found: 0x06441041 (mfg: 0x020 (STMicroelectronics), part: 0x6441, ver: 0x0)
Info : stm32f4x.cpu: hardware has 6 breakpoints, 4 watchpoints
Info : stm32f4x.cpu: external reset detected
Info : starting gdb server for stm32f4x.cpu on 3121
Info : Listening on port 3121 for gdb connections
Info : JTAG tap: stm32f4x.cpu tap/device found: 0x4ba00477 (mfg: 0x23b (ARM Ltd), part: 0xba00, ver: 0x4)
Info : JTAG tap: stm32f4x.bs tap/device found: 0x06441041 (mfg: 0x020 (STMicroelectronics), part: 0x6441, ver: 0x0)
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x080001f8 msp: 0x20000400
Info : device id = 0x30006441
Info : flash size = 512 kbytes
Info : JTAG tap: stm32f4x.cpu tap/device found: 0x4ba00477 (mfg: 0x23b (ARM Ltd), part: 0xba00, ver: 0x4)
Info : JTAG tap: stm32f4x.bs tap/device found: 0x06441041 (mfg: 0x020 (STMicroelectronics), part: 0x6441, ver: 0x0)
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x080001f8 msp: 0x20000400
shutdown command invoked
- After the USRP shuts down, power it back up. Repeat command (3) then at the
>
prompt issue the commandversion>/code>; the output should look like the following for when the <code>compat_rev
is5
; the #rev5
will match that from Step (5):
Chip: stm stm32f412
Board: 0
RO: titanium-rev5_v0.0.13823-82c52e
RW: titanium-rev5_v0.0.13823-82c52e
Build: titanium-rev5_v0.0.13823-82c52e
2024-03-04 15:58:54 @c09af2c5ef57
- Power on the USRP if it did not automatically do so after Step (12).
- Make sure that the USRP is connected to the host computer via a QSFP28 10/100 GbE link and/or the RJ-45 1 GbE link and that the networking is configured for your desired use-case, then run the following and see if the device comes up:
uhd_find_devices
NOTE:
- If you followed Steps (1) through (12) and if this command successfully finds the USRP then you are done! Congratulations on successfully upgrading the MCU firmware on your X410 or X440 USRP!
- If you jumped here without following Steps (1) through (12) because the USRP boots and is capable , or if this command does not succeed in finding the USRP, then proceed to the next Steps.