2015年5月6日水曜日

PIC24 32MHz で SDカードのリード速度

PICKIT2を作ったので、PIC24のSPIを使用してSDカードからデータを読み出して速度を測ってみました。


SPI CLOCK 250KHz
mount time : 80 ms
10240 byte read
   1 byte block : 493 ms   20 kbyte/s
 512 byte block : 384 ms   26 kbyte/s
1024 byte block : 384 ms   26 kbyte/s
2048 byte block : 380 ms   26 kbyte/s
close : 0 ms


SPI CLOCK 500KHz
mount time : 41 ms
10240 byte read
   1 byte block : 304 ms   33 kbyte/s
 512 byte block : 194 ms   52 kbyte/s
1024 byte block : 194 ms   52 kbyte/s
2048 byte block : 191 ms   53 kbyte/s
close : 0 ms


SPI CLOCK 1MHz
mount time : 22 ms
10240 byte read
   1 byte block : 214 ms   47 kbyte/s
 512 byte block : 105 ms   97 kbyte/s
1024 byte block : 104 ms   98 kbyte/s
2048 byte block : 102 ms   100 kbyte/s
close : 0 ms


SPI CLOCK 2MHz
mount time : 12 ms
10240 byte read
   1 byte block : 169 ms   60 kbyte/s
 512 byte block : 60 ms   170 kbyte/s
1024 byte block : 59 ms   173 kbyte/s
2048 byte block : 57 ms   179 kbyte/s
close : 0 ms


SPI CLOCK 4MHz
mount time : 7 ms
10240 byte read
   1 byte block : 143 ms   71 kbyte/s
 512 byte block : 34 ms   301 kbyte/s
1024 byte block : 33 ms   310 kbyte/s
2048 byte block : 31 ms   330 kbyte/s
close : 0 ms


SPI CLOCK 8MHz
mount time : 5 ms
10240 byte read
   1 byte block : 131 ms   78 kbyte/s
 512 byte block : 22 ms   465 kbyte/s
1024 byte block : 22 ms   465 kbyte/s
2048 byte block : 20 ms   512 kbyte/s
close : 0 ms


SPI CLOCK 16MHz の時はカードの初期化が正常終了しませんでした。本当なら初期化の時だけ 400KHzくらいに速度を落として、初期化後に速度を上げなきゃならないのですが、今回試したところ動作中にクロックの切り替えがうまくできませんでした。マニュアルを読んでもできないとは書いていないようなので、なにか手順を間違えているのかもしれません。
(2015年5月8日:SPIを一旦停止すればクロックの切り替えができましたが、250KHzで初期化後16MHzに切り替えてもカードのアクセスできませんでした。8MHzへの切り替えでは正常に動作しました。)
(2015年5月17日:使用しているPIC24ではSPIクロック16MHzは設定禁止でした。データシートに書いてあった。)

SPIが使えないH8Sで試した時は 99 kbyte/s くらいでしたが、PIC24のSPIを使うと 500 kbyte/s とたいへん高速に読み出しできました。