天天看點

關于使用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等工具産生同樣錯誤時,也可以利用上述方法解決。

繼續閱讀