RP2040 zero如何重置

ybzjllj 10cm2024-10-05252 次点击
测试时,将:
machine.freq(2700000)
写入main.py,修改了时钟频率
估计是这个原因,Thonny再也连接不上RP2040 zero了,无法更新里面的程序。
现在不知如何恢复与Thonny的连接。
写入固件是可以的。
尝试了重新写入micropython固件,换了不同版本
重启后,还是会自动运行之前的main.py程序
也就是重新写入固件,并不能清除先前的py文件
请问:
有什么办法彻底初始化,如同刚买回来的样子。谢谢!
收藏 ♥ 感谢
Spoony 小组长 2024-10-06 
之前的 py 文件可以通过 Thonny 删除,也可以再创建一个空的 main.py 覆盖
ybzjllj 10cm 2024-10-09 
关键是我修改了时钟频率后,Type-c插上后电脑识别不了这个设备,Thonny就无法通信。
只有写uf2固件可以。
写固件不会清除原来的main.py,所以,只要使用micropython固件,通电就会运行这个main.py,其中的machine.freq(2700000)指令就会修改时钟频率,Type-c就不能正常通讯。
现在只有通过编写一个初始化EEPROM的程序,编译成uf2来恢复。可是,我不会做。
Spoony 小组长 2024-10-10 
下载这个闪灯的 UF2 文件 https://picobit.org/download/blink.uf2
main.py 应该就不存在了,也可以进去把 main.py 删了

还可以尝试用 MicroLua 生成 UF2:
https://pico.nxez.com/2023/11/28/microlua-lua-for-the-rp2040-microcontroller.html
ybzjllj 10cm 2024-10-13  ♥ 1
我自已在官方固件二进制文件后面增加了空白内容,直接能装满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()
ybzjllj 10cm 2024-10-13 
我用了多种办法生成UF2文件,但是用二进制编辑器打开后,头部信息总是与官方固件的文件有些不一样,于是才想起了用官方文件作为基础,自已修改一个UF2文件。
有对RP2040进行降频和超频的,要注意这个问题。代码没有调试好,不要上传要RP2040,不然有可能遇到我的问题。
一块开发板不值几个钱,但是解决了问题,总是好的,以后超频降频也没有后顾之忧了。
Spoony 小组长 2024-10-13 
@ybzjllj 妙啊,感谢反馈
STONROBOT 2024-10-24 
@ybzjllj 首先非常感谢您的分享!帮我这个刚入门的新手解决了这个问题。
实测操作后,效果显著!

登录注册 后可回复。