M5Atomが書き込み後リセットしない問題
まぁそもそもArduino式のリセットは安全に動作しずらいからなぁ。。
M5Stackは消費電力が高いのでM5Atom Matrixにしてみた。
しかし、書き込み後正常にリセットしない症状が出ていて、今は書き込みのたびにUSBから抜き差ししている。
M5Atom向けの書き換え
モジュールの搭載Flashが4MiBなのでそれに合わせただけ。搭載している物理ボタンのポートはどちらも 39
なのでそのままのコードで動く。
書き込み後リセットしない問題
ただ、直前に使っていたM5Stack(Gray)と比べて、M5Atomは正常にリセットしなかった。書き込み後に側面のリセットボタンを押すと、
rst:0x1 (POWERON_RESET),boot:0x3 (DOWNLOAD_BOOT(UART0/UART1/SDIO_REI_REO_V2))
waiting for download
と出て、ファームウェアのDLまちになってしまう。これはGPIO 0
がアサートされっぱなしになっている状態で、どうもM5Atom側に積まれているUART変換チップの DTR
が正常に操作できていないようだ。
↑ にあるように、ESP32のリセットとリセット後挙動の決定は、UART的には RTS
と DTR
の各ピンにマップされている。で、ESP32には内蔵ROMがあり、この内蔵ROMが起動時にGPIO 0 を読み出して起動モードを決定している。↑では正常に動作しなかったのはリセットの解除が早すぎるためだったのでコンデンサを追加している。
... もっとも、この辺の制御はesptoolのPythonコード側に存在するのでそちらを調整してしまえば解決する可能性がある。
def hard_reset(self):
print('Hard resetting via RTS pin...')
self._setRTS(True) # EN->LOW
time.sleep(0.1)
self._setRTS(False)
が、今回のケースでは何を設定してもGPIO0を制御できず、UART変換チップ側の問題だろうと結論した。
正常にGPIO0が制御できていると、起動時には:
ets Jun 8 2016 00:22:57
rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
のように出る。
そもそも設計がおかしいらしい
... というか、WebページでFTDIのドライバを入れろって書いておきながら使ってるのは互換チップ(になるようにプログラムされたCH552)なのか。。