《電子技術應用》
您所在的位置:首頁 > 模擬設計 > 設計應用 > 基于HID協議的USB人機交互設備的接口設計
基于HID協議的USB人機交互設備的接口設計
摘要: 介紹如何實現HID類設備,以及如何在應用程序中對HID類設備進行訪問。從Windows98操作系統開始,為HID類設備提供了通用的驅動程序,所以只要按照HID設備類的規范編寫設備的固件程序,就能夠讓Windows系統自動識別設備,省去了復雜的驅動程序編寫過程。
Abstract:
Key words :

     USB設備及其驅動程序的復雜性給開發人員帶來了很大的開發難度。本文給出一種采用C8051F120微控制器和PDIUSBD12 USB控制器結合的方式實現人機接口設備(Human Interface Devices)的方法,以及如何編寫應用程序來對它進行訪問。此設備無需編寫USB設備驅動程序,Windows系統能夠自動識別。


  目前市場上USB設備的種類繁多,但是這些設備會有一些共同的特性,根據這些特性可以把USB設備劃分為不同的類,如顯示設備、通信設備、音頻設備、大容量存儲設備、人機接口設備(HID)。這里介紹如何實現HID類設備,以及如何在應用程序中對HID類設備進行訪問。從Windows98操作系統開始,為HID類設備提供了通用的驅動程序,所以只要按照HID設備類的規范編寫設備的固件程序,就能夠讓Windows系統自動識別設備,省去了復雜的驅動程序編寫過程。
  1  HID協議簡介
  人機接口設備(HID)主要是指一些人與計算機進行交互的設備,如鍵盤、鼠標、游戲桿等;但是HID設備不一定非要是這些人機交互設備,只要符合HID設備級定義規范要求的都可以認為是HID設備。HID設備有以下主要特點:
  ①  交換的數據存儲在報告的結構內,設備必須支持HID報告格式。
 ?、?nbsp; 每筆事務可以攜帶小量或中量的數據。低速設備每筆事務最大為8字節,全速設備每筆最大為64字節,高速設備最大為1 024字節;
  ③  有最大傳輸速度的限制。低速設備最快10 ms一筆事務,最高速度為800 B/s;全速設備最快1 ms一筆事務,最高速度為64 KB/s;高速設備最快125 μs一筆事務,最高速度為24.576 MB/s。
 ?、?nbsp; 沒有傳輸速度的保證。
  當插入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種特定請求:
 ?、?nbsp; Get_Report——主機用控制傳輸從設備接收數據,所有HID類設備都要支持這個請求;
 ?、?nbsp; Set_Report——設備用控制傳輸接收主機的數據,設備可以不支持此請求;
 ?、?nbsp; Get_Idle——主機讀取設備當前的空閑速率,設備可以不支持此請求;
 ?、?nbsp; Set_Idle——設置閑置狀態,設備可不支持此請求;
 ?、?nbsp; Get_Protocol——主機獲得設備的當前活動是引導協議還是報告協議;
 ?、?nbsp; 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標志。
 ?、?nbsp; 打開設備成功后,使用CreateThread建立1個讀設備線程。
 ?、?nbsp; 在這個線程中首先建立1個OVERLAPPED結構,并用CreateEvent函數初始化它的hEvent成員,這樣就創建了1個事件對象。
 ?、?nbsp; 調用ReadFile函數,并傳入這個結構。
 ?、?nbsp; 調用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后就能立刻開始工作,省去了安裝驅動程序的過程,方便使用。
此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          亚洲欧美日韩精品| 国产日韩欧美a| 午夜精品视频| 国产一区二区中文字幕免费看| 久久精品一本久久99精品| 欧美经典一区二区三区| 久久蜜桃av一区精品变态类天堂| 欧美日韩在线一二三| 欧美一区免费| 欧美日本成人| 欧美1区2区3区| 久久免费视频网| 欧美激情综合| 欧美日韩国产综合视频在线观看| 黄色另类av| 精品动漫3d一区二区三区免费| 国内综合精品午夜久久资源| 亚洲国产一区二区三区青草影视| 欧美激情综合在线| 在线综合+亚洲+欧美中文字幕| 亚洲精品久久久久久久久久久久| 亚洲欧美在线看| 9久草视频在线视频精品| 亚洲二区在线| 久久婷婷蜜乳一本欲蜜臀| 国产一区二区三区在线播放免费观看| 亚洲美女啪啪| 亚洲国语精品自产拍在线观看| 欧美久久久久久蜜桃| 1000部精品久久久久久久久| 国产欧美日韩不卡| 国产精品久久综合| 欧美激情欧美狂野欧美精品| 欧美电影在线| 欧美三级资源在线| 亚洲精品一区二区三区av| 欧美专区在线观看| 国产婷婷色一区二区三区在线| 麻豆av一区二区三区久久| 国产精品免费视频观看| 好男人免费精品视频| 国产精品一区二区你懂得| 欧美美女bbbb| 亚洲午夜91| 激情视频亚洲| 国产一区视频网站| 欧美福利一区二区| 男女激情久久| 久久色在线播放| 久久综合久久综合久久综合| 国产精品亚洲综合一区在线观看| 久久精品国亚洲| 久久午夜影视| 国产日本欧美一区二区| 欧美极品欧美精品欧美视频| 欧美日韩国产成人在线| 久久久最新网址| 欧美三区在线观看| 欧美国产亚洲精品久久久8v| 久久一区视频| 欧美视频精品一区| 久久久久久久久久久一区| 午夜日韩在线观看| 欧美一进一出视频| 一本一本久久| 亚洲裸体俱乐部裸体舞表演av| 欧美在线资源| 麻豆成人综合网| 国产精品嫩草99av在线| 欧美xx视频| 夜夜嗨av一区二区三区免费区| 国产女人水真多18毛片18精品视频| 一区二区三区高清视频在线观看| 国产精品福利在线| 久久国产精品免费一区| 欧美成人精品三级在线观看| 国产伦精品一区二区三区免费迷| 久久久免费观看视频| 欧美成人在线免费视频| 99精品黄色片免费大全| 亚洲女优在线| 亚洲国产精品va在线观看黑人| 亚洲成人在线视频播放| 亚洲激情网址| 亚洲一级二级在线| 欧美一区二区视频在线观看2020| 久久久国产精品一区| 欧美日韩另类一区| 国产手机视频一区二区| 欧美视频网址| 欧美亚洲一区二区三区| 欧美丰满少妇xxxbbb| 香蕉尹人综合在线观看| 国产欧美va欧美不卡在线| 欧美日韩一区二区国产| 国产精品99免费看| 国产麻豆视频精品| 国产一区二区三区四区hd| 国产精品v亚洲精品v日韩精品| 亚洲视频在线一区| 亚洲字幕在线观看| 国产亚洲成人一区| 欧美日韩高清在线播放| 欧美成人一区二区三区| 免费观看不卡av| 亚洲老板91色精品久久| 国产精品久久久久久影院8一贰佰| 国产综合色精品一区二区三区| 在线视频你懂得一区二区三区| 销魂美女一区二区三区视频在线| 亚洲视频在线观看免费| 激情欧美丁香| 欧美日韩第一区日日骚| 99视频精品免费观看| 久久人人97超碰人人澡爱香蕉| 亚洲国产成人久久| 久久综合电影一区| 国产精品自在在线| 免费试看一区| 久久精品国产69国产精品亚洲| 亚洲新中文字幕| 欧美视频一区二区三区四区| 日韩一级视频免费观看在线| 久久国产色av| 亚洲高清免费在线| 亚洲精品一区二| 亚洲欧洲日本一区二区三区| 亚洲男女自偷自拍| 久久精品夜色噜噜亚洲aⅴ| 欧美日本精品一区二区三区| 奶水喷射视频一区| 久久国产精品99久久久久久老狼| 亚洲视频一区在线| 欧美日本一区二区三区| 欧美日韩专区| 欧美有码视频| 亚洲精品人人| 国产一区二区三区视频在线观看| 久久久精品国产免费观看同学| a4yy欧美一区二区三区| 美女黄网久久| 永久91嫩草亚洲精品人人| 国产精品免费视频观看| 欧美一二区视频| 欧美人交a欧美精品| 国产欧美日韩精品a在线观看| 亚洲深夜福利| 性欧美激情精品| 亚洲欧美日本精品| 欧美日韩精品欧美日韩精品一| 日韩特黄影片| 国产精品一区二区三区四区| 亚洲国产女人aaa毛片在线| 91久久精品国产| 国内成人自拍视频| 国产精品户外野外| 欧美日韩精品三区| 欧美日韩亚洲三区| 亚洲最新在线| 国产亚洲一区二区在线观看| 亚洲第一成人在线| 欧美一区91| 一本色道久久综合亚洲二区三区| 最新日韩中文字幕| 男人天堂欧美日韩| 亚洲大片精品永久免费| 欧美v亚洲v综合ⅴ国产v| 一区二区三区蜜桃网| 夜夜爽www精品| 日韩一区二区免费看| 国产欧美一区二区色老头| 免费成人毛片| 国产女人18毛片水18精品| 欧美一区二区黄| 国产精品自拍三区| 欧美日产国产成人免费图片| 欧美黄色一区| 亚洲精品日韩在线| 麻豆成人在线观看| 欧美一区二区三区的| 亚洲国产欧美日韩| 欧美—级高清免费播放| 亚洲一区二区不卡免费| 久久久99爱| 亚洲国产高清在线| 国产综合18久久久久久| 欧美午夜美女看片| 亚洲图片欧洲图片日韩av| 亚洲高清在线观看一区| 国产婷婷一区二区| 国产精品99久久久久久人| 亚洲欧美精品在线观看| 一区二区三区精品国产| 亚洲一二三区精品| 国产在线不卡精品| 美女黄毛**国产精品啪啪| 亚洲国产精品成人综合| 美女主播视频一区| 韩国v欧美v日本v亚洲v| 国产视频精品va久久久久久| 国产精品啊v在线| 欧美激情欧美激情在线五月| 一本一本久久a久久精品综合麻豆| 国产欧美日韩91| 91久久久久久| 欧美日韩黄色大片| 最新日韩在线视频| 久久婷婷久久| 久久免费视频在线| 久久av二区| 国产日韩精品一区| 亚洲中无吗在线| 你懂的视频欧美| 亚洲午夜在线| 国产精品超碰97尤物18| 国产精品初高中精品久久| 亚洲一区中文字幕在线观看| 国产精品久久激情| 亚洲视频一区二区在线观看| 亚洲一区二区毛片| 一本色道久久综合亚洲91| 国产在线麻豆精品观看| 一本色道久久88亚洲综合88| 欧美一级日韩一级| 久久天天躁狠狠躁夜夜爽蜜月| 国产精品久久亚洲7777| 欧美性生交xxxxx久久久| 久久www免费人成看片高清| 国产精品精品视频| 亚洲国产三级在线| 免费亚洲婷婷| 国产亚洲女人久久久久毛片| 影院欧美亚洲| 亚洲欧美日韩国产综合在线| 欧美日韩在线第一页| 黄色精品在线看| 久久精品亚洲热| 久久综合久久美利坚合众国| 一本色道久久88亚洲综合88| 国产精品视频专区| 久久精品国产亚洲一区二区三区| 91久久中文字幕| 欧美亚洲一级片| 夜夜嗨av一区二区三区四区| 国产精品爱啪在线线免费观看| 国产欧美欧洲在线观看| 99在线视频精品| 久久中文欧美| 亚洲国产一成人久久精品| 猛男gaygay欧美视频| 亚洲日本va午夜在线电影| 激情另类综合| 欧美精品久久99久久在免费线| 久久黄色小说| 久久精品毛片| 国产精品乱码一区二区三区| 国内外成人免费激情在线视频| 榴莲视频成人在线观看| 亚洲激情视频网站| 亚洲欧美伊人| 亚洲永久免费观看| 欧美午夜在线观看| 免费不卡在线视频| 欧美日韩国产在线一区| 久久久精品2019中文字幕神马| 一本色道久久综合亚洲精品小说| 久久国产免费| 欧美日韩国产高清| 红桃av永久久久| 欧美69视频| 日韩一区二区免费高清| 国产精品捆绑调教| 久热这里只精品99re8久| 国产精品在线看| 国产精品av一区二区| 亚洲欧美日韩在线高清直播| 久久―日本道色综合久久| 久久久久久久久蜜桃| 国语自产精品视频在线看一大j8| 免费人成网站在线观看欧美高清| 久久阴道视频| 免费不卡在线观看| 一区二区三区国产精华| 欧美高清视频一区二区| 国产精品午夜国产小视频| 国产精品日本精品| 欧美日韩国产不卡在线看| 欧美主播一区二区三区美女 久久精品人| 国产精品欧美日韩久久| 国产久一道中文一区| 亚洲欧洲在线播放| 欧美精品一区二区三区久久久竹菊| 亚洲欧洲av一区二区三区久久| 亚洲欧洲日产国产网站| 国产日韩免费| 欧美激情精品久久久久久蜜臀| 久久久久久亚洲精品杨幂换脸| 久久久久久高潮国产精品视| 久久久精品网| 欧美色图一区二区三区| 中文亚洲免费| 欧美理论在线| 久久久久久香蕉网| 老妇喷水一区二区三区| 久久亚洲精品欧美| 91久久线看在观草草青青| 亚洲女ⅴideoshd黑人| 香蕉av福利精品导航| 国产精品一区二区久久| 在线观看福利一区| 性色av香蕉一区二区| 欧美日韩国产高清视频| 国产精品推荐精品| 欧美日韩高清在线| 亚洲国产激情| 午夜免费日韩视频| 欧美日韩一卡二卡| 在线观看av一区| 久久久久久久国产| 欧美视频一区二区三区| 亚洲国产1区| 欧美高清成人| 久久久久九九九| 亚洲国产精品t66y| 久久久久久成人| 免费日韩精品中文字幕视频在线| 一区在线播放视频| 亚洲欧美国产日韩中文字幕|