rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
阅读:3531回复:22

Very large data transfer

楼主#
更多 发布于:2001-08-20 13:56
昨天试着从一个usb device连续读16Mbyte的数据,对应的端点每次只能传64 byte。
刚开始的时候,每次都只让driver读64byte,速度巨慢,但是数据到是没有错误。后来每次改为读4096byte,感觉速度非常快,但是经常发生CRC错误,usbd把发生错误的packet对应的buffer都用zero填上了,而且端点也stall了。:(
以前没有一次性读写这么多数据,没有碰到过。不知道这里有没有哪位xd有过这种经历?怎么解决?在host端怎么解决?
可惜现在是大白天,老外们都在睡觉.....usb.org上还没有人回答....嗬嗬!
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
starmoon
驱动小牛
驱动小牛
  • 注册日期2001-04-28
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-08-20 19:36
用 64b 加上双缓冲, 速度应该能达到。

在设备端要用 FSM 作控制。

用 D12 + 33M 552 可以达到 1.05MB/s 的速度。
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-08-21 10:05
[QUOTE]原本由 starmoon 发表
[B]用 64b 加上双缓冲, 速度应该能达到。

在设备端要用 FSM 作控制。

用 D12 + 33M 552 可以达到 1.05MB/s 的速度。 [/B][/QUOTE]
什么叫FSM?
我用的是D12。
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
starmoon
驱动小牛
驱动小牛
  • 注册日期2001-04-28
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-08-21 14:50
FSM= Finit State Machine
fyshe
驱动牛犊
驱动牛犊
  • 注册日期2001-05-07
  • 最后登录2004-06-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2001-08-22 08:50
[QUOTE]原本由 starmoon 发表
[B]FSM= Finit State Machine [/B][/QUOTE]
两位:D12 + 33M 552 究竟是什么意思,请指教
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2001-08-22 08:55
[QUOTE]原本由 starmoon 发表
[B]FSM= Finit State Machine [/B][/QUOTE]
能不能详细讲一下?或者给点提示,比如网址什么的。
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
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)
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
fyshe
驱动牛犊
驱动牛犊
  • 注册日期2001-05-07
  • 最后登录2004-06-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2001-08-22 09:16
哦,多谢了!
怎么不用CYPRESS 的2131呢?
starmoon
驱动小牛
驱动小牛
  • 注册日期2001-04-28
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2001-08-22 09:33
Philips 的例子里有。

好象是那个 mass storage 的例子。
SDK
SDK
驱动小牛
驱动小牛
  • 注册日期2001-03-23
  • 最后登录2007-11-26
  • 粉丝0
  • 关注0
  • 积分61分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2001-08-22 11:53
Hi:
   你不能不采用FPGA,这又是一门很大的门类,再花若干时间学吧!
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2001-08-22 19:46
[QUOTE]原本由 starmoon 发表
[B]Philips 的例子里有。

好象是那个 mass storage 的例子。
 [/B][/QUOTE]
明白了.仔细研究一下
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2001-08-27 09:43
终于搞清楚了原因。
其实所谓的FSM,我早已经实现。
真正的原因是D12和AT89C52的时钟不同步,产生了数据的CRC错误。现在把D12的时钟输出直接送给AT89C52,就OK了。但是这样一来,速度就很慢,单单只做USB传送,16MBytes的数据要花上1023 seconds,平均下来只有16kbyte/s。简直是蜗牛爬啊!
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
rolston
驱动牛犊
驱动牛犊
  • 注册日期2001-06-21
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2001-08-27 14:45
用DMA就OK
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2001-08-27 16:44
[QUOTE]原本由 rolston 发表
[B]用DMA就OK [/B][/QUOTE]
是吗?你用下来的速度有多快?
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
starmoon
驱动小牛
驱动小牛
  • 注册日期2001-04-28
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2001-08-28 02:15
DMA 很麻烦, 还得DMA控制器, 成本上划不来。

D12 的时钟设成24M 到 52 试试?

我用的Sangsum 的 52 33M @ 24M, 用纯 bulk 方式, 达到240K/s左右。 还有很大的提速空间, 因为I/O 全用的 inportb/outportb 了, 还有就是地址加递加和边界(分页)判断没有优化。
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
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的电阻接上去,发现也可以用,但是对速度根本没有作用。
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
Truly
驱动牛犊
驱动牛犊
  • 注册日期2001-08-16
  • 最后登录2005-05-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2001-08-28 10:10
昨天实验了一下,可以达到350KB/S,
瓶颈应该是在MCU上,我用89C52用PHILIPS的D12 USB-EPP演示板与演示程序测只有16KB/S左右,真的是慢!后来在24MHZ能有三十KB多了,就逐渐改FIRMWARE,后来用C达到的极限应该就是三百多了,因为在我的中断里什么都没做,只是读状态消除中断,然后也没再填数据,直接就用第一次的数据确认发送。看来要提高传送率只有换MCU或改回用汇编了。
guest
驱动牛犊
驱动牛犊
  • 注册日期2001-06-12
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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.
xmchao
驱动牛犊
驱动牛犊
  • 注册日期2001-06-16
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2001-08-29 15:40
Cypress的2131可以做到48M,应该在MCU性能上满足吧
starmoon
驱动小牛
驱动小牛
  • 注册日期2001-04-28
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2001-08-30 01:34
To rayyang2000:

D12 上还是用 6M,

但 D12 的 ClockOut 是可以编程的啊。

我编程让他输出 24M  , 就是 48M/(N+1), N=1

N设为 0 时是 48M, 33M 的 52 吃不消
上一页
游客

返回顶部