Downloading Guide

[中文]

This guide takes ESP32-C61-WROOM-1 as an example to describe how to download AT firmware and flash it into the module. The same steps apply to other ESP32-C61 modules.

Before downloading and flashing AT firmware, ensure that the hardware is connected correctly. See Hardware Connection.

The AT commands supported by the default firmware differ across module series. See ESP-AT Firmware Differences.

Follow the steps below to download, flash, and verify the AT firmware.

Step 1. Download AT Firmware

Go to ESP32-C61 Released Firmware, download the firmware for your module, and extract the package.

See ESP32-C61-4MB Series for ESP32-C61-WROOM-1 firmware.

The factory directory contains two combined factory bins. Either can be flashed to address 0x0:

  • factory/factory_ESP32C61-4MB_unfilled.bin (recommended): a single bin with all required functions, and the smallest and fastest to flash. Provided in newly released firmware packages. Necessary unused regions are filled with 0xFF up to the end of the AT application firmware esp-at.bin in the ota_0 partition. If the package does not include this file, use factory/factory_ESP32C61-4MB.bin.

  • factory/factory_ESP32C61-4MB.bin: a single bin with all required functions, but larger and slower to flash. The earlier fill method, still included in new firmware packages. Filling extends through the end of the last partition ota_1. The file size is typically 2 MB or 4 MB.

For other files in the package, see Appendix: Firmware Package Contents.

Step 2. Flash AT Firmware into Your Device

Choose a flashing method according to your use case.

Method

Recommended scenario

Notes

Method 1

First-time flashing or factory production

Flash one factory bin to 0x0. factory/factory_ESP32C61-4MB_unfilled.bin is recommended.

Method 2

Updating selected partitions or secondary development

Flash multiple bins to the addresses specified in download.config.

Flash Multiple Bins According to download.config

Use this method to update selected partitions or for secondary development. Configure the download address of each bin and the flash parameters according to download.config.

The download.config file of the ESP32-C61-WROOM-1 firmware is shown below:

--flash-mode dio --flash-freq 80m --flash-size 4MB
0x0 bootloader/bootloader.bin
0xc000 partition_table/partition-table.bin
0xd000 ota_data_initial.bin
0x30000 at_customize.bin
0x31000 customized_partitions/mfg_nvs.bin
0xa0000 esp-at.bin

  • --flash-mode dio means the firmware is compiled with flash DIO mode.

  • --flash-freq 80m means the firmware’s flash frequency is 80 MHz.

  • --flash-size 4MB means the firmware requires a flash of at least 4 MB.

  • 0xd000 ota_data_initial.bin means downloading ota_data_initial.bin into the address 0xd000.

Windows

The tool configuration is the same as in Flash the Factory Bin (Recommended) for Windows, with the following differences:

  • Configure each bin and its address according to download.config.

  • Do not select “DoNotChgBin”. Set SPI SPEED and SPI MODE to match download.config.

    Download to Multiple Addresses

    Download to Multiple Addresses (click to enlarge)

When you finish flashing, check whether AT works.

Linux or macOS

Replace PORTNAME with the download interface of the board, replace download.config with the parameters in that file, and run the command in the extracted firmware directory. If you do not know the interface name, see Check port on Linux and macOS.

esptool --chip auto --port PORTNAME --baud 115200 --before default-reset --after hard-reset write-flash -z download.config

Below is the example command for ESP32-C61-WROOM-1.

esptool --chip auto --port /dev/tty.usbserial-0001 --baud 115200 --before default-reset --after hard-reset write-flash -z --flash-mode dio --flash-freq 80m --flash-size 4MB 0xc000 partition_table/partition-table.bin 0xd000 ota_data_initial.bin 0x0 bootloader/bootloader.bin 0xa0000 esp-at.bin 0x30000 at_customize.bin 0x31000 customized_partitions/mfg_nvs.bin

When you finish flashing, check whether AT works.

Step 3. Check Whether AT Works

Open a serial port tool, such as SecureCRT. Connect to the port attached to the “AT command/response” line (see Hardware Connection) with the following settings:

Parameter

Value

Baudrate

115200

Data Bits

8

Parity

None

Stop Bits

1

Flow Type

None

New line

CR LF

Enter the command AT+GMR with a new line. If the response is OK as shown below, AT works.

AT+GMR
AT version:5.0.0.0(f6b0e89 - ESP32C61 - Oct 17 2025 08:55:06)
SDK version:v5.5.1-255-g07e9bf4970
compile time(65202f43):Oct 17 2025 19:46:13
Bin version:v5.0.0.0(ESP32C61-4MB)

OK

If there is no OK response, check the ESP32-C61 startup log to confirm that the firmware initialized correctly.

  • Open a serial port tool and select the port attached to the “Download/Log output” line. See Hardware Connection.

  • Set Baudrate to 115200, Data Bits to 8, Parity to None, Stop Bits to 1, and Flow Type to None.

  • Press the RST key of the board. If the log is similar to the reference log below, ESP-AT firmware has been initialized correctly.

Reference Log

ESP32-C61 startup log:

ESP-ROM:esp32c61-eco3-20250228
Build:Feb 28 2025
rst:0xc (SW_CPU),boot:0xc (SPI_FAST_FLASH_BOOT)
Core0 Saved PC:0x4080a438
SPI mode:DIO, clock div:1
load:0x40845c00,len:0x1b80
load:0x4083bd70,len:0xce4
load:0x4083ea70,len:0x3248
load:0x4084a000,len:0x222c
entry 0x4083bd7a
I (29) boot: ESP-IDF v5.5.1-255-g07e9bf4970-dirty 2nd stage bootloader
I (30) boot: compile time Oct 17 2025 19:46:05
I (32) boot: chip revision: v1.0
I (32) boot: efuse block revision: v0.1
I (35) boot.esp32c61: SPI Speed      : 80MHz
I (39) boot.esp32c61: SPI Mode       : DIO
I (43) boot.esp32c61: SPI Flash Size : 4MB
I (47) boot: Enabling RNG early entropy source...
I (51) boot: Partition Table:
I (54) boot: ## Label            Usage          Type ST Offset   Length
I (60) boot:  0 otadata          OTA data         01 00 0000d000 00002000
I (67) boot:  1 phy_init         RF data          01 01 0000f000 00001000
I (73) boot:  2 nvs              WiFi data        01 02 00010000 00020000
I (80) boot:  3 at_customize     unknown          40 00 00030000 00070000
I (86) boot:  4 ota_0            OTA app          00 10 000a0000 00220000
I (93) boot:  5 ota_1            OTA app          00 11 002c0000 00140000
I (100) boot: End of partition table
I (103) esp_image: segment 0: paddr=000a0020 vaddr=42170020 size=2d18ch (184716) map
I (157) esp_image: segment 1: paddr=000cd1b4 vaddr=40800000 size=02e64h ( 11876) load
I (162) esp_image: segment 2: paddr=000d0020 vaddr=42000020 size=16ccb8h (1494200) map
I (533) esp_image: segment 3: paddr=0023cce0 vaddr=40802e64 size=0ff78h ( 65400) load
I (555) esp_image: segment 4: paddr=0024cc60 vaddr=40812e00 size=0416ch ( 16748) load
I (570) boot: Loaded app from partition at offset 0xa0000
I (571) boot: Disabling RNG early entropy source...
I (1087) at-init: at param mode: 1
I (1177) at-uart: AT cmd port:uart1 tx:6 rx:5 cts:4 rts:3 baudrate:115200
I (1178) at-init: module_name: ESP32C61-4MB
I (1179) at-init: max tx power=78, ret=0
I (1181) at-init: v5.0.0.0 (gitlab)

Appendix: Firmware Package Contents

The extracted AT firmware package has the following structure (see also Brief Introduction to AT Firmware):

.
├── at_customize.bin                 // secondary partition table
├── bootloader                       // bootloader
│   └── bootloader.bin
├── customized_partitions            // AT customized binaries
│   ├── mfg_nvs.csv                  // raw data of manufacturing nvs partition
│   └── mfg_nvs.bin                  // manufacturing nvs partition binary
├── download.config                  // configuration of downloading
├── esp-at.bin                       // AT application binary
├── esp-at.elf
├── esp-at.map
├── factory                          // Combined bins for factory downloading
│   ├── factory_XXX.bin              // Combined factory bin filled through the end of ota_1
│   └── factory_XXX_unfilled.bin     // Combined factory bin filled through the end of the AT application (recommended)
├── flasher_args.json                // flasher arguments
├── ota_data_initial.bin             // ota data parameters
├── partition_table                  // primary partition table
│   └── partition-table.bin
└── sdkconfig                        // compilation configuration for AT firmware