usb键盘实现

我是一个超级菜鸟,谁知道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命令。


恩 谢谢!


为什么 鼠标可以读到数据 键盘读不到 并且返回的数据也不对

请指点


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