CH375B操作USB鍵盤的問題

我用的AVR mega128 用本論壇51單片機(jī)那個程序改編的 但是插上鍵盤過后 中斷引腳始終是高 接收不到任何東西 不知道問題出在哪里? 請高手幫忙啊 在線等.... 做了好幾天了 還沒搞定 我的程序如下UploadImages/2010111820541561.txtUploadImages/201011239263668.txt

我重新將我的程序發(fā)上來了 我不太清楚怎么樣才算初始化完成

出錯的開始是從獲取設(shè)備描述符的數(shù)據(jù)階段的中斷狀態(tài)值 返回為0x2e 本來應(yīng)該為0X14才能 unsigned char get_descr_ex() { unsigned char descr_len; unsigned char *p=data_buf; endp7_mode=0x80; toggle_send(); wr_usb_data(8,Request.Req_buf); issue_token(( 0 << 4 ) | DEF_USB_PID_SETUP); status=wait_interrupt();//printf("SETUP USB_INT_SUCCESS\n");

//此處獲取到的狀態(tài)值為2e 所以下面不能執(zhí)行

if(status==USB_INT_SUCCESS)/* SETUP階段操作成功 */ { endp6_mode=0xc0; toggle_recv(); printf("SETUP USB_INT_SUCCESS\n"); } else {return(0);//printf("SETUP USB_INT_fail\n"); } issue_token(( 0 << 4 ) | DEF_USB_PID_IN);status=wait_interrupt(); if(status==USB_INT_SUCCESS)/* DATA階段操作成功 */ { printf("data USB_INT_SUCCESS\n"); 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);//printf("data USB_INT_fail\n"); 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)/* 狀態(tài)階段操作成功 */ {return(1); //printf("SETUP USB_INT_SUCCESS\n"); } else return(0); } [font=黑體]文字[/font][b]文字[/b][font=宋體]文字[/font]

status=wait_interrupt();//printf("SETUP USB_INT_SUCCESS\n");

//此處獲取到的狀態(tài)值為2e 所以下面不能執(zhí)行

if(status==USB_INT_SUCCESS)/* SETUP階段操作成功 */

前面時對的 請問怎么解決 ?

我按每個按鍵都沒有反應(yīng) 不能得到鍵值 但有一個鍵盤能點亮燈

都沒人回答?、太不給力了


你這么晚發(fā)帖,要等我們上班才能回復(fù) 你的現(xiàn)象是CH375沒有被初始化成功。說明時序或者硬件有問題。 請做測試命令。CHECK_EXIST命令。詳細(xì)參考CH375DS1


哦 你好 現(xiàn)在的問題是 鼠標(biāo)能夠讀到碼 也就是點左鍵右鍵滾輪移動都可以返回鍵值 但是插鍵盤就不行 有一個鍵盤的NUM燈能點亮但按鍵沒有反應(yīng) 收不到碼值 而另外的一個則燈不亮 一直不斷的受到一個值 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 。。。。。。。。 這是什么原因 兩個鍵盤插電腦都可以用 為什么現(xiàn)象不一樣呢 而且描述符和配置符獲取也是錯誤的


首先普通的按鍵能否收到?還有點燈的話是需要發(fā)送控制傳輸?shù)腟ET-REPORT的請求。還有就是你前面對鍵盤的初始化都完成了嗎?還有不能獲取鍵值的鍵盤哪個步驟是否未完成?


那你的程序在哪一步返回的錯誤?


我重新將我的程序發(fā)上來了 我不太清楚怎么樣才算初始化完成

出錯的開始是從獲取設(shè)備描述符的數(shù)據(jù)階段的中斷狀態(tài)值 返回為0x2e 本來應(yīng)該為0X14才能 unsigned char get_descr_ex() { unsigned char descr_len; unsigned char *p=data_buf; endp7_mode=0x80; toggle_send(); wr_usb_data(8,Request.Req_buf);

issue_token(( 0 << 4 ) | DEF_USB_PID_SETUP); status=wait_interrupt();//printf("SETUP USB_INT_SUCCESS\n");

//此處獲取到的狀態(tài)值為2e 所以下面不能執(zhí)行

if(status==USB_INT_SUCCESS)/* SETUP階段操作成功 */ { endp6_mode=0xc0; toggle_recv(); printf("SETUP USB_INT_SUCCESS\n"); } else {return(0);//printf("SETUP USB_INT_fail\n"); } issue_token(( 0 << 4 ) | DEF_USB_PID_IN);status=wait_interrupt(); if(status==USB_INT_SUCCESS)/* DATA階段操作成功 */ { printf("data USB_INT_SUCCESS\n"); 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);//printf("data USB_INT_fail\n");

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)/* 狀態(tài)階段操作成功 */ {return(1); //printf("SETUP USB_INT_SUCCESS\n"); } else return(0); } 文字文字文字

status=wait_interrupt();//printf("SETUP USB_INT_SUCCESS\n");

//此處獲取到的狀態(tài)值為2e 所以下面不能執(zhí)行

if(status==USB_INT_SUCCESS)/* SETUP階段操作成功 */

前面時對的 請問怎么解決 ?

我按每個按鍵都沒有反應(yīng) 不能得到鍵值 但有一個鍵盤能點亮燈


descr12 1 10 1 0 0 0 8 81 a 1 1 10 1 1 2 0 1 這是執(zhí)行g(shù)et_descr(0X01);后得到的描述符 執(zhí)行g(shù)et_descr(0x02)后得到的配置描述符 descr9 2 3b 0 2 1 0 a0 32 9 4 0 0 1 3 1 1 0 9 21 10 1 21 1 22 41 0 7 5 81 3 8 0 a 9 4 1 0 1 3 0 0 0 9 21 10 1 21 1 22 66 0 7 5 82 3 8 0 a

有問題嗎


你這個是復(fù)合的HID類設(shè)備,需要分析下你的端點,你的設(shè)備有2個端點,分別為0X81和0X82。你看下你讀取數(shù)據(jù)是采用哪個端點獲取數(shù)據(jù)的?你在換另外一個端點來獲取下數(shù)據(jù)看是否成功,還有在初始化的時候,還需要分別獲取2個HID類的報表描述符。


很感謝你的回復(fù)

上面有我的程序你能幫忙看看嗎 獲取數(shù)據(jù)的端點是再哪里改呢 那兩個HID類的報表描述符又又怎么獲取

謝謝


我的程序請看1樓的附件


你把這個函數(shù)稍微的修改下: void get_int_in() { endp6_mode=0x80; toggle_recv(); issue_token(( endp_int << 4 ) | DEF_USB_PID_IN);//status=wait_interrupt(); }

里面的endp_int這個是代表的端點號,你可以選擇換成0X01和0X02來測試下,至于分別區(qū)分的話,修改程序比較麻煩,建議你去看下USB的協(xié)議來操作下


感謝你的回答 我修改了端點號為0x01后能讀出數(shù)據(jù)了 只是前面的獲取設(shè)備 描述符和配置描述符還是失敗的 中斷狀態(tài)值是0X2e不是0x14 怎么解決?

還有這個我用另外一個鍵盤來試出現(xiàn)的是燈不亮 set_report failed 一直不斷的收到一個值 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 。。。。。。。。 沒法停止按鍵也沒有反應(yīng)


你使用的是CH375S嗎?如果是CH375S的話,那么建議你換成CH375B,上面的程序只能在CH375B上面使用,CH375S在使用低速模式的話,需要把D+和D-的引腳換下才可以枚舉設(shè)備。


是啊 原來用的是375S現(xiàn)在換成了375B 一般的鍵盤都可以讀了 但是就是我要測得那個讀不了 燈都沒有點亮 端點號我也試了幾個了 0x01 0x02 0 都試過了 不行 而且它一直在do{}while 那個循環(huán)里 flag_ou一直都是1 但是又沒有中斷 循環(huán)后面是將它置零了的 一直輸出0 有時候每組的第一個是2


上面說錯了 是一直都在中斷 但是我并沒有按鍵 讀出的數(shù)據(jù)全是0 或者第一個是2后面的是0 這是為什么 而我用的另一個鍵盤又是正常的

求解釋

descr12 1 10 1 0 0 0 8 f3 4 3 1 5 1 0 0 0 1

descr9 2 3b 0 2 1 0 a0 32 9 4 0 0 1 3 1 1 0 9 21 10 1 0 1 22 36 0 7 5 81 3 8 0 a 9 4 1 0 1 3 0 0 0 9 21 10 1 0 1 22 34 0 7 5 82 3 3 0 a config


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频