Skip to content

Commit f86b149

Browse files
Update flash size (#797)
* feat: Update flash size if not provided and read from the target * feat: Move logic inside make_flash_settings * docs: Udpate changelog * Don't require passing `Flasher` struct around --------- Co-authored-by: Jesse Braham <[email protected]>
1 parent 0df6d25 commit f86b149

File tree

5 files changed

+42
-22
lines changed

5 files changed

+42
-22
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2525
- `get_usb_pid` is now `usb_pid` and no longer needlessly returns a `Result` (#795)
2626
- `CodeSegment` and `RomSegment` have been merged into a single `Segment` struct (#796)
2727
- `IdfBootloaderFormat` has had its constructor's parameters reduced/simplified (#798)
28+
- Update flash size when creating the app partition (#797)
2829

2930
### Fixed
3031

cargo-espflash/src/main.rs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use cargo_metadata::{Message, MetadataCommand};
88
use clap::{Args, CommandFactory, Parser, Subcommand};
99
use espflash::{
1010
cli::{self, config::Config, monitor::monitor, *},
11+
flasher::FlashSize,
1112
logging::initialize_logger,
1213
targets::{Chip, XtalFrequency},
1314
update::check_for_update,
@@ -329,12 +330,19 @@ fn flash(args: FlashArgs, config: &Config) -> Result<()> {
329330

330331
print_board_info(&mut flasher)?;
331332

333+
let mut flash_config = args.build_args.flash_config_args;
334+
flash_config.flash_size = flash_config
335+
.flash_size // Use CLI argument if provided
336+
.or(config.flash.size) // If no CLI argument, try the config file
337+
.or_else(|| flasher.flash_detect().ok().flatten()) // Try detecting flash size next
338+
.or_else(|| Some(FlashSize::default())); // Otherwise, use a reasonable default value
339+
332340
if args.flash_args.ram {
333341
flasher.load_elf_to_ram(&elf_data, Some(&mut EspflashProgress::default()))?;
334342
} else {
335343
let flash_data = make_flash_data(
336344
args.flash_args.image,
337-
&args.build_args.flash_config_args,
345+
&flash_config,
338346
config,
339347
build_ctx.bootloader_path.as_deref(),
340348
build_ctx.partition_table_path.as_deref(),
@@ -570,9 +578,15 @@ fn save_image(args: SaveImageArgs, config: &Config) -> Result<()> {
570578
println!("Merge: {}", args.save_image_args.merge);
571579
println!("Skip padding: {}", args.save_image_args.skip_padding);
572580

581+
let mut flash_config = args.build_args.flash_config_args;
582+
flash_config.flash_size = flash_config
583+
.flash_size // Use CLI argument if provided
584+
.or(config.flash.size) // If no CLI argument, try the config file
585+
.or_else(|| Some(FlashSize::default())); // Otherwise, use a reasonable default value
586+
573587
let flash_data = make_flash_data(
574588
args.save_image_args.image,
575-
&args.build_args.flash_config_args,
589+
&flash_config,
576590
config,
577591
build_ctx.bootloader_path.as_deref(),
578592
build_ctx.partition_table_path.as_deref(),

espflash/src/bin/espflash.rs

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ use std::{fs, path::PathBuf};
33
use clap::{Args, CommandFactory, Parser, Subcommand};
44
use espflash::{
55
cli::{self, config::Config, monitor::monitor, *},
6+
flasher::FlashSize,
67
logging::initialize_logger,
78
targets::{Chip, XtalFrequency},
89
update::check_for_update,
@@ -233,25 +234,26 @@ fn flash(args: FlashArgs, config: &Config) -> Result<()> {
233234
flasher.set_flash_size(flash_size);
234235
}
235236

236-
print_board_info(&mut flasher)?;
237-
238237
let chip = flasher.chip();
239238
let target = chip.into_target();
240239
let target_xtal_freq = target.crystal_freq(flasher.connection())?;
241240

242241
// Read the ELF data from the build path and load it to the target.
243242
let elf_data = fs::read(&args.image).into_diagnostic()?;
244243

244+
print_board_info(&mut flasher)?;
245+
246+
let mut flash_config = args.flash_config_args;
247+
flash_config.flash_size = flash_config
248+
.flash_size // Use CLI argument if provided
249+
.or(config.flash.size) // If no CLI argument, try the config file
250+
.or_else(|| flasher.flash_detect().ok().flatten()) // Try detecting flash size next
251+
.or_else(|| Some(FlashSize::default())); // Otherwise, use a reasonable default value
252+
245253
if args.flash_args.ram {
246254
flasher.load_elf_to_ram(&elf_data, Some(&mut EspflashProgress::default()))?;
247255
} else {
248-
let flash_data = make_flash_data(
249-
args.flash_args.image,
250-
&args.flash_config_args,
251-
config,
252-
None,
253-
None,
254-
)?;
256+
let flash_data = make_flash_data(args.flash_args.image, &flash_config, config, None, None)?;
255257

256258
if args.flash_args.erase_parts.is_some() || args.flash_args.erase_data_parts.is_some() {
257259
erase_partitions(
@@ -297,9 +299,15 @@ fn save_image(args: SaveImageArgs, config: &Config) -> Result<()> {
297299
println!("Merge: {}", args.save_image_args.merge);
298300
println!("Skip padding: {}", args.save_image_args.skip_padding);
299301

302+
let mut flash_config = args.flash_config_args;
303+
flash_config.flash_size = flash_config
304+
.flash_size // Use CLI argument if provided
305+
.or(config.flash.size) // If no CLI argument, try the config file
306+
.or_else(|| Some(FlashSize::default())); // Otherwise, use a reasonable default value
307+
300308
let flash_data = make_flash_data(
301309
args.save_image_args.image,
302-
&args.flash_config_args,
310+
&flash_config,
303311
config,
304312
None,
305313
None,

espflash/src/cli/mod.rs

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -946,14 +946,6 @@ fn pretty_print(table: PartitionTable) {
946946
println!("{pretty}");
947947
}
948948

949-
pub fn make_flash_settings(flash_config_args: &FlashConfigArgs, config: &Config) -> FlashSettings {
950-
FlashSettings::new(
951-
flash_config_args.flash_mode.or(config.flash.mode),
952-
flash_config_args.flash_size.or(config.flash.size),
953-
flash_config_args.flash_freq.or(config.flash.freq),
954-
)
955-
}
956-
957949
pub fn make_flash_data(
958950
image_args: ImageArgs,
959951
flash_config_args: &FlashConfigArgs,
@@ -983,7 +975,12 @@ pub fn make_flash_data(
983975
println!("Partition table: {}", path.display());
984976
}
985977

986-
let flash_settings = make_flash_settings(flash_config_args, config);
978+
let flash_settings = FlashSettings::new(
979+
flash_config_args.flash_mode.or(config.flash.mode),
980+
flash_config_args.flash_size,
981+
flash_config_args.flash_freq.or(config.flash.freq),
982+
);
983+
987984
FlashData::new(
988985
bootloader,
989986
partition_table,

espflash/src/flasher/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -840,7 +840,7 @@ impl Flasher {
840840
Err(Error::FlashConnect)
841841
}
842842

843-
fn flash_detect(&mut self) -> Result<Option<FlashSize>, Error> {
843+
pub fn flash_detect(&mut self) -> Result<Option<FlashSize>, Error> {
844844
const FLASH_RETRY: u8 = 0xFF;
845845

846846
let flash_id = self.spi_command(CommandType::FlashDetect, &[], 24)?;

0 commit comments

Comments
 (0)