ajinalong
驱动牛犊
驱动牛犊
  • 注册日期2004-03-08
  • 最后登录2005-12-23
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1655回复:13

厂商请求传输数据

楼主#
更多 发布于:2004-04-20 08:52
大家好!
我通过索引号0471H数据传输,单片机接收PC的数据可以通过SETUP包后6个数据的第4、5位确定长度,
但要是我发数据给PC时,是不是也只有按这位来确定长度,也就是说一次传输的长度只能由主机确定,如果长度不够,就要补上,是吗?谢谢!
ajinalong
驱动牛犊
驱动牛犊
  • 注册日期2004-03-08
  • 最后登录2005-12-23
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-04-20 12:44
应该有人做过吧,
请大家来讨论啊.
还想问:如果我要发多于64BYTE的数,我怎样得知第包完成呢
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-04-20 14:56
是由setup包里的wLength决定的,如果你设备方的数据量小于这个数,那么就是个不满包,驱动如实返回获得的数据
如果设备方的数据量大于这个数,那么只能传输wLength指定长度的数据,其它的不予传输。

一般情况下用vendor request传输数据,数据量时pc和固件约定好的,pc要多少数据,设备返回多少数据。
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-04-20 14:58
你可以发mail给我,我们探讨一下,jinghuiren@163.com
这阵子我这边很忙,但我会尽量尽快回复您的。
ajinalong
驱动牛犊
驱动牛犊
  • 注册日期2004-03-08
  • 最后登录2005-12-23
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-04-21 08:57
谢jinghuiren,
再请教:
1.我的固件程序(AT89S52+BD12).
如我的端点2大小为64,我发完一包数据,接下去又要发一包,我怎样判断前一包发完呢?是不是可以在发送中断程序ep1_txdone()设一个标志位,主程序去检测这个标志就可以得知是不是发完了第一包呢?那是不是可以这样理解,只要判断有没有执行ep1_txdone()就可以知道前面那包数据完成了呢?
2.如果要发两包,中间是不是一定要等ep1_txdone()执行完了呢?
谢谢!
ajinalong
驱动牛犊
驱动牛犊
  • 注册日期2004-03-08
  • 最后登录2005-12-23
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-04-22 08:53
大家来讨论啊!
厂商请求收发的数据长度由上位机指定,我觉得是不是不太合理,比如一次通讯,要发257个字节数,上位机指定每包64,所以要传5次,但最后一包实际上我只想传1个数,而用这方式,上位机并不知道我只要发1个,仍指定长度为64,这不是多发了63个吗?
不过有一种解决方法--加入握手协议:就是再第一包发给上位机的数据里指定一个数表示长度,那上位机就知道我总共要发多少数据给她了,并且可以知道什么时候结束?
我这种理解对吗?希望大家发意见,讨论上位机和下位机加入握手协议是如何做的.
谢谢!
dragon_hn
驱动中牛
驱动中牛
  • 注册日期2002-05-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分297分
  • 威望40点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-04-22 10:16
大家来讨论啊!
厂商请求收发的数据长度由上位机指定,我觉得是不是不太合理,比如一次通讯,要发257个字节数,上位机指定每包64,所以要传5次,但最后一包实际上我只想传1个数,而用这方式,上位机并不知道我只要发1个,仍指定长度为64,这不是多发了63个吗?
不过有一种解决方法--加入握手协议:就是再第一包发给上位机的数据里指定一个数表示长度,那上位机就知道我总共要发多少数据给她了,并且可以知道什么时候结束?
我这种理解对吗?希望大家发意见,讨论上位机和下位机加入握手协议是如何做的.
谢谢!

并不是你的端点大小为64就一定发送64字节,具体发送多少字节由你决定,只要不多于64字节就行了,如果你只发一个字节,HOST只会收到一个字节而不是64字节。
www.dragon-2008.com 欢迎交流
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-04-22 10:54
谢jinghuiren,
再请教:
1.我的固件程序(AT89S52+BD12).
如我的端点2大小为64,我发完一包数据,接下去又要发一包,我怎样判断前一包发完呢?是不是可以在发送中断程序ep1_txdone()设一个标志位,主程序去检测这个标志就可以得知是不是发完了第一包呢?那是不是可以这样理解,只要判断有没有执行ep1_txdone()就可以知道前面那包数据完成了呢?
2.如果要发两包,中间是不是一定要等ep1_txdone()执行完了呢?
谢谢!


对的。
ajinalong
驱动牛犊
驱动牛犊
  • 注册日期2004-03-08
  • 最后登录2005-12-23
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-04-22 12:36
厂商请求收发的数据长度由上位机指定,我觉得是不是不太合理,比如一次通讯,要发257个字节数,上位机指定每包64,所以要传5次,但最后一包实际上我只想传1个数,而用这方式,上位机并不知道我只要发1个,仍指定长度为64,这不是多发了63个吗?
不过有一种解决方法--加入握手协议:就是再第一包发给上位机的数据里指定一个数表示长度,那上位机就知道我总共要发多少数据给她了,并且可以知道什么时候结束?
我这种理解对吗?希望大家发意见,讨论上位机和下位机加入握手协议是如何做的.
谢谢!


并不是你的端点大小为64就一定发送64字节,具体发送多少字节由你决定,只要不多于64字节就行了,如果你只发一个字节,HOST只会收到一个字节而不是64字节。


你说的也没错,但是如果是通过厂商请求,如果上位机指定长度是64,若下位机送1个字节,好像会出错,我是用D12TEST.EXE试的,
但如果不是通过厂商请求,如用USBDEBUG,则发几个数上位机能识别,则正确啊,不知这样理解对吗?
ajinalong
驱动牛犊
驱动牛犊
  • 注册日期2004-03-08
  • 最后登录2005-12-23
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-04-22 12:43
jinghuiren,您好,我的邮件收到了吗,我用的是新浪的,也不知道能不能用,听说老出问题,我只有免费的邮箱,没办法.
我的QQ是:38379978,希望能和大家成为朋友
ajinalong
驱动牛犊
驱动牛犊
  • 注册日期2004-03-08
  • 最后登录2005-12-23
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-04-22 19:27
大家对这个问题不感兴趣吗?
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-04-22 21:27
最近很忙,没有及时回复给你,很抱歉
不但是厂商请求,其它的传输也一样,都是上位机要多少下面传多少,上面不要下面的数据就算烂在端点里也不会传到主机的!
如果你有一次只需要传一个字节,那你就写一个字节然后是端点生效就是了,这样上位机收到的就是个不满包,也可以成功返回的,我做的是2.0不知道1.1怎样,但2.0确实是可以成功返回的。

如果你的数据量不固定,那么可以考虑用int传输,发送一个int请求下去,如果一定时间内收不到数据就cancelio,然后过一段时间再查询。
ajinalong
驱动牛犊
驱动牛犊
  • 注册日期2004-03-08
  • 最后登录2005-12-23
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-04-23 08:40
jinghuiren
大侠,您好,你太客气了!
我用的是1.1,可能是我对协议还是不太理解吧,我再仔细看看,
但我用的是周立功提供的D12TEST.EXE,确实不行,
但用USBDEBUG.EXE却可以,上层软件我不知道,所以只能猜D12TEST是通过厂商请求的,USBDEBUG可能是通过中断来做的.
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-04-23 11:28
那个d12test.exe程序的源代码网上是有的,你可以搞一个来看看,说不定会有启发。
游客

返回顶部