2026年7月2日木曜日

XIAO MG24のD1とD3に気をつけて

D0 - D3にロータリーディップSWをつないで使用しました。

症状:特定の数値の時にハングしたりLED点灯しっぱなしになったり。

原因:D1(PC1)とD3(PC3)がブート時に特殊機能を持つピンだった。

  • D1(PC1) = DEEP_SLEEP_ESCAPE_PIN:
    • ArduinoLowPower.cppの escape_hatch() が setup() より前に実行される
    • D1がLOW → LED_BUILTIN点灯 + 無限ループ (ユーザーコードに到達しない)
  • D3(PC3) = GeckoブートローダーGPIOアクティベーションピン:
    • Geckoブートローダーが escape_hatch() よりさらに前に実行される
    • D3がLOW → ブートローダーがUART XMODEM待機モードに入りアプリ未起動

ということだそうです……(白目

D1とD3は、出力ピンとして使いましょうね。

まぁXIAO ESP32 C3も使えないピンがたくさんあって苦労しましたが、Seeed JPの方のブログに救われました。XIAO MG24についてはwikiに特に警告ないので、何も考えずにピンアサインしたのですが……いやはや。

まぁClaude Opusさんに救われました。症状が出た時に「動かないのは気のせいだろ」「起動しない場合はパスコンを追加するといいですよ」とか言われたんですが(意訳)、「ブートモードにでもハマってるのではございませんか? 他のピンに変えたいけど、安全なピンをお探しくだせえ」とヒントを投げたら、ドキュメントやソースコードを深く深く掘り下げて原因を見つけ出してくれました。

私だったらあんな山のようなドキュメントやソース読む気力ないから、D0-D3全部入れ替えちゃえ!って無駄な苦労をしてたでしょうね(笑)。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。