阅读:3531回复:22
Very large data transfer
昨天试着从一个usb device连续读16Mbyte的数据,对应的端点每次只能传64 byte。
刚开始的时候,每次都只让driver读64byte,速度巨慢,但是数据到是没有错误。后来每次改为读4096byte,感觉速度非常快,但是经常发生CRC错误,usbd把发生错误的packet对应的buffer都用zero填上了,而且端点也stall了。:( 以前没有一次性读写这么多数据,没有碰到过。不知道这里有没有哪位xd有过这种经历?怎么解决?在host端怎么解决? 可惜现在是大白天,老外们都在睡觉.....usb.org上还没有人回答....嗬嗬! |
|
|
沙发#
发布于:2001-08-20 19:36
用 64b 加上双缓冲, 速度应该能达到。
在设备端要用 FSM 作控制。 用 D12 + 33M 552 可以达到 1.05MB/s 的速度。 |
|
板凳#
发布于:2001-08-21 10:05
[QUOTE]原本由 starmoon 发表
[B]用 64b 加上双缓冲, 速度应该能达到。 在设备端要用 FSM 作控制。 用 D12 + 33M 552 可以达到 1.05MB/s 的速度。 [/B][/QUOTE] 什么叫FSM? 我用的是D12。 |
|
|
地板#
发布于:2001-08-21 14:50
FSM= Finit State Machine
|
|
地下室#
发布于:2001-08-22 08:50
[QUOTE]原本由 starmoon 发表
[B]FSM= Finit State Machine [/B][/QUOTE] 两位:D12 + 33M 552 究竟是什么意思,请指教 |
|
5楼#
发布于:2001-08-22 08:55
[QUOTE]原本由 starmoon 发表
[B]FSM= Finit State Machine [/B][/QUOTE] 能不能详细讲一下?或者给点提示,比如网址什么的。 |
|
|
6楼#
发布于:2001-08-22 08:56
[QUOTE]原本由 fyshe 发表
[B][QUOTE]原本由 starmoon 发表 [B]FSM= Finit State Machine [/B][/QUOTE] 两位:D12 + 33M 552 究竟是什么意思,请指教 [/B][/QUOTE] = PDIUSBD12 + 8XC552(@33MHz) |
|
|
7楼#
发布于:2001-08-22 09:16
哦,多谢了!
怎么不用CYPRESS 的2131呢? |
|
8楼#
发布于:2001-08-22 09:33
Philips 的例子里有。
好象是那个 mass storage 的例子。 |
|
9楼#
发布于:2001-08-22 11:53
Hi:
你不能不采用FPGA,这又是一门很大的门类,再花若干时间学吧! |
|
10楼#
发布于:2001-08-22 19:46
[QUOTE]原本由 starmoon 发表
[B]Philips 的例子里有。 好象是那个 mass storage 的例子。 [/B][/QUOTE] 明白了.仔细研究一下 |
|
|
11楼#
发布于:2001-08-27 09:43
终于搞清楚了原因。
其实所谓的FSM,我早已经实现。 真正的原因是D12和AT89C52的时钟不同步,产生了数据的CRC错误。现在把D12的时钟输出直接送给AT89C52,就OK了。但是这样一来,速度就很慢,单单只做USB传送,16MBytes的数据要花上1023 seconds,平均下来只有16kbyte/s。简直是蜗牛爬啊! |
|
|
12楼#
发布于:2001-08-27 14:45
用DMA就OK
|
|
13楼#
发布于:2001-08-27 16:44
[QUOTE]原本由 rolston 发表
[B]用DMA就OK [/B][/QUOTE] 是吗?你用下来的速度有多快? |
|
|
14楼#
发布于:2001-08-28 02:15
DMA 很麻烦, 还得DMA控制器, 成本上划不来。
D12 的时钟设成24M 到 52 试试? 我用的Sangsum 的 52 33M @ 24M, 用纯 bulk 方式, 达到240K/s左右。 还有很大的提速空间, 因为I/O 全用的 inportb/outportb 了, 还有就是地址加递加和边界(分页)判断没有优化。 |
|
15楼#
发布于:2001-08-28 09:15
[QUOTE]原本由 starmoon 发表
[B]DMA 很麻烦, 还得DMA控制器, 成本上划不来。 D12 的时钟设成24M 到 52 试试? 我用的Sangsum 的 52 33M @ 24M, 用纯 bulk 方式, 达到240K/s左右。 还有很大的提速空间, 因为I/O 全用的 inportb/outportb 了, 还有就是地址加递加和边界(分页)判断没有优化。 [/B][/QUOTE] 你是说将D12的晶振改成24MHz的?是不是用6的整数倍的晶振就可以?我一直是用Philips推荐的6MHz。 另外,有人告诉我说D+/D-上的下拉电阻超过20K就没有作用了。可是Philips推荐的一直是1M,而且我以前用的Cypress的,也是用的1M。昨天晚上试了一下,弄了2个10K的电阻接上去,发现也可以用,但是对速度根本没有作用。 |
|
|
16楼#
发布于:2001-08-28 10:10
昨天实验了一下,可以达到350KB/S,
瓶颈应该是在MCU上,我用89C52用PHILIPS的D12 USB-EPP演示板与演示程序测只有16KB/S左右,真的是慢!后来在24MHZ能有三十KB多了,就逐渐改FIRMWARE,后来用C达到的极限应该就是三百多了,因为在我的中断里什么都没做,只是读状态消除中断,然后也没再填数据,直接就用第一次的数据确认发送。看来要提高传送率只有换MCU或改回用汇编了。 |
|
17楼#
发布于:2001-08-28 14:34
[QUOTE]原本由 Truly 发表
[B]昨天实验了一下,可以达到350KB/S, 瓶颈应该是在MCU上,我用89C52用PHILIPS的D12 USB-EPP演示板与演示程序测只有16KB/S左右,真的是慢!后来在24MHZ能有三十KB多了,就逐渐改FIRMWARE,后来用C达到的极限应该就是三百多了,因为在我的中断里什么都没做,只是读状态消除中断,然后也没再填数据,直接就用第一次的数据确认发送。看来要提高传送率只有换MCU或改回用汇编了。 [/B][/QUOTE] What's the frequency of the crysptal of D12? Still 6MHz? Then, what's 24MHz? For 89C52? No CRC error? Which endpoint and transfer type? Thanks. |
|
18楼#
发布于:2001-08-29 15:40
Cypress的2131可以做到48M,应该在MCU性能上满足吧
|
|
19楼#
发布于:2001-08-30 01:34
To rayyang2000:
D12 上还是用 6M, 但 D12 的 ClockOut 是可以编程的啊。 我编程让他输出 24M , 就是 48M/(N+1), N=1 N设为 0 时是 48M, 33M 的 52 吃不消 |
|
上一页
下一页