2015年12月22日火曜日

ソフトSPIとハードSPI

STM32F1のSPI1にmicroSDソケットを接続し、FatFsで読みだしてみました。分周比は2でバスクロックは36MHzです。





この画像はSDカードのシングルブロックリードコマンドの時のキャプチャです。上がDMA使用、下がソフトウェアで通信しています。
おおよその目安ですが、ソフトウェアでは1ブロックを読むのに1.8msec程必要です。対してDMAでは1ブロックの読み込みに460-600usec程度です。およそ3倍の速度差があります。前回のエントリではDMAとソフトでは10倍ほどの差がありましたが、今回はSDカードの内部処理待ちが含まれるために差が少なくなったのだと思われます。

今回はシングルブロックリードですが、マルチブロックでのR/Wであればだいぶパフォーマンスが向上すると思います。まだSDカードの書き込みコマンドや、マルチブロックの処理のコマンドは作っていないので、そのあたりを作ったらもう一度比較してみたいと思います。

0 件のコメント:

コメントを投稿