Skip to content

Commit a0a9aef

Browse files
authored
Fix monitor after flash for ESP32-C2 (#330)
* Fix espflash flashing * Make sure to not read the xtal-freq after reset * Fix cargo-espflash flashing
1 parent 5727ed5 commit a0a9aef

File tree

3 files changed

+35
-33
lines changed

3 files changed

+35
-33
lines changed

cargo-espflash/src/main.rs

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ use espflash::{
1010
cli::{
1111
self, board_info, clap_enum_variants, config::Config, connect, erase_partitions,
1212
flash_elf_image, monitor::monitor, parse_partition_table, partition_table,
13-
save_elf_as_image, serial_monitor, ConnectArgs, FlashConfigArgs, MonitorArgs,
14-
PartitionTableArgs,
13+
print_board_info, save_elf_as_image, serial_monitor, ConnectArgs, FlashConfigArgs,
14+
MonitorArgs, PartitionTableArgs,
1515
},
1616
image_format::ImageFormatKind,
1717
logging::initialize_logger,
@@ -159,13 +159,14 @@ fn flash(args: FlashArgs, config: &Config) -> Result<()> {
159159
let cargo_config = CargoConfig::load(&metadata.workspace_root, &metadata.package_root);
160160

161161
let mut flasher = connect(&args.connect_args, config)?;
162-
let build_ctx = build(&args.build_args, &cargo_config, flasher.chip())
163-
.wrap_err("Failed to build project")?;
162+
print_board_info(&mut flasher)?;
164163

165-
// Print the board information once the project has successfully built. We do
166-
// here rather than upon connection to show the Cargo output prior to the board
167-
// information, rather than breaking up cargo-espflash's output.
168-
board_info(&args.connect_args, config)?;
164+
let chip = flasher.chip();
165+
let target = chip.into_target();
166+
let target_xtal_freq = target.crystal_freq(&mut flasher.connection())?;
167+
168+
let build_ctx =
169+
build(&args.build_args, &cargo_config, chip).wrap_err("Failed to build project")?;
169170

170171
// Read the ELF data from the build path and load it to the target.
171172
let elf_data = fs::read(build_ctx.artifact_path).into_diagnostic()?;
@@ -216,18 +217,13 @@ fn flash(args: FlashArgs, config: &Config) -> Result<()> {
216217
if args.flash_args.monitor {
217218
let pid = flasher.get_usb_pid()?;
218219

219-
let chip = flasher.chip();
220-
let target = chip.into_target();
221-
222220
// The 26MHz ESP32-C2's need to be treated as a special case.
223-
let default_baud = if chip == Chip::Esp32c2
224-
&& !args.connect_args.use_stub
225-
&& target.crystal_freq(&mut flasher.connection())? == 26
226-
{
227-
74_880
228-
} else {
229-
115_200
230-
};
221+
let default_baud =
222+
if chip == Chip::Esp32c2 && !args.connect_args.use_stub && target_xtal_freq == 26 {
223+
74_880
224+
} else {
225+
115_200
226+
};
231227

232228
monitor(
233229
flasher.into_interface(),

espflash/src/bin/espflash.rs

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ use espflash::{
1010
cli::{
1111
self, board_info, build_progress_bar_callback, clap_enum_variants, config::Config, connect,
1212
erase_partitions, flash_elf_image, monitor::monitor, parse_partition_table,
13-
partition_table, progress_bar, save_elf_as_image, serial_monitor, ConnectArgs,
14-
FlashConfigArgs, MonitorArgs, PartitionTableArgs,
13+
partition_table, print_board_info, progress_bar, save_elf_as_image, serial_monitor,
14+
ConnectArgs, FlashConfigArgs, MonitorArgs, PartitionTableArgs,
1515
},
1616
image_format::ImageFormatKind,
1717
logging::initialize_logger,
@@ -117,7 +117,11 @@ fn main() -> Result<()> {
117117

118118
fn flash(args: FlashArgs, config: &Config) -> Result<()> {
119119
let mut flasher = connect(&args.connect_args, config)?;
120-
board_info(&args.connect_args, config)?;
120+
print_board_info(&mut flasher)?;
121+
122+
let chip = flasher.chip();
123+
let target = chip.into_target();
124+
let target_xtal_freq = target.crystal_freq(&mut flasher.connection())?;
121125

122126
// Read the ELF data from the build path and load it to the target.
123127
let elf_data = fs::read(&args.image).into_diagnostic()?;
@@ -155,18 +159,13 @@ fn flash(args: FlashArgs, config: &Config) -> Result<()> {
155159
if args.flash_args.monitor {
156160
let pid = flasher.get_usb_pid()?;
157161

158-
let chip = flasher.chip();
159-
let target = chip.into_target();
160-
161162
// The 26MHz ESP32-C2's need to be treated as a special case.
162-
let default_baud = if chip == Chip::Esp32c2
163-
&& !args.connect_args.use_stub
164-
&& target.crystal_freq(&mut flasher.connection())? == 26
165-
{
166-
74_880
167-
} else {
168-
115_200
169-
};
163+
let default_baud =
164+
if chip == Chip::Esp32c2 && !args.connect_args.use_stub && target_xtal_freq == 26 {
165+
74_880
166+
} else {
167+
115_200
168+
};
170169

171170
monitor(
172171
flasher.into_interface(),

espflash/src/cli/mod.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,13 @@ pub fn connect(args: &ConnectArgs, config: &Config) -> Result<Flasher> {
278278
/// Connect to a target device and print information about its chip
279279
pub fn board_info(args: &ConnectArgs, config: &Config) -> Result<()> {
280280
let mut flasher = connect(&args, config)?;
281+
print_board_info(&mut flasher)?;
282+
283+
Ok(())
284+
}
285+
286+
/// Print information about a chip
287+
pub fn print_board_info(flasher: &mut Flasher) -> Result<()> {
281288
let info = flasher.device_info()?;
282289

283290
print!("Chip type: {}", info.chip);

0 commit comments

Comments
 (0)