ESP32の設定Flash SPI ModeのQIO/QOUT/DIO/DOUTの違い

ESP32のプロジェクトのフラッシュの設定で迷う項目の一つだに、「Flash SPI Mode」と言うものがあります。

結論

対応しているのであれば、「QIO」にすれば良いです。

そもそもFlashとは何か?

ESP32モジュールは、データシートの図によるとCPUとメモリと発信器と無線部が1つにまとまった製品になります。このメモリがFlashと呼ばれており、外付けフラッシュと呼ばれたりもします。CPUとSPIで接続されており、プログラムやファイルを格納する部分になります。

SPI Modeについて

フラッシュへのアクセス方法が、4種類のSPI Modeとして規定されています。
概略は以下の表のとおりです。

SPI Modeアクセス速度使用するピンアドレス
の転送速度
データ
の転送速度
QIO最速CLK, MOSI, MISO, CS, WP, HOLD4 bit/clk4 bit/clk
QOUTQIOの85%同上1 bit/clk4 bit/clk
DIOQIOの55%CLK, MOSI, MISO, CS2 bit/clk2 bit/clk
DOUTQIOの50%同上1 bit/clk2 bit/clk

SPI

基本となるSPIは、CLK, MOSI, MISO, CSの4線を使いデータのやり取りを行います。

CLK線のクロックに合わせて、MOSI線はマスター→スレーブにデータを、MISO線はスレーブ→マスターにデータを同時に送信します。
つまり、クロック当たり1ビットしか転送できません。

DOUT

メモリからデータを読み取る、書き込むでは、一方方向にしかデータが流れませんので、MOSI線またはMISO線のどちらかはダミーデータを送信することになります。そこでデュアルSPIと言うものが考えられ、DOUTは、データの送信時に限り、MOSI線とMISO線を使い、1クロック当たり2ビット転送できるようにしたモードです。ただしアドレスの転送は通常のSPIと変わりませんので、1クロック当たり1ビットのままです。

DIO

DOUTのアドレスの転送も改良したのが、DIOになります。対応しているかどうかは、フラッシュの仕様によります。

QOUT

デュアルSPIを改良して、信号線にWP線とHOLD線の2本のデータ線を追加してクアッドSPIが考え出されました。データの転送が4本の線で同時に行えるようになったので、1クロック当たり4ビット転送できるようになりました。ただし、アドレスの転送はDOUTと同様です。

QIO

もう分かられると思いますが、QOUTのアドレス転送速度も改良して、アドレスの転送も4ビットで行えるようにしたのが、QIOです。つまり、転送速度が速いことになります。

見分ける方法

DOUT/DIO か QOUT/QIO のどちらに対応しているかは、ESP32の仕様書の内部回路図でWP線とHOLD線がフラッシュに接続されているかどうかで判別できます。
しかし、DOUTかDIO または QOUTかQIOなのかはフラッシュのチップの仕様によるので、これは試してみないと分かりません。

参考資料

SPI Flash Modes - ESP32 - — esptool.py latest documentation

コメント

タイトルとURLをコピーしました