读取设备描述符

unsigned char get_descr_ex() { unsigned char descr_len; unsigned char *p=data_buf; endp7_mode=0x80;//unsigned char endp6_mode=0x80, endp7_mode=0x80;//同步标志位初值 toggle_send(); wr_usb_data(8,Request.Req_buf);

issue_token(( 0 << 4 ) | DEF_USB_PID_SETUP);

status=wait_interrupt(); if(status==USB_INT_SUCCESS)/* SETUP阶段操作成功 */ { endp6_mode=0xc0; toggle_recv(); } else return(0); issue_token(( 0 << 4 ) | DEF_USB_PID_IN);status=wait_interrupt(); if(status==USB_INT_SUCCESS)/* DATA阶段操作成功 */ { if(flag_config_2)descr_len=data_buf[2]-rd_usb_data(data_buf); else descr_len=data_buf[0]-rd_usb_data(data_buf); while(descr_len>0) { toggle_recv(); p+=0x08; issue_token(( 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); endp7_mode=0xc0; toggle_send(); wr_usb_data(0,Request.Req_buf); issue_token(( 0 << 4 ) | DEF_USB_PID_OUT);status=wait_interrupt(); if(status==USB_INT_SUCCESS)/* 状态阶段操作成功 */ return(1); else return(0); }

wr_usb_data(8,Request.Req_buf);的作用是什么 控制传输分为SETUP,DATA,状态阶段,wr_usb_data(8,Request.Req_buf);的作用貌似是 SETUP阶段发送的8字节的请求命令,但它为什么会在 issue_token(( 0 << 4 ) | DEF_USB_PID_SETUP); 之前,命令包应该是紧接着SETUP包发出去的才对啊,而且 wr_usb_data(8,Request.Req_buf);中Request.Req_buf的值没有初始化,发送的是什么命令呢

作用是获取设备描述符 Request.Req_buf的值有初始化值,在主函数中 : Request.Req.bmRequestType=0x80; Request.Req.bRequest=0x06; Request.Req.wValue=0x0001; Request.Req.wIndex=0x0000; Request.Req.wLength=0x1200; if(get_descr_ex()==1) wr_usb_data(8,Request.Req_buf)是把数据写到CH375的缓冲区,SETUP成功执行,保证控制命令正确发出,如果先执行SETUP命令,CH375紧接着发命令,而这时候缓冲区又不是命令.所以导致命令错误. wr_usb_data(8,Request.Req_buf)只是把数据写到375中,并没有传输到设备的端点中


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