---
id: flashing-firmware
title: Firmware Flashing Prerequisites
sidebar_label: Flashing Firmware
sidebar_position: 1
---

import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';

## Overview

Before you flash your device it is prudent to verify that we have proper connectivity with the device being flashed. Outlined below are steps that can be taken to verify connectivity and, if necessary, to install the appropriate drivers. If you end up needing to install drivers be sure to reboot your computer afterwards to verify the installation is complete.

## Prerequisites

### Verify data cable

Verify you have a data cable (not a charging only cable) before proceeding. There's no definitive way to determine the difference in cables if you aren't willing to pull it apart. Trying out a few cables will be the best way to verify.

Once you've located a data cable, check the following to see if you need to install a driver to communicate with your device.

:::tip
If you know you have installed the correct driver, the following step can be used to check if your cable is a data cable.
:::

### Test for driver installation

You can verify that you have a proper data cable (rather than a charge-only type cable) and that the appropriate drivers for your system are installed by performing the following test. Select your operating system below.

If you can see your device, you are ready to flash the firmware. Skip to the [Choose Firmware Flashing Method section](#choose-firmware-flashing-method).

If you don't see your device in the following test, you either:

1. Need to [install a driver](#install-appropriate-drivers).
2. Are currently using a charging only cable.

<Tabs
groupId="operating-system"
defaultValue="linux"
values={[
{label: 'Linux', value: 'linux'},
{label: 'macOS', value: 'macos'},
{label: 'Windows', value: 'windows'},
]}>
<TabItem value="linux">
Connect your Meshtastic device to your USB port, open a `Terminal` and enter the following command:

```shell
lsusb
```

You should see something like: `ID xxxx:xxxx Silicon Labs CP210x UART Bridge`, `ID xxxx:xxxx QinHeng Electronics USB Single Serial`, or `FIXME (WISBLOCK OUTPUT)`.

</TabItem>
<TabItem value="macos">

Navigate to `Apple Menu  > About This Mac > System Report... > Hardware > USB`. You should see something like `CP210X USB to UART Bridge Controller`, `CH9102 USB to UART Bridge Controller`, or `WisCore RAK4631 Board`. If not download the appropriate drivers below.

  </TabItem>
  <TabItem value="windows">

Navigate to `Device Manager > Ports (COM & LPT)`. You should see something like `Silicon Labs CP210X USB to UART Bridge (COM5)`, `Silicon Labs CH9102 USB to UART Bridge (COM5)`, or `FIXME (WISBLOCK OUTPUT)`. If not download the appropriate drivers below.

  </TabItem>
</Tabs>

## Install Appropriate Drivers

### ESP32 Drivers

You may need to install a driver from Silicon Labs for the [CP210X USB to UART bridge](https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers)

Some newer boards may require the CH9102 (CH340/CH341) Driver.

<Tabs
groupId="operating-system"
defaultValue="linux"
values={[
{label: 'Linux', value: 'linux'},
{label: 'macOS', value: 'macos'},
{label: 'Windows', value: 'windows'},
]}>
<TabItem value="linux">

[CP210X USB to UART bridge - Download](https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers)

[CH9102 Driver - Linux Download](http://www.wch-ic.com/downloads/CH341SER_LINUX_ZIP.html)

  </TabItem>
  <TabItem value="macos">

[CP210X USB to UART bridge - Download](https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers)

[CH9102 Driver - MacOS Download](https://github.com/WCHSoftGroup/ch34xser_macos)

  </TabItem>
  <TabItem value="windows">

[CP210X USB to UART bridge - Download](https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers)

[CH9102 Driver - Windows Download](http://www.wch.cn/downloads/CH343SER_ZIP.html)

[CH9102 Driver - Windows Download (Direct Download for Windows 7)](https://github.com/Xinyuan-LilyGO/CH9102_Driver)

  </TabItem>
</Tabs>

:::important
Reboot your computer after you have installed the driver to complete the installation.
:::

### NRF52 Drivers

<Tabs
groupId="operating-system"
defaultValue="linux"
values={[
{label: 'Linux', value: 'linux'},
{label: 'macOS', value: 'macos'},
{label: 'Windows', value: 'windows'},
]}>
<TabItem value="linux">

[CH9102 Driver - Linux Download](http://www.wch-ic.com/downloads/CH341SER_LINUX_ZIP.html)

  </TabItem>
  <TabItem value="macos">

[CH9102 Driver - MacOS Download](https://github.com/WCHSoftGroup/ch34xser_macos)

:::caution
With the latest versions of MacOS, the USB Serial driver is built-in. Do _NOT_ download the USB device drivers unless required. If you downloaded/installed any already, please remove them:

<details>
  <summary>Removing the CH34x (CH340/CH341) USB Drivers</summary>
  <div>
    <div>
      If you have already downloaded/installed the MacOS WCH-IC CH340
      ("CH341SER_MAC") drivers via the CH34x_Install_V1.5.pkg, you will have to
      Uninstall the kernel extension:
      <br />
      <br />
      1. Unplug your device
      <br />
      2. Open the Terminal and run:
      <br />
      3. sudo rm -rf /Library/Extensions/usbserial.kext
      <br />
      4. Reboot
    </div>
  </div>
</details>

:::

  </TabItem>
  <TabItem value="windows">

[CH9102 Driver - Windows Download](http://www.wch-ic.com/downloads/CH341SER_EXE.html)

  </TabItem>
</Tabs>

:::important
Reboot your computer after you have installed the driver to complete the installation.
:::

## Choose Firmware Flashing Method

For most users we recommend using the [Meshtastic Flasher application](meshtastic-flasher). It does a lot under the hood to prevent you from needing to use the terminal. It also allows you to set device settings and configure your device.

If you choose to flash the firmware using the manual method, [ESP32 based devices](flashing-esp32) and [NRF52 based devices](flashing-nrf52) have different methods. Select the appropriate one. If you don't know what chipset your device is, take a look at our supported hardware section.
