我自已在官方固件二进制文件后面增加了空白内容,直接能装满2M。同是修改固件数据块中的长度值,用来刷一次,已成功恢复。
python:(其中RP2040.uf2为固件文件名)
# 创建一个512字节的字节数组,用来追加到固件后面。x0D,x0E,0x14,0x15为块计数,每块需要更新
base_512 = bytearray(
b'\x55\x46\x32\x0A\x57\x51\x5D\x9E\x00\x20\x00\x00\x00\x00\x00\x10'
b'\x00\x01\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x56\xFF\x8B\xE4'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x6F\xB1\x0A'
)
def uf2_append_data():
global i, x0D, x0E
x0D = 0
x0E = 0
with (open('RP2040.uf2', 'rb') as file):
content = file.read() # 读取全部内容
modified_chunk = bytearray(content) # 转换为可变字节数组
for i in range(0, int(len(modified_chunk)/512)): # 遍历所有块,每块512字节
if x0D != modified_chunk[i*512+0x0D] or x0E != modified_chunk[i*512+0x0E]:
print("Error:", i, modified_chunk[i*512+0x0D], modified_chunk[i*512+0x0E])
return
modified_chunk[i*512+0x18] = 0x00 # 修改块的长度值为0x2000内容
modified_chunk[i*512+0x19] = 0x20
x0D += 1
if x0D == 0x100:
x0D = 0
x0E += 1
# 将修改后的内容写入同一文件
with open('RP2040.uf2', 'wb') as file:
file.write(modified_chunk) # 写入修改后的内容
print(i) # 打印固件原有块数,后面接着追加块。
while i< 0x1FFF: # 追加块数到
temp512 = base_512
temp512[0x0D] = x0D
temp512[0x0E] = x0E
temp512[0x14] = x0D
temp512[0x15] = x0E
with open('RP2040.uf2', 'ab') as file:
file.write(temp512) # 以追加模式打开文件并写入
i += 1
x0D += 1
if x0D == 0x100:
x0D = 0
x0E += 1
uf2_append_data()