調(diào)試時 U盤的 設備描述符 可以讀出 鍵盤 鼠標的 設備描述符 讀不出 請高手指點下
U盤 攝像頭的 設備描述符 都可以讀出
使375進入低速模式 和不設置有沒有關系
如果是使375B進入低速模式 就查詢不到中斷了
操作鼠標鍵盤 要將CH375切換到低速模式,設備連接之后 D-應該在3.3V左右,D+在0V左右。
恩 謝謝!
但是還是讀取不到數(shù)據(jù)
搜索帖子: 常用USB源程序下載 時間選擇所有時間 里面有CH375操作鼠標鍵盤的程序,可以參考一下。 注意時序,延時函數(shù)根據(jù)硬件修改。
好的 謝謝!
// 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協(xié)議中有說明,最好先把這個規(guī)范看一下
恩 好的 謝謝
為什么 鼠標可以讀到數(shù)據(jù) 鍵盤不能 并且返回的數(shù)據(jù)也不對 請高手指點
哪一步獲取不到數(shù)據(jù),請說清楚一點呢!枚舉部分成功沒有
枚舉部分可以
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()); }