阅读:3530回复: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-30 14:29
我手头的几个52都是20M的,大概还玩不成,要找几个24M的才行。
|
|
|
板凳#
发布于:2001-08-30 14:25
[QUOTE]原本由 starmoon 发表
[B]To rayyang2000: D12 上还是用 6M, 但 D12 的 ClockOut 是可以编程的啊。 我编程让他输出 24M , 就是 48M/(N+1), N=1 N设为 0 时是 48M, 33M 的 52 吃不消 [/B][/QUOTE] 多谢starmoon提醒!回家赶快试一下。:) 一直忘了这个参数,老是考虑别的地方是不是有问题。看来太卖力的干活,有时候脑子反而不好使了。 :P |
|
|
地板#
发布于:2001-08-30 09:51
TO: /* 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. */ 引用starmoon:“ D12 上还是用 6M, 但 D12 的 ClockOut 是可以编程的啊。 我编程让他输出 24M , 就是 48M/(N+1), N=1 N设为 0 时是 48M, 33M 的 52 吃不消 ” 我现在在考虑用W77E58,它是四个振荡为一个指令周期的,同样频率下比一般的51快二、三倍。但有点资源浪费了,不知还有没有其它好推荐? |
|
地下室#
发布于:2001-08-30 01:34
To rayyang2000:
D12 上还是用 6M, 但 D12 的 ClockOut 是可以编程的啊。 我编程让他输出 24M , 就是 48M/(N+1), N=1 N设为 0 时是 48M, 33M 的 52 吃不消 |
|
5楼#
发布于:2001-08-29 15:40
Cypress的2131可以做到48M,应该在MCU性能上满足吧
|
|
6楼#
发布于: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. |
|
7楼#
发布于:2001-08-28 10:10
昨天实验了一下,可以达到350KB/S,
瓶颈应该是在MCU上,我用89C52用PHILIPS的D12 USB-EPP演示板与演示程序测只有16KB/S左右,真的是慢!后来在24MHZ能有三十KB多了,就逐渐改FIRMWARE,后来用C达到的极限应该就是三百多了,因为在我的中断里什么都没做,只是读状态消除中断,然后也没再填数据,直接就用第一次的数据确认发送。看来要提高传送率只有换MCU或改回用汇编了。 |
|
8楼#
发布于: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的电阻接上去,发现也可以用,但是对速度根本没有作用。 |
|
|
9楼#
发布于:2001-08-28 02:15
DMA 很麻烦, 还得DMA控制器, 成本上划不来。
D12 的时钟设成24M 到 52 试试? 我用的Sangsum 的 52 33M @ 24M, 用纯 bulk 方式, 达到240K/s左右。 还有很大的提速空间, 因为I/O 全用的 inportb/outportb 了, 还有就是地址加递加和边界(分页)判断没有优化。 |
|
10楼#
发布于:2001-08-27 16:44
[QUOTE]原本由 rolston 发表
[B]用DMA就OK [/B][/QUOTE] 是吗?你用下来的速度有多快? |
|
|
11楼#
发布于:2001-08-27 14:45
用DMA就OK
|
|
12楼#
发布于:2001-08-27 09:43
终于搞清楚了原因。
其实所谓的FSM,我早已经实现。 真正的原因是D12和AT89C52的时钟不同步,产生了数据的CRC错误。现在把D12的时钟输出直接送给AT89C52,就OK了。但是这样一来,速度就很慢,单单只做USB传送,16MBytes的数据要花上1023 seconds,平均下来只有16kbyte/s。简直是蜗牛爬啊! |
|
|
13楼#
发布于:2001-08-22 19:46
[QUOTE]原本由 starmoon 发表
[B]Philips 的例子里有。 好象是那个 mass storage 的例子。 [/B][/QUOTE] 明白了.仔细研究一下 |
|
|
14楼#
发布于:2001-08-22 11:53
Hi:
你不能不采用FPGA,这又是一门很大的门类,再花若干时间学吧! |
|
15楼#
发布于:2001-08-22 09:33
Philips 的例子里有。
好象是那个 mass storage 的例子。 |
|
16楼#
发布于:2001-08-22 09:16
哦,多谢了!
怎么不用CYPRESS 的2131呢? |
|
17楼#
发布于: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) |
|
|
18楼#
发布于:2001-08-22 08:55
[QUOTE]原本由 starmoon 发表
[B]FSM= Finit State Machine [/B][/QUOTE] 能不能详细讲一下?或者给点提示,比如网址什么的。 |
|
|
19楼#
发布于:2001-08-22 08:50
[QUOTE]原本由 starmoon 发表
[B]FSM= Finit State Machine [/B][/QUOTE] 两位:D12 + 33M 552 究竟是什么意思,请指教 |
|
上一页
下一页