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, HOLD | 4 bit/clk | 4 bit/clk |
QOUT | QIOの85% | 同上 | 1 bit/clk | 4 bit/clk |
DIO | QIOの55% | CLK, MOSI, MISO, CS | 2 bit/clk | 2 bit/clk |
DOUT | QIOの50% | 同上 | 1 bit/clk | 2 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なのかはフラッシュのチップの仕様によるので、これは試してみないと分かりません。
コメント