跳过正文

使用 cargo run 和 espflash 烧写固件

·974 字
Rust Esp32 Rust Esp32
rust-esp32 - 这篇文章属于一个选集。
§ 10: 本文

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 文件位置:

  1. 项目目录(Cargo.toml 所在目录);
  2. workspace 根目录;
  3. $HOME/Library/Application Support/rs.esp.espflash/espflash.toml

monitor 日志格式:espflash 的 flash 和 monitor 子命令支持 -L/–log-format 参数指定日志格式:

  1. serial: Default logging format
  2. defmt : 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 来烧写和调试:

  1. https://embassy.dev/book/dev/getting_started.html
  2. https://embassy.dev/book/dev/project_structure.html
rust-esp32 - 这篇文章属于一个选集。
§ 10: 本文

相关文章

Rust 驱动 Audio - 播放和录音
·6323 字
Rust Esp32 Rust Esp32
Rust 驱动 Camera - 采集和播放
·7304 字
Rust Esp32 Rust Esp32
Rust 驱动 LCD - 显示中英文
·818 字
Rust Esp32 Rust Esp32
Rust 驱动 LCD - 显示图片
·4232 字
Rust Esp32 Rust Esp32