2016-04-06 82 views
1

我试过atmel的ASF在USB海量存储主机上提供的例子,用于向USB闪存设备发送/读取文件。当读取一个文件,我得到1.7 MB/s的速度,我尝试了很多的解决方案,其中包括:SAMV71 USB海量存储主机极其缓慢

  • 确信它在高速模式下运行,且板频率为300 MHz
  • 运行
  • 试图增加缓冲区大小为F_read功能,并且我 设法增加至2.2百万字节/秒
  • 我测试文件系统它自己,这是一个虚拟存储器 例如FAT32,并得到了30MB/s的在读取操作(不知道这是否有助于速度调试 )
  • 我试过使用相同的程序,除了从SD卡读取,其中 给了我1 MB /秒的输出
  • 我也测试了全速模式,它给了我0.66的输出 MB /秒。
  • 我测试过的一个极端想法是运行两个主板,一个主机模式,一个主机模式, ,另一个在设备模式,然后我测试了USB的传输速度,它在Bulk模式下给出了1.66 MB/s的输出。 (在HS上运行)
  • 尝试了Keil的例子,这给我的结果比Atmel的结果还差。

    有人可以请建议的解决方案?我已阅读由Atmel和Keil提供的关于USB通信的所有文档。

+0

它是如何真正从主机控制器获取数据的? DMA? FIFO中断?轮询?那将是我首先想到的。 – Notlikethat

回答

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),您将不得不破解这些功能(以及上述所有层)以使用多扇区读/写。