imaginewq
驱动牛犊
驱动牛犊
  • 注册日期2003-03-10
  • 最后登录2003-10-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1562回复:9

我只剩28分可给了,请众兄弟们进来看看

楼主#
更多 发布于:2003-06-02 15:45
兄弟们帮我看一下这个方案可不可行:pc与usb设备之间互相传输数据的过程:pc通过不断扫描usb固件中的某个寄存器来判断usb设备是否要传输数据给pc,usb设备也通过不断扫描usb固件中的某个寄存器来判断是否pc想传输数据给usb设备;假设usb设备要传输数据给pc,这时usb设备将usb固件中的某个寄存器置为1,当pc扫描到该寄存器为1后,就开始调用readfile函数进行读操作,当pc读取完数据后,pc调用writefile函数将usb固件的另外一个寄存器置1,以通知usb设备数据以被接收完毕
(小弟原来是做计算机内的软件的,对usb固件实在不熟悉,上面的过程是我推测出来的,请大虾们评价一下,若不可行,那还请众大虾帮我提供一个用于pc和usb设备之间互相传输数据的模型)
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-06-02 16:27
“pc通过不断扫描usb固件中的某个寄存器来判断usb设备是否要传输数据给pc” 是不可实现的,主机可以通过发送in令牌来判断设备是否有数据要传输,而设备方是通过中断来判断主机是否有数据发过来的。你说的那种方式其实协议上已经用另外的方式(如上)实现了,你如果想想实现连续不间断的传输,可以用iso方式,如果是定时的传输,可以用int方式。
imaginewq
驱动牛犊
驱动牛犊
  • 注册日期2003-03-10
  • 最后登录2003-10-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-06-02 16:49
JINGHUIREN老兄,你能否给个qq号码给我,或者给个邮箱地址给我,我还有好多问题想向你请教
imaginewq
驱动牛犊
驱动牛犊
  • 注册日期2003-03-10
  • 最后登录2003-10-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-06-02 16:50
我的qq是6702731
Always!978
驱动小牛
驱动小牛
  • 注册日期2002-05-09
  • 最后登录2005-04-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-06-03 09:28
“pc通过不断扫描usb固件中的某个寄存器来判断usb设备是否要传输数据给pc” 是不可实现的,主机可以通过发送in令牌来判断设备是否有数据要传输,而设备方是通过中断来判断主机是否有数据发过来的。你说的那种方式其实协议上已经用另外的方式(如上)实现了,你如果想想实现连续不间断的传输,可以用iso方式,如果是定时的传输,可以用int方式。

 jinghuiren老大,我如果用bulk方式实现连续不断的传输可行么?
我的qq是10110181,也加我吧。
Tomorrow Never Die
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-06-03 10:09
bulk方式驱动每次能处理的一般是64kB,也就是说接收或者发送完这么多数据后就会返回,因此返回的占用一些时间,如果固件方此时还在不断的往端点中填充数据,而且MCU足够快的话很可能会有数据丢失的,有人已经发现这一点,我倒没有验证过。
Always!978
驱动小牛
驱动小牛
  • 注册日期2002-05-09
  • 最后登录2005-04-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-06-03 10:13
bulk方式驱动每次能处理的一般是64kB,也就是说接收或者发送完这么多数据后就会返回,因此返回的占用一些时间,如果固件方此时还在不断的往端点中填充数据,而且MCU足够快的话很可能会有数据丢失的,有人已经发现这一点,我倒没有验证过。

  我现在就是这种情况!!我以前一直没弄清是主机方还是设备方的原因,多谢jinghuiren大哥。那么我怎么能解决这种问题呢?设备方多延迟?
Tomorrow Never Die
NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-06-03 11:53
对于设备传输的延迟,只有提高mcu的速度,或者简化程序!
比如在主循环里采集数据到缓冲区,在中断中发送!
eyeszhu
驱动牛犊
驱动牛犊
  • 注册日期2003-05-14
  • 最后登录2003-08-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-06-05 18:27

我准备使用dsp5509,通过usb通信连到主机,我的传输速率大概是1Mbyte每秒,用bulk方式行吗?
yjmpepe
驱动牛犊
驱动牛犊
  • 注册日期2003-04-18
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-06-06 08:13
好象讨论来讨论去离楼主的意思越来越远了
我碰到的问题也是两个irp之间丢数的毛病(我现在大概是15MB/S),可能跟以前有个帖子“deviceiocontrol和内核之间的通讯需要2ms”的意思差不多,我观察这时间大概是200us左右。
现在我的解决方案是在外围多加一级fifo,做一下缓冲,这样应该不会丢数,实验正在做。大家有什么好的解决方案是否可以讨论一下?至于其他提高mcu速度的方法,我觉得我用的这个机制(bulk,一个deviceiocontrol提交一个irq)本身有问题,不缓冲数据必然丢失,楼上提出的在中断里发送的方法也有道理,只是用于传送图象信号,行中断太窄,而且一个irp容量也小,速度会慢。场中断够宽,但一场数据太大,远远超过64K,需要改驱动。
游客

返回顶部