Raspberry Pi Pico のシリアルCOMが表示されないときの修復方法

Raspberry Pi Pico 用 MicroPython のシリアルCOMが表示されずUSBシリアル通信が出来なくなったときの修復方法が分かったので紹介します。

はじめに

壊れたと思っていた Raspberry Pi Pico が修復できました。ネット検索で見つからなかったので、記録として残しておくことにしました。

修復方法の概要

詳細は後述しますが、一言で書くと、CircutPython をインストールし、少し遊んでから、Raspberry Pi Pico用の公式MicroPythonを再インストールしました。
単に、公式MicroPythonを再インストールしたり、Cで作成したソフトを実行しても復旧しませんでした。

何をしていて壊れたの?

公式MicroPythonをインストールしたRaspberry Pi Picoで、machine.deepsleepモジュールを使ったプログラムを作成していました。

プログラムを書き込まずに(REPLモードやプログラム転送)で実行すると、COMポート(ttyACM)が切断されました。しかし、消費電力は下がりません。この段階では、COMポートの再接続で、スリープ!?が復帰しました。

次に、Raspberry Pi Picoにプログラムをmain.pyのファイル名で書き込んで実行してみました。消費電力が下がって(約10mA)喜んだのもつかの間、COMポートを再接続しても復帰できなくなりました。

USBを挿しなおしても、Raspberry Pi PicoのUSBシリアルCOMが動作しないので、通常モードではプログラムの書き換えが出来なくなりました。

公式MicroPythonを再インストールしても、復帰しませんでした。

壊れたー。

修復方法(詳細)

Raspberry Pi Pico上のBOOTSELボタンを押しながら、PCのUSBに接続すると、ドライブとして認識するので、下記からCircutPythonをダウンロードし、ドライブへ書き込みます。

https://circuitpython.org/downloads

CircutPythonは、米Adafruitが支援する組み込み機器向けのPythonです。ベースは MicroPython ですが、様々な機能拡張がされています。

インストール後、起動してみると、なんとCOMから日本語のメッセージが。組み込みマイコンの起動メッセージに日本語が表示されることに驚きです。もちろん、COMポートがハード的に壊れていなかったことも分かり、一安心しました。

ボクは、CircuitPythonが女神のように感じ、少し、試用してみることにしました。CircutPythonだと、リムーバブル・ドライブ上のファイルcode.py(Hello world表示プログラム)を、書き換えて、実行することが出来ます。これは、便利です。
(わざわざ、ここに書いたのは、ドライブのファイル編集が、MicroPythonでのCOMの復旧に寄与したかもしれないからです。互換性を確認したかったので、数多くのプログラムで試しました。)

このあと、Raspberry Pi Pico用のMicroPythonを下記からダウンロードし、再インストールすると、復旧できました。

https://micropython.org/download/rp2-pico/rp2-pico-latest.uf2

復旧させたRaspberry Pi Picoで実験を再開しました。

Raspberry Pi Picoにセンサと無線モジュールを接続して、IoT実験中。

原因は?

発生した症状、復旧した流れから、以下の2つのどちらかが原因と思います。

  1. main.pyが公式MicoPythonの再インストールでは消えずに、再インストール後の起動においてもdeepsleep動作が実行され続け、復旧できなかった。
  2. USBシリアルのハードウェアがスリープ状態に固定されてしまっていて、公式MicroPythonの起動ではスリープ解除ができなかった。

消費電流

参考のために、消費電流の実測値をメモしておきます。後半の4つがMicroPythonでスリープ命令を実行したときの電流値です。フル動作状態にしか見えない値でした。

状態消費電流
ファームウェア無し(購入状態)8.4 mA
MicroPythonファームウェア導入後(COM非接続)17.9 mA
COMポート接続状態18.1 mA
time.sleep(5)18.1 mA
utime.sleep(5)18.1 mA
machine.lightsleep()18.1 mA
machine.deepsleep()18.1 mA
動作確認時ファームウェア:rp2-pico-20210418-v1.15.uf2

蛇足

てっきり、壊れたと思っていたので、復旧したときには追加で注文してしまっていました。金曜日の夜に発注しましたが、月曜日に発送、火曜日の朝に到着。到着してから、キャンセルできたかもしれなかったことに気づきました。

追加で購入してしまったRaspberri Pi Pico

by bokunimo.net

「Raspberry Pi Pico のシリアルCOMが表示されないときの修復方法」への3件のフィードバック

  1. 追加コメントありがとうございます。
    pico、すごい機能だけに、使いこなすのは大変そうです。
    情報共有よろしくお願いします。

  2. いつも拝見しています

    >参考のために、消費電流の実測値をメモしておきます。
    picoのsleep時の消費電流が同じ(18.1mA)に見えます、わかると嬉しいです。

    1. 私も、Facebookで投稿されている情報を拝見させていただいています。
      ご指摘、ありがとうございます。「全部、同じやん!」というツッコミを待っていたので、反応していただき嬉しいです。
      実は、MicroPythonから指示してもスリープが実行されず、全て同じ電流値でした。
      とはいえ、指摘いただいたように誤記のようにも見えてしまうので、ブログとして不適切でした。
      「MicroPythonでスリープ命令を実行したときの電流値です。フル動作状態にしか見えない値でした。」と追加しておきました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です