h_nari @ 熊本市のブログ。電子工作、プログラミング、ゲーム、TV、 政治、インターネットなどに日々の思い付きを、 うだうだ~と書いていきたい。
このブログにはコメント欄を設けておりません。 記事への御意見、ご質問はtwitter @h_nari宛に お願い致します。


アーカイブ


アマゾン・ベストセラー

メタ情報
RSS
Login

ESP32でJTAG

esp32のシステムを開発している。 プログラム書き込みは通常のシリアル経由でだが、 jtagで書き込めれば速いのではと思いついた。 ESP32 JTAGで検索すると 使えるようなので、基板を改版する際 JTAG端子(GPIO12-15とEN)用のピンヘッダを 追加した。

出来上がった基板にJTAGでのプログラム書き込みを 試すが上手く行かない。使用したJTAGアダプタは Olimex ARM-USB-OCD。 platformioを使っているので、platformio.iniに

upload_protocol = olimex-arm-usb-ocd

書けばjtagで書き込んでくれる。 表示されるエラーには

Error: JTAG scan chain interrogation failed: all zeroes
などとあり、全然動いていない感じ。 いろいろ調べるがわからないので、 JTAGアダプタとしてFT-232Hを使用してやってみると、 違うエラーが出る。

Error: IR capture error at bit 105, saw "0x4210842...

なんか、こっちはjtagが動いているし、惜しい(?)感じが する。しかし調べても原因がわからない。

実験対象をを自作の基板から ESP32-DevKitC(のコンパチ品?)に、 書き込むプログラムも単純なものに切り替え、 試行した結果 OLIMEX ARM-USB-OCDでプログラム書き込みができた。

問題の原因は2つ。1つはJTAGの接続間違いで、 もう1つはプログラムがJTAG機能を殺していたこと。 接続は このページ の表のとおりにしたら上手く行った。 失敗した時は ENをPin3(nRST)ではなくPin15(RESET)に 接続していた。 JTAGを殺す機能はESP32のeFuseにある。 このeFuseにはMACアドレスなども保存されている。 ESP32のフラッシュをクリアすると jtagで書き込めるが、 自分のプログラムを書き込んだ後だと jtagで書き込めなくなる。 プログラムで WiFiManagerライブラリを 使用しているので、このあたりが怪しいと 思っているが確認はしていない。 FT-232で上手く行かない原因はわからない。

jtagでの書き込みができるようになったが速くない。 シリアル経由よりも遅い気がする。 プログラムの書き込みとverifyを なんの必要があるのかわからないが 4回繰り返している。 調整すれば多少速くできるのかも しれないが、期待とは程遠い。

期待したのはSTM32にST-Link2で書き込んだ時の 一瞬で書き込みが終わる感じ。 残念だがjtagでの書き込みは諦め シリアル経由での書き込みで我慢する。

そう言えば ESP32 JTAGで検索しても、 JTAGでデバッグするという話ばかりで、 書き込むという話は無かった気がする。