ESP32-32D DEVKIT 電源ON後にrst:0x3 (SW_RESET) でループする

【現象】

DOIT社のESP32-32D DEVKITにて、Arduino IDEにてスケッチを書きESP32-32Dへ書き込み。
書き込み完了後は、自動的に再起動するが、シリアルコンソールで以下メッセージがループして
立ち上がらない。もしくは、X回ループして立ち上がる現象に遭遇した。(xは数字で不安定)

14:30:20.751 -> ets Jul 29 2019 12:21:46
14:30:20.751 -> 
14:30:20.751 -> rst:0x3 (SW_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
14:30:20.787 -> configsip: 0, SPIWP:0xee
14:30:20.787 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
14:30:20.787 -> mode:DIO, clock div:2
14:30:20.787 -> load:0x3fff0030,len:4660
14:30:20.787 -> load:0x40078000,len:15568
14:30:20.787 -> ho 0 tail 12 room 4
14:30:20.787 -> load:0x40080400,len:4
14:30:20.787 -> load:0x40080404,len:3152
14:30:20.787 -> entry 0x400805a0

【環境】

・ESP32-32D (USB-C) <---> Windows11 (マザーボードUSB2.0端子)
・Arduino IDE 2.3.6

【対応策】

私も困ってgoogle検索しサイトを数ページ巡回してみましたが、DOIT社のESP32ではクセがあるSoCであるようです。
対応策は、

  1. FlashROMの初期化を行う
  2. Arduino IDEの「Flash Frequency」を40MHzにする
  3. EN Pin と GNDPIN 間に0.1μFのコンデンサを接続する

【私の準備した個体では】

再起動直前まで正常に見えたので、3かな?と思いつつ順に試してみる事に

1は、Arduino IDE 2.3.6では、「Erase All Flash Before Sketch Upload」をenableに変更。
書き込み->書き込み完了->自動再起動 やはりループしている
→ USBケーブルを抜いて電源OFF。再度USB接続しても、ループする。
→ ENボタン(RESET)を押しても、ループする。

2は、Arduino IDE起動時80MHzに設定(初期状態)されていたので、40MHzに変更。
書き込み->書き込み完了->自動再起動 やはりループしている
→ USBケーブルを抜いて電源OFF。再度USB接続しても、ループする。
→ ENボタン(RESET)を押しても、ループする。

3の時は、電源OFF状態で0.1μFのコンデンサ接続後に電源ON。
→ 正常に立ち上がる。USBケーブル抜いて、入れてを3回ほど試したが、3回ともOKとなる。
→ ENボタン(RESET)を押しても、ちゃんと立ち上がる。

といっても、解せない点もある。
今回、同製品を2個準備していて、1個目でループしまくったので色々と調べてみたが、
念のためと2個目の個体は、ループしても1~4回程度のループで立ち上がる。ループしない場合もあった。そちらも、0.1μFのコンデンサ接続後は正常。

【色々試してみたこと】

上記の状況で電源周りが怪しいと薄々気づきだした。

DSP32-32Dは、ボード上にLEDが搭載されているので、試しにサンプルスケッチのLチカを書き込んでみると、コンデンサ無しでも正常に起動した。
まあ、無線系使うと消費電力上がるよね!という事になり、ESP32-32Dのデータシートをgoogle検索したが、すぐには探し出せず。

Espressif Systems社(本家)のESP-WROOM-32Dのデータシートを見たところ、
最低電流(Min) 0.5A となっているのを発見。互換品が下回ることは無いと思うので、最低でも0.5A以上は必要だろう。 
https://www.espressif.com/sites/default/files/documentation/esp32-wroom-32d_esp32-wroom-32u_datasheet_en.pdf

おそらくWifi + BT 両方使うようにスケッチしていたら、USB2.0での電流供給能力 0.5Aを楽に超える事が推測できる。

他にも試してみた事は、
  DSP32-32D上のUSBポートは使わずに

  • 5V(1A)のACアダプタでVIN pinへ電源供給。TX0, RX0,GNDを外付けのUSBシリアル変換モジュールで接続して起動した結果、正常起動
  • 3.3V(2A)のACアダプタで3V3 pin へ電源供給。TX0, RX0,GNDを外付けのUSBシリアル変換モジュールで接続して起動した結果、正常起動

ダメ出しで、あまり使う機会がなかったビット・トレード・ワン社の「USB CABLE CHECKER2」を引っ張り出してきて、使っていたUSBケーブル(1M)を測定してみると、[High mΩ] (1100mΩ以上)という、"そもそも、このケーブル使えねぇ~"という状態でした。

【同現象の方へ】

まずはUSBケーブルを疑ってください。
USBケーブルを複数お持ちであれば、

  • なるべく短いケーブルで試してみる。
  • 異なるメーカーのケーブルで試してみる
  • ハイパワー対応のUSBケーブル(2Aとか3Aとか流せる)を使う 

最近は、100均でも2Aや2.4A流せるケーブルが売っています。
100円ではなく200円製品だったりしますが。
※ USBケーブル自体が太いからといって安心できません。ケーブル捨てる勢いで、
    ニッパーで切断してみたら、中身のプラス(+)の線とマイナス(-)の線径が思ったより細かったという事はよくある話!?