[求助]CH375b讀取鍵盤的數(shù)據(jù)不全

你好:

我利用avr單片機(jī),主控芯片CH375枚舉鍵盤,發(fā)現(xiàn)不能枚舉鍵盤, 我用BUSHOUND查看鍵盤信息: Bus Hound 6.01 capture on Windows Vista Service Pack 1 (x64). Complements of www.perisoft.net

LXH-EKB-10YA(白色)

Device - Device ID (followed by the endpoint for USB devices) (22) USB 輸入設(shè)備 (25) USB 輸入設(shè)備 (26) USB 輸入設(shè)備 Phase - Phase Type CTL USB control transfer IN Data in transfer OUT Data out transfer Data - Hex dump of the data transferred Descr - Description of the phase Cmd... - Position in the captured data

Device Phase Data Description Cmd.Phase.Ofs(rep) ------ ----- ------------------------ ---------------- ------------------ 25.0 CTL 80 06 00 01 00 00 12 00 GET DESCRIPTOR 1.1.0 25.0 IN 12 01 00 02 00 00 00 08 ........ 1.2.0 ef 17 2d 60 30 01 01 02 ..-`0... 1.2.8 00 01 .. 1.2.16 25.0 CTL 80 06 00 02 00 00 09 00 GET DESCRIPTOR 2.1.0 25.0 IN 09 02 22 00 01 01 00 a0 .."..... 2.2.0 32 2 2.2.8 25.0 CTL 80 06 00 02 00 00 22 00 GET DESCRIPTOR 3.1.0 25.0 IN 09 02 22 00 01 01 00 a0 .."..... 3.2.0 32 09 04 00 00 01 03 01 2....... 3.2.8 01 00 09 21 11 01 00 01 ...!.... 3.2.16 22 41 00 07 05 81 03 08 "A...... 3.2.24 25.0 CTL 00 09 01 00 00 00 00 00 SET CONFIG 4.1.0 25.0 CTL 21 0a 00 00 00 00 00 00 SET IDLE 5.1.0 25.0 CTL 81 06 00 22 00 00 81 00 GET DESCRIPTOR 6.1.0 25.0 IN 05 01 09 06 a1 01 05 07 ........ 6.2.0 19 e0 29 e7 15 00 25 01 ..)...%. 6.2.8 75 01 95 08 81 02 95 01 u....... 6.2.16 75 08 81 01 95 03 75 01 u.....u. 6.2.24 26.0 CTL 80 06 00 01 00 00 12 00 GET DESCRIPTOR 7.1.0 26.0 IN 12 01 00 02 00 00 00 08 ........ 7.2.0 ef 17 2d 60 30 01 01 02 ..-`0... 7.2.8 00 01 .. 7.2.16 26.0 CTL 80 06 00 02 00 00 09 00 GET DESCRIPTOR 8.1.0 26.0 IN 09 02 22 00 01 01 00 a0 .."..... 8.2.0 32 2 8.2.8 26.0 CTL 80 06 00 02 00 00 22 00 GET DESCRIPTOR 9.1.0 26.0 IN 09 02 22 00 01 01 00 a0 .."..... 9.2.0 32 09 04 01 00 01 03 00 2....... 9.2.8 00 00 09 21 11 01 00 01 ...!.... 9.2.16 22 a5 00 07 05 82 03 05 "....... 9.2.24 26.0 CTL 00 09 01 00 00 00 00 00 SET CONFIG 10.1.0 26.0 CTL 21 0a 00 00 01 00 00 00 SET IDLE 11.1.0 26.0 CTL 81 06 00 22 01 00 e5 00 GET DESCRIPTOR 12.1.0 26.0 IN 05 01 09 80 a1 01 85 01 ........ 12.2.0 19 81 29 83 15 00 25 01 ..)...%. 12.2.8 95 03 75 01 81 02 95 05 ..u..... 12.2.16 81 01 c0 06 0c 00 09 01 ........ 12.2.24 25.0 CTL 21 09 00 02 00 00 01 00 SET REPORT 13.1.0 25.0 OUT 00 . 13.2.0

我在用單片機(jī)枚舉時(shí)候發(fā)現(xiàn): 獲取設(shè)備描述符時(shí)候完全一樣:12 01 00 02 00 00 00 08 EF 17 2D 60 30 01 01 02 00 01

在獲取配置描述符時(shí)候:02 3b 00 02 01 00 a0 32 , busHound 22->3b,01->02這兩位不一樣

程序繼續(xù)運(yùn)行,獲取的別的描述符,個(gè)別也有問題,結(jié)果鍵盤不能枚舉 我后來改動(dòng)這個(gè)函數(shù) void get_int_in() { endp6_mode=0x80; toggle_recv(); //UDR1=endp_int; endp_int=0x01; issue_token(( endp_int << 4 ) | DEF_USB_PID_IN);//status=wait_interrupt(); }

直接給endp_int=0x01; 就可以從中斷接受到鍵值,但是這個(gè)鍵值需要按下五六秒才能接到一個(gè),并且中斷在不按任何按鍵時(shí)候,也不斷接受0X14, 由于最近項(xiàng)目趕時(shí)間,利用你們的芯片解析USB鍵盤,懇求幫忙找下解決方法,

根據(jù)你的現(xiàn)象必須確保每一步獲取到的描述符與BUSHOUND抓到的數(shù)據(jù)一樣。可能原因: (1)鼠標(biāo)鍵盤一般是低速設(shè)備,必須設(shè)置速度set_freq( ); (2)你的單片機(jī)主頻多塊,使用什么接口操作CH375B,如果主頻太快你可以在讀寫函數(shù)之間加1~2US延時(shí)。


你好, 1、我已經(jīng)設(shè)置成低速設(shè)備了; 2、我 以下是設(shè)置的程序,參考的是U盤讀寫的函數(shù),您幫我分析下 void CH375_WR_CMD_PORT( unsigned char cmd ) { /* 向CH375的命令端口寫入命令,周期不小于4uS,如果單片機(jī)較快則延時(shí) */ delay2us(); PORTD|=(1< PORTB=cmd; DDRB=0XFF; PORTD&=~(1<PORTD&=~(1< //PORTD|=(1< DDRB=0XFF; //該操作無意義,僅作延時(shí),CH375要求讀寫脈沖寬度大于100nS PORTD|=0Xf0;//輸出無效的控制信號, 完成操作CH375芯片, A0=1; CS=1; WR=1; RD=1; DDRB=0X00; /* 禁止數(shù)據(jù)輸出 */ PORTD&=~(1<delay2us(); }

void CH375_WR_DAT_PORT( unsigned char dat ) { /* 向CH375的數(shù)據(jù)端口寫入數(shù)據(jù),周期不小于1.5uS,如果單片機(jī)較快則延時(shí) */ PORTB=dat; DDRB=0XFF; PORTD&=0X4F;/* 輸出有效寫控制信號, 寫CH375芯片的數(shù)據(jù)端口, A0=0; CS=0; WR=0; RD=1; */ DDRB=0XFF; //該操作無意義,僅作延時(shí),CH375要求讀寫脈沖寬度大于100nS PORTD|=0Xf0;//輸出無效的控制信號, 完成操作CH375芯片, A0=1; CS=1; WR=1; RD=1; DDRB=0X00; /* 禁止數(shù)據(jù)輸出 */ delay1us(); }

unsigned int CH375_RD_DAT_PORT() { /* 從CH375的數(shù)據(jù)端口讀出數(shù)據(jù),周期不小于1.5uS,如果單片機(jī)較快則延時(shí) */ unsigned int temp; delay1us(); DDRB=0X00; PORTD&=0X2F;/* 輸出有效讀控制信號, 讀CH375芯片的數(shù)據(jù)端口, A0=0; CS=0; WR=1; RD=0; */ DDRB=0X00; //該操作無意義,僅作延時(shí),CH375要求讀寫脈沖寬度大于100nS temp=PINB; PORTD|=0Xf0;//輸出無效的控制信號, 完成操作CH375芯片, A0=1; CS=1; WR=1; RD=1; return(temp); }


你的讀函數(shù)CH375_RD_DAT_PORT返回值怎么定義成unsigned int,我們一般是unsigned char。你可以做一下測試命令check_exsit(0x06)來驗(yàn)證接口函數(shù)。


我把這個(gè)改成unsigned char 和以前效果一樣


那你測試命令能夠通過嗎?或者換一個(gè)鍵盤試一下。


我測試命令可以通過,我們公司我測試了十個(gè)鍵盤,有兩個(gè)可以通過,可以采集到數(shù)據(jù),其余不通過的全是復(fù)合鍵盤,我不太了解對于復(fù)合鍵盤的枚舉,


你看下復(fù)合鍵盤是可以再BOIS下使用的話,那么可以讓你的鍵盤工作在BOIS模式。


我可能沒有表述清楚,我的單片機(jī)+ch375做的是模擬主機(jī),用來讀取鍵盤的值,這樣的情況下,有bios設(shè)置方式么


使用CH375操作符合設(shè)備與普通設(shè)備類似,需要你枚舉設(shè)備,然后分析端點(diǎn),根據(jù)分析的端點(diǎn)上傳輸數(shù)據(jù)。


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

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