阅读:1655回复:13
厂商请求传输数据
大家好!
我通过索引号0471H数据传输,单片机接收PC的数据可以通过SETUP包后6个数据的第4、5位确定长度, 但要是我发数据给PC时,是不是也只有按这位来确定长度,也就是说一次传输的长度只能由主机确定,如果长度不够,就要补上,是吗?谢谢! |
|
沙发#
发布于:2004-04-20 12:44
应该有人做过吧,
请大家来讨论啊. 还想问:如果我要发多于64BYTE的数,我怎样得知第包完成呢 |
|
板凳#
发布于:2004-04-20 14:56
是由setup包里的wLength决定的,如果你设备方的数据量小于这个数,那么就是个不满包,驱动如实返回获得的数据
如果设备方的数据量大于这个数,那么只能传输wLength指定长度的数据,其它的不予传输。 一般情况下用vendor request传输数据,数据量时pc和固件约定好的,pc要多少数据,设备返回多少数据。 |
|
地板#
发布于:2004-04-20 14:58
你可以发mail给我,我们探讨一下,jinghuiren@163.com
这阵子我这边很忙,但我会尽量尽快回复您的。 |
|
地下室#
发布于:2004-04-21 08:57
谢jinghuiren,
再请教: 1.我的固件程序(AT89S52+BD12). 如我的端点2大小为64,我发完一包数据,接下去又要发一包,我怎样判断前一包发完呢?是不是可以在发送中断程序ep1_txdone()设一个标志位,主程序去检测这个标志就可以得知是不是发完了第一包呢?那是不是可以这样理解,只要判断有没有执行ep1_txdone()就可以知道前面那包数据完成了呢? 2.如果要发两包,中间是不是一定要等ep1_txdone()执行完了呢? 谢谢! |
|
5楼#
发布于:2004-04-22 08:53
大家来讨论啊!
厂商请求收发的数据长度由上位机指定,我觉得是不是不太合理,比如一次通讯,要发257个字节数,上位机指定每包64,所以要传5次,但最后一包实际上我只想传1个数,而用这方式,上位机并不知道我只要发1个,仍指定长度为64,这不是多发了63个吗? 不过有一种解决方法--加入握手协议:就是再第一包发给上位机的数据里指定一个数表示长度,那上位机就知道我总共要发多少数据给她了,并且可以知道什么时候结束? 我这种理解对吗?希望大家发意见,讨论上位机和下位机加入握手协议是如何做的. 谢谢! |
|
6楼#
发布于:2004-04-22 10:16
大家来讨论啊! 并不是你的端点大小为64就一定发送64字节,具体发送多少字节由你决定,只要不多于64字节就行了,如果你只发一个字节,HOST只会收到一个字节而不是64字节。 |
|
|
7楼#
发布于:2004-04-22 10:54
谢jinghuiren, 对的。 |
|
8楼#
发布于:2004-04-22 12:36
厂商请求收发的数据长度由上位机指定,我觉得是不是不太合理,比如一次通讯,要发257个字节数,上位机指定每包64,所以要传5次,但最后一包实际上我只想传1个数,而用这方式,上位机并不知道我只要发1个,仍指定长度为64,这不是多发了63个吗?
不过有一种解决方法--加入握手协议:就是再第一包发给上位机的数据里指定一个数表示长度,那上位机就知道我总共要发多少数据给她了,并且可以知道什么时候结束? 我这种理解对吗?希望大家发意见,讨论上位机和下位机加入握手协议是如何做的. 谢谢! 并不是你的端点大小为64就一定发送64字节,具体发送多少字节由你决定,只要不多于64字节就行了,如果你只发一个字节,HOST只会收到一个字节而不是64字节。 你说的也没错,但是如果是通过厂商请求,如果上位机指定长度是64,若下位机送1个字节,好像会出错,我是用D12TEST.EXE试的, 但如果不是通过厂商请求,如用USBDEBUG,则发几个数上位机能识别,则正确啊,不知这样理解对吗? |
|
9楼#
发布于:2004-04-22 12:43
jinghuiren,您好,我的邮件收到了吗,我用的是新浪的,也不知道能不能用,听说老出问题,我只有免费的邮箱,没办法.
我的QQ是:38379978,希望能和大家成为朋友 |
|
10楼#
发布于:2004-04-22 19:27
大家对这个问题不感兴趣吗?
|
|
11楼#
发布于:2004-04-22 21:27
最近很忙,没有及时回复给你,很抱歉
不但是厂商请求,其它的传输也一样,都是上位机要多少下面传多少,上面不要下面的数据就算烂在端点里也不会传到主机的! 如果你有一次只需要传一个字节,那你就写一个字节然后是端点生效就是了,这样上位机收到的就是个不满包,也可以成功返回的,我做的是2.0不知道1.1怎样,但2.0确实是可以成功返回的。 如果你的数据量不固定,那么可以考虑用int传输,发送一个int请求下去,如果一定时间内收不到数据就cancelio,然后过一段时间再查询。 |
|
12楼#
发布于:2004-04-23 08:40
jinghuiren
大侠,您好,你太客气了! 我用的是1.1,可能是我对协议还是不太理解吧,我再仔细看看, 但我用的是周立功提供的D12TEST.EXE,确实不行, 但用USBDEBUG.EXE却可以,上层软件我不知道,所以只能猜D12TEST是通过厂商请求的,USBDEBUG可能是通过中断来做的. |
|
13楼#
发布于:2004-04-23 11:28
那个d12test.exe程序的源代码网上是有的,你可以搞一个来看看,说不定会有启发。
|
|