SAMV71 USB 大容量存储主机极慢

Posted

技术标签:

【中文标题】SAMV71 USB 大容量存储主机极慢【英文标题】:SAMV71 USB Mass Storage Host extremely slow 【发布时间】:2016-04-06 19:05:31 【问题描述】:

我尝试了 atmel 的 ASF 在 USB 大容量存储主机上提供的示例,以将文件发送/读取到 USB 闪存设备。读取文件时,我获得了 1.7 MB/s 的速度,我尝试了很多解决方案,其中包括:

确保它在高速模式下运行,并且板正在运行 300 兆赫 尝试增加 F_read 函数的缓冲区大小,我 设法将其提高到 2.2 MB/s 我测试了它自己的文件系统,它是虚拟内存上的 FAT32 例如,读取操作的速度为 30MB/s(不确定是否如此 有助于加速调试) 我尝试使用相同的程序,除了从 SD 卡读取,它 给了我 1 MB/s 的输出 我还在全速模式下对其进行了测试,它给了我 0.66 的输出 MB/秒。 我测试的一个极端想法是运行两块板,一个在主机模式下, 另一个在设备模式,然后我测试了传输速度 USB,它在批量模式下给了我 1.66 MB/s 的输出。 (在 HS 上运行)

尝试了 Keil 示例,它给我的结果比 Atmel 的最差。

有人可以提出解决方案吗?我已阅读 Atmel 和 Keil 提供的有关 USB 通信的所有文档。

【问题讨论】:

实际上是如何从主机控制器获取数据的? DMA?先进先出中断?轮询?这将是我要研究的第一件事。 【参考方案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),您必须破解这些函数(以及上面的所有层)才能使用多扇区读/写。

【讨论】:

以上是关于SAMV71 USB 大容量存储主机极慢的主要内容,如果未能解决你的问题,请参考以下文章

USB:小工具:设备模式:configfs:uvc和单一配置的大容量存储?

Windows 7 嵌入式(非 CE)USB 大容量存储客户端

如何防止安装所有 USB 大容量存储设备?

启用 AppSand 盒时如何从 USB 大容量存储设备读取

启用 AppSand 盒时如何从 USB 大容量存储设备读取

USB大容量存储器无法启动