資源描述:
《HID類鍵盤的報告描述符的理解.doc》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、USB學(xué)習(xí)小記-HID類鍵盤的報告描述符的理解前言? 斷斷續(xù)續(xù)的學(xué)習(xí)了將近三個月,才把USB的HID類搞明白,速度真是夠慢的。利用晚上+周末的時間學(xué)習(xí)自己的東西確實是必要的,不過效率是有點低,以后要更專注一些才行,希望自己能做到吧?! ≡趯W(xué)習(xí)過程中,剛開始主要參考了周立功編寫的一本《PDIUSBD12USB固件編程與驅(qū)動開發(fā)》,后面的學(xué)習(xí)主要參考電腦圈圈的資料包,包括里面的HID類的英文協(xié)議文檔,還有一位臺灣前輩幾年前寫的幾篇文章,還有網(wǎng)絡(luò)下有下得到的一些例程。在此感謝各位大蝦前輩的分享。?一、學(xué)習(xí)流程 1,先大致看下USB1.1中文版的協(xié)議(就是網(wǎng)上能找到的翻譯版),先了解一
2、下USB1.1的工作流程(可能此時的你會對其中很多內(nèi)容都很含糊,不過沒關(guān)系,請堅持?。弧 ?,選擇一款最常用的USB芯片,比如我選擇的NXP的PDIUSBD12.有很多使用該芯片的源碼可以在上網(wǎng)搜索得到,而且周立功公司為其寫了一本書,前面的章節(jié)對USB的工作流程作了一個簡單而又清晰的講解,而不致讓人陷入?yún)f(xié)議的海洋里; 3,有了對USB1.1協(xié)議的大致了解,選好了開發(fā)的平臺(我剛好手上有一塊周立功公司的EASEARM2200的開發(fā)板,上面有D12)之后,先跑一下附帶的例程(此開發(fā)板配套的例程是基于UCOS2系統(tǒng)的,剛開始用它來參考肯定暈)。沒有能跑的例程,那就上網(wǎng)找一下經(jīng)驗證的例
3、程,比如電腦圈圈在EDNCHINA建立的USB學(xué)習(xí)小組里有很好的幾個例程,而且都是基于51+D12的,所以極具參考價值。我是參考周立功公司出的那本書來學(xué)習(xí)的,電腦圈圈的例程與此書的例子書寫風(fēng)格較相似,所以可以互相參考。如果也沒有開發(fā)板,那可購買一套電腦圈圈他們搞活動的套件或者直接用51+D12自己搭一下,這樣就可以直接用電腦圈圈寫的例程了,可以避免走很多彎路?! ?,有了例程的直觀印象后,此時可以上BUSHOUND5.0了。此軟件可以觀察到USB設(shè)備與主機(PC)之間的通訊數(shù)據(jù),特別那11個標準請求的理解,通過此軟件的觀察,可以更好理解其相互之間是如何完成這個握手枚舉過程的?! ?
4、,好了,有了之前的準備工作,是否打算自己做一個設(shè)備了呢?嗯,如果學(xué)習(xí)是從易到難,那效率是事半功倍。USB分為好幾個大類,最簡單的類是HID類,即人機接口類,那可以從此入手。最常見的人機接口類設(shè)備就是鼠標鍵盤了。所以我們可以動手制作一個鼠標或鍵盤作為第一個實踐例子。 6,在真正動手寫程序之前,還需要加深對USB枚舉過程的理解和熟悉,特別是其流程。而其中最重要的就是對11個標準請求的理解了。枚舉的過程就是設(shè)備對主機發(fā)過來的這些請求進行正確響應(yīng),告訴主機,“我”是一個什么樣的設(shè)備,各種屬性均是什么,完成枚舉后,主機才能根據(jù)“我”的屬性,對“我”發(fā)送過去的數(shù)據(jù)進行正確的解釋?! ?,OK
5、,那開始寫程序了,我們選擇做一個鍵盤作為第一個例子。用D12的朋友,在閱讀過D12的數(shù)據(jù)手冊后,參考電腦圈圈的例子,看其最底層的驅(qū)動是如何寫的,先把這部分的驅(qū)動完成,再談協(xié)議的實現(xiàn)。?《1》USB器件最底層的驅(qū)動編寫;?《2》11個標準請求函數(shù)的編寫;?《3》6個HID類請求函數(shù)的編寫;(此6個函數(shù)很簡單)?《4》USB中斷部分的編寫,可用查詢或中斷法,根據(jù)D12的中斷寄存器的值,去調(diào)用11個標準請求函數(shù);?《5》編寫描述符;鍵盤要用到的描述符包括:1,設(shè)備描述符,2,配置描述符,3,接口描述符,4,HID描述符,5,端點描述符,6,報告描述符,7,字符串描述符。其中4,6為HID
6、類專有的描述符,7是可選的?! ‘?dāng)完成上面5個部分的函數(shù)編寫后,如果編寫正確,如果你對枚舉流程理解正確,如果描述符沒錯(可直接使用網(wǎng)上的例子的),那么此時應(yīng)該能夠枚舉成功了,如果不正確,請分部檢查以上5個部分的函數(shù)?! ?,完成第7步后,能枚舉成功,可以說是成功一大半了。此時就考慮如何發(fā)數(shù)據(jù)發(fā)出去即可。對于HID類設(shè)備,特別是鼠標鍵盤這類的,只需你能按照報告描述符所描述的格式,把數(shù)據(jù)發(fā)送過去,那么PC端即會對你所發(fā)送的數(shù)據(jù)進行響應(yīng)了,也就是你的鍵盤能輸入數(shù)據(jù)了?! ≌麄€HID類的,對于鍵盤鼠標這類設(shè)備的開發(fā)即可算是結(jié)束了。雖然步驟就是那么多,不過想最后成功,需要參考大量的資料,最重
7、要是是英文的HID協(xié)議,里面有對描述符的詳細講解,還有例子。還有周立功公司的那本書,雖然后面的看不懂也暫時用不上,不過前面的結(jié)合D12這個芯片還是很有參考價值的。其它的書可以先不看吧,覺得沒看也沒什么。?二、鍵盤的報告描述符的理解 在參考別人的例程實現(xiàn)了鍵盤跑起來的時候,你這時候應(yīng)該會想問的是,為什么描述符要這樣寫呢? 好的,我當(dāng)初也有同樣的疑問,那下面來簡單說說鍵盤的報告描述符的含義。其它的描述符含義很明顯,這里就不作詳細講解?! 蟾婷枋龇荋ID類設(shè)備最重要