Skip to content

"wait usb download" in cargo run --release of espgenerate template? #542

@JasonKleban

Description

@JasonKleban

I'm fairly new to rust, native, embedded and esp32. I'm trying to flash an ~empty program (created by espgenerate). (I've used this same module before with micropython.)

cargo run --release
    Finished `release` profile [optimized + debuginfo] target(s) in 0.05s
     Running `espflash flash --monitor --chip esp32c3 target/riscv32imc-unknown-none-elf/release/my-rs`
[2026-02-23T13:57:59Z INFO ] Serial port: '/dev/ttyACM0'
[2026-02-23T13:57:59Z INFO ] Connecting...
[2026-02-23T13:58:00Z INFO ] Using flash stub
Chip type:         esp32c3 (revision v0.4)
Crystal frequency: 40 MHz
Flash size:        4MB
Features:          WiFi, BLE
MAC address:       d4:f9:8d:01:ab:f4
App/part. size:    71,200/4,128,768 bytes, 1.72%
[00:00:00] [========================================]      13/13      0x0      Skipped! (checksum matches)                                                                                                       [00:00:00] [========================================]       1/1       0x8000   Skipped! (checksum matches)                                                                                                       [00:00:00] [========================================]       7/7       0x10000  Skipped! (checksum matches)                                                                                                       [2026-02-23T13:58:00Z INFO ] Flashing has completed!
Commands:
    CTRL+R    Reset chip
    CTRL+C    Exit

ESP-ROM:esp32c3-api1-20210207
Build:Feb  7 2021
rst:0x15 (USB_UART_CHIP_RESET),boot:0x0 (USB_BOOT)
Saved PC:0x40380862
wait usb download

I see "Flashing has completed!" but then it seems to stay in boot mode? If I reset the chip with the hardware button, the "pipe is broken" and I can't "monitor" as expected. Not that there is any output yet, but being stuck in boot mode won't run the program anyway, right? How do I get past this to allow the program to run while being monitored after a successful flash?

Notes

Prior to this problem, I solved a permission problem during espflash flash for my user accessing the port with sudo chmod a+rw /dev/ttyACM0 and sudo usermod -a -G dialout $USER.

I also got confused about my chip hanging at boot: Disabling RNG early entropy source... during espflash flash which is solved by realizing this ~precise button timing:

RESET   ‾‾‾‾‾\___/‾‾‾‾‾
BOOT    ‾‾‾\_______/‾‾‾

I've had to mess with this with miropython as well, but less often. Obviously everyone will have had to learn these steps, but maybe there could be more guidance in the tooling for noobs?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status

    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions