调试时 U盘的 设备描述符 可以读出 键盘 鼠标的 设备描述符 读不出 请高手指点下
U盘 摄像头的 设备描述符 都可以读出
使375进入低速模式 和不设置有没有关系
如果是使375B进入低速模式 就查询不到中断了
操作鼠标键盘 要将CH375切换到低速模式,设备连接之后 D-应该在3.3V左右,D+在0V左右。
恩 谢谢!
但是还是读取不到数据
搜索帖子: 常用USB源程序下载 时间选择所有时间 里面有CH375操作鼠标键盘的程序,可以参考一下。 注意时序,延时函数根据硬件修改。
好的 谢谢!
// get_descr(0x01);//获取设备描述符 // printf("device\n"); 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) { for(i=0;i!=data_buf[0];i++) printf("%02x ",(unsigned int)data_buf); printf("\n"); } else printf("get device descr failed\n");
set_addr(5);//设置地址
// get_descr(0x02);//获取配置描述符 printf("config\n"); Request.Req.bmRequestType=0x80; Request.Req.bRequest=0x06; Request.Req.wValue=0x0002; Request.Req.wIndex=0x0000; Request.Req.wLength=0x0900; if(get_descr_ex()==1) { for(i=0;i!=data_buf[0];i++) printf("%02x ",(unsigned int)data_buf); printf("\n"); if(data_buf[4]!=0x01)flag_interface_2=1;//有多个接口 } else printf("get config descr failed\n");
printf("config 2\n"); if(data_buf[2]>0x09) { flag_config_2=1; Request.Req.bmRequestType=0x80; Request.Req.bRequest=0x06; Request.Req.wValue=0x0002; Request.Req.wIndex=0x0000; Request.Req.wLength=0x0000|((unsigned int)data_buf[2]<<8); if(get_descr_ex()==1) { for(i=0;i!=data_buf[2];i++) printf("%02x ",(unsigned int)data_buf); printf("\n"); flag_config_2=0; } else printf("get device descr again failed\n"); }
程序中的
Request.Req.bmRequestType=0x80; Request.Req.bRequest=0x06; Request.Req.wValue=0x0001; Request.Req.wIndex=0x0000; Request.Req.wLength=0x1200;
是什么意思
程序中的
Request.Req.bmRequestType=0x80; Request.Req.bRequest=0x06; Request.Req.wValue=0x0001; Request.Req.wIndex=0x0000; Request.Req.wLength=0x1200;
是什么意思
程序中的
Request.Req.bmRequestType=0x80; Request.Req.bRequest=0x06; Request.Req.wValue=0x0002; Request.Req.wIndex=0x0000; Request.Req.wLength=0x0900;
是什么意思
这是USB标准请求,获取配置描述符,在USB1.1协议中有说明,最好先把这个规范看一下
恩 好的 谢谢
为什么 鼠标可以读到数据 键盘不能 并且返回的数据也不对 请高手指点
哪一步获取不到数据,请说清楚一点呢!枚举部分成功没有
枚举部分可以
unsigned char get_int_in() { tog ? toggle_recv1(0xc0) : toggle_recv1(0x80); issue_token(( endp_int << 4 ) | DEF_USB_PID_IN); endp = endp_int; return (wait_interrupt()); } unsigned char get_int_in1() { tog1 ? toggle_recv1(0xc0) : toggle_recv1(0x80); issue_token(( endp_int1 << 4 ) | DEF_USB_PID_IN); endp = endp_int1; return (wait_interrupt()); }