树莓派 Pico 可以识别但无法通过 Thonny 上传程序的问题解决方法

最近有遇到树莓派 Pico W 因上传了某一段程序,导致 Thonny 无法和 Pico 主板通信,串口调试会提示设备忙(Device Busy),但是可以识别到端口。

这种状态下,无法给 Pico 上传程序,即使重新刷了 UF2 固件也不管用。所以需要用到 @ybzjllj 分享的方法来处理。其原理是给 Pico 的闪存全覆盖写入,彻底将残留在闪存中的程序移除。

为了制作这个占位用的 UF2 文件,可以先下载官方的 MicroPython 固件,将它命名为 RP2040.uf2。再使用下面的代码把这个文件的大小增加到 4,194,304 bytes。

代码如下:

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() [/bash] 下面提供了制作好的 UF2 文件,可以直接下载使用。 链接: https://pan.baidu.com/s/1hrV3nBy_xRssEwjJ91Cg3g?pwd=c5vg 提取码: c5vg

按下 boot 按键不放,链接 Pico 和计算机,将出现 Pico 的磁盘分区。将上述 UF2 文件复制到 Pico 根目录即可。



坐沙发

发表评论

你的邮件地址不会公开


*