使用raspberry pi Pico的原因
在硬件产品(单片机)的开发中我们往往需要借助一些额外的仪器/设备进行产品的辅助测试, 假设我们需要一个IO+ADC类型辅助设备, 以往的做法是原理图->PCB->程序, 而现在随着开源硬件的流行很多时候我们没有必要在重复造轮子。 arduino,raspberry pi,micro:bit,raspberry pi Pico等都是不错误的选择。其中raspberry pi Pico是后来者,并且支持C 和 MicroPython编程,入门比较简单,单片机开发者可以无门槛上手,几乎没有学习成本。
问题来了
我使用的是MicroPython开发方式,客户端工具使用Thonny。
当我不小心写了一个错误的python程序并且将其下载到Pico运行的时候。
错误的程序如图:
会出现以下问题:
WARNING:root:Unexpected echo. Expected b'%Run -c $EDITOR_CONTENT\r\n', got b'TypeError: function takes'
Connection lost (EOF)
Use Stop/Restart to reconnect.
如图:
解决方法
python是解释形语言,我们下载进去的程序其实仅仅是一个文本文件。python仅在运行且运行到该错误行时才会报错。
一些修复尝试
按照我的理解如果用户程序错误,不应该也不至于造成整个系统的瘫痪。 然而上述这个错误我尝试了很多办法都无法解决, 包括重新下载MicroPython的.uf2文件
强制擦除MCU的Flash
于是我想起了j-link,因为raspberry pi Pico本身就是一个Cortex-M0内核的单片机,
注意选择的是M0_0内核, 因为Pico有2个核。
如图:
或者直接点击快捷键 [F4]
擦除成功
重新连接 Pico,提示更新MicroPython固件(因为刚才擦除了flash),点击更新
至此,Pico满血复活
总结
因为Pico我也是刚接触,不确定是否是固件bug,可能还有其他更好的解决方案。以上方法并不是一个非常好的解决方案,因为并不是所有人都有j-link的。
友情提醒
在Thonny的编辑中,我们是可以[F5]先试运行程序的。即使程序有问题因为并没有保存到MCU中,所以并不会造成如上的变砖问题。