阅读:2743回复:7
提高USB速率的几种方法--主要针对嵌入式
做了几个月USB,涉及device和HC以及主机,大家都对速率比较敏感,现在我总结一下:
我的device是WCDMA的数据卡(无线modem),主机是MPC8270 ,HC用的是ISP1562或者ISP1564和NEC720101,建议大家用NEC的,ISP的HC问题比较多,特别是发送的时候一个TD大小不能超过64B,否则过一段时间后主机会出现outirp in use,abort这个out irp也不行,读HC的bulk位,证明数据已经送到HC了,但是ISP 的HC根本就没有把数据往总线上送,所以HC也不会向上送irp complete的消息,这个问题ISP的64字节问题一直捆饶我。NEC的720101就不会出现这个问题。我们用的USB1.1 USB 速率能够达到840KB,测试方法是从数据卡(device)往主机MPC8270罐数据, 1、数据卡USB数据发送程序应该简练, 2、数据卡(device)上不用的端点尽量不打开,因为 一个端点对应一个HC上的ED,根据HC的算法,如果你打开了端点,那么在相应的HC的ED也挂在HC的ED列表上,尽管你这个端点的HC上没有数据,HC也会遍力你这个断点的ED,造成浪费。去掉不必要的断点对速率影响很明显,比如你用data口传诵数据的时候,AT命令口就可以关掉,不去listenAT口的端点,这样的话也就不会把AT口的ED挂到HC的ED列表上去 3、通常的USB协议栈,在client驱动层挂IRP时,一次可以往IRP上挂很多个IRP buf,一个IRP的buf大小好象是4K(xworks里面如此)相当于一个TD的大小,理论上IRP buf个数越多越快,这个可以慢慢测试 4、USB协议栈接受数据往client传时用指针传,不要内存copy。 暂时就这样多,欢迎大家讨论! |
|
沙发#
发布于:2007-08-11 22:04
还有,有些人喜欢用printf函数进行打印,printf函数是阻塞的,会对速度有影响
|
|
板凳#
发布于:2007-08-14 16:22
顶一下!
|
|
|
地板#
发布于:2007-11-26 13:08
如果CPU有prefetch则尽量打开,snooping则看情况
|
|
地下室#
发布于:2007-11-28 17:34
ARM9 + SD 在PC上通过USB访问 USB1.1
用叫U盘速度测试仪的一个软件测试 读647KB/S 写663KB/S 给写加了个DMA,再测,立马晕到, 读647KB/S 写仍然是663KB/S 俺那个汗啊 觉得这软件不杂准呢 偶直接往SD卡读写东西,大概70M的一个视频,用秒表来测试的结果是 读1.23M/S 写KB/S 写0.58M/S |
|
|
5楼#
发布于:2007-11-29 08:51
谢谢,正在研究isp1521
|
|
|
6楼#
发布于:2007-11-30 11:12
注意数据对齐的问题,否则容易出错
|
|
7楼#
发布于:2008-02-17 19:25
需要协助开发usb读写,请楼上几位朋友加我,QQ:503128233
|
|