通常時のシリアル通信のレートは115200baudだが、起動直後のメッセージだけは74880baudで送ってくるらしい。
なので、普通だと文字化けして表示される。
これが、ボーレートを変えればちゃんと表示される。
通常なら、転送速度の方を優先するので、文字化けは気にせずに115200baudのままで通信するわけだ。
何が表示されてても、あまり意味が無いから。
ところが、今頃になって、リセットや電源の再投入をしたときにFlashから起動しないことに気付いた。
つまり、スケッチを書き込んだときだけしか実行できない。
書き込んでからリセットしたり、一度電源を落としてから再度投入したとき、普通なら書き込んであるプログラムが実行されるはずだ。
そうでないと、いざ組み込んだとき意味が無い。
いろいろ調べて、回路も確認し、電源に大きめのコンデンサを入れてみたりもしたが一向に起動しない。
そんなときにも、モニタ上では例の文字化けが表示されているわけだ。
文字化けしていてもメッセージが出ている以上は何か意味があるはずだ。
というわけで、ここで上の方に書いた、ボーレイトの話が出てきたわけだ。
ここからが本題だ。
ブートしない場合のメッセージは次の通りだった。
ets Jan 8 2013, rst cause:1, boot mode:(1,6)
前半、etsの意味は分からないが、どう見ても日付なので、ここでの話には無関係だ。
真ん中、rst cause:1 はここ(http://www.esp8266.com/viewtopic.php?p=2096#p2112)によれば、
reset causes:
0:
1: normal boot
2: reset pin
3: software reset
4: watchdog reset
ということだ。
つまり、1だったので「普通に起動しましたよ。」ということか。
続きの boot mode:(1,6) こそが問題の本質をあらわしているようだ。
ここ(https://github.com/esp8266/esp8266-wiki/wiki/Boot-Process)に以下のように書いてあった。
In the bootup message ‘boot mode:(x,y)’ three low bits of x are {MTDO, GPIO0, GPIO2}.
括弧の前半の数字の下位3ビットは、MTDO, GPIO0, GPIO2 をあらわしている。
この順に、書き込みモードの時には、L, L, H に設定する約束なので1。
Flashからの起動モードの時には、L, H, H に設定する約束なので3。
もうひとつ、使ったことが無いが、SDカードからの起動の時には、H, x, x にすることになっているので4以上の値になるのだろう。
カッコ内の後の方のyの値については分からなかった。
6ならちゃんと動いていて、7のときはダメなようだが。
いずれにしても、今問題にしているブートしないで止まってしまっている状態が、実は書き込みモードになってしまっていたのだとわかる。
GPIO0がちゃんとHighと認識されていないのだ。
どこかで見たとおりにちゃんと10kΩでプルアップしてあって、タクト・スイッチを押してるときだけLowになるようにしてあるのに…。
結論から言えば、タクト・スイッチの足がちゃんと刺さっていなかったのだった。
直したらちゃんとFlashから起動した。
何とおバカな結末。
ESP8266関連記事一覧へ