> Complete documentation index: [llms.txt](/llms.txt). Markdown versions of all pages are available by appending `.md` to page URLs.

# Updating Firmware

> Update Supernova and Pulsar firmware in the browser at dfu.binho.io, by drag and drop, or with PyCosmicSDK, and check which bootloader is installed.

The latest firmware for the **Binho Supernova** and the **Binho Pulsar** is **4.6.1**. See [Firmware Release Notes](/releases/firmware-release-notes/) for what changed in each version.

There are three ways to install it. All three need the adapter to have the **Airlock bootloader**, which every adapter on firmware 4.3.0 or later already has.

| Method | Requires | Best for |
| --- | --- | --- |
| [Browser: dfu.binho.io](#update-in-the-browser) | Chrome or Edge | Most users |
| [Drag and drop](#update-by-drag-and-drop) | Any file manager | No Chromium browser, or offline machines |
| [PyCosmicSDK](#update-with-pycosmicsdk) | Python 3.10–3.14 | Scripted and lab setups |

:::danger
**Never load Pulsar firmware on a Supernova, or Supernova firmware on a Pulsar.** The files are named `supernova-app-…` and `pulsar-app-…`. A cross-loaded image can leave the adapter unusable until it is recovered at the factory.

:::

:::note
Mission Control 3 does not update firmware yet. Use one of the methods below.

:::

## Check the Firmware and Bootloader

The firmware version shows which bootloader the adapter has:

| Firmware version | Bootloader | What to do |
| --- | --- | --- |
| 4.3.0 or later | Airlock | Update with any method on this page. |
| 4.2.x or earlier | Legacy | Do the one-time [bootloader migration](#one-time-bootloader-migration) first. |

To read the firmware version:

* **Mission Control 3**: the version is shown on the device card under **Connected Devices**.
* **dfu.binho.io**: click **Connect**; the page shows the **Application Version**.
* **PyCosmicSDK**:

  ```sh
  pip install pycosmicsdk
  python -c "import pycosmicsdk; print([(d.model.name, d.serial_number, d.fw_version) for d in pycosmicsdk.list_devices()])"
  ```

  An adapter waiting in its bootloader reports `bootloader` as its version.

The bootloaders can also be told apart once the adapter is in bootloader mode and shows up as a USB drive named **SUPERNOVA** or **PULSAR**:

| | Airlock bootloader | Legacy bootloader |
| --- | --- | --- |
| Drive size | about 2 MB | about 32 MB |
| USB device name | `Supernova BTLDR` / `Pulsar BTLDR` | `LPCXpresso 55s36` (Supernova) / `LPCXpresso 55s16` (Pulsar) |
| Accepts | `.afx` files | `.gfi` files |
| LEDs while waiting | one green LED moving back and forth | no animation |

## Update in the Browser

[dfu.binho.io](https://dfu.binho.io) updates the adapter from a browser tab, with nothing to install. It uses WebUSB, so it works in **Google Chrome** or **Microsoft Edge** on desktop or Android. Firefox and Safari are not supported. Announcement on binho.io: [Update your firmware right from the browser](https://binho.io/whats-new/update-your-firmware-right-from-the-browser/).

1. Plug in the adapter and close any app that is using it (Mission Control, a Python script).
2. Open [dfu.binho.io](https://dfu.binho.io).
3. **Connect**: click **Connect** and pick the adapter in the browser's device list. If the adapter is running its firmware, the page switches it to bootloader mode by itself, and the browser may ask for it to be picked a second time. The page then shows the **Product**, **Bootloader Version** and **Application Version**.
4. **Firmware**: pick the latest version (4.6.1) from the list.
5. **Flash**: check the product and file, then click **Begin Update**. A block counter shows the progress. Do not unplug the adapter.
6. **Verify**: the adapter restarts. Click **Grant Access & Verify** and pick the adapter again. The page reads back the product, firmware version, hardware revision and serial number, and shows **Verified: firmware is running**.

:::note
**Do not skip step 6.** Talking to the new firmware once confirms it to the bootloader. An adapter that never completes this check starts in bootloader mode again after its next power cycle. If that happens, run the update again.

:::

On **Linux**, the browser needs permission to open the adapter. Set up the `udev` rules in [Solving USB Connection Issues on Linux](/support/troubleshooting/solving-usb-connection-issues-on-linux/) first.

## Update by Drag and Drop

With the Airlock bootloader, the adapter appears as a USB drive and installs any `.afx` file copied onto it. This works on Windows, macOS and Linux with no extra software.

1. Download the `.afx` file for the adapter from [Latest Firmware](#latest-firmware).
2. Put the adapter in bootloader mode, in one of these ways:
   * Click **Connect** on [dfu.binho.io](https://dfu.binho.io): it switches the adapter to bootloader mode.
   * Run the PyCosmicSDK command in [step 2 below](#update-with-pycosmicsdk).
   * An adapter whose last update was never verified is already in bootloader mode when plugged in.
3. A drive named **SUPERNOVA** or **PULSAR** appears. One green LED moves back and forth while the adapter waits.
4. Copy the `.afx` file onto the drive. The LEDs fill left to right in blue as the firmware is written.
5. The adapter restarts and the drive disappears. This is expected; the operating system may warn that the drive was removed.
6. **Confirm the new firmware**: open the adapter once, in Mission Control 3 or with PyCosmicSDK:

   ```python
   import pycosmicsdk

   with pycosmicsdk.Device.open() as device:
       print(device.info.fw_version)
   ```

   Skipping this makes the adapter start in bootloader mode again after its next power cycle.

:::note
Copy one firmware file per bootloader session. If a copy is interrupted or fails, unplug the adapter, plug it back in, and copy the file again.

:::

## Update with PyCosmicSDK

Use this method to update adapters from a script. It needs [PyCosmicSDK](/software/pycosmicsdk/) 1.6.0 or later and an adapter on firmware 4.3.0 or later.

1. Install PyCosmicSDK and list the connected adapters, their serial numbers and firmware versions:

   ```sh
   pip install pycosmicsdk
   python -c "import pycosmicsdk; print([(d.model.name, d.serial_number, d.fw_version) for d in pycosmicsdk.list_devices()])"
   ```
2. Put the adapter in bootloader mode, using its serial number from step 1:

   ```python
   import pycosmicsdk
   from pycosmicsdk import ResetTarget

   with pycosmicsdk.Device.open(serial="<serial number>") as device:
       device.reboot(into=ResetTarget.BOOT)
   ```
3. The adapter restarts as a USB drive named **SUPERNOVA** or **PULSAR**.
4. Copy the `.afx` file for **that** adapter onto the drive, from [Latest Firmware](#latest-firmware).
5. The adapter installs the file and restarts; the drive disappears.
6. Run the command from step 1 again and open the adapter once, as in [drag and drop step 6](#update-by-drag-and-drop). It now reports the new version.

For the full device lifecycle (reboot, reconnect, timing), see the PyCosmicSDK [lifecycle guide](https://binhollc.github.io/pycosmicsdk/guides/lifecycle.html).

## One-Time Bootloader Migration

Adapters that left the factory with firmware 4.2.x or earlier have the legacy bootloader. Firmware 4.3.0 and later cannot be installed on it. Migrate once, then update as usual.

:::caution
* Run the migration file **once**, and only on an adapter with the legacy bootloader. Do not use it on an adapter that already has Airlock.
* Do not unplug the adapter or let the computer sleep during the migration. An interrupted migration can leave the adapter unable to start; [contact support](/support/contact-us/) before trying again.
* Mission Control 2.16.1 and earlier do not work with Supernova or Pulsar firmware 4.x. Use Mission Control 3 for those adapters.
* To go back to the legacy bootloader, [contact support](/support/contact-us/).

:::

1. Download the migration file for the adapter:

   | Adapter | Migration file |
   | --- | --- |
   | Supernova | [supernova-airlock-bootloader-v0.2.6-self-update.gfi](https://cdn.binho.io/fw/supernova/airlock-bootloader/migration/supernova-airlock-bootloader-v0.2.6-self-update.gfi) |
   | Pulsar | [pulsar-airlock-bootloader-v0.2.6-self-update.gfi](https://cdn.binho.io/fw/pulsar/airlock-bootloader/migration/pulsar-airlock-bootloader-v0.2.6-self-update.gfi) |

2. Put the adapter in its legacy bootloader mode with the Python script for the adapter and firmware below. A ~32 MB drive named **SUPERNOVA** or **PULSAR** appears.
3. Copy the migration `.gfi` file onto the drive. The adapter installs the Airlock bootloader and restarts.
4. The adapter comes back already in Airlock bootloader mode, as a ~2 MB drive. Install firmware 4.6.1 with dfu.binho.io using **Choose .afx file** ([Update in the Browser](#update-in-the-browser), from step 3) or by [copying the `.afx` file](#update-by-drag-and-drop) (from step 4).
5. Confirm the new firmware as in [drag and drop step 6](#update-by-drag-and-drop).

If the adapter stays in bootloader mode after the migration, the migration worked and the firmware copy did not: repeat step 4.

### Enter the Legacy Bootloader from Python

Use a Python virtual environment, so these older SDK versions do not conflict with PyCosmicSDK:

```bash
python -m venv env
source env/bin/activate  # Linux/macOS
env\Scripts\activate     # Windows
```

Then run the script that matches the adapter and its current firmware. The LEDs turn red and the drive appears within a few seconds. If nothing happens, check that the SDK version matches the firmware version.



**Supernova, firmware 4.0–4.2**

```sh
pip install binhosupernova==4.2.0
```

```python
from binhosupernova.supernova import Supernova

device = Supernova()
device.open()
device.enterBootMode(1)
```



**Supernova, firmware 3.x**

```sh
pip install binhosupernova==3.2.0
```

```python
from BinhoSupernova.Supernova import Supernova

device = Supernova()
device.open()
device.enterBootMode(1)
```



**Pulsar, firmware 4.0–4.2**

```sh
pip install binhopulsar==1.2.0
```

```python
from binhopulsar.pulsar import Pulsar

device = Pulsar()
device.open()
device.enterBootMode(1)
```



**Pulsar, firmware 3.x**

```sh
pip install binhopulsar==0.3.0
```

```python
from BinhoPulsar.Pulsar import Pulsar

device = Pulsar()
device.open()
device.enterBootMode(1)
```



## Latest Firmware

| Adapter | Version | File | Install with |
| --- | --- | --- | --- |
| Supernova | 4.6.1 | [supernova-app-4.6.1.afx](https://cdn.binho.io/fw/supernova/4.6.1/supernova-app-4.6.1.afx) | Airlock bootloader |
| Pulsar | 4.6.1 | [pulsar-app-4.6.1.afx](https://cdn.binho.io/fw/pulsar/4.6.1/pulsar-app-4.6.1.afx) | Airlock bootloader |
| Nova | 0.2.8 | [binho-nova-app-secure-v0.2.8.fig](https://cdn.binho.io/fw/nova/0.2.8/binho-nova-app-secure-v0.2.8.fig) | Mission Control 2 (see below) |

Changes in each version, and known limitations: [Firmware Release Notes](/releases/firmware-release-notes/). Earlier Supernova and Pulsar versions back to 4.3.0 are listed on [dfu.binho.io](https://dfu.binho.io). To go back to firmware 3.x on an adapter that has the Airlock bootloader, [contact support](/support/contact-us/).

## Binho Nova

<details>

<summary>Update a Binho Nova with Mission Control 2</summary>

The Binho Nova is updated from Mission Control 2. Download it from the [binho.io downloads page](https://binho.io/test-measurement/downloads/).

**Automatic update**

1. Launch Mission Control 2 and plug in the Nova.
2. Open the **Connection** menu, choose the Nova and connect.
3. If the firmware is out of date, a dialog offers **Update Firmware**. Click it and wait for the update to finish, then click **OK**.

Keep the Nova plugged in, the computer awake and the internet connection up until the update finishes.

<figure><img src="/files/image%20(48).png" alt="Mission Control 2 incompatible firmware dialog"><figcaption><p>Mission Control 2: incompatible firmware dialog</p></figcaption></figure>

When an older supported version stays in use, update later with the **Update Firmware** button below the device information table:

<figure><img src="/files/image%20(49).png" alt="Mission Control 2 device information with the Update Firmware button"><figcaption><p>Mission Control 2: device information for an older supported firmware</p></figcaption></figure>

**Manual update (a specific version)**

1. Connect to the Nova in Mission Control 2 as above.
2. Click **ENTER BOOTLOADER MODE** on the right side of the window. The Nova appears as a USB drive.
3. Copy the `.fig` firmware file, for example [binho-nova-app-secure-v0.2.8.fig](https://cdn.binho.io/fw/nova/0.2.8/binho-nova-app-secure-v0.2.8.fig), onto the drive.
4. Reconnect in Mission Control 2 and check the version in the device information.

<figure><img src="/files/enter_bootloader.png" alt="Mission Control 2 Enter Bootloader Mode button"><figcaption><p>Mission Control 2: Enter Bootloader Mode</p></figcaption></figure>

</details>