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

[复制链接]
191|14
手机看帖
扫描二维码
随时随地手机跟帖
zyf部长|  楼主 | 2019-11-9 10:26 | 显示全部楼层 |阅读模式
控制传输一般只用来发送简单的命令,实际有时也可能用来发送,命令+若干数据的情况,所以我参考书上的例程改写了一下,下面就是PC机的程序,不过当数据长度是64字节时,下位机可以收到的,就是不知到如何再发一个64字节的数据包!

使用特权

评论回复
kangzj| | 2019-11-9 10:29 | 显示全部楼层
楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
zyf部长|  楼主 | 2019-11-9 10:34 | 显示全部楼层

完整程序
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部长|  楼主 | 2019-11-9 10:41 | 显示全部楼层
抓包数据,为什么会最后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| | 2019-11-9 10:43 | 显示全部楼层
抓包数据,为什么会最后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| | 2019-11-9 10:46 | 显示全部楼层
而且用现成的库有的时候会封装一些引脚的netlist,这样限制其他要跟它相连的引脚也要取默认的netlist名称

使用特权

评论回复
zyf部长|  楼主 | 2019-11-9 10:49 | 显示全部楼层
那我该怎么办?

使用特权

评论回复
llljh| | 2019-11-9 10:56 | 显示全部楼层
应该一个字节一个字节地主动由单片机控制接收,单片机收完一个字节再通知主机发下一个字节,否则主机就得死等。

使用特权

评论回复
pengf| | 2019-11-9 11:00 | 显示全部楼层

你现在一个循环下去就认为接收完毕了,这根本不可能获得正确数据,不是多了就少了。

使用特权

评论回复
supernan| | 2019-11-9 11:06 | 显示全部楼层
嗯,而且其中的延时也是毫无根据的,通讯要握手才行,而不是用延时拼凑出结果。

使用特权

评论回复
xxrs| | 2019-11-9 11:09 | 显示全部楼层
这样做,会对通讯过程失去控制。

使用特权

评论回复
houcs| | 2019-11-9 11:12 | 显示全部楼层
你研究一下Vend_ax例子,其中向单片机存储器下载数据的部分刚好适合你的应用。

使用特权

评论回复
liuzaiy| | 2019-11-9 11:16 | 显示全部楼层
初次使用ept->XferData(buf,buflen)这类语句,一定要注意返回值

使用特权

评论回复
yinxiangh| | 2019-11-9 11:18 | 显示全部楼层
嗯,如果得到不期望的结果,要给出提示。

使用特权

评论回复
zyf部长|  楼主 | 2019-11-9 11:23 | 显示全部楼层
搞定了,呵呵,犯了低级错误……结贴啦,多谢各位

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

694

主题

7102

帖子

8

粉丝