ESP32でMicro SDカードへのSPIでの書き込み速度の調査

ESP32でマイクから収集した録音データをMicro SDカードに記録する際に、どの程度のバッファが必要かを見積もるために、書き込み速度を計測した。

ハードウェア

利用するボードによって、SPI制御に使うピンの指定を変更する必要がある。。

開発環境

PlatformIO IDE for Visual Studio Code を利用した ESP32 用開発については、PlatformIO IDE for VSCode でESP32のプログラム開発 の設定を参照のこと。

プログラム

次にある、ESP-IDFのSDカード制御のサンプルプログラムを修正した。

https://github.com/espressif/esp-idf/tree/master/examples/storage/sd_card

16kiBのデータの書き込みに要した時間を計測する。1万回繰り返し、それから書き込み時間の平均値、最悪値を求め、それらから書き込み速度を求める単純なプログラムである。

次のGitHubに、Platform IDE for VSCodeでの開発用ファイルを置いてある。

https://github.com/kunsen-an/espidf_sd_card_write_test.git

実行結果例

ある時点での実行結果は以下のようであった。1万回実行しているので150秒以上かかっている。

平均的には1MB/s以上で書き込みが可能であるが、この例での最悪値は、約21kB/s であった。

バッファの大きさ

録音データを連続して書き込む場合にはバッファを十分に用意しておかないと、バッファがオーバーフローする。最悪の書き込み速度が16kB/sと仮定し、 192kB/s 程度で連続して書き込みを行うなら12ブロック以上のバッファを用意しておかないとデータが失われる可能性がある。プログラムでは16kiB/ブロックなので、192KiB以上のバッファが必要であろう。