You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ampy无法向Raspberry Pi Pico刷入CircuitPython程序

Raspberry Pi Pico CircuitPython 文件系统只读,ampy put 失败

问题描述

我在Windows 11系统中使用Git Bash操作ampy工具,VSCode编写代码,已预先给Raspberry Pi Pico刷入对应版本的CircuitPython .uf2文件:

  • 执行ampy -p COM4 ls能正常列出/boot_out.txt、/code.py等文件,确认设备连接和CircuitPython安装正常
  • 用ampy -p COM4 run main.py可以正常运行LED闪烁测试脚本
  • 但执行ampy -p COM4 put main.py实现代码持久化时,触发只读文件系统错误,报错信息如下:
$ ampy -p COM4 put main.py
Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "C:\Users\Dell\AppData\Local\Programs\Python\Python311\Scripts\ampy.exe\__main__.py", line 7, in <module>
  File "C:\Users\Dell\AppData\Local\Programs\Python\Python311\Lib\site-packages\click\core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Dell\AppData\Local\Programs\Python\Python311\Lib\site-packages\click\core.py", line 1078, in main
    rv = self.invoke(ctx)
         ^^^^^^^^^^^^^^^^
  File "C:\Users\Dell\AppData\Local\Programs\Python\Python311\Lib\site-packages\click\core.py", line 1688, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Dell\AppData\Local\Programs\Python\Python311\Lib\site-packages\click\core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Dell\AppData\Local\Programs\Python\Python311\Lib\site-packages\click\core.py", line 783, in invoke
    return __callback(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Dell\AppData\Local\Programs\Python\Python311\Lib\site-packages\ampy\cli.py", line 264, in put
    board_files.put(remote, infile.read())
  File "C:\Users\Dell\AppData\Local\Programs\Python\Python311\Lib\site-packages\ampy\files.py", line 214, in put
    self._pyboard.exec_("f = open('{0}', 'wb')".format(filename))
  File "C:\Users\Dell\AppData\Local\Programs\Python\Python311\Lib\site-packages\ampy\pyboard.py", line 279, in exec_
    raise PyboardError('exception', ret, ret_err)
ampy.pyboard.PyboardError: ('exception', b'', b'Traceback (most recent call last):\r\n  File "<stdin>", line 1, in <module>\r\nOSError: [Errno 30] Read-only filesystem\r\n')

已确认串口COM4未被占用,线缆无问题,求解决办法。

解决方案

1. 排查BOOTSEL模式状态

如果Pico的BOOTSEL按钮被误按住或触发,文件系统会以只读模式挂载:

  • 断开Pico电源,松开BOOTSEL按钮,重新通电后再尝试ampy put操作。

2. 重新刷入CircuitPython固件

固件损坏可能导致文件系统异常:

  • 按住Pico的BOOTSEL按钮并连接电脑,此时会出现名为RPI-RP2的U盘。
  • 将对应型号的最新版CircuitPython .uf2文件复制到该U盘,等待Pico自动重启。
  • 重启后再次执行ampy put命令。

3. 尝试写入默认文件名code.py

CircuitPython默认自动运行code.py,自定义文件名可能触发权限问题:

  • 将测试脚本重命名为code.py,执行ampy -p COM4 put code.py。

4. 升级ampy版本

旧版ampy可能与新版CircuitPython存在兼容性问题:

  • 执行pip install --upgrade adafruit-ampy升级ampy到最新版,重试操作。

5. 手动修改文件系统权限(进阶)

若上述方法无效,可通过串口REPL修改权限:

  • 用串口工具(如pyserial的miniterm)连接COM4,波特率设置为115200。
  • 进入CircuitPython的REPL,执行以下代码:
    import storage
    storage.remount("/", readonly=False)
    
  • 退出串口后重新尝试ampy put操作。

内容的提问来源于stack exchange,提问作者Hubert S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 19:20:30