docs/doc/get_started/Flash_device.mdx
There are two ways to update your Omi device firmware:
<CardGroup cols={2}> <Card title="Via Omi App" icon="mobile"> **Recommended** - The easiest way to updateGo to **Settings → Device Settings → Update Firmware**
Follow the instructions below for your device
<Steps>
<Step title="Download Required Files" icon="download">
**Bootloader** (required for first-time setup or if corrupted):
- Download [bootloader0.9.0.uf2](https://github.com/BasedHardware/omi/releases/download/v2.0.1-Omi/bootloader0.9.0.uf2)
- Compatible with Seeed XIAO nRF52840 Sense (SoftDevice S140 7.3.0)
**Firmware** (choose your device):
- [DevKit 1 Firmware](https://github.com/BasedHardware/omi/releases?q=release_firmware+DK1)
- [DevKit 2 Firmware](https://github.com/BasedHardware/omi/releases?q=release_firmware+DK2)
</Step>
<Step title="Prepare Your Device" icon="check">
Before starting, ensure:
- Battery is above 50%
- Using a direct USB connection (avoid USB hubs)
- Have a small pin ready for the reset button
</Step>
<Step title="Enter DFU Mode" icon="power-off">
1. Connect your device via USB
2. Locate the reset button:
<Tabs>
<Tab title="DevKit 2">
Remove the lid and find the button labeled "RST"

</Tab>
<Tab title="DevKit 1">
Use the button shown below

</Tab>
</Tabs>
3. **Double-click** the reset button quickly
4. Your computer should show a drive named `/Volumes/XIAO-SENSE`
</Step>
<Step title="Flash the Device" icon="bolt">
**Install Bootloader** (if needed):
1. Drag `bootloader0.9.0.uf2` to the `/Volumes/XIAO-SENSE` drive
2. Wait for the drive to eject automatically
3. Put device back in DFU mode (repeat step 3)
**Install Firmware**:
1. Drag the firmware `.uf2` file to the `/Volumes/XIAO-SENSE` drive
2. Wait for completion (ignore "transfer incomplete" messages)
3. Device will restart automatically
</Step>
</Steps>
### Troubleshooting
<AccordionGroup>
<Accordion title="Device isn't recognized" icon="usb">
- Try a different USB cable (some cables are charge-only)
- Try a different USB port
- Avoid USB hubs - connect directly to your computer
</Accordion>
<Accordion title="Update fails" icon="rotate">
- Retry the process from the beginning
- Make sure battery is above 50%
- Try double-clicking the reset button faster
</Accordion>
<Accordion title="'Transfer incomplete' message" icon="clock">
This is normal! Wait 30 seconds, then check if the device restarted successfully.
</Accordion>
<Accordion title="Still having issues?" icon="circle-question">
See the [DevKit2 Firmware Guide](https://help.omi.me/en/articles/9995941-updating-your-devkit2-firmware) for additional help.
</Accordion>
</AccordionGroup>
<Warning>
CV1 requires a **special flashing cable** that connects to a J-Link programmer. Without this cable, the CV1 cannot be programmed.
</Warning>
### Prerequisites
<CardGroup cols={2}>
<Card title="Hardware Required" icon="plug">
- Omi CV1 device
- J-Link programmer
- Special SWD flashing cable
- USB cable
</Card>
<Card title="Software Required" icon="download">
- [J-Link Software](https://www.segger.com/downloads/jlink/)
- Latest firmware files from GitHub
</Card>
</CardGroup>
### Step 1: Download Latest Firmware
<Steps>
<Step title="Get Firmware Files" icon="download">
1. Go to [Omi GitHub Releases for CV1](https://github.com/BasedHardware/omi/releases?q=release_firmware+OMI+CV1)
2. Find the latest release
3. Download both files:
- `merged.hex` — Application core firmware
- `merged_CPUNET.hex` — Network core firmware
</Step>
<Step title="Replace Existing Files" icon="copy">
<Tabs>
<Tab title="macOS">
```bash
cd MAC/
# Optional: Backup existing files
mv merged.hex merged.hex.backup
mv merged_CPUNET.hex merged_CPUNET.hex.backup
# Copy new firmware files to this folder
```
</Tab>
<Tab title="Windows">
```cmd
cd WINDOWS\
# Optional: Backup existing files
# Rename merged.hex → merged.hex.backup
# Rename merged_CPUNET.hex → merged_CPUNET.hex.backup
# Copy new firmware files to this folder
```
</Tab>
</Tabs>
</Step>
<Step title="Verify Files" icon="check">
Ensure both files are updated:
- File sizes should match downloaded versions
- Modification dates should reflect the replacement
</Step>
</Steps>
### Step 2: Flash the Firmware
<Tabs>
<Tab title="macOS" icon="apple">
1. Install J-Link Software from [SEGGER](https://www.segger.com/downloads/jlink/)
2. Navigate to the MAC folder and flash:
```bash
cd MAC
# Flash network core first
JLinkExe -CommanderScript program_net.jlink
# Then flash application core
JLinkExe -CommanderScript program_app.jlink
```
</Tab>
<Tab title="Windows" icon="windows">
1. Install J-Link Software from [SEGGER](https://www.segger.com/downloads/jlink/)
2. Add J-Link to your PATH (default: `C:\Program Files\SEGGER\JLink\`)
3. Navigate to the WINDOWS folder and flash:
```cmd
cd WINDOWS
# Flash network core first
JLink.exe -CommanderScript program_net.jlink
# Then flash application core
JLink.exe -CommanderScript program_app.jlink
```
</Tab>
</Tabs>
### Verification
<Info>
If the LEDs start blinking after flashing, the update was successful! Confirm the firmware version in the Omi app.
</Info>
### Troubleshooting
<AccordionGroup>
<Accordion title="JLinkExe not found" icon="terminal">
- Verify J-Link is installed correctly
- Check that the installation path is in your system PATH
- Try using the full path to the executable
</Accordion>
<Accordion title="Connection issues" icon="plug">
- Try a different USB port or cable
- Ensure device is in programming mode
- Check that the flashing cable is properly connected
</Accordion>
<Accordion title="Flashing fails" icon="circle-xmark">
- Always flash the network core first
- Wait for each command to complete before running the next
- Ensure device has sufficient power
</Accordion>
<Accordion title="Firmware file errors" icon="file-circle-xmark">
- Re-download the firmware files
- Verify file integrity (sizes should match GitHub)
- Check for file corruption during download
</Accordion>
</AccordionGroup>