# First-time firmware installation procedure
- [NodeMCU](https://github.com/lyusupov/SoftRF/blob/master/software/firmware/binaries/README.md#nodemcu) (ESP8266)
- [ESP32](https://github.com/lyusupov/SoftRF/blob/master/software/firmware/binaries/README.md#esp32)
- [ESP32-S3](https://github.com/lyusupov/SoftRF/blob/master/software/firmware/binaries/README.md#esp32-s3)
- [ESP32-S2](https://github.com/lyusupov/SoftRF/blob/master/software/firmware/binaries/README.md#esp32-s2)
- [ESP32-C6](https://github.com/lyusupov/SoftRF/blob/master/software/firmware/binaries/README.md#esp32-c6)
- [ESP32-C3](https://github.com/lyusupov/SoftRF/blob/master/software/firmware/binaries/README.md#esp32-c3)
- [S76G](https://github.com/lyusupov/SoftRF/wiki/AcSiP-S7xG-flashing-instructions#s76g) (STM32L073)
- [CC1352R](https://github.com/lyusupov/SoftRF/wiki/Uni-Edition.-Firmware-maintenance-procedures#initial-installation)
- [CubeCell](https://github.com/lyusupov/SoftRF/blob/master/software/firmware/binaries/README.md#cubecell) (ASR650x)
- [nRF52840](https://github.com/lyusupov/SoftRF/blob/master/software/firmware/binaries/README.md#nrf52840)
- [LPC4320](https://github.com/lyusupov/SoftRF/blob/master/software/firmware/binaries/README.md#lpc4320)
- [ASR6601](https://github.com/lyusupov/SoftRF/blob/master/software/firmware/binaries/README.md#asr6601)
- [RP2040](https://github.com/lyusupov/SoftRF/blob/master/software/firmware/binaries/README.md#rp2040)
- [STM32WLE5](https://github.com/lyusupov/SoftRF/blob/master/software/firmware/binaries/README.md#stm32wle5)
## List by Model
Model|Instructions|Firmware folder
---|:---:|:---:
[Standalone Edition](https://github.com/lyusupov/SoftRF/wiki/Standalone-Edition)|[NodeMCU](https://github.com/lyusupov/SoftRF/blob/master/software/firmware/binaries/README.md#nodemcu)
[ESP32-C3](https://github.com/lyusupov/SoftRF/blob/master/software/firmware/binaries/README.md#esp32-c3)
[ESP32-C6](https://github.com/lyusupov/SoftRF/blob/master/software/firmware/binaries/README.md#esp32-c6)|[NodeMCU](https://github.com/lyusupov/SoftRF/tree/master/software/firmware/binaries/NodeMCU/SoftRF)
[ESP32C3](https://github.com/lyusupov/SoftRF/tree/master/software/firmware/binaries/ESP32C3/SoftRF)
[ESP32C6](https://github.com/lyusupov/SoftRF/tree/master/software/firmware/binaries/ESP32C6/SoftRF)
[Prime Edition Mk2](https://github.com/lyusupov/SoftRF/wiki/Prime-Edition-MkII)|[ESP32](https://github.com/lyusupov/SoftRF/blob/master/software/firmware/binaries/README.md#esp32)|[ESP32](https://github.com/lyusupov/SoftRF/tree/master/software/firmware/binaries/ESP32/SoftRF)
[Prime Edition Mk3](https://github.com/lyusupov/SoftRF/wiki/Prime-Edition-MkIII)|[ESP32-S3](https://github.com/lyusupov/SoftRF/blob/master/software/firmware/binaries/README.md#esp32-s3)|[ESP32S3](https://github.com/lyusupov/SoftRF/tree/master/software/firmware/binaries/ESP32S3/SoftRF/MassStorage)
[Ham Edition](https://github.com/lyusupov/SoftRF/wiki/Ham-Edition)|[ESP32-S3](https://github.com/lyusupov/SoftRF/blob/master/software/firmware/binaries/README.md#esp32-s3)|[ESP32S3](https://github.com/lyusupov/SoftRF/tree/master/software/firmware/binaries/ESP32S3/SoftRF/MassStorage)
[Midi Edition](https://github.com/lyusupov/SoftRF/wiki/Midi-Edition)|[ESP32-S3](https://github.com/lyusupov/SoftRF/blob/master/software/firmware/binaries/README.md#esp32-s3)|[ESP32S3](https://github.com/lyusupov/SoftRF/tree/master/software/firmware/binaries/ESP32S3/SoftRF/MassStorage)
[Badge Edition](https://github.com/lyusupov/SoftRF/wiki/Badge-Edition)|[nRF52840](https://github.com/lyusupov/SoftRF/blob/master/software/firmware/binaries/README.md#nrf52840)|[nRF52840](https://github.com/lyusupov/SoftRF/tree/master/software/firmware/binaries/nRF52840)
[Dongle Edition](https://github.com/lyusupov/SoftRF/wiki/Dongle-Edition)|[S76G](https://github.com/lyusupov/SoftRF/wiki/AcSiP-S7xG-flashing-instructions#s76g)|[S76G](https://github.com/lyusupov/SoftRF/tree/master/software/firmware/binaries/STM32/S76G)
[ES Edition](https://github.com/lyusupov/SoftRF/wiki/ES-Edition)|[LPC4320](https://github.com/lyusupov/SoftRF/blob/master/software/firmware/binaries/README.md#lpc4320)|[LPC4320](https://github.com/lyusupov/SoftRF/tree/master/software/firmware/binaries/LPC4320)
[Lego Edition](https://github.com/lyusupov/SoftRF/wiki/Lego-Edition)|[RP2040](https://github.com/lyusupov/SoftRF/blob/master/software/firmware/binaries/README.md#rp2040)|[RP2040](https://github.com/lyusupov/SoftRF/tree/master/software/firmware/binaries/RP2040/SoftRF)
[Balkan Edition](https://github.com/lyusupov/SoftRF/wiki/Balkan-Edition)|[STM32WLE5](https://github.com/lyusupov/SoftRF/blob/master/software/firmware/binaries/README.md#stm32wle5)|[STM32WLE5](https://github.com/lyusupov/SoftRF/tree/master/software/firmware/binaries/STM32/WLE5)
[Uni Edition](https://github.com/lyusupov/SoftRF/wiki/Uni-Edition)|[CC1352R](https://github.com/lyusupov/SoftRF/wiki/Uni-Edition.-Firmware-maintenance-procedures#initial-installation)|[CC1352](https://github.com/lyusupov/SoftRF/tree/master/software/firmware/binaries/CC13XX/CC1352)
[Mini Edition](https://github.com/lyusupov/SoftRF/wiki/Mini-Edition)|[CubeCell](https://github.com/lyusupov/SoftRF/blob/master/software/firmware/binaries/README.md#cubecell)|[ASR650x](https://github.com/lyusupov/SoftRF/tree/master/software/firmware/binaries/ASR650x)
[Octave Concept](https://github.com/lyusupov/SoftRF/wiki/Octave-Concept)|[ASR6601](https://github.com/lyusupov/SoftRF/blob/master/software/firmware/binaries/README.md#asr6601)|[ASR6601](https://github.com/lyusupov/SoftRF/tree/master/software/firmware/binaries/ASR6601)
[Raspberry Edition](https://github.com/lyusupov/SoftRF/wiki/Raspberry-Edition)||[RaspberryPi](https://github.com/lyusupov/SoftRF/tree/master/software/firmware/binaries/RaspberryPi)
[UAV Edition](https://github.com/lyusupov/SoftRF/wiki/UAV-Edition)|[NodeMCU](https://github.com/lyusupov/SoftRF/blob/master/software/firmware/binaries/README.md#nodemcu)|[NodeMCU](https://github.com/lyusupov/SoftRF/tree/master/software/firmware/binaries/NodeMCU/SoftRF)
[Academy Edition](https://github.com/lyusupov/SoftRF/wiki/Academy-Edition)|N/A1|N/A1
1 - since primary purpose of the **Academy Edition** is education - we do not provide firmware binaries for this model. Students and a teacher are responsible to [build and install the SoftRF firmware](https://github.com/lyusupov/SoftRF/blob/master/software/firmware/source/README.md) ( [SAMD21](https://github.com/lyusupov/SoftRF/tree/master/software/firmware/source#samd21) or [RA4M1](https://github.com/lyusupov/SoftRF/edit/master/software/firmware/source#ra4m1) ) from source code by themselves.
Model|Instructions|Firmware folder
---|:---:|:---:
[SkyView EZ](https://github.com/lyusupov/SoftRF/wiki/SkyView-EZ)|[ESP32](https://github.com/lyusupov/SoftRF/wiki/SkyView.-Quick-start)|[ESP32](https://github.com/lyusupov/SoftRF/tree/master/software/firmware/binaries/ESP32/SkyView)
[SkyView Pico](https://github.com/lyusupov/SoftRF/wiki/SkyView-Pico)|[RP2040](https://github.com/lyusupov/SoftRF/wiki/SkyView-Pico.-Quick-start#raspberry-pico-w)
[ESP32-S3](https://github.com/lyusupov/SoftRF/wiki/SkyView-Pico.-Quick-start#banana-bpi-picow-s3)|[RP2040](https://github.com/lyusupov/SoftRF/tree/master/software/firmware/binaries/RP2040/SkyView)
[ESP32S3](https://github.com/lyusupov/SoftRF/tree/master/software/firmware/binaries/ESP32S3/SkyView)
[WebTop Serial](https://github.com/lyusupov/SoftRF/wiki/WebTop-Serial-adapter)|[NodeMCU](https://github.com/lyusupov/SoftRF/tree/master/software/firmware/binaries#nodemcu)|[NodeMCU](https://github.com/lyusupov/SoftRF/tree/master/software/firmware/binaries/NodeMCU/WebTop)
[WebTop USB](https://github.com/lyusupov/SoftRF/wiki/WebTop-USB)|[ESP32-S2](https://github.com/lyusupov/SoftRF/blob/master/software/firmware/binaries/README.md#esp32-s2)|[ESP32S2](https://github.com/lyusupov/SoftRF/tree/master/software/firmware/binaries/ESP32S2/WebTop)
[USB to Bluetooth](https://github.com/lyusupov/SoftRF/wiki/USB-to-Bluetooth-adapter)|[XIAO](https://github.com/lyusupov/SoftRF/wiki/USB-to-Bluetooth-adapter#quick-start)|[SAMD21](https://github.com/lyusupov/SoftRF/tree/master/software/firmware/binaries/SAMD21/USB_Bluetooth)
## NodeMCU
### Select NodeMCU COM port
![](https://github.com/lyusupov/SoftRF/blob/master/documents/images/NodeMCU-Flasher-1.GIF)
### Select firmware file
![](https://github.com/lyusupov/SoftRF/blob/master/documents/images/NodeMCU-Flasher-2.GIF)
### Start flashing cycle
![](https://github.com/lyusupov/SoftRF/blob/master/documents/images/NodeMCU-Flasher-3.GIF)
### Wait for completion
![](https://github.com/lyusupov/SoftRF/blob/master/documents/images/NodeMCU-Flasher-4.GIF)
## ESP32
1. Take ESP32 flash download tool from this location: http://www.espressif.com/en/support/download/other-tools
You might also need to install:
* a [driver for the CP210X USB to UART bridge from Silicon Labs](https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers) or
* [CH9102F driver](https://github.com/Xinyuan-LilyGO/CH9102_Driver)
prior to first use of the ESP32 tool ;
2. Download an appropriate version of SoftRF firmware from [this location](https://github.com/lyusupov/SoftRF/tree/master/software/firmware/binaries/ESP32) and unzip the archive ;
3. Select COM port, enter partition files and addresses, select options ;
Here is an example:
![](https://github.com/lyusupov/SoftRF/raw/master/documents/images/ESP32-Flasher-1.JPG)
4. Press **START** button and wait for completion.
For some boards you may need to push **BOOT** button in order to activate flash download mode.
"Stock" modules may also require to apply full flash memory erase (use **ERASE** UI "button") prior to first flashing with SoftRF's firmware.
One may need to reduce BAUD rate down to 115200 bps.
## CubeCell
1. Take **CubeCellflash** for Windows _(Linux and MacOS variants are also available there)_ download tool from this location: https://resource.heltec.cn/download/
You might also need to install a [driver for the CP210X USB to UART bridge from Silicon Labs](https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers) prior to first use of the CubeCellflash tool ;
2. Download an appropriate version of SoftRF firmware from [this location](https://github.com/lyusupov/SoftRF/tree/master/software/firmware/binaries/ASR650x) and unzip the archive ;
![](https://github.com/lyusupov/SoftRF/blob/master/documents/images/Mini-1.jpg)
3. Use Windows command line tool to execute firmware flashing procedure as follows:
![](https://github.com/lyusupov/SoftRF/blob/master/documents/images/Mini-2.jpg)
## nRF52840
The T-Echo board typically comes with factory pre-installed [Adafruit_nRF52_Bootloader](https://github.com/adafruit/Adafruit_nRF52_Bootloader).
The Bootloader is capable to self-program an application firmware into the device. In order to simplify the firmware transfer, the bootloader emulates a "USB Mass Storage" interface.
1. Download an appropriate version of SoftRF firmware from [this location](https://github.com/lyusupov/SoftRF/tree/master/software/firmware/binaries/nRF52840/SoftRF/MassStorage) ;
2. Connect the SoftRF Badge Edition device to your PC by means of a USB cable (Type-A <-> Type-C) ;
3. Double click (within 0.5 seconds) onto the SoftRF device RESET button (LilyGO T-Echo or Heltec T114) or connect twice (within 0.5 seconds) the USB cable while holding the device button been pressed (Seeed T1000-E).
A virtual disk with a device specific label should appear in your "File manager" afterwards.
For **LilyGO T-Echo** the label is **TECHOBOOT** (or **NRF52BOOT**)
For **Seeed T1000-E** **T1000-E**
For **Heltec T114** **HT-n5262**
4. Drag the downloaded firmware file by your pointing device (mouse, trackball,...) , then drop it into **TECHOBOOT** / **NRF52BOOT** / **T1000-E** / **HT-n5262** disk. Wait until the file transfer is complete.
## LPC4320
For Linux and Mac OS X users, you will need a few tools installed on your computer before you begin:
* [dfu-util](http://dfu-util.sourceforge.net/) 0.8 or newer - Used to load and run the stock HackRF One firmware from RAM. dfu-util 0.8 is recommended, as it is the most extensively tested with the HackRF One hardware and build software.
* [hackrf](https://github.com/greatscottgadgets/hackrf) - All you need is the host tools, specifically, hackrf_spiflash.
### Backup of factory firmware
```
$ hackrf_spiflash -v -r HackRF_One_factory_firmware.bin
Reading 256 bytes from 0x000000.
Reading 256 bytes from 0x000100.
< ... skipped ... >
$ ls -la HackRF_One_factory_firmware.bin
-rw-r--r-- 1 pi pi 1048576 Nov 4 10:18 HackRF_One_factory_firmware.bin
```
### Flashing
1. Download an appropriate version of SoftRF firmware from [this location](https://github.com/lyusupov/SoftRF/tree/master/software/firmware/binaries/LPC4320) ;
2. Plug the HackRF One into a PC USB slot while holding down DFU button (the button closer to antenna jack). Release the DFU button, then execute:
```
$ dfu-util -D hackrf_one_usb.dfu --reset
$ hackrf_spiflash -v -w SoftRF-firmware-v1.1-LPC4320.bin
```
### Restore of HackRF One firmware
Plug the HackRF One into a PC USB slot while holding down DFU button (the button closer to antenna jack). Release the DFU button, then execute:
```
$ dfu-util -D hackrf_one_usb.dfu --reset
$ hackrf_spiflash -v -w HackRF_One_factory_firmware.bin
```
## ASR6601
1. Download an appropriate version of SoftRF firmware from [this location](https://github.com/lyusupov/SoftRF/tree/master/software/firmware/binaries/ASR6601) ;
2. Take a copy of **tremo_loader.py** script from [ASR SDK](https://github.com/asrlora/asr_lora_6601/raw/master/build/scripts/tremo_loader.py) ;
3. Connect an appropriate USB-Serial adapter to ASR6601 MCU pins as follows:
Adapter|MCU
---|---
GND|GND
3V3|VCC
TX|GPIO16
RX|GPIO17
DTR 2|GPIO2
RTS|RESET
2 - certain USB-Serial adapters may require to **invert DTR** signal either in hardware or in the Python script.
4. Plug the USB-Serial adapter into spare USB slot of your PC ;
5. Use the loader tool to read the serial number of the MCU. This is a safety action to make sure that all the connections are good ;
```
$ python tremo_loader.py --port /dev/ttyUSB0 read_sn
Connecting...
Connected
The SN is: 0c15458cc5fb3201
```
6. Write the SoftRF firmware binary into flash memory of the ASR6601.
```
$ python tremo_loader.py --port /dev/ttyUSB0 flash 0x08000000 SoftRF-firmware-v1.1-ASR6601.bin
Connecting...
Connected
('send: ', 512)
('send: ', 1024)
('send: ', 1536)
('send: ', 2048)
('send: ', 2560)
('send: ', 3072)
< ... skipped ... >
('send: ', 102400)
('send: ', 102912)
('send: ', 103228)
Download files successfully
```
## RP2040
Every RAK11310 WisBlock Core module has built-in (ROM) bootloader.
The bootloader is capable to self-program an application firmware into the device. In order to simplify the firmware transfer, the bootloader emulates a "USB Mass Storage" interface.
1. Download an appropriate version of SoftRF firmware from [this location](https://github.com/lyusupov/SoftRF/tree/master/software/firmware/binaries/RP2040/SoftRF) ;
2. Plug RAK11310 WisBlock Core module into RAK5005-O WisBlock Base ;
3. Connect the RAK5005-O to your PC by means of a USB cable (Type-A <-> micro Type-B) ;
4. Press and keep holding BOOT button of RAK11310 Core module ;
5. Press and release RESET button on RAK5005-O Base ;
6. Release BOOT button of RAK11310 module. A virtual disk with **RPI-RP2** label should appear in your "File manager" afterwards ;
7. Drag the downloaded firmware file by your pointing device (mouse, trackball,...) , then drop it into **RPI-RP2** disk. Wait until the file transfer is complete.
## ESP32-S2
1. Take **esptool-v4.4-win64.zip** flash tool for Windows from this location: [https://github.com/espressif/esptool/releases/tag/v4.4](https://github.com/espressif/esptool/releases/tag/v4.4) and unzip the archive ;
2. Download an appropriate version of WebTop firmware from [this location](https://github.com/lyusupov/SoftRF/tree/master/software/firmware/binaries/ESP32S2/WebTop) and unzip the archive ;
3. Connect the ESP32-S2 board into spare USB slot of your Windows PC ;
4. Press and keep holding BOOT button of the ESP32-S2 board ;
5. Press and release RESET button on the ESP32-S2 board ;
6. Release BOOT button of the ESP32-S2 board. A virtual COM port should appear in "Device Manager" afterwards ;
7. Execute **essptool.exe** utility as folows :
![](https://github.com/lyusupov/SoftRF/raw/master/documents/images/WebTop-9.jpg)
## STM32WLE5
1. Take pre-built **OpenOCD** tool for Windows from this location: https://gnutoolchains.com/arm-eabi/openocd/ and extract the archive ;
2. Download an appropriate version of SoftRF firmware from [this location](https://github.com/lyusupov/SoftRF/tree/master/software/firmware/binaries/STM32/WLE5) ;
3. Connect the SoftRF Balkan Edition device to your PC by means of a USB cable ;
4. Use Windows command line tool to execute firmware flashing procedure as follows:
```
C:\OpenOCD-20211118-0.11.0>.\bin\openocd.exe -f interface/cmsis-dap.cfg -c "cmsis_dap_vid_pid 0x15ba 0x0044" -c "transport select swd" -c "adapter speed 4000" -f "target/stm32wlx.cfg" -c "program SoftRF-firmware-v1.2-WLE5.bin 0x08000000"
```
Example:
![](https://github.com/lyusupov/SoftRF/blob/master/documents/images/Balkan-7.jpg)
## ESP32-S3
The T-Beam Supreme board typically comes with factory pre-installed [**TinyUF2** bootloader](https://github.com/adafruit/tinyuf2/tree/master/ports/espressif#readme).
The Bootloader is capable to self-program an application firmware into the device. In order to simplify the firmware transfer, the bootloader emulates a "USB Mass Storage" interface.
1. Download an appropriate version of SoftRF firmware from [this location](https://github.com/lyusupov/SoftRF/tree/master/software/firmware/binaries/ESP32S3/SoftRF/MassStorage) and extract the archive ;
2. Connect the SoftRF device to your PC by means of a USB cable (Type-A <-> Type-C) ;
3. Press and release RESET button of the SoftRF device. Immediately (within 1 second) press and release the BOOT button. One should see this message on the OLED display.
For **T-Beam Supreme**:
![](https://github.com/lyusupov/SoftRF/blob/master/documents/images/Prime3-1.jpg)
For **T-TWR Plus**:
This white LED on the **Heltec Tracker** will start to flicker:
A virtual disk with a device specific label should appear in your "File manager" afterwards.
For **T-Beam Supreme** the label is **TBEAMBOOT**
For **T-TWR Plus** **TWRBOOT**
For **Heltec Tracker** **HTBOOT**
4. Drag the downloaded .uf2 firmware file by your pointing device (mouse, trackball,...) , then drop it into **TBEAMBOOT** / **TWRBOOT** / **HTBOOT** disk. Wait until the file transfer is complete.
## ESP32-C3
1. Take ESP32 flash download tool from this location: http://www.espressif.com/en/support/download/other-tools
2. Download an appropriate version of SoftRF firmware from [this location](https://github.com/lyusupov/SoftRF/tree/master/software/firmware/binaries/ESP32C3/SoftRF) and unzip the archive ;
3. Connect the ESP32-C3 based device to your PC by means of a USB cable ;
4. Execute the tool; Select **ESP32-C3** Chip Type, **Develop** WorkMode and **UART** LoadMode ;
5. Select COM port, enter partition files and addresses, select options ;
Here is an example:
![](https://github.com/lyusupov/SoftRF/raw/master/documents/images/Standalone-ESP32C3-3.jpg)
6. Press **START** button and wait for completion.
"Stock" devices may also require to apply full flash memory erase (use **ERASE** UI "button") prior to first flashing with SoftRF's firmware.
## ESP32-C6
1. Take ESP32 flash download tool from this location: http://www.espressif.com/en/support/download/other-tools
2. Download an appropriate version of SoftRF firmware from [this location](https://github.com/lyusupov/SoftRF/tree/master/software/firmware/binaries/ESP32C6/SoftRF) and unzip the archive ;
3. Connect the ESP32-C6 based device to your PC by means of a USB cable ;
4. Execute the tool; Select **ESP32-C6** Chip Type, **Develop** WorkMode and **UART** LoadMode ;
5. Select COM port, enter partition files and addresses, select options ;
Here is an example:
![](https://github.com/lyusupov/SoftRF/raw/master/documents/images/Standalone-ESP32C6-3.jpg)
6. Press **START** button and wait for completion.
"Stock" devices may also require to apply full flash memory erase (use **ERASE** UI "button") prior to first flashing with SoftRF's firmware.