Skip to content

Commit de4d2b2

Browse files
committed
Fix regular UF2s
1 parent c9aae62 commit de4d2b2

1 file changed

Lines changed: 14 additions & 6 deletions

File tree

main.cpp

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4986,9 +4986,11 @@ bool load_command::execute(device_map &devices) {
49864986
vector<uint32_t> available_family_ids;
49874987
uint32_t file_family_id = 0;
49884988
uint32_t override_family_id = settings.family_id;
4989+
bool multi_family_uf2 = false;
49894990
auto tmp_file_access = get_file_memory_access(0, false, &next_id);
49904991
if (next_id) {
49914992
// UF2 file with multiple family IDs
4993+
multi_family_uf2 = true;
49924994
settings.family_id = 0;
49934995
next_id = get_family_id(0);
49944996
while (next_id) {
@@ -5005,6 +5007,16 @@ bool load_command::execute(device_map &devices) {
50055007
available_family_ids[0] = override_family_id;
50065008
}
50075009
}
5010+
} else {
5011+
// For anything else, just populate available_family_ids with the family ID from the file
5012+
uint32_t family_id = get_family_id(0);
5013+
available_family_ids.push_back(family_id);
5014+
}
5015+
5016+
if (available_family_ids.size() > 1) {
5017+
vector<string> family_names = {};
5018+
for (auto family_id : available_family_ids) family_names.push_back(family_name(family_id));
5019+
fos << "UF2 file contains multiple family IDs: " << cli::join(family_names, ", ") << "\n";
50085020
}
50095021

50105022
if (settings.load.partition >= 0) {
@@ -5023,10 +5035,6 @@ bool load_command::execute(device_map &devices) {
50235035
settings.offset_set = true;
50245036
settings.partition_size = end - start;
50255037
} else if (!settings.load.ignore_pt && !settings.offset_set) {
5026-
if (available_family_ids.size() == 0) {
5027-
uint32_t family_id = get_family_id(0);
5028-
available_family_ids.push_back(family_id);
5029-
}
50305038
uint32_t start;
50315039
uint32_t end;
50325040
bool accepted = false;
@@ -5067,9 +5075,9 @@ bool load_command::execute(device_map &devices) {
50675075
}
50685076
}
50695077
}
5070-
auto file_access = get_file_memory_access(0, false, &file_family_id);
5078+
auto file_access = multi_family_uf2 ? get_file_memory_access(0, false, &file_family_id) : get_file_memory_access(0);
50715079
if (settings.offset_set && get_file_type() != filetype::bin && raw_access.get_model()->chip() == rp2040) {
5072-
fail(ERROR_ARGS, "Offset only valid for BIN files");
5080+
fail(ERROR_ARGS, "On RP2040, offset is only valid for BIN files");
50735081
}
50745082
bool ret = load_guts(con, file_access);
50755083
return ret;

0 commit comments

Comments
 (0)