我是一个超级菜鸟,谁知道usb键盘的工作原理或流程,谢谢回复
USB键盘是一个低速设备,HID类设备,(查看相关协议)数据上传通过中断端点,数据格式是在上传的REPORT描述符,内定义的.使用CH372做USB键盘:使用CH372的外部固件模式,在接收到PC机的,获取描设备述符,获取描配置述符,获取描REPORT述符,SET_REPORT等请求后,返回相应的描述符,之后通过端点1上传键值.
// 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;
是什么意思
想知道这个是什么意思,请查看USB协议。 这个是获取设备描述符的Set_Up命令。
恩 谢谢!
为什么 鼠标可以读到数据 键盘读不到 并且返回的数据也不对
请指点