天天看点

关于使用MU开发ESP32传输文件报错

本文讲述在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等工具产生同样错误时,也可以利用上述方法解决。

继续阅读