CH376手动获取设备描述符返回数据异常
u8 length;
u8 i;

#define AUTO

#ifndef    AUTO
    //自动获取
    xWriteCH376Cmd(CMD1H_GET_DESCR); //0x46
    xWriteCH376Data(1);
    xEndCH376Cmd();
#else
    // 手动传输
    xWriteCH376Cmd(CMD10_WR_USB_DATA7); //0x2B
    xWriteCH376Data(0x08); //写入数据长度

    xWriteCH376Data(0x80); // bmRequestType 主机向设备发送
    xWriteCH376Data(0x06); // bRequest GET_DESCRIPTOR
    xWriteCH376Data(0x00); // wValueL 
    xWriteCH376Data(0x01); // wValueH
    xWriteCH376Data(0x00); // wIndexL
    xWriteCH376Data(0x00); // wIndexH
    xWriteCH376Data(0x12); // wLengthL
    xWriteCH376Data(0x00); // wLengthH

    xWriteCH376Cmd(CMD2H_ISSUE_TKN_X); //0x4E
    xWriteCH376Data(0x00); // 同步标志
    xWriteCH376Data(0x0D); // 发起控制传输
#endif


if(Wait376Interrupt() == USB_INT_SUCCESS)
{
    xWriteCH376Cmd(CMD01_RD_USB_DATA); //0x28
    length = xReadCH376Data();
    printf("length = %.2x\n", length);
    for(i=0; i < length; ++i)
    {
        printf("%.2x ", xReadCH376Data());
    }
    printf("\n");
    xEndCH376Cmd();
}


使用CMD1H_GET_DESCR指令获取设备描述符正确获取了设备描述符。


但尝试使用控制传输手动获取时,出现了异常,返回的数据长度为0x7E(十进制126),并且可以读出长度为0x7E的垃圾数据。

根据手册,RD_USB_DATA返回的数据块长度的有效值是0~64。


USART与SPI连接模式都有此问题。


什么原因导致响应数据异常?请各位大佬解惑。



您好,看您的这个代码,不知道您是否为1字节1字节的发送的?(主要不清楚您xWrite376Data函数)。您可以发送邮件至mj@wch.cn。这边可以给您提供376手动拼包的例程。


只有登录才能回复,可以选择微信账号登录