[求助]為什么鼠標或鍵盤讀不出數(shù)據(jù)

WCH的工程師您們好! 我用51單片機+375B操作一個PS/2(鼠標或鍵盤)轉(zhuǎn)USB的設(shè)備,現(xiàn)在不知道怎么的,不能讀取到數(shù)據(jù),描述、地址程序中基本設(shè)置正確,就是不知道怎么的,程序(根據(jù)例程)中的鍵盤燈是能夠點亮的,按鼠標或鍵盤沒有反應(yīng),請幫我查看一下! 下面有程序,以及PC機操作此USB設(shè)備在Bus Hound軟件中所得到的參考數(shù)據(jù)。 望回復(fù)! UploadImages/200941922352682.rar

附注:PS/2(鼠標或鍵盤)轉(zhuǎn)USB的設(shè)備: http://dvd.intozgc.com/157/157668.html

鍵盤燈不是CH375來點亮的,是PS2設(shè)備來點亮的. 這個操作可能比較特殊,因為是復(fù)合設(shè)備,要對兩個設(shè)備進行操作.循環(huán)順序進行,另外你看一下端點好分析的是否正確,因為涉及到兩個設(shè)備,可能原來的程序在細節(jié)上并不一定合適.另外報表描述符也要獲取兩次,總之按照BUSHOUND上面的流程來做,應(yīng)該問題不大.


WCH的工程師您們好! 我已經(jīng)按照BUSHOUND上面的流程來做了,但是現(xiàn)在還是不能接受到數(shù)據(jù)!請幫我再看看程序!

關(guān)鍵是以下這一段: //get_descr(0x01);//獲取設(shè)備描述符 printf("device\n"); Request.Req.bmRequestType = 0x80;//1-- 80 06 00 01 00 00 12 00 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[i]); printf("\n"); } else printf("get device descr failed\n"); set_addr(5);//設(shè)置地址 //get_descr(0x02);//獲取配置描述符 printf("config\n"); //2-- 80 06 00 02 00 00 09 00 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[i]); 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;//3-- 80 06 00 02 00 00 22 00 Request.Req.bRequest = 0x06; Request.Req.wValue = 0x0002; Request.Req.wIndex = 0x0000; Request.Req.wLength = 0x0000|((unsigned int)data_buf[2]<<8); printf("\n 3 -- Request.Req.wLength = %02x \n",(unsigned int)Request.Req.wLength); if(get_descr_ex()==1) { for(i=0;i!=data_buf[2];i++) printf("%02x ",(unsigned int)data_buf[i]); printf("\n"); flag_config_2=0; } else printf("get device descr again failed\n"); } parse_config_descr();//保存描述符中一些值 set_config(config_value);//設(shè)置配置 printf("set config\n"); //if(set_config_ex()!=1)printf("set config failed\n");//4 --- printf("set idle\n"); if(set_idle()!=1)printf("set idle failed\n");//5-- printf("report\n"); Request.Req.bmRequestType= 0x81;//6-- 81 06 00 22 01 00 8b 00 Request.Req.bRequest = 0x06; Request.Req.wValue = 0x0022; Request.Req.wIndex = 0x0100; Request.Req.wLength = 0x0000 | ((unsigned int)(report_descr_len+0x40)<<8); printf("\n 6 -- Request.Req.wLength = %02x \n",(unsigned int)Request.Req.wLength); if(get_report_descr_ex() == 1) { for(i=0;i!=report_cou;i++) printf("%02x ",(unsigned int)data_buf[i]); printf("\n"); } else printf("get report descr failed\n"); //操作鍵盤 printf("set report\n"); //對于鍵盤這一步,是點亮指示燈 if(set_report()!=1)printf("set report failed\n"); delayms(250); //EA=1; //打開中斷,從中斷端點接收數(shù)據(jù)

get_int_in(); //發(fā)送從中斷端點讀數(shù)據(jù)的令牌

請幫我復(fù)查一下?。?!


PS2 轉(zhuǎn)USB是不是兩個設(shè)備,是一個設(shè)備,比如你獲取報表描述符的時候并沒有獲取鼠標的,只是獲取了鍵盤的,你應(yīng)該都要獲取,按照流程操作.分別記住兩個端點號.如果您只操作1個設(shè)備,可能不行的.你看一下鍵盤是第幾個接口.


不是很明白,能不能給我寫個步驟?


PS2 轉(zhuǎn)USB是一個設(shè)備,但是在PC機的設(shè)備管理里是兩個設(shè)備,能不能給我寫個步驟?實在不成我只能把這個設(shè)備寄給您們了


一個設(shè)備兩個接口,流程參考BUSHOUND就可以了.枚舉要保證完成,然后看看端點號獲取的是不是正確.其余的都和操作一個設(shè)備一樣.然后發(fā)起IN事務(wù)就可以了.


最關(guān)鍵的我現(xiàn)在已經(jīng)改得跟BUSHOUND一樣了,就是沒有信號出來,所以搞不清楚了


而且我是一個一個的對照下去做的 發(fā)送步驟如下 1-- 80 06 00 01 00 00 12 00 2-- 80 06 00 02 00 00 09 00 3-- 80 06 00 02 00 00 22 00 4-- 00 09 01 00 00 00 00 00 5-- 21 0a 00 00 01 00 00 00 6-- 81 06 00 22 01 00 8b 00

發(fā)送以上之后利用以下發(fā)送從中斷端點讀數(shù)據(jù)的令牌 get_int_in(); //發(fā)送從中斷端點讀數(shù)據(jù)的令牌

就是后面沒有接收到數(shù)據(jù)


20094201713654.jpg

http://wch.cn/bbs/UploadImages/20094201713654.jpg

20094201713654.jpg


希望幫我對照以下我的餓步驟是否正確


這個設(shè)備插在PC上應(yīng)該是一個復(fù)合設(shè)備,你選擇的設(shè)備不對,怎么只能看到鍵盤的,鼠標的呢?你這個數(shù)據(jù)可能是應(yīng)用層分析得出的數(shù)據(jù),你把設(shè)備選擇在鍵盤的上一層上,而且你抓出來的數(shù)據(jù)肯定和你獲取的不一樣,你這個是分析得到的.不知道您有沒沒有明白,這樣吧,您可以打電話技術(shù)支持:02552638370


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

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