2021/04/23
ESP32-WROVER-E/ESP32-DevKitC-VE ● Disable ROM Basic の件
EESP32-DevKitC-VE 素人の覚書(#1)
秋月電子のサイトを徘徊、いくつかあったESP32評価ボードの中で取り扱い開始日が最も現在に近い品ということでコレを選択。
●ESP32-DevKitC-VE (8MB) /秋月通販コード M-15674
(写真はCCコネクトで買った4800円のXperia XZ1で撮影。現用の古いコンデジより明るいし寄れる)

ESP32のROMにはTiny Basicも書き込まれているらしい。
最初の動作確認はLチカや Hello World より Basicの方が反応が返ってきて面白いと思い、それを試す事に。
GPIOの12をHレベルに(10KΩの抵抗でCoreVcc 3.3Vにプルアップ)。
後はシリアルターミナルに繋ぎ(要設定)、ENとあるタクトスイッチを押せばTiny Basicが起動するとの事。
そういえばタイニーベーシックというヤツには少年時代の苦い思い出が…

I/O別冊 2 TVゲーム徹底研究
40年以上前のマイコン雑誌(正確にはマイコン雑誌の別冊/ムック)。
この本に東大版のTiny BasicをTK-80に移植する記事が掲載されていました。
自分も数日かけて2KBを打ち込んだものの、見事に失敗。
当時はまだ自分のスキルが記事のレベルに達しておらず、突っ張って挑んだところで成功する訳が無い。
(回路図が読めないまま実態配線図で製作を始めた感じ)

思い出話は終了。現在に復帰。
ESP32をPCに繋ぎ、USB-シリアルブリッジのドライバとCOMポートを確認。

Arduino IDEを使い、当該COMポートのシルアルターミナルを見ながらESP32のENスイッチを押す。
ROM Basicが起動するはずだけど…。
ダメじゃん。
ええっ、他のサイトの記事ではすんなりとプロンプトが出てるけど?。

別にROM Basicのためにコレを買ってきた訳ではない。気持を切り換え別の方を向けばそれで済むが納得が行かない。
ネットを彷徨い情報を拾う。この辺はタブレットよりPCの方が高効率。
●秋月さんのサイト内、ESP32(今回購入した品とは別物)の商品説明に気になる一文。
※メーカーよりNot recommend for new design (NRND、新規設計非推奨)との連絡を頂きました。後継品としてM-15673を推奨されまたのでご検討ください。2020.12.25
通販コード M-11819(link→) https://akizukidenshi.com/catalog/g/gM-11819/
(現在推奨のM-15673とは今回自分が購入した物と同一世代でフラッシュが4MB版)
●幾つかの技術情報系サイトにて、ESP32にセキュリティ障害、修正が不可能な脆弱性の報告。
去年の冬頃から騒がしくなった模様。
■素人なりに考えた結果、現行の商品はセキュリティ問題の対策版であるという事?。
壁に突き当たり、もう熱が出そう。
ブートローダーやコンフィグレーションROMを覗けそうなツール、esptool.pyを見つける。
GitHub esptool (link→) https://github.com/espressif/esptool

拡張子pyって事でpythonが必要。インストールしたのはかなり前なのでこの機会に3.9.4をインストール。
pythonは357だよなあ。次元大介は357でもM19だよなあ、とか深夜に虚しい独り言。
3.9.4はpipも最初から入っている。エレキバン(また…)

Python3.9.4のインストール完了、起動問題無し。

pipでesptoolをインストール。

esptoolのhelp

多くのサイトにESP32はコンフィグレーションデータなどの保存にワンタイムROM(ヒューズROM)を採用しているという記述。
それがefuseで、espefuse.pyはソレを覗いたり操作できるユーティリティー?。
espefuseのhelpから、
● summary =efuseの設定状態を表示?
● burn efuse =読んで字の如くだろうけど、それぞれにたった一度だけしか使えないコマンド?

ESP32を繋ぎコマンドを叩いても接続を検出できずにタイムアウト。
※GPIO12 Hレベル(プルアップ)のままは論外(外さないとESP32側が何も受け付けない)。
コマンド入力後、接続試行中にESP32のbootボタンを押したら無事検出。
(ESP32と接続する際、COMポートの指定は必須(-p COMn)、ボーレートは115200デフォルトで省略可)

見事にefuseの内容が表示される。
コレってヒューズROMでしょ?。一度変更を加えたら(この場合は0→1)もう永久不変。
そして、見事に Disable ROM Basic にフラグ(1)が立ってる。
定義が逆(イネーブル=Trueとして、それが初期設定でFalse)であれば、Trueに書き換えて、ROM Basicを利用可能に変更する事もできただろうけど、そうするとセキュリティ的には芳しくない、のかな?。
いずれにせよ、ココは一度1を書いてしまうと0には戻せない。
ということは、GPIO12をプルアップしてROM Basicを走らせる事はできない。
やっぱ、ダメじゃん。
