2021-05-22

解除死鎖狀態的 Raspberry Pi Pico

早幾日到手的 Raspberry Pi Pico 不明原因下,Thonny 突然無法識別
但 Arduino 卻能如常能夠在 Raspberry Pi Pico BOOTSEL 模式下安裝 UF2檔案,亦能正確運作
因此在下翻查資料嘗試下解情況
話是「了解」,實際在下根本不知發生甚麼事情導致

偵錯過程

1
2
3
Unable to connect to /dev/ttyACM0: [Errno 2] could not open port /dev/ttyACM0: [Errno 2] No such file or directory: '/dev/ttyACM0'
 
Backend terminated or disconnected. Use 'Stop/Restart' to restart.
出現這個狀態的最後印象是在下使用 Thonny 編寫 MicroPython 並將程式安裝到 Raspberry Pi Pico
然後 Thonny 突然顯示 /dev/ttyACM0 無法連接,無法將程式安裝到 Raspberry Pi Pico

發生這些情況當然典型的處理方法是重新開機
不論是電腦還是 Raspberry Pi Pico 都嘗試重開機,能否處理問題
結果是失敗,Thonny 仍然顯示無法連接
但在網上尋找資料,並沒有有效的解決方法

1
Could not find port in 10 seconds
在下嘗試重裝 MircoPython韌體 ,但發現當 Thonny 下載及安裝 MircoPython韌體 時出現錯誤
在下嘗試不經 Thonny 下載及安裝卻沒有出現錯誤,但卻出現另一個錯誤

1
2
3
4
Couldn't find the device automatically.
Check the connection (making sure the device is not in bootloader mode) or choose
"Configure interpreter" in the interpreter menu (bottom-right corner of the window)
to select specific port or another interpreter.
在下將 Thonny 連同使用者設定資料完全刪除,重新安裝及設定 結果再次是失敗,即使已經安裝 MircoPython韌體 , Thonny 顯示無法連接到 連接埠
在網上尋找資料,都是無法找到解決方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Traceback (most recent call last):
  File "/opt/thonny-ide/lib/python3.7/tkinter/__init__.py", line 1705, in __call__
    return self.func(*args)
  File "/opt/thonny-ide/lib/python3.7/site-packages/thonny/workbench.py", line 1960, in toolbar_handler
    handler(*args)
  File "/opt/thonny-ide/lib/python3.7/site-packages/thonny/running.py", line 405, in cmd_run_current_script
    self.execute_current("Run")
  File "/opt/thonny-ide/lib/python3.7/site-packages/thonny/running.py", line 366, in execute_current
    self.execute_editor_content(command_name, self._get_active_arguments())
  File "/opt/thonny-ide/lib/python3.7/site-packages/thonny/running.py", line 341, in execute_editor_content
    ["%" + command_name, "-c", EDITOR_CONTENT_TOKEN] + args, [EDITOR_CONTENT_TOKEN]
  File "/opt/thonny-ide/lib/python3.7/site-packages/thonny/shell.py", line 224, in submit_magic_command
    self.text.submit_command(cmd_line, ("magic",))
  File "/opt/thonny-ide/lib/python3.7/site-packages/thonny/shell.py", line 408, in submit_command
    self._try_submit_input()
  File "/opt/thonny-ide/lib/python3.7/site-packages/thonny/shell.py", line 1089, in _try_submit_input
    self._submit_input(submittable_text)
  File "/opt/thonny-ide/lib/python3.7/site-packages/thonny/shell.py", line 1231, in _submit_input
    get_runner().send_program_input(text_to_be_submitted)
  File "/opt/thonny-ide/lib/python3.7/site-packages/thonny/running.py", line 313, in send_program_input
    self._proxy.send_program_input(data)
  File "/opt/thonny-ide/lib/python3.7/site-packages/thonny/running.py", line 972, in send_program_input
    self._send_msg(InputSubmission(data))
  File "/opt/thonny-ide/lib/python3.7/site-packages/thonny/running.py", line 965, in _send_msg
    self._proc.stdin.write(serialize_message(msg) + "\n")
AttributeError: 'NoneType' object has no attribute 'stdin'
然後同樣是典型方法,就是重新安裝電腦系統測試,但由於在下有大量測試用電腦
因此將其中一部測試電腦重裝,回復至最初狀態下安裝 Thonny ,結果都是失敗
如果連重裝電腦都失敗,可以確定是 Raspberry Pi Pico 的問題
因為安裝最新版本的 Thonny 還顯示其他錯誤,這個錯誤訊息終於在網上找到解決方法

解決方法

最後在 Raspberry Pi 的官方討論區找到一篇文章 rpi pico cannot use micropython anymore
文中回應指下載 flash_nuke.uf2 並安裝到 Raspberry Pi Pico 便可以解決
在下看到來源是 Raspberry Pi 官方的超連結,便到 https://www.raspberrypi.org/documentation/rp2040/getting-started 了解
發現在 https://www.raspberrypi.org/documentation/rp2040/getting-started/#board-specificationsResetting Flash memory
有說明 Raspberry Pi Pico 無法覆寫時的處理方法
下載 flash_nuke.uf2 或使用指令下載或引導檔案到 Raspberry Pi Pico 的分區目錄,便可以重設 Raspberry Pi Pico 的記憶體
1
2
3
MicroPython v1.15 on 2021-04-18; Raspberry Pi Pico with RP2040
Type "help()" for more information.
>>>

最後, Thonny 能夠偵測到 Raspberry Pi Pico

總結

在下估計是因為使用 Thonny 安裝 MicroPython 時,太快連續安裝導致死鎖錯誤

仔細閱讀說明文件是非常重要,其實官方已經將解決方法放在網頁上
但在下沒有了解清楚,當問題發生時卻花大量時間四處尋找解決方法,足足浪費了2日時間
結果解決方法只是下載一個 UF2檔案 並安裝到 Raspberry Pi Pico 便可以解決

關於重裝電腦來「解決」問題,通常是完全無計可施才使用
即使問題消失,實際問題並沒有解決,只是將問題迴避,當問題再發生,又要重裝電腦,處理上亦很花時間

參考資料

1 則留言 :

  1. 我也遇到相同問題 , 感謝大大經驗分享 ,問題解決了!~

    回覆刪除