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连接模式都有此问题。
什么原因导致响应数据异常?请各位大佬解惑。
热门产品 :
CH394: 以太网协议栈芯片