andy_ee
驱动牛犊
驱动牛犊
  • 注册日期2002-11-15
  • 最后登录2004-05-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1380回复:9

高分征求意见:请大家帮我看看这样配置usb传输是否合理:)

楼主#
更多 发布于:2003-09-21 13:24

要做的驱动是为了配合一个使用arm完成usb通信的雷达信号模拟器(硬件不是我做的),
驱动的主要工作是要把主机上的原始数据通过usb传给板上的dsp进行运算,然后DA输出。
因dsp对数据的需求是持续的,数据率比较大,正常工作时使用高速传输。

以下是我的设想,没有任何实战经验,请大家多多指教,谢谢:

I.因为bulk方式在总线空闲时数据传输速度是最大的,并且可以最大程度的利用带宽,
所以定义了
ep1 bulk out(下载原始数据),
ep2 bulk in(上传dsp运算后的数据)

II.为了及时响应dsp对数据的需求,定义了一个ep3 interrupt in,用作usb主动请求主机
以bulk方式下载数据。

III.除此之外,主机请求dsp的运算结果以及控制dsp工作等命令都通过ep0用vendor
request来实现。

相应的有些疑问:

1.在总线上确保没有其他设备时,使用bulk下传数据是不是最可行&可靠的呢?如果是的
话,是不是需要特别注意些什么。
2.是不是得定义2个接口,以便全速状态下也能勉强工作?
3......

希望做过usb驱动的朋友帮忙批注一下,很迷惘的说。分数在所不惜:p

最新喜欢:

worldwarworldw...
NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-09-21 14:04
usb都是被动的,好像不能向主机发送请求啊!
另外用ep0发送请求太慢了把!
junj18
驱动牛犊
驱动牛犊
  • 注册日期2003-06-30
  • 最后登录2005-01-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-09-22 16:16
你可以把第二条改为主机查询方式。因为USB是被动传输的,他不可能给主机主动发送请求信号
努力。。努力。。一切都会好的,相信自己!
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-09-22 16:21
usb不能向主机发送中断请求,你可以让他向dsp发送。
andy_ee
驱动牛犊
驱动牛犊
  • 注册日期2002-11-15
  • 最后登录2004-05-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-09-23 12:29
谢谢各位大侠的意见,因为我设置了email通知方式,但是却没有收到驱动网的邮件,所以以为没有任何回帖呢,耽误了及时的回应,对不起了。

大家说的关于usb只能被动响应请求,这个我也知道。我说的用一个interrupt pipe,本意是像ezusb例子中的那样在驱动里轮询中断,以便及时知道usb设备可以接受bulk数据,实际上这个interrupt in传输仅仅是作为一个通知信号,然后我在oninterrupt()里开始bulk传输。如果通过从ep0查询的话,也是要不断的重复发查询请求吧,而且时间上是不是不够及时啊?因为要下载给dsp的数据不像下载固件那样一次就完成了,而是需要不断的判断usb是否接受了这一批&是不是可以开始下一批的传输(在bulk管道进行的)。

初次搞usb驱动,可能问的不够专业不够清楚,请多包涵。并且又不是自己做硬件,固件也不是自己做。所以得先商量和固件的配合问题。希望大家明白我要说的意思并且继续提供建议,谢谢大家了!

usb都是被动的,好像不能向主机发送请求啊!
另外用ep0发送请求太慢了把!
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-09-23 12:59
如果不是实时传输是可行,比如,先传一批数据下去,运算后再读回到主机,在发一批数据下去,住一下传和上传不能同时进行,就算要同时进行也是时分复用的,也就是所只能读一次写一次而不能同时读写,因为usb电缆只有两个信号线,它不能可能同时传输双向数据的!
andy_ee
驱动牛犊
驱动牛犊
  • 注册日期2002-11-15
  • 最后登录2004-05-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-09-23 13:14
谢谢您的意见!
    其实上传运算结果的功能不是必须的(设备的主要功能是不断的从主机获得原始数据然后由dsp运算后转为模拟信号供给另一个信号处理机使用),只是暂时的设想,目前还不需要作实际的工作,更不用在dsp运算后就必须将结果取回来。
    这个贴我想弄明白的主要是:要满足dsp对数据的间歇性的但是大量的及时的需求,最可行的方法是不是设置一个中断端点使用中断轮询的策略?

然后就是第一个贴子后面的两个疑问:)

如果不是实时传输是可行,比如,先传一批数据下去,运算后再读回到主机,在发一批数据下去,住一下传和上传不能同时进行,就算要同时进行也是时分复用的,也就是所只能读一次写一次而不能同时读写,因为usb电缆只有两个信号线,它不能可能同时传输双向数据的!
andy_ee
驱动牛犊
驱动牛犊
  • 注册日期2002-11-15
  • 最后登录2004-05-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-09-24 16:07
唉,帖子这么快就跑到后面去了。

哪位大侠再说说吧,然后我就散分结贴了。

多多提携啊,拜托!

flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-09-24 16:19
相对于ISO方式,BULK传输是有CRC校验,从这方面说可以保证数据的正确性。如果你要上传和下传同时进行,一定要两个PIPE,但对传输的速率有影响。这里边中断是比较关键的,应该多多注意啊!
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-09-24 23:42
谢谢您的意见!
    其实上传运算结果的功能不是必须的(设备的主要功能是不断的从主机获得原始数据然后由dsp运算后转为模拟信号供给另一个信号处理机使用),只是暂时的设想,目前还不需要作实际的工作,更不用在dsp运算后就必须将结果取回来。
    这个贴我想弄明白的主要是:要满足dsp对数据的间歇性的但是大量的及时的需求,最可行的方法是不是设置一个中断端点使用中断轮询的策略?

然后就是第一个贴子后面的两个疑问:)

[quote]如果不是实时传输是可行,比如,先传一批数据下去,运算后再读回到主机,在发一批数据下去,住一下传和上传不能同时进行,就算要同时进行也是时分复用的,也就是所只能读一次写一次而不能同时读写,因为usb电缆只有两个信号线,它不能可能同时传输双向数据的!
[/quote]

如果偶而的数据错误对你影响不大,你可以考虑用ISO传输,这样数据流是连续的,否则可以用BULK 或INT传输,其中前着更快一些。
游客

返回顶部