国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

基于HID類的USB人機接口設計

發布時間:2010-8-3 15:11    發布者:lavida
關鍵詞: HID , USB , 人機接口
目前市場上USB設備的種類繁多,但是這些設備會有一些共同的特性,根據這些特性可以把USB設備劃分為不同的類,如顯示設備、通信設備、音頻設備、大容量存儲設備、人機接口設備(HID)。這里介紹如何實現HID類設備,以及如何在應用程序中對HID類設備進行訪問。從Windows98操作系統開始,為HID類設備提供了通用的驅動程序,所以只要按照HID設備類的規范編寫設備的固件程序,就能夠讓Windows系統自動識別設備,省去了復雜的驅動程序編寫過程。  

1 HID協議簡介  

人機接口設備(HID)主要是指一些人與計算機進行交互的設備,如鍵盤、鼠標、游戲桿等;但是HID設備不一定非要是這些人機交互設備,只要符合HID設備級定義規范要求的都可以認為是HID設備。HID設備有以下主要特點:  

① 交換的數據存儲在報告的結構內,設備必須支持HID報告格式。  
② 每筆事務可以攜帶小量或中量的數據。低速設備每筆事務最大為8字節,全速設備每筆最大為64字節,高速設備最大為1 024字節;  
③ 有最大傳輸速度的限制。低速設備最快10 ms一筆事務,最高速度為800 B/s;全速設備最快1 ms一筆事務,最高速度為64 KB/s;高速設備最快125 μs一筆事務,最高速度為24.576 MB/s。  
④ 沒有傳輸速度的保證。  

當插入USB設備后,主機會向設備請求各種描述符來識別設備。為了把一個設備識別為HID類別,設備在定義描述符的時候必須遵守HID規范。圖1顯示了HID各種描述符之間的關系。事實上,每個設備可以有多個接口描述符來實現多接口設備,而且每個接口描述符下應該有多個端點描述符。

  
圖1 HID各種描述符之間的關系  

從圖1中可以看出,除了USB標準定義的一些描述符外,HID設備還必須定義HID描述符。另外設備和主機的通信是通過報告的形式來實現的,所以還必須定義報告描述符;而物理描述符不是必需的。還有就是HID描述符是關聯于接口(而不是端點)的,所以設備不需要為每個端點都提供一個HID描述符。  

USB設備有4種傳輸方式與主機進行通信: 控制方式、中斷方式、批量方式和同步方式。每種方式都有它的應用領域。HID只支持控制和中斷傳輸方式。如圖2所示,HID設備必須要有默認的控制管道和一個中斷輸入端點;中斷輸出端點是可選的。  


  
圖2 HID類設備使用控制和中斷傳輸方式  

中斷輸出傳輸是USB1.1規范才有的內容,且必須獲得Windows系統的支持。從Windows98 SE版本開始才支持中斷輸出傳輸方式,所以如果需要中斷輸出傳輸方式的設備應該選擇相應的操作系統。表1列出了傳輸類型和相關情況。  

表1 HID類設備支持的傳輸方式傳輸  


  
USB協議定義了11種請求命令,通過這些請求來獲得設備的信息及對設備進行設置。HID類設備除了要支持這11種標準的請求外,還要實現以下6種特定請求:  

① Get_Report——主機用控制傳輸從設備接收數據,所有HID類設備都要支持這個請求;  
② Set_Report——設備用控制傳輸接收主機的數據,設備可以不支持此請求;  
③ Get_Idle——主機讀取設備當前的空閑速率,設備可以不支持此請求;  
④ Set_Idle——設置閑置狀態,設備可不支持此請求;  
⑤ Get_Protocol——主機獲得設備的當前活動是引導協議還是報告協議;  
⑥ Set_Protocol——在引導協議和報告協議間切換,設備如果支持系統引導(如鍵盤和鼠標),就必須支持Get_Protocol和Set_Protocol請求。  

2 HID接口固件設計與實現  

該設備采用C8051F120微控制器和PDIUSBD12芯片來實現,如圖3所示。  

  
圖3 HID系統結構框圖  

因為PDIUSBD12的主端點(Endpoint2)具有64字節的雙緩沖,能夠提供比較高的速度,所以在端點描述符里把它配置為中斷傳輸方式,而Endpoint1沒有使用。PDIUSBD12通過中斷觸發CPU來響應主機的各種請求。  

此系統采用的USB協議版本是1.1,所以能夠支持中斷輸出傳輸。為了讓主機把設備識別為HID類別,定義設備接口描述符時類別這一字段的值必須設置為0x03(HID類別),這樣主機就會繼續請求獲得設備的HID描述符和報告描述符。在主機Get_Descriptor請求中,當值字段的高位字節為0x21時,表示主機要求獲得HID描述符;當值字段高字節為0x22時,就是主機要求獲得報告描述符。對于報告描述符,可以參考HID Usage Tables規范。HID Descriptor Tool工具可以幫助建立和測試編寫的報告描述符。這里定義了一個輸入和輸出64字節數據的報告描述符。  

code unsigned char szReport[] = {  
0x06,0xA0,0xFF,//用法頁(FFA0h, vendor defined)  
0x09, 0x01,//用法(vendor defined)  
0xA1, 0x01,//集合(Application)  
0x09, 0x02 ,//用法(vendor defined)  
0xA1, 0x00,//集合(Physical)  
0x06,0xA1,0xFF,//用法頁(vendor defined)  
//輸入報告  
0x09, 0x03 ,//用法(vendor defined)  
0x09, 0x04,//用法(vendor defined)  
0x15, 0x80,//邏輯最小值(0x80 or -128)  
0x25, 0x7F,//邏輯最大值(0x7F or 127)  
0x35, 0x00,//物理最小值(0)  
0x45,0xFF,//物理最大值(255)  
0x75, 0x08,//報告長度Report size (8位)  
0x95, 0x40,//報告數值(64 fields)  
0x81, 0x02,//輸入(data, variable, absolute)  
//輸出報告  
0x09, 0x05,//用法(vendor defined)  
0x09, 0x06,//用法(vendor defined)  
0x15, 0x80,//邏輯最小值(0x80 or -128)  
0x25, 0x7F,//邏輯最大值(0x7F or 127)  
0x35, 0x00,//物理最小值(0)  
0x45,0xFF,//物理最大值(255)  
0x75,0x08,//報告長度(8位)  
0x95, 0x40,//報告數值(64 fields)  
0x91, 0x02,//輸出(data, variable, absolute)  
0xC0,//集合結束(Physical)  
0xC0//集合結束(Application)  
};  

這樣,后面數據的輸入和輸出都必須滿足報告的格式才能夠進行傳輸。  

  
圖4 應用程序枚舉HID設備流程  

3 應用程序設計實現  

Windows為應用程序訪問HID設備提供了強大的支持,有一整套對HID設備進行訪問的API。應用程序要訪問設備就必須先枚舉到設備,圖4為應用程序枚舉HID設備流程。  

枚舉成功后根據返回的設備句柄,就可以用ReadFile和WriteFile來讀寫設備的數據了。這里采用異步方式來讀寫數據,這樣不會發生讀寫時阻塞,提高了程序的效率。以下是異步方式讀寫設備的要點:  

① 為了實現異步訪問設備,在CreateFile打開設備時必須使用FILE_FLAG_OVERLAPPED標志。  
② 打開設備成功后,使用CreateThread建立1個讀設備線程。  
③ 在這個線程中首先建立1個OVERLAPPED結構,并用CreateEvent函數初始化它的hEvent成員,這樣就創建了1個事件對象。  
④ 調用ReadFile函數,并傳入這個結構。  
⑤ 調用ReadFile后會立即返回,必須調用GetLast?Error獲得出錯碼。 如果為ERROR_IO_PENDING, 說明此操作是在等待完成的;否則,說明調用出錯。  
⑥ 調用WaitForSingleObject等待hEvent事件的通知,并使此線程進入休眠狀態。如果有數據發送到主機,讀線程就會被激活。  
WriteFile的使用也同樣要求異步操作,與ReadFile的使用差不多。  

這里要注意的是,在每次讀寫數據前都要先接收和發送1字節的PID標志,所以每次讀寫數據的時候都要多一個字節。比如,這里每次讀寫的是64字節數據,但是在這64字節之前必須放1字節的PID數據,所以是65字節。一般這個字節的值為0。  

4 小結  

充分利用PDIUSBD12主端口的雙緩沖特性后,測試設備與PC間傳輸速度能達到8 KB/s以上,對于一些傳輸數據量不大,速度要求不高,而又必須在短時間內做出響應的場合基本能夠滿足要求。在此基礎上只要生成不同的報告描述符,就能開發出各種不同的嵌入式設備;而且這樣的設備無需驅動,在插入PC后就能立刻開始工作,省去了安裝驅動程序的過程,方便使用。
本文地址:http://m.qingdxww.cn/thread-18887-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 無線充電基礎知識及應用培訓教程
  • 為何選擇集成電平轉換?
  • 想要避免發生災難,就用MPLAB® SiC電源仿真器!
  • 5分鐘詳解定時器/計數器E和波形擴展!
  • 貿澤電子(Mouser)專區

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区在线欧美日韩中文 | 亚洲一区免费在线 | 亚洲欧美日韩在线线精品 | 四色网站 | 国产一二三区精品 | 国产啪精品视频网给免丝袜 | 国产女人水多毛片18 | 香蕉视频啊啊啊 | 国产女同一区二区三区五区 | 羞羞视频免费网站com | 毛片特级| 99re66热这里都是精品 | 免费看欧美日韩一区二区三区 | 91青青青国产在观免费影视 | 亚洲福利天堂网福利在线观看 | 91中文字幕在线视频 | 欧美高清视频在线 | 国产小视频免费观看 | 啦啦啦中文在线影院观看 | 女人扒开腿让男人桶到爽 | 亚洲欧美日韩不卡 | 欧美成人免费在线观看 | 在线国产观看 | 成人午夜精品久久久久久久小说 | 亚洲男人天堂影院 | 国产精品视频一区二区三区经 | 欧美专区一区二区三区 | 人心蜈蚣2在线观看 | 欧洲欧美人成在线视频免费下载 | 久久精品视频免费观看 | 国产精品久久久久尤物 | 小猪视频app无限版下载最新版 | 一区二区三区视频观看 | 这里只有精品久久 | 黄页网站视频免费 视频 | 欧美日本日韩aⅴ在线视频 欧美日本日韩 | 亚洲天堂影院在线观看 | 中文字幕午夜乱理片 | 国产成人午夜精品影院游乐网 | 亚洲伦理网站 | 在线观看不卡一区 |