WCH沁恒单片机
直播中

王磊

7年用户 1517经验值
私信 关注
[问答]

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 = %.2xn", 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)

陈萌

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

更多回帖

发帖
×
20
完善资料,
赚取积分