2021年4月30日金曜日

ESP32 is rebooting eternal by "rst:0x3 (SW_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)" on terminal

ESP32 or NodeMCU or other espressif ESP32 family devices are repeat reboot and output "rst:0x3 (SW_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)" on terminal.

ESP32でArduino IDEからプログラムを書き込むと、

"rst:0x3 (SW_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)"

と繰り返しターミナルで出力し続け、再起動を繰り返すときの対処方法。

■目次 / Table of contents


■環境 / Environment

ESP32-WROOM-3/DEVKITV1

Windows (and All host OS)

Arduino 1.8.13 +ESP32 Dev Module

以下のモジュールも同様の症状が報告されています
The same symptoms have been reported in the following modules.

    NodeMCU-32S
    ESP32-CAM


■症状 / symptoms

ArduinoIDE上での書き込みは正常に終了する。
Writing process is complete from Arduino IDE.

動作しているはずなのにスケッチが動いていない。
Maybe working but Sketch is not working. 

ESP32のLEDがずっと点滅し続ける。
The indicator led on ESP32 is blinking eternal.

ESP32をUSBでPCに接続しターミナルでボーレート115200にて接続すると、次のようなメッセージを表示し続ける。
Following messages are logging on terminal that connected in 115200bps.


<rebooting eternally with rest:03x (SW_RESET)>

rst:0x3 (SW_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0018,len:4
load:0x3fff001c,len:1216
ho 0 tail 12 room 4
load:0x40078000,len:10944
load:0x40080400,len:6360
entry 0x400806b4
ets Jun 8 2016 00:22:57

:繰り返し/repeat


ちなみにターミナル上での正常な出力結果は次のようになります。
Following messages are displayed in normal running on terminal.

<Normally messages>

I⸮⸮⸮oets Jun  8 2016 00:22:57

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0018,len:4
load:0x3fff001c,len:1216
ho 0 tail 12 room 4
load:0x40078000,len:10944
load:0x40080400,len:6360
entry 0x400806b4


■処置 / treatment

Arduinoのフラッシュメモリの書き込み速度を
80MHz->40MHz
にする
Slowdown "Flash Frequency" to 40MHz from 80MHz on Arduino IDE.
 [Tool]-[Flash Frequency]-[40MHz]


Select 40MHz from 80MHz on Arduino IDE


インターネット上で対処方法がいくつか掲載されていますが、いずれも症状は改善しませんでした。今回原因だったのはフラッシュメモリへの書き込み速度が高速すぎたためだったようです。Arduinoからの書き込み自体は問題なく正常に動作したかのようなメッセージが表示されますが、実際には起動できませんでした。
This problem is caused by TOO FAST writing speed. But on Arduino IDE, All writing procedure is normally finished and verify is normally complete too!
   
Normally finished messages
C:\Users\Owner\AppData\Local\Temp\arduino_build_931094/ESP32LEDTest.ino.partitions.bin 
esptool.py v3.0-dev
Serial port COM10
Connecting......
Chip is ESP32-D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: 24:6f:28:16:ba:d0
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 512000
Changed.
Configuring flash size...
Auto-detected Flash size: 4MB
Compressed 8192 bytes to 47...
Writing at 0x0000e000... (100 %)
Wrote 8192 bytes (47 compressed) at 0x0000e000 in 0.0 seconds (effective 5957.9 kbit/s)...
Hash of data verified.
Compressed 18656 bytes to 12053...
Writing at 0x00001000... (100 %)
Wrote 18656 bytes (12053 compressed) at 0x00001000 in 0.3 seconds (effective 563.2 kbit/s)...
Hash of data verified.
Compressed 198944 bytes to 102964...
Writing at 0x00010000... (14 %)
Writing at 0x00014000... (28 %)
Writing at 0x00018000... (42 %)
Writing at 0x0001c000... (57 %)
Writing at 0x00020000... (71 %)
Writing at 0x00024000... (85 %)
Writing at 0x00028000... (100 %)
Wrote 198944 bytes (102964 compressed) at 0x00010000 in 2.2 seconds (effective 712.7 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 128...
Writing at 0x00008000... (100 %)
Wrote 3072 bytes (128 compressed) at 0x00008000 in 0.0 seconds (effective 1890.5 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...





■その他の症状1 / Other symptoms2

rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)

Bluetooth やWifiを使用した時、上記メッセージが表示される。
Above messages are displayed when you use onboard peripherals like bluetooth and  wifi.
<rebooting eternally with rst:0x10 (RTCWDT_RTC_RESET)>
rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1216
ho 0 tail 12 room 4
load:0x40078000,len:10944
load:0x40080400,len:6388
entry 0x400806b4
ets Jun  8 2016 00:22:57
と表示が出る。Panic…と表示が出る。

電源が足りていないかもしれません。私の場合、LEDの点滅は問題なく動作するのに、Bluetoothを使うとこのメッセージが出ました。
Led blinking test is normal. But Bluetooth device is used then not working. 

結局、WindowsPCのUSB type-Bから給電していたところ電源容量が足らず、電力不足から電圧低下、動作不安定となり、再起動していたみたいでした。
In the end, Power supply is not insufficient from PC's USB-B port.

電源を別系統から給電するように回路を変更したところ正常動作しました。
This problem solved by add other power supply from AC switching power supply.

■その他の症状2/ Other symptoms2

rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT):0x10 

<WiFi.h>を使用した時、上記メッセージが表示される。
Above messages are displayed when you use onboard peripherals like wifi.
エラーメッセージが表示されず正常動作するときもある。
Occasionally run as normal.

<rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT):0x10>
rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1324
load:0x40078000,len:7788
ho 0 tail 12 room 4
load:0x40080400,len:6448
entry 0x400806e8
assertion "false && "item should have been present in cache"" failed: file "/Users/ficeto/Desktop/ESP32/ESP32/esp-idf-public/components/nvs_flash/src/nvs_item_hash_list.cpp", line 85, function: void nvs::HashList::erase(size_t)
abort() was called at PC 0x400ec2af on core 0

Backtrace: 0x400881d4:0x3ffcfba0 0x400882d3:0x3ffcfbc0 0x400ec2af:0x3ffcfbe0 0x400f5d2c:0x3ffcfc10 0x400f63e6:0x3ffcfc30 0x400f6715:0x3ffcfc80 0x400f57dc:0x3ffcfce0 0x400f5336:0x3ffcfd30 0x400f53cf:0x3ffcfd50 0x400f541a:0x3ffcfd70 0x400e6318:0x3ffcfd90 0x4012d993:0x3ffcfdb0 0x400edc5e:0x3ffcfde0

Rebooting...

バグのようですが、フラッシュメモリ内のデータを参照しているところが初期化されていないか、書き込めていないようです。
フラッシュメモリをクリアすることで治りました。
Maybe bug of Arduino C compiler for ESP32.
Let's try to Clear Flash Memory.


フラッシュメモリをクリアするにはesptool.exeを実行します。
Run esptool.exe for clear in Flash Memory.

esptool.exe  --chip esp32  --port COM7  --baud 921600 erase_flash

You need to replace port number of your environment.


追加 その他の症状2/ Other sysmtoms2 2023.06.30