Archive for 6月 2016
ESP8266 of error message
ESP8266 で シリアルモニターにエラーメッセージがでる事があります。 2016.06.20
例:ets Jan 8 2013,rst cause:4, boot mode:(1,7)
まとまりが無いかも知れませんが この意味やクラッシュする件を調べてみました。
1. rst cause:4 は watchdog reset 状態であった事を示します。
_
_ 例: reset cause 1: normally during a Power-On-Reset or by CHIP_PD transient
_ reset cause 2: normally during a reset caused by a nRESET transient
_ reset cause 4: normally during a reset by wet reset
2. boot mode:(1,7)について
_ 1:boot mode が Uart mode(GPIO15=0V, GPIO0=0V, GPIO=2=3.3V)であった。
_
_ 7:SDIO HighSpeed V2 IO であった事を示します。
_
(1,7) 又は (x,y)の詳細:
x:GPIO15(MTDO), GPIO0, GPIO2 low bit の状態。
y:Boot sel と SD sel の状態。使用されたブートファイルの場所。
y ( Boot selと SD sel ) の意味:
_ 7:SDIO HighSpeed V2 IO Uart1 Booting
_ 6:SDIO LowSpeed V1 IO Uart1 Booting
_ 5:SDIO HighSpeed V1 IO Uart1 Booting
_ 4:SDIO LowSpeed V2 IO Uart1 Booting
_ 3:FLASH BOOT
_ 2:Jump Boot
_ 1:UART Boot
_ 0:Remapping
参考:esp8266 / Arduino:rst cause, boot mode :Boot Messages
参考:esp8266/esp8266-wiki:ESP Boot Modes,(x,y):Boot Messages x,y
参考:esp8266 Сообщество:ESP8266 Pins list function, register, strapping:Boot Sel
参考:Richard’s stuff:ESP8266 BOOT PROCESS
参考:Zoetrope:Tech Blog:Bootloader Modes and GPIO state on Startup
_ 起動時のGPIO状態:(以下画像を参照させてい頂きます)。
_ GPIO 0は 起動時に出力になり 起動40ms後にGPIO0ラインは
_ 約100ms間 約350Hzの信号が出力される。
_
参考:themadinventor/esptool:Boot log:ブート時のUARTログ
他の例:
rst cause:2, boot mode:(1,6) <– reboot by reset pin – Mode Uart
rst cause:4, boot mode:(1,6) <– reboot by watchdog – Mode Uart
rst cause:2, boot mode:(3,7) <– reboot by reset pin – Mode Flash (boot the sketch)
ハードの確認:
_ 基本:ESP8266のPin 15(GPIO15), 0(GPIO0), 2(GPIO2)をオシロスコープで波形
_ を観測し論理的に外部的な要因か内部的な要因かを判断します。瞬間的な変化
_ は見れませんがテスターで電圧を測る方法もありますね。例外として他のピン
_ の状態で誤表示する場合もあります。
_ 前提条件としてPCのUSB電源が充分(電圧、電流、リップル)である事を確認す
_ る必要もあります。
_ 回路図から学ぶ:再起動を実行させるスケッチでは 起動が正常に行われる回路に
_ なっているか回路を再検討する必要もあります。 例:3V3,RST,EN 端子に
_ 正常な起動を行う事が出来る素子が接続されているかです。 これには 基板の
_ 回路図を幾つか入手し 違いを比べる事で理解が深まると思います。
_ 最強の基板は 回路技術とレイアウト技術を基に 技術的な検討をかなり行った
_ 回路になっています。
![]() |
![]() |
_ ブレッドボード:試作で使用するには良いでしょうが 完成時には使用せず基板に
_ 組む方が良いかと思います。 理由:ブレッドボードの中味は画像の様に
_ 金属板が幅広く隣り合いアンテナの様になり電気的に不安定な要素になります。
_
補足:原因や理由が不明な場合は「大きなコンデンサー」を追加とか 「個体差」等の
_ 単語や「配線の長さを気にしない」とか がでてきそれで終わらせてしまいます。
_ 解決する方法は 基本から調べる事が必要かと思います。
_ それには レイアウトや回路図の検討や 信号を必ず見るという事が必要です。
基板と回路図から分析できる資料。
MegaTech ELECTRONICS : ESP-WROOM-02 starter board
_ 出力電流ナンバーワンの電源でFuse 1個とポリスイッチ1個、USB回路には
_ 静電対策の保護回路(ポリスイッチ2個)がありボードとPC側の安全性も考慮。
_ ボルテージディテクタ(BD48K31G-TL)がありRESET信号を作る。
_ RST端子に C5 1000pFあり。 2016.06.23 誤記訂正(7of9さん ありがとうございます)。
_ 電源端子に C6 10uF あり。
_ 電源容量(AP3417CK)は1000mAです。価格は2200円。
SwitchSience:ESPr Developer
_ RST端子に起動用コンデンサー なし。
_ 電源容量(XC6222)は 700mAです。 価格は2310円。
WeMos.cc:d1 mini
_ RST端子に C9 100nF あり。
_ 電源容量(RT9013)は 500mAです。 価格は 423円。
補足:追記 2016.06.25
起動時のGPIO_0とGPIO_2の波形:色がついて面になった所は1/0の波形。
_ GPIO_0 の波形は起動時に 2V の電位が生じその上に信号が出力されています。
_ GPIO_2 も起動時に信号が出力されます。
スケッチの確認: 問題点と対策を以下に要約。追記 2016.06.25
sparkfun:ESP8266 Thing Hookup Guide の記事に注目する。
_ ESP8266とArduinoの大きな相違点は、バックグラウンドでのユーティリティ
_ 機能の多くを実行する。たとえば、WiFi接続の維持でTCP/IPのスタックを
_ 管理しながら他の動作を実行する。動作開始からこれらの機能をブロックする
_ とESP8266がクラッシュする、という事らしい。
_ これを回避するにはスケッチ内のループを遮断する必要がある。
_ 具体的には delay() や yield() の追加でバックグラウンドの機能を実行できる。
_ 以下 具体的なスケッチの記述。
:
pinMode(12, INPUT_PULLUP); while (digitalRead(12) == HIGH) yield(); Serial.println("Button is pressed!");
: ——————————————————————————————–
Internet of HIme Thing:4 ways to eliminate ESP8266 resets:7of9さんの情報。
要約:Wdt resetの発生は 不十分な電源インタフェース、フラッシュチップの故障。
_ フラッシュチップ(信頼性が低い)のクリヤーか交換。
_ スケッチは定期的にプロセッサに制御を戻すことが重要。
_ yield() 又は delay() の命令を記述する必要がある。
: ——————————————————————————————–
対策: 追記 2016.06.26。 以下の件は調査中で動作確認はしていません。
_ 起動すると通常はWiFiが裏で動作している。この為に裏の操作のタイミング
_ と影響によりクラッシュする原因となるようだ。これを起こさせない為には、
_ yield(); を使用する。又、WiFiを使用しない場合は、WiFiを停止すれば良い。
_ それには WiFi に関するAPIを理解して使用する。
_ 例:停止:WiFi.disconnect(false); 開始:WiFi.begin();
_ 参照:esp8266 / Arduino:keyword:WiFiに関する命令。
_ 参照:ESPRESSIF:ESP8266 Non-OS SDK API Guide:APIの命令。
_ 注:上記マニュアルにある命令は動作しない物もあります。
_ 参照:がた老AVR研究所:ESP8266の冒険(3):ESPの不可思議な現象判明。
_ 参照:chaeplin氏のサンプルを勉強する。この記述方法が正しいと思います。
感想:
設計の問題:例:SSのESPr Developer基板は RESET端子に100nF のコンデンサー無し。
_ これで不具合を発生させている事例があり、オシロでRESET信号を観測すると、
_ STARTボタンを押した時にパルスが発生し書き込みモードが解除されます。
_ では 3.3V や EN 端子には 起動用のコンデンサーは装備されているのでしょうか?
_ 特にCPUのRESET端子に起動用のコンデンサーを入れるのは基本です。
_ 理由:電源が入りCPU内部のLogicが確立してから遅れたRESET信号で起動させる。
_ こういう視点で他のボードの回路図を分析する必要があります。
スケッチの問題:スケッチの記述の仕方によりエラーメッセージがでます。
USBとPC:たとえばマックのUSBの回路にはポリスイッチ素子が装備されています。
_ これにより過電流、静電気やパルスに対する保護回路が出来ています。
_ では、接続する外部の回路はそのような保護回路が入っているでしょうか。
_ 無い場合は対策として過電流防止のUSB Isolatorの装置を装備すると安全です。
技術力:MegaTech ELECTRONICSの説明と回路図を見るとハイレベルの技術力を持った
_ 方がいると感じました。とても勉強になる回路図です。
_ 同様に MTE の USB to 3.3v ボードの回路図も勉強になります。
スケッチの問題:Wdt や クラッシュを発生させない記述、命令の理解が必要らしい。
_ こうなると ESP8266 ってとても面倒なのですね。