不知到如何再发一个64字节的数据包

[复制链接]
743|14
 楼主| zyf部长 发表于 2018-6-13 16:46 | 显示全部楼层 |阅读模式
控制传输一般只用来发送简单的命令,实际有时也可能用来发送,命令+若干数据的情况,所以我参考书上的例程改写了一下,下面就是PC机的程序,不过当数据长度是64字节时,下位机可以收到的,就是不知到如何再发一个64字节的数据包!
kangzj 发表于 2018-6-13 16:55 | 显示全部楼层

楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因
 楼主| zyf部长 发表于 2018-6-13 17:00 | 显示全部楼层

完整程序
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呢?
 楼主| zyf部长 发表于 2018-6-13 17:03 | 显示全部楼层
抓包数据,为什么会最后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
juventus9554 发表于 2018-6-13 17:05 | 显示全部楼层
抓包数据,为什么会最后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
juventus9554 发表于 2018-6-13 17:05 | 显示全部楼层
而且用现成的库有的时候会封装一些引脚的netlist,这样限制其他要跟它相连的引脚也要取默认的netlist名称
 楼主| zyf部长 发表于 2018-6-13 17:11 | 显示全部楼层
那我该怎么办?
llljh 发表于 2018-6-13 17:14 | 显示全部楼层
应该一个字节一个字节地主动由单片机控制接收,单片机收完一个字节再通知主机发下一个字节,否则主机就得死等。
pengf 发表于 2018-6-13 17:17 | 显示全部楼层
你现在一个循环下去就认为接收完毕了,这根本不可能获得正确数据,不是多了就少了。
supernan 发表于 2018-6-13 17:22 | 显示全部楼层
嗯,而且其中的延时也是毫无根据的,通讯要握手才行,而不是用延时拼凑出结果。
xxrs 发表于 2018-6-13 17:25 | 显示全部楼层
这样做,会对通讯过程失去控制。
houcs 发表于 2018-6-13 17:30 | 显示全部楼层
你研究一下Vend_ax例子,其中向单片机存储器下载数据的部分刚好适合你的应用。
liuzaiy 发表于 2018-6-13 17:32 | 显示全部楼层
初次使用ept->XferData(buf,buflen)这类语句,一定要注意返回值
yinxiangh 发表于 2018-6-13 17:34 | 显示全部楼层
嗯,如果得到不期望的结果,要给出提示。
 楼主| zyf部长 发表于 2018-6-13 17:38 | 显示全部楼层

搞定了,呵呵,犯了低级错误……结贴啦,多谢各位
您需要登录后才可以回帖 登录 | 注册

本版积分规则

694

主题

7102

帖子

8

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