lioniamhero
驱动小牛
驱动小牛
  • 注册日期2003-05-31
  • 最后登录2005-10-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1443回复:16

swf2003大侠:请教

楼主#
更多 发布于:2003-11-06 18:10

  swf2003大侠:请教
您好:
请教你几个问题。
一 我用CY7C68013的片子做实时数据采集系统,用的试BULK,SLAVE模式。曾在本站内看到过你的帖子,是关于如何保证数据接收完整,不掉数据,您提的是用两个URB来构建,具体如何运行机制,小弟特向您请教。我现在速率高的话,数据就会掉(我要一边采,一边存盘,而且要保证数据实时)。请教:用什么好的机制来实现好呢。我还看过本贴中有用异步发32个Deviceiocontrol来请求数据,但我觉得我的要求是数据立即就返回了。用异步能行吗,另外驱动中要如何实现呢。
二 USB协议中用块传输和实时传输都分别在什么情况下使用呢 ,我用实时可行吗。
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-11-06 18:36
用BULK是可以的,大约可以做到20M-30M左右,实时没问题,至于Deviceiocontrol,你可以在驱动中尽量加大MAXTRANSFERSIZE的大小,如1024×6400K,没问题,这样可以尽量每次多调用几回Deviceiocontrol,至于线程是一定用多线程了,保证数据完整,除了你的采集时序没问题外,用AUTOIN和AUTOOUT模式4缓冲就应该不会丢数据。
lioniamhero
驱动小牛
驱动小牛
  • 注册日期2003-05-31
  • 最后登录2005-10-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-11-06 18:48
用BULK是可以的,大约可以做到20M-30M左右,实时没问题,至于Deviceiocontrol,你可以在驱动中尽量加大MAXTRANSFERSIZE的大小,如1024×6400K,没问题,这样可以尽量每次多调用几回Deviceiocontrol,至于线程是一定用多线程了,保证数据完整,除了你的采集时序没问题外,用AUTOIN和AUTOOUT模式4缓冲就应该不会丢数据。

  您说的20-30M是字节还是比特呢,加大MAXTRANSFERSIZE的大小不能解决根本问题,问题是用BULK模式,HOST读取USB设备的数据只能用轮循的机制来读取,现在我用系统线程来读取数据,另一个线程来存盘,但CPU的时间片是固定的,我要一边保证读取数据,一边保证来的及存盘。用BULK还有别的机制读取数据吗。
  另外你说的采集时序是电路读取数据的时序逻辑吧,时序应该没问题。
  您的驱动和应用是如何读取数据的。能否让我参考。
 我的邮箱lioniamhero@yahoo.com.cn
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-11-06 18:55
其实改变MAXTRANSFERSIZE就是每次向内存多写些数据啊,这样在主机读取数据时AD可以继续向USB的fifo里写数据啊,等到主机处理完成(通常不会耽误USB传数据的)继续从USB向里边写。在这种情况下速度可以达到20-30MB,也就是200Mb左右,对于25帧/秒的图像信号实时显示是绰绰有余的。当然我说的是只向主机送数据的情况。
lioniamhero
驱动小牛
驱动小牛
  • 注册日期2003-05-31
  • 最后登录2005-10-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-11-07 22:42
其实改变MAXTRANSFERSIZE就是每次向内存多写些数据啊,这样在主机读取数据时AD可以继续向USB的fifo里写数据啊,等到主机处理完成(通常不会耽误USB传数据的)继续从USB向里边写。在这种情况下速度可以达到20-30MB,也就是200Mb左右,对于25帧/秒的图像信号实时显示是绰绰有余的。当然我说的是只向主机送数据的情况。

  MAXTRANSFERSIZE的值是指一个管道中传输的的最大数值。那您的驱动是如何工作的呢。是直接用EZUSB.SYS吗,应用是如何和驱动交互数据的呢。
lioniamhero
驱动小牛
驱动小牛
  • 注册日期2003-05-31
  • 最后登录2005-10-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-11-08 22:25
其实改变MAXTRANSFERSIZE就是每次向内存多写些数据啊,这样在主机读取数据时AD可以继续向USB的fifo里写数据啊,等到主机处理完成(通常不会耽误USB传数据的)继续从USB向里边写。在这种情况下速度可以达到20-30MB,也就是200Mb左右,对于25帧/秒的图像信号实时显示是绰绰有余的。当然我说的是只向主机送数据的情况。

     您得理解我还不太明白,数据会因为你得MAXTRANSFERSIZE得值大就会对数据有缓冲得作用吗,对数据有缓冲作用得应该是硬件得FIFO的大小吧,您得意思是数据会在内存中缓存吗。但在我调试得过程中,如果我用得是MAXSTRANSGERSIZE=16K,那么在我得信号速率高的时候,比如几十M比特时,就在16K的倍数的地方数据会断,会掉。您有什么高见呢。楼上的问题再问。
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-11-09 11:00
[quote]其实改变MAXTRANSFERSIZE就是每次向内存多写些数据啊,这样在主机读取数据时AD可以继续向USB的fifo里写数据啊,等到主机处理完成(通常不会耽误USB传数据的)继续从USB向里边写。在这种情况下速度可以达到20-30MB,也就是200Mb左右,对于25帧/秒的图像信号实时显示是绰绰有余的。当然我说的是只向主机送数据的情况。

  MAXTRANSFERSIZE的值是指一个管道中传输的的最大数值。那您的驱动是如何工作的呢。是直接用EZUSB.SYS吗,应用是如何和驱动交互数据的呢。 [/quote]

就是直接应用在sys中的,你可以将sys.c直接修改,然后用ddk编辑生成新的SYS就可以了。其实这就可以理解为在内存中开辟了一个你定义的MAXTRANSFERSIZE大小的缓冲区。和硬件的fifo没什么关系。68013里的fifo足够用了,当然你应该用4倍缓冲模式。明白了吗?
lioniamhero
驱动小牛
驱动小牛
  • 注册日期2003-05-31
  • 最后登录2005-10-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-11-10 15:40
您说得是真得吗,我用得也是BULK 4倍缓存啊。我也改过MAXTRANSFERSIZE的值啊,但我调试的话就会掉数据,断数据啊。您的驱动没有做任何处理吗。直接用EZUSB.SYS的驱动吗。
  我改过MAXTRANSFERSIZE的值,最多也就到12mbite速率。您的数据有存盘吗。如1024×6400K这个值很大。我改过最大也试过8m。
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-11-10 16:34
直接用EZUSB.SYS的驱动吗。
[/quote]


当然是将EXUSB.SYS改掉,用新的驱动了!要不有什么用呢?你是将SYS.C中的MAXTRANSFERSIZE的值改成1024×6400K这么大以后用DDK编译生成新的EZUSB.SYS并安装后再测试的吗?
lioniamhero
驱动小牛
驱动小牛
  • 注册日期2003-05-31
  • 最后登录2005-10-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-11-10 16:37
先给分。
  我记得我在调试时把MAXTRANSFERSIZE改为8m后,当速率一高,如12m或24m的话数据就会丢,我想和硬件也有关系。现在是我 要一边读取数据,一边存盘啊。
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-11-10 16:43
先给分。
  我记得我在调试时把MAXTRANSFERSIZE改为8m后,当速率一高,如12m或24m的话数据就会丢,我想和硬件也有关系。现在是我 要一边读取数据,一边存盘啊。


感觉你说的问题好像是硬件的事,我这么做到15M可以,20M偶尔也丢数。
lioniamhero
驱动小牛
驱动小牛
  • 注册日期2003-05-31
  • 最后登录2005-10-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-11-10 16:45
不会吧。您改的话1024×6400K那是6.4G啊。这样我会试一试。但其他的就不要改吗。您在应用程序是用什么的机制呢。能讲讲吗。用DeviceIoControl的话如果要实时采集,您是如何实现的呢。您是在应用程序中用轮循机制吗。
lioniamhero
驱动小牛
驱动小牛
  • 注册日期2003-05-31
  • 最后登录2005-10-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-11-10 16:49
15M啊。我现在只要能保证8M就可以了。您觉得还有什么地方吗。只有10天时间了。
  


不在郁闷中成长,就在郁闷中毁灭。
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-11-10 16:50
我改成了1024×6400大小,没有那个K。 :D :D
lioniamhero
驱动小牛
驱动小牛
  • 注册日期2003-05-31
  • 最后登录2005-10-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-11-10 20:51
我改过啊。我改成1024×1024×8过,而且我就采集这么大的数据也会掉。那您在驱动中向USB总线驱动是如何交互数据的呢?您的驱动别的地方都没改吗。就用一个IRP一直来和USB设备交互数据吗、
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-11-11 08:13
当然使用多线程了!
lioniamhero
驱动小牛
驱动小牛
  • 注册日期2003-05-31
  • 最后登录2005-10-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2003-11-11 09:51
能否具体点呢。



不在郁闷中成长,就在郁闷中毁灭。
游客

返回顶部