espflash 是固件烧录和终端监视工具,基于 esptool.py.
参考:https://github.com/esp-rs/espflash/tree/main/espflash#installation
cargo-espflash vs espflash: cargo-espflash 是作为 cargo 的一个子命令来运行的,如 cargo espflash, 它支持 cargo 的 –bin/–expample 参数来快速指定 bin 和 example binary 名称。而 espflash 是一个单独工具,需要指定 bin 文件的具体路径:
MCU=esp32c3 cargo espflash flash --target riscv32imc-esp-espidf --example ledc_simple --monitor
cargo espflash flash --example=blinky --monitor
espflash flash target/debug/myapp --monitor
espflash 使用 USB 串口(linux: /dev/ttyUSB0, macOS: /dev/cu.*) 来烧录芯片的 Flash,它会检查项目的依赖是否包含 esp-idf-sys 来判断是那种类型的应用,然后 自动烧写不同的文件
:
- 对于 std 应用,会烧写三个文件:应用 binary,bootloader.bin,partition-table.bin;
- bootloader.bin,partition-table.bin 是 esp-idf-sys build script 生成的。
- 对于 no_std 应用,只烧写一个 elf 格式的应用 binary;
zj@a:~/codes/esp32$ espflash --help
A command-line tool for flashing Espressif devices
Usage: espflash <COMMAND>
Commands:
board-info Print information about a connected target device
completions Generate completions for the given shell
erase-flash Erase Flash entirely
erase-parts Erase specified partitions
erase-region Erase specified region
flash Flash an application in ELF format to a connected target device
monitor Open the serial monitor without flashing the connected target device
partition-table Convert partition tables between CSV and binary format
save-image Generate a binary application image and save it to a local disk
write-bin Write a binary file to a specific address in a target device's flash
help Print this message or the help of the given subcommand(s)
Options:
-h, --help Print help
-V, --version Print version
zj@a:~/codes/esp32$
cargo run: 在项目的 .cargo/config.toml 中添加如下内容, 然后就可以执行 cargo run 来 flash 和 monitor 应用:
[target.'cfg(any(target_arch = "riscv32", target_arch = "xtensa"))']
runner = "espflash flash --baud=921600 --monitor"
espflash 配置文件 espflash.toml:
[connection]
serial = "/dev/ttyUSB0"
baudrate = 460800
bootloader = "path/to/custom/bootloader.bin"
partition_table = "path/to/custom/partition-table.bin"
[flash]
mode = "qio"
size = "8MB"
frequency = "80MHz"
espflash.toml 文件位置:
- 项目目录(Cargo.toml 所在目录);
- workspace 根目录;
- $HOME/Library/Application Support/rs.esp.espflash/espflash.toml
monitor 日志格式:espflash 的 flash 和 monitor 子命令支持 -L/–log-format 参数指定日志格式:
serial
: Default logging formatdefmt
: Uses [defmt] logging framework. With logging format, logging strings have framing bytes to indicate that they are defmt messages.- 一般是在 no_std 应用中使用,需要和 esp-println crate 联合使用。
Establishing a serial connection with the ESP32-S3 target device could be done using USB-to-UART bridge
or USB peripheral
supported in ESP32-S3. For the ESP32-S3, the USB peripheral
is available,
allowing you to flash the binaries without the need for an external USB-to-UART bridge
.
If you are flashing for the first time, you need to get the ESP32-S3 into the download mode
manually. To do so, press and hold the BOOT button and then press the RESET button once
. After that
release the BOOT button.
在线下载固件和烧写:esp-launchpad,它使用 USB-Serial-JTAG 接口, 例如在线下载和烧写 esp-box 固件
- 如果烧写了 USB-OTG 应用(如摄像头),则可能不能找到设备,这时可以按住 BOOT 按钮的同时按 RST 按钮将芯片至于 download 模式,这时芯片内 USB PHY 会连接 USB-Serial-JTAG Controller。
probe-rs:embassy 使用 probe-rs 来烧写和调试: