@@ -69,16 +69,7 @@ def flatten_dol(data):
6969 # Entry point, load address, memory image
7070 return entry , dol_min , img
7171
72- def pack_uf2 (data , base_address , family ):
73- if family == "rp2040" :
74- family_id = 0xE48BFF56 # RP2040
75- elif family == "rp2350" :
76- family_id = 0xE48BFF59 # RP2350-ARM-S
77- elif family == "data" :
78- family_id = 0xE48BFF58 # DATA family ID compatible with RP2350
79- else :
80- raise ValueError (f"Unknown family: { family } " )
81-
72+ def pack_uf2 (data , base_address , family_ids ):
8273 ret = bytearray ()
8374
8475 seq = 0
@@ -89,19 +80,20 @@ def pack_uf2(data, base_address, family):
8980 chunk = data [:chunk_size ]
9081 data = data [chunk_size :]
9182
92- ret += struct .pack (
93- "< 8I 476B I" ,
94- 0x0A324655 , # Magic 1 "UF2\n"
95- 0x9E5D5157 , # Magic 2
96- 0x00002000 , # Flags (family ID present)
97- addr ,
98- chunk_size ,
99- seq ,
100- total_chunks ,
101- family_id , # Board family: Raspberry Pi RP2040
102- * chunk .ljust (476 , b"\x00 " ),
103- 0x0AB16F30 , # Final magic
104- )
83+ for family_id in family_ids :
84+ ret += struct .pack (
85+ "< 8I 476s I" ,
86+ 0x0A324655 , # Magic 1 "UF2\n"
87+ 0x9E5D5157 , # Magic 2
88+ 0x00002000 , # Flags (family ID present)
89+ addr ,
90+ chunk_size ,
91+ seq ,
92+ total_chunks ,
93+ family_id ,
94+ chunk ,
95+ 0x0AB16F30 , # Final magic
96+ )
10597
10698 seq += 1
10799 addr += chunk_size
@@ -110,12 +102,11 @@ def pack_uf2(data, base_address, family):
110102
111103def main ():
112104 if len (sys .argv ) not in range (3 , 4 + 1 ):
113- print (f"Usage: { sys .argv [0 ]} <output> <executable> [<uf2_family>] " )
105+ print (f"Usage: { sys .argv [0 ]} <output> <executable>" )
114106 return 1
115107
116108 output = sys .argv [1 ]
117109 executable = sys .argv [2 ]
118- family = sys .argv [3 ]
119110
120111 with open (executable , "rb" ) as f :
121112 exe = bytearray (f .read ())
@@ -161,7 +152,17 @@ def main():
161152 out = header + img
162153
163154 elif output .endswith (".uf2" ):
164- out = pack_uf2 (header + img , 0x10080000 , family )
155+ if len (sys .argv ) > 3 :
156+ if sys .argv [3 ] == "rp2040" :
157+ family_ids = [0xE48BFF56 ]
158+ elif sys .argv [3 ] == "rp2350" :
159+ family_ids = [0xE48BFF59 ]
160+ else :
161+ raise ValueError (f"Unknown family: { sys .argv [3 ]} " )
162+ else :
163+ family_ids = [0xE48BFF56 , 0xE48BFF59 ]
164+
165+ out = pack_uf2 (header + img , 0x10080000 , family_ids )
165166
166167 else :
167168 print ("Unknown output format" )
0 commit comments