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

# MCU Programmer

> Flash a .hex, .bin or .elf file onto a microcontroller with the Mission Control 3 MCU Programmer, over SWD at 1 MHz through the Binho Atira.

The MCU Programmer flashes a `.hex`, `.bin` or `.elf` file onto a microcontroller through the Binho Atira debug probe, over SWD at 1 MHz. It needs no project or source code. It is in the desktop app only.

## Connect

Plug in the Atira, choose it in the bar at the top (**Binho Atira · S/N …**), then click **Connect**.

To power the target from the Atira, switch **Atira supply** from **0 V** to **3.3 V** and click **Supply 3.3 V**. The Atira then drives 3.3 V onto J4 pin 1: use it only for 3.3 V targets that are not powered through that pin.

The **Transaction Log** at the bottom has one entry per run, with the part, the file and the result. It can be searched, filtered, copied and exported.

## Choose the Target

**Target** lists the built-in parts, such as the STM32H503. To flash another MCU, click **Open pack…** and open the vendor's device family pack for it (`.pack` or `.atpack`). Its parts are added under **From your packs**, with flash size, address and core. Type in **Search targets** to filter the list. The pack stays open after a restart; **Close pack** goes back to the built-in parts. See [Install a Device Pack](/software/mission-control/tools/install-a-device-pack/) for where to get the pack.

Some parts in a pack are listed as **Not supported yet**, with the reason, for example a part with several separate flash regions. A part marked **Not supported yet: needs vendor connect steps** can still be flashed: Mission Control asks before every Flash or Erase, and runs only after **Flash at my own risk** or **Erase at my own risk** is clicked.

## Flash, Verify and Erase

* **Binary**: click **Choose…** and pick a `.hex`, `.bin` or `.elf` file. A `.bin` is written at the start of the target's flash; `.hex` and `.elf` files carry their own addresses.
* **Flash** writes the file. **Verify after flash** (on by default, remembered) reads it back afterwards. **Reset after flash** (on by default) resets the target so the new firmware runs; with it off, the core stays halted at the reset vector.
* **Verify** compares the flash with the file and reports a mismatch with its address.
* **Erase** erases the whole flash.
* **Reset** resets the target and runs it.
* Flash and Erase arm on the first click (**Click again to flash**) and run on the second.

## Checks Before Writing

* **Wrong MCU:** Flash and Erase first check that the MCU connected to the Atira is the part picked. If it is not, or it cannot be identified exactly, nothing is written. Pick the right part or open the right pack. If the pick is certain, type the part name to enable **Flash anyway** or **Erase anyway**.
* **Large erase:** flash is erased in whole sectors. If that erases much more than the image, or the area before it (where a bootloader may live), Flash shows the range first; **Erase and flash** goes ahead. **Don't show this again** stops the question for that MCU, and **Ask before a large erase** brings it back.
* **MCU Debugger attached:** the Programmer shows **Detach debugger**. Click it twice to end the debug session, then flash.