sunkai
驱动中牛
驱动中牛
  • 注册日期2002-12-31
  • 最后登录
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:4940回复:32

一个关于bulk的问题

楼主#
更多 发布于:2001-08-20 20:37
cypress的技术文档中这样说:当用bulk管道传输数据时,(假设firmware由于某些原因,比如时序配合,本身错误或硬件缺陷),bulk端点的数据没有准备好时,不能及时响应来自主机的IN数据请求,主机就会得到来自设备的NAK,并重发这个请求.请问这个重发的机制是由USB规范决定的,还是由用户驱动程序决定的.如果始终没有数据来应付这个请求,这个重发会延续到什么时候?可不可以在第一次(或确定的次数)得到NAK时就放弃继续请求?
因为在调试阶段经常会碰到各种错误,如果仅仅是因为时序配合,可能要等待一点时间,是觉察不到,这很正常,如果一直没有准备好数据上传,就会一直等待,跟死机一样,需要重启主机,不胜其烦.请问大虾们:可否在驱动程序中解决这个问题,怎样解决?呵呵,莫对我说"你把firmware和硬件都搞对不就结了"哦。
还有一个问题:cypress的AN2131QC最多能在一祯传输17个bulk包,我想每次从设备请求640字节的数据,会分成10个包传上来(10*64),请问,在没有其他USB设备时,这10个包是否确保在一祯里(1ms)就能传完?是否能由驱动程序控制每祯必须传n个数据包?
请大虾们不吝赐教。
[sunkai 编辑于 2001-08-20 20:40]

最新喜欢:

r2109twr2109t... flamingoflamin...
Danny
驱动牛犊
驱动牛犊
  • 注册日期2001-05-16
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-08-21 19:26
你的driver是自己写的,还是用的microsoft 提供的USB driver
fyshe
驱动牛犊
驱动牛犊
  • 注册日期2001-05-07
  • 最后登录2004-06-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-08-22 08:45
[QUOTE]原本由 Danny 发表
[B]你的driver是自己写的,还是用的microsoft 提供的USB driver [/B][/QUOTE]

microsoft 提供的USB driver 有什么明显BUG?
另外,cypress提供的GPD能满足这个吗?
谢谢
Danny
驱动牛犊
驱动牛犊
  • 注册日期2001-05-16
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-08-22 11:26
关于 Microsoft USB Driver 的问题。
我不确定Microsoft USB Driver 是否有Bug,但我有明确的根据证明这个Driver 它从不发In Token 给 Device。
guest
驱动牛犊
驱动牛犊
  • 注册日期2001-06-12
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2001-08-22 22:08
用过cypress的东西的大虾闷请注意了,我用的是cypress提供的GPD,行不行?当向一个没有数据上传的设备发请求包时,驱动程序就死在EzUsb_CallUSBD()中的KeWaitSingleObject()那里出不来,难道删掉这一句吗?

楼上的兄弟们,给点答案好不好?不要也跟着问嘛.谁要是帮我搞清了这些问题,我请他喝茶.
sunkai
驱动中牛
驱动中牛
  • 注册日期2002-12-31
  • 最后登录
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2001-08-26 21:08
谢谢RY2000斑主指点.
你们不觉得我提的这个问题很重要?要做一个要求严格时序的大数据量的采集系统的传输接口,谁都不能躲过这个问题.
USB1.0的带宽是12Mb/s,CYPRESS的AN2131QC的BULK传输在理论上可以达到8Mb/s多的有效数据,我在这里看到有人说:每祯就只能传一个bulk包,最多就是64B,bulk传输太慢了云云.这样理解肯定是不对的,这不是问题,关键是,凡是做数据采集卡的同行们,你们是怎么考虑和解决我前面提出的那个问题的?理论上能做到,实际上并不一定,因为一个完整的系统不光只是把数据传来传去,还要进行若干处理等等,所以人为的控制是必要的.请有经验的指教.
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2001-08-27 10:03
[QUOTE]原本由 sunkai 发表
[B]谢谢RY2000斑主指点.
你们不觉得我提的这个问题很重要?要做一个要求严格时序的大数据量的采集系统的传输接口,谁都不能躲过这个问题.
USB1.0的带宽是12Mb/s,CYPRESS的AN2131QC的BULK传输在理论上可以达到8Mb/s多的有效数据,我在这里看到有人说:每祯就只能传一个bulk包,最多就是64B,bulk传输太慢了云云.这样理解肯定是不对的,这不是问题,关键是,凡是做数据采集卡的同行们,你们是怎么考虑和解决我前面提出的那个问题的?理论上能做到,实际上并不一定,因为一个完整的系统不光只是把数据传来传去,还要进行若干处理等等,所以人为的控制是必要的.请有经验的指教. [/B][/QUOTE]
以前一直没有做大批量传输数据的实验,这两天做了一下,在我的系统中,现在能做到的速度是16kbyte/s。这个速度是指从firmware/hardware一直到windows app之间的传输。
是不是很慢啊?:) 当然我也想改进,但一个是苦于没有设备,还有就是现在没有时间了。
天天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分
7楼#
发布于:2001-08-27 11:26
我这段时间也在做BULK的传输试验,也只能达到30KB/S左右而已。
我用的是PHISIPS的PDIUSBD12,我的做法是在EndPoint5的中断
服务中重复发送一个64字节的包,void main_txdone(void)
{
D12_ReadLastTransactionStatus(5); /* Clear interrupt flag */

if(MCU_SWM2)
D12_WriteEndpoint(5,&MSG1,sizeof(MSG1));

num1++;
}

PC机上是用WINDRIVER生成的测试程序
这样的速度也太慢了,不知是MCU的速度跟不上还是处理方法有误或是PC机软件慢了?我的机是CII566 64MB、WIN98SE,USB用是是PHILPS的D12 USB-EPP EVALUATION MAIN BOARD
Buddha
驱动老牛
驱动老牛
  • 注册日期2001-04-29
  • 最后登录2013-05-18
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望17点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2001-08-27 13:48
[QUOTE]原本由 sunkai 发表
[B]谢谢RY2000斑主指点.
你们不觉得我提的这个问题很重要?要做一个要求严格时序的大数据量的采集系统的传输接口,谁都不能躲过这个问题.
USB1.0的带宽是12Mb/s,CYPRESS的AN2131QC的BULK传输在理论上可以达到8Mb/s多的有效数据,我在这里看到有人说:每祯就只能传一个bulk包,最多就是64B,bulk传输太慢了云云.这样理解肯定是不对的,这不是问题,关键是,凡是做数据采集卡的同行们,你们是怎么考虑和解决我前面提出的那个问题的?理论上能做到,实际上并不一定,因为一个完整的系统不光只是把数据传来传去,还要进行若干处理等等,所以人为的控制是必要的.请有经验的指教. [/B][/QUOTE]

我的程序能到32kb/s,
应该还能再大,可是我的数据只有这么多了
<table style="filter: glow(color=sky blue, strength=10)"> <font color=white> 猫生病了, 老鼠大声朗诵诗集, 并修剪盆花. 猫生病了, 老鼠慢慢刷牙洗脸, 并打扫房间. 猫生病了, 老鼠倚在窗边欣赏夜色, 并对流星许愿. 猫生病了, 老鼠也病了, 它说:"我还是习惯那种时时紧张, 处处小心, 夜夜逃亡的生活." 午夜, 我听到老鼠在叹息, 且不再读诗了. </font></table>
Truly
驱动牛犊
驱动牛犊
  • 注册日期2001-08-16
  • 最后登录2005-05-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2001-08-28 10:14
昨天又实验了一下,最多可以达到350KB/S了,
瓶颈应该是在MCU上,我用89C52用PHILIPS的D12 USB-EPP演示板与演示程序测只有16KB/S左右,真的是慢!后来在24MHZ能有三十KB多了,就逐渐改FIRMWARE,后来用C达到的极限应该就是三百多了,因为在我的中断里什么都没做,只是读状态消除中断,然后也没再填数据,直接就用第一次的数据确认发送。看来要提高传送率只有换MCU或改回用汇编了。
大家有没什么好建议啊?还有问问除了W77E58,还有那些4个CLOCK或是6个COLCK的51MCU,这样在同样频率下又可以快2、3倍了。
sunkai
驱动中牛
驱动中牛
  • 注册日期2002-12-31
  • 最后登录
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2001-08-29 02:29
[QUOTE]原本由 rayyang2000 发表
[B][QUOTE]原本由 sunkai 发表
[B]谢谢RY2000斑主指点.
你们不觉得我提的这个问题很重要?要做一个要求严格时序的大数据量的采集系统的传输接口,谁都不能躲过这个问题.
USB1.0的带宽是12Mb/s,CYPRESS的AN2131QC的BULK传输在理论上可以达到8Mb/s多的有效数据,我在这里看到有人说:每祯就只能传一个bulk包,最多就是64B,bulk传输太慢了云云.这样理解肯定是不对的,这不是问题,关键是,凡是做数据采集卡的同行们,你们是怎么考虑和解决我前面提出的那个问题的?理论上能做到,实际上并不一定,因为一个完整的系统不光只是把数据传来传去,还要进行若干处理等等,所以人为的控制是必要的.请有经验的指教. [/B][/QUOTE]
以前一直没有做大批量传输数据的实验,这两天做了一下,在我的系统中,现在能做到的速度是16kbyte/s。这个速度是指从firmware/hardware一直到windows app之间的传输。
是不是很慢啊?:) 当然我也想改进,但一个是苦于没有设备,还有就是现在没有时间了。 [/B][/QUOTE]

是的,16KB/S的确是慢,我现在做的一个东西到100K没问题,问题是数据到了主机不能立即画图(太费时了吧?),存盘先,然后复盘:).或者先抽样再画,现在还没有到那个时候,软件算法是个问题,:(.
sunkai
驱动中牛
驱动中牛
  • 注册日期2002-12-31
  • 最后登录
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2001-08-29 02:39
[QUOTE]原本由 sunkai 发表
[B]cypress的技术文档中这样说:当用bulk管道传输数据时,(假设firmware由于某些原因,比如时序配合,本身错误或硬件缺陷),bulk端点的数据没有准备好时,不能及时响应来自主机的IN数据请求,主机就会得到来自设备的NAK,并重发这个请求.请问这个重发的机制是由USB规范决定的,还是由用户驱动程序决定的.如果始终没有数据来应付这个请求,这个重发会延续到什么时候?可不可以在第一次(或确定的次数)得到NAK时就放弃继续请求?
因为在调试阶段经常会碰到各种错误,如果仅仅是因为时序配合,可能要等待一点时间,是觉察不到,这很正常,如果一直没有准备好数据上传,就会一直等待,跟死机一样,需要重启主机,不胜其烦.请问大虾们:可否在驱动程序中解决这个问题,怎样解决?呵呵,莫对我说"你把firmware和硬件都搞对不就结了"哦。
还有一个问题:cypress的AN2131QC最多能在一祯传输17个bulk包,我想每次从设备请求640字节的数据,会分成10个包传上来(10*64),请问,在没有其他USB设备时,这10个包是否确保在一祯里(1ms)就能传完?是否能由驱动程序控制每祯必须传n个数据包?
请大虾们不吝赐教。
[sunkai 编辑于 2001-08-20 20:40] [/B][/QUOTE]

兄弟们,谁行行好,请解答我的问题吧.如果真能到到17*64B/ms,就是>1000KB/s啊!,还有什么事不能干呢?总不能坐着等USB2.0到来吧.请懂得此道的大虾发个话吧,USB事务的安排怎么控制的?.
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2001-08-29 09:55
是否可以保证让host在一帧里面发若干个IN packet?
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
shb
shb
驱动牛犊
驱动牛犊
  • 注册日期2001-07-06
  • 最后登录2001-11-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2001-08-29 09:56
这个NAK是由USB规范规定的,USB1。0规定一般是是重新请求3次,如果全部不成功,就会停止,它不会一直请求。
DriverWork
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2001-08-29 14:37
[QUOTE]原本由 shb 发表
[B]这个NAK是由USB规范规定的,USB1。0规定一般是是重新请求3次,如果全部不成功,就会停止,它不会一直请求。 [/B][/QUOTE]
是吗?以前观察Control Transfer的时候,发现host会一直等待的。
如果这样停止的话,host得到的错误代码是不是0x17(CRC错误)?
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
yalong
驱动牛犊
驱动牛犊
  • 注册日期2001-08-27
  • 最后登录2011-07-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2001-08-30 19:05
我最近一直在做USB,得到的一些结论和大家差不多,但也有一些自己的看法,可以一起讨论!
 1、51的速度肯定影响USB的传输速度,你可以测算要达到USB的实际速度(约1MB),在每一桢要传输1K的数据,那么平均到一个包(64字节)时间就是小于64ms,只有在这么短的时间内处理完所有数据,你才可以达到1M的速度。51才多快啊!等到中断,然后查询然后再去取数据。。。。。。所以,一个瓶径就在这。
 2、我用51和9603处理过,只收数据不处理,最快也就不到400KB,现在用DSP做了一下,可以到500KB,但也是不理想。再加上数据处理的程序,还要打很大的折扣!
 3、在USB。ORG上曾看到过说驱动也会影响数据传输速率,但具体怎么搞由于不是很清楚软件所以没有深入思考,但我觉得应该可以研究的!
 4、上面有说NAK的处理,对CONTROL来说,一般是三次,如果全错就不处理了!枚举的时候就能看出来这个过程!
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2001-08-31 09:13
[QUOTE]原本由 yalong 发表
[B]我最近一直在做USB,得到的一些结论和大家差不多,但也有一些自己的看法,可以一起讨论!
 1、51的速度肯定影响USB的传输速度,你可以测算要达到USB的实际速度(约1MB),在每一桢要传输1K的数据,那么平均到一个包(64字节)时间就是小于64ms,只有在这么短的时间内处理完所有数据,你才可以达到1M的速度。51才多快啊!等到中断,然后查询然后再去取数据。。。。。。所以,一个瓶径就在这。
 2、我用51和9603处理过,只收数据不处理,最快也就不到400KB,现在用DSP做了一下,可以到500KB,但也是不理想。再加上数据处理的程序,还要打很大的折扣!
 3、在USB。ORG上曾看到过说驱动也会影响数据传输速率,但具体怎么搞由于不是很清楚软件所以没有深入思考,但我觉得应该可以研究的!
 4、上面有说NAK的处理,对CONTROL来说,一般是三次,如果全错就不处理了!枚举的时候就能看出来这个过程! [/B][/QUOTE]
4。 枚举的时候是3次retry。但在不枚举的时候,如果用Control Transfer传输数据,根据我在USB分析仪上看到的结果,是一直retry的,而且在Win98和2K下都是如此。
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
sunkai
驱动中牛
驱动中牛
  • 注册日期2002-12-31
  • 最后登录
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2001-09-03 16:46
[QUOTE]原本由 shb 发表
[B]这个NAK是由USB规范规定的,USB1。0规定一般是是重新请求3次,如果全部不成功,就会停止,它不会一直请求。 [/B][/QUOTE]

shb:
既然不成功就会停止倒也不算是坏事,但是现在我的情况是,不成功便成仁了,死翘翘的,只得重新启动机子,这是什么原因导致的?(用bulk方式传送时发生的)
sunkai
驱动中牛
驱动中牛
  • 注册日期2002-12-31
  • 最后登录
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2001-09-03 17:07
[QUOTE]原本由 yalong 发表
[B]我最近一直在做USB,得到的一些结论和大家差不多,但也有一些自己的看法,可以一起讨论!
 1、51的速度肯定影响USB的传输速度,你可以测算要达到USB的实际速度(约1MB),在每一桢要传输1K的数据,那么平均到一个包(64字节)时间就是小于64ms,只有在这么短的时间内处理完所有数据,你才可以达到1M的速度。51才多快啊!等到中断,然后查询然后再去取数据。。。。。。所以,一个瓶径就在这。

 2、我用51和9603处理过,只收数据不处理,最快也就不到400KB,现在用DSP做了一下,可以到500KB,但也是不理想。再加上数据处理的程序,还要打很大的折扣!

 3、在USB。ORG上曾看到过说驱动也会影响数据传输速率,但具体怎么搞由于不是很清楚软件所以没有深入思考,但我觉得应该可以研究的!
 4、上面有说NAK的处理,对CONTROL来说,一般是三次,如果全错就不处理了!枚举的时候就能看出来这个过程! [/B][/QUOTE]

1    我从CYPRESS的文档上看到一个不同的说法:系统瓶颈在HOST,而不在USB片子.我的感受也是这样的,数据到了HOST是要用的,一点不处理要来干什么?现在我就是这样,一边要数据,一边处理数据,还拿不准一次要多少合适,还好,可以先用个FIFO存点数据.

2    大哥,用DSP也只有区区500KB,不至于吧,你这么一说搞得我都对DSP没什么兴趣了.

4     为什么我用BULK来IN数据时,如果IN请求好象始终在等待,连个错误都不给报回来?只有重新启动机器才能再使用USB,真是不得其解.

[sunkai 编辑于 2001-09-03 17:10]
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2001-09-04 09:14
[QUOTE]原本由 sunkai 发表
[B][QUOTE]原本由 shb 发表
[B]这个NAK是由USB规范规定的,USB1。0规定一般是是重新请求3次,如果全部不成功,就会停止,它不会一直请求。 [/B][/QUOTE]

shb:
既然不成功就会停止倒也不算是坏事,但是现在我的情况是,不成功便成仁了,死翘翘的,只得重新启动机子,这是什么原因导致的?(用bulk方式传送时发生的) [/B][/QUOTE]
说明host给device发in的时候,device根本就没有准备好数据。你应该保证device在收到in token之前就已经准备好了数据。
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
上一页
游客

返回顶部