64字节的数据包

[复制链接]
1785|15
 楼主| llia 发表于 2015-4-17 20:15 | 显示全部楼层 |阅读模式
控制传输一般只用来发送简单的命令,实际有时也可能用来发送,命令+若干数据的情况,所以我参考书上的例程改写了一下,下面就是PC机的程序,不过当数据长度是64字节时,下位机可以收到的,就是不知到如何再发一个64字节的数据包!
 楼主| llia 发表于 2015-4-17 20:15 | 显示全部楼层
完整程序
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[64];
     ZeroMemory(buf, 64);
     LONG buflen =  64;
        memset(buf,0x5a,buflen);
         //buf[0]=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呢?
 楼主| llia 发表于 2015-4-17 20:15 | 显示全部楼层

抓包数据,为什么会最后canceled
Dev  Phase  Data         Info           Time   Cmd.Phase.Ofs     
---  -----  -----------  -------------  -----  ------------------
21  USTS   00 00 01 c0  canceled         4us         2.3.0        
21  CTL    40 bd 00 00  VENDOR         4.5sc         3.1.0        
             00 00 80 00                               3.1.4        
21  DO     5a 5a 5a 5a  ZZZZ           9.9sc         3.2.0        
             5a 5a 5a 5a  ZZZZ                         3.2.4        
             5a 5a 5a 5a  ZZZZ                         3.2.8        
             5a 5a 5a 5a  ZZZZ                         3.2.12      
            5a 5a 5a 5a  ZZZZ                         3.2.16      
            5a 5a 5a 5a  ZZZZ                         3.2.20      
            5a 5a 5a 5a  ZZZZ                         3.2.24      
            5a 5a 5a 5a  ZZZZ                         3.2.28      
21  USTS   00 00 01 c0  canceled         4us         3.3.0
wangpe 发表于 2015-4-17 20:15 | 显示全部楼层

抓包数据,为什么会最后canceled
Dev  Phase  Data         Info           Time   Cmd.Phase.Ofs     
---  -----  -----------  -------------  -----  ------------------
21  USTS   00 00 01 c0  canceled         4us         2.3.0        
21  CTL    40 bd 00 00  VENDOR         4.5sc         3.1.0        
             00 00 80 00                               3.1.4        
21  DO     5a 5a 5a 5a  ZZZZ           9.9sc         3.2.0        
             5a 5a 5a 5a  ZZZZ                         3.2.4        
             5a 5a 5a 5a  ZZZZ                         3.2.8        
             5a 5a 5a 5a  ZZZZ                         3.2.12      
            5a 5a 5a 5a  ZZZZ                         3.2.16      
            5a 5a 5a 5a  ZZZZ                         3.2.20      
            5a 5a 5a 5a  ZZZZ                         3.2.24      
            5a 5a 5a 5a  ZZZZ                         3.2.28      
21  USTS   00 00 01 c0  canceled         4us         3.3.0
 楼主| llia 发表于 2015-4-17 20:16 | 显示全部楼层
那我该怎么办?
langgq 发表于 2015-4-17 20:16 | 显示全部楼层
应该一个字节一个字节地主动由单片机控制接收,单片机收完一个字节再通知主机发下一个字节,否则主机就得死等。
wangzsa 发表于 2015-4-17 20:16 | 显示全部楼层
你现在一个循环下去就认为接收完毕了,这根本不可能获得正确数据,不是多了就少了。
zhuww 发表于 2015-4-17 20:16 | 显示全部楼层
嗯,而且其中的延时也是毫无根据的,通讯要握手才行,而不是用延时拼凑出结果。
zhanglli 发表于 2015-4-17 20:17 | 显示全部楼层
这样做,会对通讯过程失去控制。
lium 发表于 2015-4-17 20:17 | 显示全部楼层
你研究一下Vend_ax例子,其中向单片机存储器下载数据的部分刚好适合你的应用。
guoyt 发表于 2015-4-17 20:17 | 显示全部楼层
初次使用ept->XferData(buf,buflen)这类语句,一定要注意返回值
hanwe 发表于 2015-4-17 20:17 | 显示全部楼层
嗯,如果得到不期望的结果,要给出提示。
 楼主| llia 发表于 2015-4-17 20:17 | 显示全部楼层
嗯,多谢大家
 楼主| llia 发表于 2015-4-17 20:17 | 显示全部楼层
结贴了,晚安啦~~~
camon2 发表于 2015-4-20 12:38 | 显示全部楼层
学习了,谢谢
zb0830 发表于 2015-4-20 14:13 | 显示全部楼层
不错,顶下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

961

主题

8893

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部