breakerMAG 发表于 2022-5-2 12:32

RP2040固件问题解决

本帖最后由 breakerMAG 于 2022-5-2 12:45 编辑

# 摘要

本篇日志是要把RP2040的DIY经验写下来,给自己和一起学习、尝试RP2040的同志们做一个经验总结,以便后面遇到类似的问题有先前的经验参考。

本篇日志(下文中简称日志)解决了以下几个情形中的问题:

1. 使用Thonny时,RP2040跑main函数无法停止,FLASH需要清除的情况
2. 自制RP板卡时,USB在设备管理器中不识别或者没有串口设备的情况
3. 自己使用Zadig更换了USB驱动,制作picoprobe或者picotool后,想把板卡变为普通pico的情况

摘要中还介绍了本日志的关键字,演示使用的板卡和资料链接。

## 1.关键字

为了在搜索引擎中快速搜到日志,特总结若干关键字来辅助搜索。

**RP2040 USB CAN NOT WORK** ;**RP2040 USB不工作** ;**Raspberry Pi Pico in python main function can not stop** ; **Raspberry Pi Pico使用Python时,main函数停不下来** ;**RP2040 RP Boot warnning , can not work** ; **RP2040 Boot** ; **RP2040 Bootloader Install** ; **RP2040 setup error** ; **Raspberry Pi Pico setup error** ; **RP2040设备管理器** ;**Raspberry Pi Pico设备管理器**;**RP2040 Arduino can not download** ;**RP2040 Arduino/Python can't open serial** ;

**RP2040踩坑日志** ;**RP2040填坑日志** ;**RP2040日志** ; **RP2040上传错误问题**

## 2.演示使用板卡

为了重复当时出现BUG的情形,下面使用三块作者本人使用的板卡来演示。

简单介绍一下使用的三块板卡:第一块是树莓派PICO,第二块是电子森林的Game Kit,第三块是自己DIY的板卡iono-rp2040。

下面两张图是板卡的正反面照。

https://img2022.cnblogs.com/blog/1423856/202204/1423856-20220430172352223-1458569024.jpg


## 3.资料

### 1.网盘链接

### 2.资料目录:

`

-RP2040日志资料文件

--      1.Thonny部分

----      复现demo程序

`

# 零、日志名词声明

由于日志中会使用一些仅存在本文的特指一种或一类的事务的名词,所以这里在文章的开始,特对这些名词进行声明!请诸位务必对这些词关注并有所印象,因为在后面的实际问题的解决中会频繁的引用这些名词。

## 名词1——”BOOT操作“

在RP2040的操作中,我们经常会进行BOOT操作,这个操作使芯片进入BOOT模式,进入BOOT模式后,RP2040会显示为U盘模式,这时可以拖拽UF2文件到FLASH中。

下面介绍两种方法来进行BOOT操作。

1.在系统上电前,按下BOOTSEL按键,系统上电后,松开BOOTSEL按键,电脑中出现RP1-RP2设备。此时设备已进入BOOT模式。



2.系统上电后直接进入下载状态。此种情况,系统处于上电状态,先按下复位键不松,再按键BOOTSEL按键,先松开复位按键,再松开BOOTSEL键,电脑中出现RP1-RP2设备。此时设备已进入BOOT模式。

## 名词2——”刷入初始固件操作“

这里定义几种情况可以需要”刷入初始固件操作“的情形:

1.自己DIY的板卡完成后,需要第一次刷入初始固件

2.将原有FLASH清除后,设备恢复出厂状态,需要再次刷入初始固件

3.设备使用zadig清除驱动,设备用途更换,比如picotool恢复为普通pico,需要再次刷入初始固件。

那么如何操作呢?

1.确保设备处于可以刷入初始固件的情况,**检查方法如下:如果每次按下复位或者上电后,可以直接弹出U盘,进入BOOT模式的话,说明此时处于可以刷入初始固件的情况。打开设备管理器后,应该是这样子。**



2.直接拖入初始固件。固件下载地址[这里](https://micropython.org/download/rp2-pico/)。下载最新的Releases的uf2。拖入固件后,等待设备自动重启。



3.查看设备管理器,端口是否出现新的USB串行设备,并且之前的RP2 BOOT未识别的设备消失。若上面的情况均出现,说明我们的初始固件已经成功刷入。**成功刷入固件后,此时仅复位不能使设备进入BOOT模式,需要进行”BOOT操作“才可以进入BOOT模式。**



## 名词3——”刷入Arduino固件“

上传固件的方法:

**Uploading Sketches[原文链接](https://arduino-pico.readthedocs.io/en/latest/install.html#uploading-sketches)**

To upload your first sketch, you will need to hold the BOOTSEL button down while plugging in the Pico to your computer. Then hit the upload button and the sketch should be transferred and start to run.

After the first upload, this should not be necessary as the arduino-pico core has auto-reset support. Select the appropriate serial port shown in the Arduino Tools->Port->Serial Port menu once (this setting will stick and does not need to be touched for multiple uploads). This selection allows the auto-reset tool to identify the proper device to reset. Then hit the upload button and your sketch should upload and run.

In some cases the Pico will encounter a hard hang and its USB port will not respond to the auto-reset request. Should this happen, just follow the initial procedure of holding the BOOTSEL button down while plugging in the Pico to enter the ROM bootloader.

中文翻译:

要上传你的第一个草图,你需要按住BOOTSEL按钮,同时插入Pico到你的电脑。 然后点击上传按钮,草图应该被上传并开始运行。

在第一次上传后,就没有必要再做上面的操作,因为arduino-pico核心支持自动复位。 在“Arduino Tools-> port -> serial port”菜单中选择合适的串口一次(此设置将保持不变,多次上传不需要改变)。 这种选择允许自动复位工具识别要复位的设备。 然后点击上传按钮,你的草图就可以上传并运行了。

在某些情况下,Pico会遇到硬挂起,它的USB端口不会响应自动复位请求。 如果发生这种情况,只需按照初始步骤按住BOOTSEL按钮,同时插入Pico以进入ROM引导加载程序。

------

固件上传之后(确保你确使按照上述的情况做,若步骤错误,则不会有下面正确的输出结果),可以查看设备管理器,出现新的端口。



另外,可以在Arduino中的"工具"->“端口”中找到该端口:




上述的特征如果你的设备都具备,这时,你的RP2040可以直接下载,不用再进行BOOT模式的下载。祝贺你,Arduino固件安装完成!接下来,你手中的这块板卡就可以一直使用Arduino IDE来进行编程了,不再需要对他进行固件的操作。如果你想使用Python固件,可以查看”刷入Python固件“操作。

## 名词4——”刷入Python固件“

**Software Setup**[原文链接](https://wiki.seeedstudio.com/XIAO-RP2040-with-MicroPython/#software-setup)

- **Step 1**. Download and Install the latest version of (https://thonny.org/) according to your operating system



- **Step 2**. Launch the Thonny
- **Step 3**. Click **"Tools→Options"** to open the settings.



- **Step 4**. Chose the "Interpreter" interface and select the device as **"MicroPython(Raspberry Pi Pico)"** and the port as **"Try to detect prot automatically"**



**Connect XIAO RP2040 to the PC and Light it up**[原文链接](https://wiki.seeedstudio.com/XIAO-RP2040-with-MicroPython/#connect-xiao-rp2040-to-the-pc-and-light-it-up)

- **Step 1**. Press and hold the "BOOT" button and then connect the XIAO RP2040 to the PC through the Type-C cable. If it works well, there is an "RPI-RP2" desk shown on the PC.



- **Step 2**. Press the "Stop/Restart Backend" button and there will be a pop-up window that helps you install the MicroPython firmware on the board. The XIAO RP2040 uses the same chip as the Raspberry Pi Pico, thereby the XIAO RP2040 is compatible with **Pico's MicroPython files**.



The following information will be shown on the interface once the firmware is complete.



- **Step 3**. Copy the following codes to Thonny.



```
from machine import Pin, Timer

led = Pin(25, Pin.OUT)
Counter = 0
Fun_Num = 0

def fun(tim):
    global Counter
    Counter = Counter + 1
    print(Counter)
    led.value(Counter%2)

tim = Timer(-1)
tim.init(period=1000, mode=Timer.PERIODIC, callback=fun)
```

- **Step 4**. Upload the codes by clicking the "Run current script" button. For the first time, Thonny will ask where you want to save your codes file. Both **This Computer** and **Raspberry Pi Pico** are fine.



If it works well, you will see the LED light turn on and off once a second. And the output of the increasing number will as well be displayed in the Shell.



The connection is commplete and now we can proceed to the other projects.

## 名词5——”刷入flash清除固件“

”刷入flash清除固件“目的是将FLASH中的原有内容清除,清除后设备就类似”白纸“,需要我们再次进行**”刷入初始固件操作“** 。所以这两个操作一般是连在一块的。

下面是”刷入flash清除固件“的操作步骤:

在**”BOOT操作“**后,拖拽**”flash_nuke.uf2“** (可以在[这里](https://forum.micropython.org/download/file.php?id=1388&sid=738edbd47c8db321e757b118c1517f3b)下载该文件,或在资料中的固件中找到)到U盘中,然后设备自动重启。



## 名词6——”设备管理器清除USB驱动“

当使用Zadig修改了USB驱动,但是发现设备还是无法使用,此时尝试下面的操作:([原文链接](https://shawnhymel.com/2168/how-to-build-openocd-and-picotool-for-the-raspberry-pi-pico-on-windows/))

> If you break something in Zadig (like I did), you can fix it. For example, the Pico will not enumerate as a mass storage device drive in bootloader mode. Zadig will show something other than “USBSTOR” as the driver for RP2 (Interface 0). Here is how to delete the bad drivers and let Windows fix the mess you made:
>
> 1. Put Pico into bootloader mode
> 2. Open Device Manager
> 3. Click View > Devices by container
> 4. Expand RP2 Boot
> 5. For all entries under RP2 Boot:
>    - Right-click on entry
>    - Select Uninstall Device
>    - Check “Delete the driver software for this device” (if asked)
>    - Click Uninstall
> 6. Unplug Pico
> 7. Hold BOOTSEL and plug it back in to put it into bootloader mode again
> 8. Windows should automatically reinstall all the correct drivers

中文翻译:

> 如果你在Zadig中弄坏了什么东西(就像我做的那样),你可以自己修复它。 例如,Pico不会作为引导加载程序模式下的大容量存储设备驱动器枚举。 Zadig将展示一些除了“USBSTOR”之外的东西作为RP2 (Interface 0)的驱动程序。下面是如何删除坏的驱动程序,并让Windows修复你造成的混乱:
>
>
>
> 1. 将Pico放入引导加载程序模式(bootloader mode)
>
> 2. 打开设备管理器
>
> 3. 单击“按容器查看>设备”
>
> 4. 扩大RP2引导
>
> 5. 对于RP2引导下的所有条目:
>
>    -右键单击入口
>
>    —选择“卸载设备”。
>
>    -勾选“删除此设备的驱动程序软件”(如果询问)
>
>    ——点击卸载
>
> 6. 拔掉pico
>
> 7. 按住BOOTSEL并将其插回以再次进入引导加载程序模式
>
> 8. Windows会自动重新安装所有正确的驱动程序

# 一、Thonny IDE下,解决MAIN函数无法停止,卡死的问题,此时清除FLASH,更换UF2

## 1.情况复现

如果你手上恰好有一个使用python的PICO,可以跟我一起做这个实验——复现main函数卡死,thonny无法响应板卡的情况。复现完之后,我们来解决这个问题。

打开Thonny,依次进入”RP2040日志资料文件“,”1.Thonny部分“,”复现demo程序“,”myPicoMP“中,打开led.py。运行。这时控制台可以输出计数器的时间:



如果你修改这段代码的第三行中的pin为led的引脚,还可以看到led闪烁的情况。

好了,经过了上面的操作,我们的板卡可以准备好了,现在的板卡是一个正常的板卡,接下来我们要做一些坏事情,将板卡“搞坏”。不过,不用担心,这个坏掉的情况会在后文中解决,所以,放心跟着我一起做吧。

- 先将几个文件夹上传到pico中。



- 上传后,pico区域会有文件夹的名字:




- 点击运行。控制台有输出。可以看下面的gif来完整操作。




## 2.解决办法

假设,我们的程序已经把设备搞坏了,已经连接不上thonny。这时候,我们需要尝试两种方法。

- 第一种

给设备重新上电,或者复位。点击stop,看设备是否弹出来。PICO正常弹出后,直接删除main.py文件。



- 第二种

首先,执行**”BOOT操作“**,进入BOOT模式。

接着,执行**“flash清除固件操作”**。

最后,执行**“刷入Python固件”操作**。

完成后,一个空白的pico就会出现。




# 二、自制板卡,USB在设备管理器中不识别或者没有串口设备

当你自制一块RP2040的板卡后,这时不能直接刷入Arduino或者Python固件,因为现在的板卡不能被IDE识别,这里我不确定是缺少BOOTLOADDER的原因?

通过以下步骤,可以达到刷入Arduino或者Python固件的条件。

## 1.板卡自检

当你自制了一块板卡,可以检查你的板卡是否处于**“可以刷入初始固件”**的状态(在名词2——“刷入初始固件操作”中有检查方法),如果是,接下来进行**“刷入初始固件操作”**;如果否,你需要检查焊接和电路设计的问题。

## 2.查看设备管理器,检查初始固件是否成功刷入

成功后,设备管理器中会弹出新端口。

如果以上步骤出现了问题,请重复1~2步骤,直到所有检查都通过。

------

至此,我们可以刷入Arduino或者Python固件。

## 1.刷入Arduino固件

执行**”刷入Arduino固件“**操作即可。

## 2.刷入Python固件

执行**”刷入Python固件“**操作即可。

------

如果你想要在Arduino固件和Python固件之间切换,一种简便的方法是,不需要进行板卡自检,只需要再次按照“刷入Arduino固件”、或“刷入Python固件”步骤,刷入相应的固件就可以。但是这个方式有个缺点,在python中的原有FLASH程序会保存,并没有删除。所以能使用的内存会减少。第二种方式可以避免这种缺点,当然也比较麻烦。方法是,回到第一种情况的解决方法中,进行“刷入FLASH清除固件”操作,完全清除FLASH的内容。

# 三、使用Zadig更换了USB驱动后,想把板卡变为普通pico

当你想要将一个picoprobe或者picotool更换为普通pico,那么可以跟着下面的步骤来做。

## 1.执行”设备管理器清除USB驱动“

回到名词6中,按照步骤来对设备管理器中的USB驱动操作。

## 2.执行完1后,板卡为“初始卡”,这时回到第二种情况中,进行相关操作

在执行完步骤1后,板卡会自动被PC安装驱动,板卡变为初始卡,它没有相关的初始化固件,这时候,和第二类情形是一样的,所以,我们回到第二种情形的解决方式中,按照相关步骤可以将板卡变为普通pico。

# 四、致谢

参考了许多网络上面的文章,在这里对这些不辞辛苦,乐于为开源事业做出贡献的人们致以衷心的感谢!

下面是参考的网页链接:

https://shawnhymel.com/2168/how-to-build-openocd-and-picotool-for-the-raspberry-pi-pico-on-windows/

https://arduino-pico.readthedocs.io/en/latest/index.html

https://www.bilibili.com/read/cv13198481

http://4k8k.xyz/article/chizf/122516458

https://www.eetree.cn/

https://pico.org.cn/

https://www.raspberrypi.com/products/raspberry-pi-pico/

https://wiki.seeedstudio.com/XIAO-RP2040-with-MicroPython/

# 附件

视频地址


页: [1]
查看完整版本: RP2040固件问题解决