Pluto/M2k Firmware Updates

Latest Release

The latest release is available on GitHub:

The following files are included in the release packages:

  • boot.dfu - DFU file for First Stage Boot Loader, and U-Boot

  • boot.frm - Firmware file for First Stage Boot Loader, U-Boot

  • pluto.dfu - DFU file for Pluto Firmware (Firmware includes FPGA Bitstream, Linux Kernel, Device Drivers and User Space Software)

  • pluto.frm - Firmware file for Pluto Firmware

  • m2k.dfu - DFU file for M2k Firmware

  • m2k.frm - Firmware file for M2k Firmware

  • uboot-env.dfu - DFU file which includes the default U-Boot environment

Determining the firmware version

There are a few methods to determine which version of the firmware is currently loaded on the ADALM-PLUTO or ADALM2000.

Command Line

From a host which has libiio installed, you can query the device for its firmware version with:

iio_attr -a -C fw_version

SSH Access to the device

Using the default username (root) and password (analog), you can log into the device, and the splash screen will show the firmware version.

https://media.githubusercontent.com/media/plescaevelyn/adi-documentation/pluto/docs/tools/pluto/users/images/firmware/pluto_password.png

Mass Storage Device

The mass storage device includes an info.html file. Opening this in a browser and clicking on the “firmware” section will show the firmware version.

https://media.githubusercontent.com/media/plescaevelyn/adi-documentation/pluto/docs/tools/pluto/users/images/firmware/plutofirmwareversion.png

Pluto Rev C and D

Pluto Rev C and Pluto Rev D users can access the USB console via the power connector and determine the firmware version from the login splash screen.

Upgrading

Warning

Only update the firmware from a trusted source. Updating firmware from an untrusted source may render your device inoperable or compromise the security of your system.

Mass Storage Update

The preferred method of firmware update is to copy a firmware file (with a .frm extension) to the mass storage device provided by the target. The steps are:

  1. Copy the firmware file to the mass storage device

  2. Eject the device (don’t just unplug it)

  3. LED1 will start blinking rapidly

  4. Don’t disconnect the device until rapid blinking stops!

  5. The update process takes approximately 4 minutes

  6. When complete, the device will reappear as a mass storage device

Windows or OSX

Using the standard GUI:

  1. Download the .frm file from the latest release

  2. Copy it to the mass storage device

    https://media.githubusercontent.com/media/plescaevelyn/adi-documentation/pluto/docs/tools/pluto/users/images/firmware/win10_gui_update.png https://media.githubusercontent.com/media/plescaevelyn/adi-documentation/pluto/docs/tools/pluto/users/images/firmware/copyfirmware_osx2.png
  3. Eject the device (right-click and select “Eject” or use the eject button)

    https://media.githubusercontent.com/media/plescaevelyn/adi-documentation/pluto/docs/tools/pluto/users/images/firmware/eject-right-pluto-win10.png https://media.githubusercontent.com/media/plescaevelyn/adi-documentation/pluto/docs/tools/pluto/users/images/firmware/eject_osx.png
  4. Wait for LED1 to stop blinking rapidly

  5. The device will reappear when the update is complete

Linux

Using the command line:

analog@analog:~$ wget https://github.com/analogdevicesinc/plutosdr-fw/releases/download/v0.XX/pluto.frm
analog@analog:~$ cp pluto.frm /media/analog/PlutoSDR/
analog@analog:~$ sudo eject /media/analog/PlutoSDR

Network Update

For devices that are deployed remotely and accessed using the USB-to-Ethernet feature, firmware can be updated over the network using the update_frm.sh utility (available since firmware v0.29).

analog@analog:~$ ssh root@192.168.2.1
root@pluto:~# cd /tmp
root@pluto:/tmp# wget https://github.com/analogdevicesinc/plutosdr-fw/releases/download/v0.XX/pluto.frm
root@pluto:/tmp# unzip pluto.frm
root@pluto:/tmp# /sbin/update_frm.sh /tmp/*.frm
root@pluto:/tmp# reboot

DFU Update

When all else fails, or you want to recover from a bad firmware update, you can use DFU (Device Firmware Upgrade) mode to manually flash the device.

Entering DFU mode

The device can enter DFU mode in several ways:

Manually (three methods):

  1. Press the device button with a toothpick, paper-clip or similar and then apply power (plug in the USB cable)

  2. From the device console, run: device_reboot sf

  3. From the U-Boot console, run: run dfu_sf

Automatically:

If the device detects that the FIT (Flattened Image Tree) checksum is not correct, it will automatically enter DFU mode.

Detecting DFU mode

When in DFU mode:

  • The DONE LED is OFF, while LED1 is constantly ON

  • The USB Product ID (PID) changes from 0xb673 to 0xb674

You can verify DFU mode is active using:

Windows: Device Manager will show “PlutoSDR DFU” under “Universal Serial Bus devices”

https://media.githubusercontent.com/media/plescaevelyn/adi-documentation/pluto/docs/tools/pluto/users/images/firmware/device_manager_dfu.png

Linux: Run lsusb and look for device ID 0456:b674

analog@analog:~$ lsusb
Bus 002 Device 004: ID 0456:b674 Analog Devices Inc. PlutoSDR (DFU)

Mac: System Information → USB will show “PlutoSDR DFU” with Product ID 0xb674

https://media.githubusercontent.com/media/plescaevelyn/adi-documentation/pluto/docs/tools/pluto/users/images/firmware/dfumode_osx.png

Updating via DFU

Windows

Run the UPDATE.BAT script included with the DFU release package. This uses dfu-util to flash the device.

Note

On some systems, you may need to run the DFU utility twice. The first time it may fail, but the second attempt should succeed.

Linux or OSX
analog@analog:~$ sudo dfu-util -a firmware.dfu -D pluto.dfu

DFU Flash Partitions

The DFU partitions are listed in priority order for recovery:

  1. firmware.dfu - Linux Kernel, Device Drivers and Root Filesystem

  2. boot.dfu - U-Boot and First Stage Boot Loader

  3. uboot-env.dfu - U-Boot environment variables

  4. uboot-extra-env.dfu - Extra environment (calibration data, rarely modified)

If you are recovering from a bad firmware update, flash the firmware.dfu partition first. Only flash boot.dfu if absolutely necessary.

Notifications of new releases

To be notified of new firmware releases, you can “watch” the GitHub repository:

  1. Go to the PlutoSDR firmware repository

  2. Click the “Watch” button in the upper right

    https://media.githubusercontent.com/media/plescaevelyn/adi-documentation/pluto/docs/tools/pluto/users/images/firmware/watch.png
  3. Select “Custom” and check “Releases”

    https://media.githubusercontent.com/media/plescaevelyn/adi-documentation/pluto/docs/tools/pluto/users/images/firmware/watch2.png
  4. Click “Apply”

You will receive an email notification whenever a new release is published.