读设备描述符的问题

为什么 我发送

0x01

0x80, 0x06, 0x00, 0x01, 0x00, 0x00, 0x12, 0x00

都能得到设备描述符呢

请详细说明你的用法。


直接贴程序吧

/*================== 获取设备描述符 ==================*/ unsigned char Get_Device_Descr(void) { xWriteCH375Cmd(CMD_GET_DESCR); xWriteCH375Data(0x01); //*******写O1********* if(wait_interrupt() != USB_INT_SUCCESS)return FALSE; RD_USB_DATA(Device_buf); return TRUE; } /*================= 读USB数据 =================*/ unsigned char RD_USB_DATA(unsigned char *temp) { unsigned char len; unsigned char i; xWriteCH375Cmd(CMD_RD_USB_DATA); len = xReadCH375Data(); for ( i=0; i!=len; i++ ) *temp++ = xReadCH375Data(); return len; }

// 获取设备描述符 unsigned char SetupGetDevDescr[] = { 0x80, 0x06, 0x00, 0x01, 0x00, 0x00, 0x12, 0x00 }

UINT8 Get_Dev_Descr( ) { UINT8 descr_len; UINT8 *p=data_buf; send_mode=0x00; WR_USB_DATA(8,SetupGetDevDescr);

issue_token(send_mode,( 0 << 4 ) | DEF_USB_PID_SETUP);status=wait_interrupt(); if(status==USB_INT_SUCCESS) //SETUP阶段操作成功 { receive_mode=0x80; } else return(0);

issue_token(receive_mode,( 0 << 4 ) | DEF_USB_PID_IN);status=wait_interrupt(); if(status==USB_INT_SUCCESS) //DATA阶段操作成功 { descr_len=data_buf[0]-RD_USB_DATA(data_buf); while(descr_len>0) { receive_mode ^= 0x80; p+=0x08; issue_token(receive_mode,( 0 << 4 ) | DEF_USB_PID_IN);status=wait_interrupt(); if(status==USB_INT_SUCCESS) //DATA阶段操作成功 descr_len-=RD_USB_DATA(p); else return(0); } } else return(0);

send_mode=0x40; WR_USB_DATA(0,SetupGetDevDescr); issue_token(send_mode,( 0 << 4 ) | DEF_USB_PID_OUT);status=wait_interrupt(); if(status==USB_INT_SUCCESS) //状态阶段操作成功 return(1); else return(0); }

结果是一样的,不明白上面的为什么那么简单, 换成0x02就是配置描述符了


上面是一样的。当然可以获取。 建议你用复杂的方法。这样更灵活。


/*=================== 向ch375写数据 ===================*/ void xWriteCH375Data( unsigned char mData ) /* 外部定义的被CH375程序库调用的子程序,向CH375写数据 */ { mDelay1_2uS();mDelay1_2uS(); DATA_OUT; DATA_OUT_VAL = mData; /* 向CH375的并口输出数据 */ CH375_A0_0; CH375_CS_0; CH375_WR_0; /* 输出有效写控制信号, 写CH375芯片的数据端口 */ CH375_CS_0; /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS */ CH375_WR_1; /* 输出无效的控制信号, 完成操作CH375芯片 */ CH375_CS_1; DATA_IN; /* 禁止数据输出 */ mDelay1_2uS(); /* 至少延时1.2uS */ }

上面的xWriteCH375Data(0x01)只写了一个数据 下面的WR_USB_DATA(8,SetupGetDevDescr);一口气写了八个数据哦。


是可以这样做的。你写个子函数调用就可以了。


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