本文讲述在ESP32中使用micropython,在传输文件报错时的解决办法
报错代码:
mu.modes.base:435(ls) ERROR: Could not enter raw REPL.
问题排除:
猜测一:芯片不在工作状态中
解决方法:先关闭文件或REPL窗口,然后按下开发板RST复位键,再点开文件。
猜测二:main.py是否有死循环导致文件IO阻塞
解决方法:删除main.py或重刷固件。
猜测三:芯片外围电路与连接设备不能协调
解决方法:找到安装目录下的Mu\pkgs\mu\contrib\microfs.py,使用下面代码替换原本的函数。
def flush(serial):
"""Flush all rx input without relying on serial.flushInput()."""
n = serial.inWaiting()
while n > 0:
serial.read(n)
n = serial.inWaiting()
raw_repl_msg = b'raw REPL; CTRL-B to exit\r\n>'
# Send CTRL-B to end raw mode if required.
serial.write(b'\x02')
# Send CTRL-C three times between pauses to break out of loop.
for i in range(3):
serial.write(b'\r\x03')
time.sleep(0.01)
flush(serial)
#修改挂起时间,参数需大于0.5
time.sleep(2)
# Go into raw mode with CTRL-A.
serial.write(b'\r\x01')
flush_to_msg(serial, raw_repl_msg)
# Soft Reset with CTRL-D
serial.write(b'\x04')
flush_to_msg(serial, b'soft reboot\r\n')
# Some MicroPython versions/ports/forks provide a different message after
# a Soft Reset, check if we are in raw REPL, if not send a CTRL-A again
data = serial.read_until(raw_repl_msg)
if not data.endswith(raw_repl_msg):
serial.write(b'\r\x01')
flush_to_msg(serial, raw_repl_msg)
flush(serial)
ampy等工具产生同样错误时,也可以利用上述方法解决。