1

USB 大容量ストレージ ホストで atmel の ASF が提供する例を試して、USB フラッシュ ストレージ デバイスにファイルを送信/読み取りました。ファイルを読み取ると、1.7 MB/秒の速度が得られます。次のような多くのソリューションを試しました。

  • 高速モードで実行されていることを確認し、ボードが 300 mhz で実行されていることを確認します
  • F_read 関数のバッファ サイズを増やしてみたところ、2.2 MB/s まで増やすことができました。
  • 仮想メモリの例でFAT32であるファイルシステム自体をテストし、読み取り操作で30MB / sを得ました(速度デバッグの目的に役立つかどうかはわかりません)
  • SDカードからの読み取りを除いて、同じプログラムを使用してみました.1 MB / sの出力が得られました
  • また、フル スピード モードでテストしたところ、0.66 MB/秒の出力が得られました。
  • 私がテストした極端なアイデアの 1 つは、2 つのボードを実行し、1 つはホスト モードで、もう 1 つはデバイス モードで、USB の転送速度をテストしたところ、バルク モードで 1.66 MB/s の出力が得られました。(HS上で動作)
  • Atmel のものより最悪の結果をもたらした Keil の例を試してみました。

    誰かが解決策を提案できますか? Atmel と Keil が提供する USB 通信に関するすべてのドキュメントを読みました。

4

1 に答える 1

1

Atmel の大容量ストレージ USB スタックにはマルチセクターの読み取りと書き込みがありませんが、SCSI レイヤーは実際に多くのセクターを連続して取得するための適切なコマンドを実装しています (uhi_msc_scsi_read_10 を参照)。SCSI コマンド (たとえば、uhi_msc_mem_read_10_ram および uhi_msc_mem_write_10_ram) より上位のデータを読み取る抽象化レイヤーは、セクターごとにのみ読み取るため、パフォーマンスが非常に低下します。

USB 高速パフォーマンス (~35 MB/s) を実現するには、これらの関数 (および上記のすべてのレイヤー) をハックして、マルチセクターの読み取り/書き込みを使用する必要があります。

于 2016-10-19T08:31:30.787 に答える