2012年7月1日日曜日

SH-2A USB SDカード R/W

GWの成果、その2です。

RX62Nで実現してたUSB SDカード R/WをSH-2Aにも適用しました。エンディアンの違いの吸収など少し手こずりましたが、ワリとあっさりできました。

とりあえずドライブ認識、ファイルのリード/ライトなどはできてますが、いくつか残課題が残ってますので、列挙。

  • SH-2AはHighSpeedに対応してますが、現状はFullSpeedに設定(RX62NはFullSpeedのみ対応)
  • ドライブ認識はするのですが、Windows上でいつものバルーンが出ません。。理由不明。
  • 1回目は普通に動作するけど、デバッガ止めて、ビルドし直して、再スタートさせたとき、再認識しない。RX62Nでは再認識したような気が。。D+プルアップの解除のやり方が悪いかな。。
  • RX62Nでも実現してなかった機能だけど、SDカードの挿抜検出ができない。
  • 同じくRX62Nでも実現してなかったUSB FIFOのデータ転送のDMA化。
  • RX62Nで修正しきれなかった不具合の対策で、バルク転送中のコントロール転送の取り逃し不具合。SH-2Aではまだ発生してないけど修正してもない。
  • CrystalDiskMarkの計測と、速度改善。
少しずつ対応していきましょ。

-----------------------------------------------------------------------
2012/07/01

更新を怠ってましたが、USB R/Wの速度改善してました。

まず、USB R/Wは当然ですがUSBを使用します。
デバッガのI/FとしてUSBが使えないので、シリアル(UART/RS232C/SCIF)を使用したデバッガI/Fを使用しています。
また、SH-2Aは高速内蔵RAMを使わないと遅くなるのですが、SCIF版のデバッガでは高速内蔵RAMを使用すると暴走します。。
その解析をしてました。ある程度解決したので、ようやく速度改善できました。

CristalDiskMarkを使って計測したかったのですが、あまりにUSB R/Wが遅いため、完走までにめちゃめちゃ時間がかかる。。(10分くらい。。) ので、HDBENCHで実施とします。

  • 改善前 : R:155KB/s、W:111KB/s、C:126KB/s
  • USB HighSpeed対応 : R:312KB/s、W:249KB/s、C:231KB/s
  • USB FIFOサイズ64byte→512byte : R:542KB/s、W:382KB/s、C:313KB/s
  • ReadのみUSB側のDMA対応 : R:753KB/s、W:400KB/s、C:391KB/s
  • USB BUSWAIT最適化 : R:953KB/s、W:452KB/s、C:442KB/s
  • SDとUSB間の内部バッファ5KB→64KB : R:1089KB/s、W:669KB/s、C:534KB/s
  • 計測用のシリアルログ無効化 : R:1290KB/s、W:1167KB/s、C:797KB/s




USBのDMAはRead側のみ対応してます。Write側の対応はこれから。。。面倒。。
一応、CrystalDiskMarkの結果も貼り付け

0 件のコメント:

コメントを投稿