不知到如何再发一个64字节的数据包
控制传输一般只用来发送简单的命令,实际有时也可能用来发送,命令+若干数据的情况,所以我参考书上的例程改写了一下,下面就是PC机的程序,不过当数据长度是64字节时,下位机可以收到的,就是不知到如何再发一个64字节的数据包!楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因
完整程序
PC机端程序:
ept->Target = TGT_DEVICE;//固定用法
ept->ReqType = REQ_VENDOR; //自定义请求
ept->Direction = DIR_TO_DEVICE; //方向 主机->设备
ept->ReqCode = 0xBD;//自定义请求码
ept->Value = 0;
ept->Index = 0;
PUCHAR buf=new UCHAR;
ZeroMemory(buf, 64);
LONG buflen =64;
memset(buf,0x5a,buflen);
//buf=0xbd;
ept->XferData(buf,buflen);//发送数据0x5a
ZeroMemory(buf, buflen);
memset(buf,0x6a,buflen);
ept->XferData(buf,buflen);//发送数据0x6a
下位机程序:
BOOL DR_CONTRLTEST(void)
{
unsigned int i;
for(i=0;i<128;i++)
{
SendByte(EP0BUF);//通过串口返回USB接收的数据
EZUSB_Delay(10);
}
EP0BCH=0;
EP0BCL=128;
EP0CS |= bmHSNAK;
return(TRUE);
}
串口调试助手显示的返回结果:
6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A 6A CF BB D9 FF 97 7F 78 C7 EF DF 6F EF FF EF DF CF BD EE 0D A7 FD F7 FF 8F BF F7 EE BB FB EB 7F 3F 76 39 AB B6 77 F2 FB CF 61 7F 51 F5 7E EE FF 34 BD DF F7 F5 9F BF DF FF AB 33 FA 7F BF 9E CB B7 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A 5A CF BB D9 FF 97 7F 78 C7 EF DF 6F EF FF EF DF CF BD EE 0D A7 FD F7 FF 8F BF F7 EE BB FB EB 7F 3F 76 39 AB B6 77 F2 FB CF 61 7F 51 F5 7E EE FF 34 BD DF F7 F5 9F BF DF FF AB 33 FA 7F BF 9E CB B7
不知道为什么,先发的是0x5a,后发0x6a。这里怎么先显示ox6a呢? 抓包数据,为什么会最后canceled
DevPhaseData Info Time Cmd.Phase.Ofs
-------------------------------------------------------
21USTS 00 00 01 c0canceled 4us 2.3.0
21CTL 40 bd 00 00VENDOR 4.5sc 3.1.0
00 00 80 00 3.1.4
21DO 5a 5a 5a 5aZZZZ 9.9sc 3.2.0
5a 5a 5a 5aZZZZ 3.2.4
5a 5a 5a 5aZZZZ 3.2.8
5a 5a 5a 5aZZZZ 3.2.12
5a 5a 5a 5aZZZZ 3.2.16
5a 5a 5a 5aZZZZ 3.2.20
5a 5a 5a 5aZZZZ 3.2.24
5a 5a 5a 5aZZZZ 3.2.28
21USTS 00 00 01 c0canceled 4us 3.3.0 抓包数据,为什么会最后canceled
DevPhaseData Info Time Cmd.Phase.Ofs
-------------------------------------------------------
21USTS 00 00 01 c0canceled 4us 2.3.0
21CTL 40 bd 00 00VENDOR 4.5sc 3.1.0
00 00 80 00 3.1.4
21DO 5a 5a 5a 5aZZZZ 9.9sc 3.2.0
5a 5a 5a 5aZZZZ 3.2.4
5a 5a 5a 5aZZZZ 3.2.8
5a 5a 5a 5aZZZZ 3.2.12
5a 5a 5a 5aZZZZ 3.2.16
5a 5a 5a 5aZZZZ 3.2.20
5a 5a 5a 5aZZZZ 3.2.24
5a 5a 5a 5aZZZZ 3.2.28
21USTS 00 00 01 c0canceled 4us 3.3.0 而且用现成的库有的时候会封装一些引脚的netlist,这样限制其他要跟它相连的引脚也要取默认的netlist名称
那我该怎么办?
应该一个字节一个字节地主动由单片机控制接收,单片机收完一个字节再通知主机发下一个字节,否则主机就得死等。
你现在一个循环下去就认为接收完毕了,这根本不可能获得正确数据,不是多了就少了。
嗯,而且其中的延时也是毫无根据的,通讯要握手才行,而不是用延时拼凑出结果。
这样做,会对通讯过程失去控制。
你研究一下Vend_ax例子,其中向单片机存储器下载数据的部分刚好适合你的应用。
初次使用ept->XferData(buf,buflen)这类语句,一定要注意返回值
嗯,如果得到不期望的结果,要给出提示。
搞定了,呵呵,犯了低级错误……结贴啦,多谢各位
		页: 
[1]