M5Stack Tab5 SDカード読み取り速度の改善

前回、以下の記事でSDカードの読み込み速度を測定したのですが、思ったように速度が出ませんでした。

現在、 Tab5-Media-Player のST7123対応とRGB888描画とパフォーマンス調整とUIの作り替えなどの作業を行なっています。 現状の実装だとSDカードのReadが間に合わず、それな...
色々調整することで大幅に速度が向上したので、そのメモです。
FATFSのブロックサイズを増やす

そのままだとFATFSのブロックサイズはnewlibデフォルトの128バイトが使用されます。これだと小さすぎるので4096くらいに上げておきましょう。
sdkconfigファイルでいうと FATFS_VFS_FSTAT_BLKSIZE ってやつです。(初期値0)
4096より大きい値にしてもメモリ消費量が増えるだけでそんなに速度上がりませんでした。
バッファをキャッシュ境界に配置
uint8_t *buffer = (uint8_t *)heap_caps_malloc(131072, MALLOC_CAP_SPIRAM | MALLOC_CAP_CACHE_ALIGNED);ファイルを読み出したデータを格納するバッファはキャッシュ境界に配置されるようにしましょう。SRAMである必要はなく、PSRAMでも大丈夫です。
readの調整
read関数でデータを読み出すときはなるべく16KB単位で読み出すようにしましょう。
小さいサイズのデータを頻繁に読み出すのは遅いです。それこそ、シーケンシャルアクセスしていて先のデータが今後必要になるとわかっているなら、低優先度タスクで先読みしておくといいです。
また、C標準ライブラリのfreadは遅いので、fopenしてfreadしている場合はopenとreadを使うようにしましょう。
以上、このあたりの調整を施すことで、SDカードにもよりますが 8MB/s ~ 10MB/sくらいまで出るようになりました。
これによって、Tab5-Media-PlayerではSDカードを使ってもスムーズに動画再生できるようになってます。
よかったよかった




