@@ -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