關(guān)于USB設(shè)備的配置問(wèn)題

我有一個(gè)USB設(shè)備,在WINDOWS XP下被識(shí)別為USB鍵盤(pán),然后我用51和CH375芯片做了一個(gè)USB主機(jī),目的是處理從此設(shè)備得到的數(shù)據(jù)(此設(shè)備為讀碼器,將讀碼器插到PC后,任意打開(kāi)一個(gè)文檔編輯器,然后掃描一個(gè)條碼,就會(huì)在文檔編輯器里面自動(dòng)輸入條形碼的值最后帶個(gè)回車)。 但是問(wèn)題是,我做的這個(gè)主機(jī)可以正確地識(shí)別從USB鍵盤(pán)得到的數(shù)據(jù),卻不能正確得到從此設(shè)備發(fā)來(lái)的數(shù)據(jù),不知道問(wèn)題出在哪里?我是用驅(qū)動(dòng)USB鍵盤(pán)的程序驅(qū)動(dòng)此USB設(shè)備的。

我的USB鍵盤(pán)配置如下: 12 01 10 01 00 00 00 08 3c 41 03 20 00 02 01 02 00 01 config 09 02 22 00 01 01 04 a0 23 config 2 09 02 22 00 01 01 04 a0 23 09 04 00 00 01 03 01 01 05 09 21 10 01 00 01 22 41 00 07 05 81 03 08 00 18 set idle report 05 01 09 06 a1 01 05 07 19 e0 29 e7 15 00 25 01 75 01 95 08 81 02 95 01 75 08 81 01 95 03 75 01 05 08 19 01 29 03 91 02 95 01 75 05 91 01 95 06 75 08 15 00 26 ff 00 05 07 19 00 2a ff 00 81 00 c0 set report /*下面是得到的鍵盤(pán)碼*/ 00 00 1e 00 00 00 00 00 //'1' 00 00 00 00 00 00 00 00 00 00 1f 00 00 00 00 00 //'2' 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 00 //'3' 00 00 00 00 00 00 00 00 00 00 21 00 00 00 00 00 //'4' 00 00 00 00 00 00 00 00 //順便問(wèn)一下,這是什么編碼形式?為何和ASC碼、Unicode碼都對(duì)不上?

我的USB設(shè)備配置如下: 12 01 00 01 00 00 00 08 b4 04 00 01 01 00 01 02 00 01 config 09 02 22 00 01 01 04 a0 32 config 2 09 02 22 00 01 01 04 a0 32 09 04 00 00 01 03 01 01 05 09 21 00 01 00 01 22 3f 00 07 05 81 03 08 00 0a set idle report 05 01 09 06 a1 01 05 07 19 e0 29 e7 15 00 25 01 75 01 95 08 81 02 95 01 75 08 81 01 95 05 75 01 05 08 19 01 29 05 91 02 95 01 75 03 91 01 95 06 75 08 15 00 25 ff 05 07 19 00 29 ff 81 00 c0 set report /*下面是發(fā)來(lái)的數(shù)據(jù),本應(yīng)該是一個(gè)14字節(jié)長(zhǎng)度的數(shù)據(jù),但是卻只收到了8個(gè)0*/ 00 00 00 00 00 00 00 00

之后我又用bushound抓取了與PC連接時(shí)的數(shù)據(jù):

USB鍵盤(pán)的如下(字符“1”的數(shù)據(jù)流): Device Phase Data Description Cmd.Phase.Ofs(rep) ------ ----- ------------------------------------------------------------------------------------------------------ ---------------- ------------------ 25 LEN 09 00 00 00 9 1.1.0 25 DI 00 00 00 1e 00 00 00 00 00 ......... 1.2.0 25 IRP 06 00 48 01 f8 59 47 87 00 00 00 00 00 00 00 00 08 3b 4f 87 08 3b 4f 87 00 00 00 00 09 00 00 00 1.3.0 25 STAK 03 00 00 e0 09 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 28 bd aa 88 18 b7 bf 88 9a ad 79 a9 READ 1.4.0 25 LEN 09 00 00 00 9 2.1.0 25 DI 00 00 00 00 00 00 00 00 00 ......... 2.2.0 25 IRP 06 00 48 01 f8 59 47 87 00 00 00 00 00 00 00 00 08 3b 4f 87 08 3b 4f 87 00 00 00 00 09 00 00 00 2.3.0 25 STAK 03 00 00 e0 09 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 28 bd aa 88 18 b7 bf 88 9a ad 79 a9 READ 2.4.0

下面是USB設(shè)備一次發(fā)來(lái)的數(shù)據(jù)流(每次都發(fā)送14字節(jié)有效數(shù)據(jù),如下例中的‘23 26 1f 21 26 22 21 1e 20 27 24 1f 23 28’): Device Phase Data Description Cmd.Phase.Ofs(rep) ------ ----- ------------------------------------------------------------------------------------------------------ ---------------- ------------------ 27 LEN 09 00 00 00 9 1.1.0 27 DI 00 00 00 23 26 1f 21 26 22 ...#&.!&" 1.2.0 27 IRP 06 00 48 01 48 dc b1 88 00 00 00 00 00 00 00 00 48 22 50 87 48 22 50 87 00 00 00 00 09 00 00 00 1.3.0 27 STAK 03 00 00 e0 09 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 d8 d4 61 89 48 c9 c7 88 9a ad 79 a9 READ 1.4.0 27 LEN 09 00 00 00 9 2.1.0 27 DI 00 00 00 00 00 00 00 00 00 ......... 2.2.0 27 IRP 06 00 48 01 48 dc b1 88 00 00 00 00 00 00 00 00 48 22 50 87 48 22 50 87 00 00 00 00 09 00 00 00 2.3.0 27 STAK 03 00 00 e0 09 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 d8 d4 61 89 48 c9 c7 88 9a ad 79 a9 READ 2.4.0 27 LEN 09 00 00 00 9 3.1.0 27 DI 00 00 00 21 1e 20 27 24 1f ...!. '$. 3.2.0 27 IRP 06 00 48 01 48 dc b1 88 00 00 00 00 00 00 00 00 48 22 50 87 48 22 50 87 00 00 00 00 09 00 00 00 3.3.0 27 STAK 03 00 00 e0 09 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 d8 d4 61 89 48 c9 c7 88 9a ad 79 a9 READ 3.4.0 27 LEN 09 00 00 00 9 4.1.0 27 DI 00 00 00 00 00 00 00 00 00 ......... 4.2.0 27 IRP 06 00 48 01 48 dc b1 88 00 00 00 00 00 00 00 00 48 22 50 87 48 22 50 87 00 00 00 00 09 00 00 00 4.3.0 27 STAK 03 00 00 e0 09 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 d8 d4 61 89 48 c9 c7 88 9a ad 79 a9 READ 4.4.0 27 LEN 09 00 00 00 9 5.1.0 27 DI 00 00 00 23 28 00 00 00 00 ...#(.... 5.2.0 27 IRP 06 00 48 01 48 dc b1 88 00 00 00 00 00 00 00 00 48 22 50 87 48 22 50 87 00 00 00 00 09 00 00 00 5.3.0 27 STAK 03 00 00 e0 09 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 d8 d4 61 89 48 c9 c7 88 9a ad 79 a9 READ 5.4.0 27 LEN 09 00 00 00 9 6.1.0 27 DI 00 00 00 00 00 00 00 00 00 ......... 6.2.0 27 IRP 06 00 48 01 48 dc b1 88 00 00 00 00 00 00 00 00 48 22 50 87 48 22 50 87 00 00 00 00 09 00 00 00 6.3.0 27 STAK 03 00 00 e0 09 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 d8 d4 61 89 48 c9 c7 88 9a ad 79 a9 READ 6.4.0

本人剛開(kāi)始讀USB協(xié)議,只是略懂點(diǎn)皮毛,分析配置描述符還是很困難的,所以還請(qǐng)有經(jīng)驗(yàn)的前輩給我指一條路,我該如何配置我的這個(gè)設(shè)備? 實(shí)驗(yàn)做下來(lái),我知道完全按照USB鍵盤(pán)的配置是行不通的,但就是找不到關(guān)鍵的配置點(diǎn)。 希望版主能指點(diǎn)一下此USB設(shè)備該如何配置!多謝了! 期待前輩指點(diǎn)中。。。[Emot]19[/Emot]


熱門(mén)產(chǎn)品 : CH390:以太網(wǎng)控制器芯片

我的郵箱:個(gè)人信息保護(hù),已隱藏,如方便可以郵件交流,謝謝!


1:這個(gè)是鍵碼,不是什么編碼.就是固定的值. 2:按照你的數(shù)據(jù)和描述符分析,就應(yīng)該是8個(gè)字節(jié),您怎么來(lái)判斷是14個(gè)字節(jié)呢? 您分析錯(cuò)了,不是這樣的, 00 00 00 23 26 1f 21 26 22 這是一包數(shù)據(jù)8個(gè)字節(jié) 00 00 00 00 00 00 00 00 00 另外一包,表示斷碼,就是按鍵放開(kāi) 00 00 00 21 1e 20 27 24 1f 一包數(shù)據(jù) 00 00 00 00 00 00 00 00 00

按鍵放開(kāi) 這個(gè)是一個(gè)正確的數(shù)據(jù)流,沒(méi)什么問(wèn)題的.不可能一次發(fā)送14個(gè)字節(jié)的,協(xié)議是8個(gè).


我明白你的意思,是我沒(méi)說(shuō)清楚。 對(duì)于USB鍵盤(pán),按下‘1’,發(fā)送的是“00 00 00 1e 00 00 00 00 00 00 00 00 00 00 00 00 00 00”,每次發(fā)送8個(gè)字節(jié)的通碼和斷碼,這樣才會(huì)在文本編輯器里面顯示字符“1”;而我這個(gè)讀碼器每次(邏輯上的‘次’) 讀碼后會(huì)在文本編輯器里面顯示14個(gè)字符對(duì)應(yīng)條碼的14個(gè)數(shù)字,如果按照USB鍵盤(pán)驅(qū)動(dòng)的規(guī)定,應(yīng)該是發(fā)送16*14=224個(gè)字節(jié)才能顯示14個(gè)字符的,對(duì)吧。 但是,這個(gè)讀碼器卻只發(fā)送了如下6包的字符: 00 00 00 23 26 1f 21 26 22 00 00 00 00 00 00 00 00 00 00 00 00 21 1e 20 27 24 1f 00 00 00 00 00 00 00 00 00 00 00 00 23 28 00 00 00 00 00 00 00 00 00 00 00 00 00 當(dāng)中三包通碼中有效字符為:23 26 1f 21 26 22 21 1e 20 27 24 1f 23 28,對(duì)應(yīng)13個(gè)條碼的數(shù)字:6914954130716和最后一個(gè)回車符。這些字符會(huì)隨著掃描不同的編碼而相應(yīng)地改變,以此來(lái)實(shí)現(xiàn)條碼讀取后傳送數(shù)據(jù)的功能。 這個(gè)讀碼器能夠把要傳送的字符安排到通碼包的4-9個(gè)字符位,說(shuō)明他是需要特殊配置的吧?應(yīng)該和USB鍵盤(pán)的配置有所區(qū)別,而且此驅(qū)動(dòng)還是WINDOWS通用的驅(qū)動(dòng),不需要另外安裝的。最上面我貼了此讀碼器的設(shè)備和配置信息,現(xiàn)在的問(wèn)題就是我該如何用51通過(guò)ch375來(lái)配置它呢?

另外有個(gè)疑問(wèn): 根據(jù)您的回復(fù),“00 00 00 23 26 1f 21 26 22”明明是9個(gè)字節(jié),可您為什么說(shuō)“這是一包數(shù)據(jù)8個(gè)字節(jié) ”呢?有點(diǎn)疑惑。我也知道協(xié)議說(shuō)是8個(gè)字節(jié)一包,但是為什么用bushound抓取的卻是一包9個(gè)字節(jié)呢?而且對(duì)于我這個(gè)讀碼器來(lái)說(shuō),通碼包最后多出的一個(gè)字節(jié)還是有用的數(shù)據(jù),這個(gè)該如何去分析呢? 感謝紅桃六前輩的指點(diǎn),希望您能繼續(xù)不吝賜教!


不需要的其他配置,例如: 00 00 00 23 26 1f 21 26 22 從23開(kāi)始就是有效數(shù)據(jù),在打包的時(shí)候,填入數(shù)據(jù)就可以了和普通的鍵盤(pán)是一樣的,你可以實(shí)驗(yàn)一下,在鍵盤(pán)上你一次按6個(gè)鍵是可以傳上去的,超過(guò)6個(gè)就報(bào)錯(cuò)了. 另外不推薦這樣做,這樣做的話如果有重復(fù)的按鍵,有可能不能計(jì)算機(jī)識(shí)別到的,還是一個(gè)鍵一個(gè)鍵的上傳比較穩(wěn)定. 00 00 00 23 26 1f 21 26 22 這個(gè)數(shù)據(jù)包其實(shí)是八個(gè),只是你在BUSHOUND里選擇設(shè)備的時(shí)候選擇的是設(shè)備上一級(jí)的HUB口,第一個(gè)字節(jié)00,其實(shí)不是讀卡器發(fā)上來(lái)的,是由WINDOWS驅(qū)動(dòng)自己添加的,代表的是REPORT ID,當(dāng)ID為0時(shí),由驅(qū)動(dòng)自己添加.由于不是讀卡器發(fā)上來(lái)的數(shù)據(jù),可以認(rèn)為該數(shù)據(jù)無(wú)效.


哦,關(guān)于“一包9個(gè)字節(jié)”問(wèn)題的疑惑終于解開(kāi)了,非常感謝~:) 剩下的就是如何配置此讀碼器的問(wèn)題了,如下的數(shù)據(jù): 12 01 00 01 00 00 00 08 b4 04 00 01 01 00 01 02 00 01 config 09 02 22 00 01 01 04 a0 32 config 2 09 02 22 00 01 01 04 a0 32 09 04 00 00 01 03 01 01 05 09 21 00 01 00 01 22 3f 00 07 05 81 03 08 00 0a set idle report 05 01 09 06 a1 01 05 07 19 e0 29 e7 15 00 25 01 75 01 95 08 81 02 95 01 75 08 81 01 95 05 75 01 05 08 19 01 29 05 91 02 95 01 75 03 91 01 95 06 75 08 15 00 25 ff 05 07 19 00 29 ff 81 00 c0 set report 是我用“USB鍵盤(pán)、鼠標(biāo)例程”后,從PC里接收到的數(shù)據(jù),應(yīng)該是CH375讀出此讀碼器的設(shè)備和配置信息吧?那么我在程序里面應(yīng)該怎么對(duì)它進(jìn)行配置呢?現(xiàn)在是按照USB鍵盤(pán)、鼠標(biāo)進(jìn)行配置的,結(jié)果是不能正常讀取數(shù)據(jù),每次都是8個(gè)0。


不需要什么配置. USB鼠標(biāo)鍵盤(pán)的數(shù)據(jù)可以正常獲取到嗎?讀碼器是你自己做的還是在市面上購(gòu)買(mǎi)的?


非常非常非常非常非常非常非常感謝紅桃六的幫助~我的問(wèn)題解決了,不是配置的問(wèn)題,配置是正確的。 問(wèn)題出在51向CH375讀取數(shù)據(jù)的程序那里,今天突然想到個(gè)問(wèn)題,為什么只能收到8個(gè)0呢,原來(lái)例程里面的中斷函數(shù)是不斷的讀取CH375的緩存數(shù)據(jù),全部讀取完了才從串口輸出8位數(shù)據(jù),這樣對(duì)鍵盤(pán)鼠標(biāo)操作是沒(méi)有問(wèn)題的,但是此讀碼器是一次性的發(fā)送6包數(shù)據(jù)到375的緩存里,結(jié)構(gòu)造成最后讀完數(shù)據(jù)51的緩存區(qū)只存了最后讀取的8個(gè)數(shù)據(jù),因此只能看到最后一包斷碼的8個(gè)0了。

鍵盤(pán)、鼠標(biāo)大部分可以正確配置,而鼠標(biāo)有的配置會(huì)出錯(cuò),但是卻可以正常接收到鼠標(biāo)的數(shù)據(jù)……無(wú)語(yǔ) 讀碼器是買(mǎi)的產(chǎn)品。


對(duì)了,另外說(shuō)一下 CH375做主機(jī)控制USB鍵盤(pán)鼠標(biāo)的例程里面似乎有個(gè)BUG,就是當(dāng)拔出USB設(shè)備后再次插上的時(shí)候,就死機(jī)了,系統(tǒng)不會(huì)在此識(shí)別并連接USB設(shè)備。


這個(gè)你可以在中斷函數(shù)里加一個(gè)全局變量,把獲取到的中斷狀態(tài)賦給全局變量,檢測(cè)當(dāng)變量為斷開(kāi)時(shí)就重新等待設(shè)備連接.


了解,我已經(jīng)這么做了,呵呵


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

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