使用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
相关产品推荐
相关产品推荐

