《電子技術應用》
您所在的位置:首頁 > 其他 > 業界動態 > Windows2000下USB接口的IC卡讀寫裝置客戶程序設計

Windows2000下USB接口的IC卡讀寫裝置客戶程序設計

2008-12-04
作者:張建新

  摘? 要: 分析了Windows2000下USB客戶程序的框架,并就如何開發Windows2000下USB接口的IC卡讀寫裝置客戶程序進行了闡述。

  關鍵詞: USB總線? 客戶程序? IC卡? Windows2000

?

  IC卡是高科技的產物,它廣泛用于銀行、電信、交通運輸、小區管理、校園管理等領域,體現了它的巨大優越性。作者在開發一個IC卡機房收費系統時遇到了新問題,那就是當計算機和IC卡裝置通信的時候,如果采用傳統的串行通信方式固然可行,但供電必須采用單獨的外置電源,這樣加大了讀卡裝置的體積。通過翻閱資料發現USB接口可以輸出5V電壓、500mA的電流,能滿足IC卡裝置對電源的要求。另外,USB接口和Windows2000操作系統能良好地融合,支持即插即用和電源管理的新特性,使得其與主機的相連日趨簡單和輕松。因此決定開發USB接口的IC卡讀寫裝置,一方面可以解決供電問題,使讀寫裝置使用方便;另一方面也可以滿足其它方面的性能需求。

  USB需要主機硬件、操作系統和外部設備三個方面的支持才能工作。目前主板一般都有支持USB功能的控制芯片組和USB接口插座。微軟" title="微軟">微軟Win9x操作系統以及Windows2000均支持USB,并提供了底層的驅動程序,新版的Linux也支持USB。在USB設備方面,目前有許多公司生產支持USB的微控制器" title="微控制器">微控制器,比較著名的有Motorola公司的MC68HC05系列,Intel公司的80931HA,Cypress公司的CY7C63系列等。可以說,USB的發展已得到各軟硬件廠商的支持,前景光明。

1 Windows2000下的USB架構

  主機要使用USB設備,必須有驅動程序。微軟操作系統中,Windows98支持USB,WindowsNT4.0不支持USB,NT5.0(Windows2000)支持USB。Windows2000和Windows98對USB的支持主要是基于WDM(Windows驅動程序模型)技術,因此USB驅動程序是WDM驅動程序。WDM驅動程序采用分層結構,由兩部分組成,一個為功能驅動程序,即通常所說的驅動程序,它負責指揮硬件工作,由類驅動程序和小類驅動程序構成;另外一個為總線驅動程序,它負責管理計算機和硬件之間的連接。在功能驅動程序上層和下層,一些設備還具有過濾驅動程序。它們的作用是監視功能驅動程序執行I/O操作及修改已有的功能驅動程序。

Windows2000 USB驅動程序框架由USB功能驅動程序和USB總線驅動程序組成。USB總線驅動程序由Windows2000提供,包括USB主控制器驅動程序(OPENHCI.SYS 或 UHCD.SYS,它們分別支持不同的USB主控制器)、USB HUB驅動程序(USBHUB.SYS)以及為控制器驅動程序使用的類驅動程序 (USBD.SYS)。它們一起組成了USB驅動程序棧,可為所有的USB設備驅動程序共用。用戶或廠商所寫的針對特定USB設備的WDM 驅動程序稱為功能驅動程序或客戶驅動程序(位于USB驅動程序棧的上層)。它并不直接訪問硬件,而是調用驅動程序棧完成對硬件的操作。USB驅動程序棧通過USBDI(USB Driver Interface)向客戶驅動程序提供WDM系統服務。

  Windows2000下USB驅動程序棧如圖1所示。

?

?

  有過驅動程序編制經驗的人都知道,編寫驅動程序是一項需要較高技巧并且很繁瑣的工作。對于某一些USB規范定義的類設備,微軟提供了類驅動程序,負責該類設備的設備驅動。對于這類設備,系統能夠自動識別它們,并不需要附加額外的驅動程序,用戶只需編寫普通的Win32程序即可對其進行訪問。目前,Windows2000為HID(Human Input Device人工輸入設備)類、音頻設備類等提供了類驅動程序。

  HID設備,顧名思義是指那些能被人們用來直接輸入數據給計算機的設備,例如鍵盤、鼠標、游戲桿及其他虛擬現實設備如數據手套等。盡管HID設備概指人工輸入設備,但是那些傳輸數據量較小、傳輸速度" title="傳輸速度">傳輸速度較慢的設備,因與輸入設備類似,也可歸類為人工輸入設備,例如遠程控制設備、面板等。IC卡讀寫裝置與計算機之間的數據交換具有量小、傳輸速度慢、雙向傳輸的特點,因而可歸類為HID設備。HID設備包括USB接口的設備及其他接口的設備。USB類規范中詳細定義了USB接口的人工輸入設備類標準及HID設備的用法表,任何USB接口的HID應該遵循這個規范。

Windows98僅支持USB接口的HID設備;Windows 2000支持USB接口的HID及其他接口的HID設備,Windows2000為人工輸入設備類提供的支持包括:

  (1)Windows2000包含HID驅動程序(hidclass.sys 及hidusb.sys,Hidparse.sys)文件,為USB接口的HID設備提供內置的驅動程序支持。

  (2)Windows2000提供了HID.dll,為用戶模式及內核模式的程序提供了一些可用的API(應用程序接口)和DDI(設備驅動程序接口),可用來編寫基于HID類的應用程序。

  (3)對非USB接口或非HID設備可通過編寫小類驅動程序間接使用HID類驅動程序,省去了重新編寫類驅動程序的麻煩。

因此,對于USB接口的HID設備,通常用戶只需要編寫用戶模式的客戶程序,使用Win32 API函數對USB HID設備進行操作,不需要再編寫額外的驅動程序。但在有些情況下,用戶也需要編寫一些基于HID類驅動程序的內核客戶驅動程序。譬如,需要向HID設備發送命令而不僅僅是讀取或寫入數據時,可能需要編寫內核模式的HID程序。對于本IC卡讀寫裝置,由于只涉及到一般的數據讀寫操作(將數據在IC卡和主機之間雙向傳遞),以及較少量的控制操作,并不需要編寫內核模式的客戶驅動程序。

  圖2是客戶程序與IC卡讀寫裝置的交互過程。

?

?

2 USB接口的 HID客戶程序

  這里說的客戶程序是指在主機上運行,負責和USB設備通信的那部分程序。包括兩種類型:用戶模式下的客戶程序以及內核模式下的客戶驅動程序。USB HID客戶程序執行兩大主要任務:設備枚舉和設備操作。設備枚舉是指客戶程序和USB設備交互,獲取其配置信息,譬如設備有幾個配置,每個配置包括多少接口等,并執行一些操作如選擇配置,這期間主要是與各類描述符" title="描述符">描述符結構打交道。在設備操作的時候,客戶程序處理從用戶程序發出的請求,并與設備進行通信,完成操作。

  USB HID客戶驅動程序并不直接和硬件打交道,而是通過調用HID類以及USB設備棧提供的DDI服務控制USB硬件的操作。USB客戶驅動程序將有關的控制信息包裝在URB(USB請求塊)結構中,作為IRP的一個參數傳遞給HID類驅動程序,類驅動程序再調用USB設備棧的下層驅動程序,獲取有關的控制信息,與具體的USB設備進行交互,并返回結果給USB客戶驅動程序。

  USB接口HID內核模式的客戶驅動程序是WDM驅動程序,它們支持即插即用和電源管理。其結構和普通WDM驅動程序一樣,由很多例程" title="例程">例程構成。在這些例程中可以調用HID類提供的各種DDI函數(一般以HIDP開頭)完成設備的操作。

3 USB接口的IC卡讀寫裝置用戶模式客戶程序

  IC卡讀寫裝置采用Cypress公司生產的CY7C63001A微控制器。該芯片是8位一次性編程的微控制器,內置1.5Mbps 的USB串行接口引擎。該芯片有35條專門用于USB操作的指令,20個引腳,128字節的RAM以及4K字節的可編程空間,可以滿足IC卡讀寫程序存儲的需要。CY7C63001A芯片與主機USB端口的互連如圖3所示。

?

?

3.1 IC卡設備部分的描述符結構

  按HID類規范的規定,對于每一個USB接口的HID設備,應包含以下幾個描述符:設備描述符、配置描述符、接口描述符、HID類描述符及端點描述符。這些描述符定義了本USB設備的基本信息,如零售商ID(應該向USB組織申請,本設備采用0X4242H)、產品ID、配置數目(1個)、接口數目(1個)、端點數目(1個,控制端點為缺省的,還包括一個中斷輸入端點)及設備類別等。對于HID設備,在接口描述符中需要規定其類ID為3,在HID類描述符中需要規定其描述符類型為0X21。HID類設備的基本通信機制是HID報告。每一個HID設備必須定義一個報告描述符,用以詳細描述該設備報告的數據協議及數據類型。報告描述符由主項目、局部項目和全局項目組成。一個報告必須包含下列項目:Input(Output或 Feature),Usage,Usage Page,Logical Minimum,Logical Maximum,Report Size,Report Count。每一個數據項的位長度等于Report Size × Report Count。不同的報告通過報告ID相互區分,用法(Usage)表明該用法頁(Usage Page)下各個數據的具體含義或目的。報告的大小并不受端點的約束,主機會自動將報告分解成適合傳輸大小的數據包。

本系統中,IC卡數據以字節為單位讀出、寫入。一次最多讀取或寫入8個字節,再加上命令字(表明數據的含義)及結束標志,最長為13個字節。輸入報告描述符如下所示:

  usage? 01-vendor defined

  usage? 02-vendor defined

  Logical Minimum (-128)

  Logical Maximum (127)

  Physical Minimum (0)

  Physical Maximum (255)

  Report Size(8) (bits)?? ??????? //一個字節為8位

  Report Count(13) (fields) ? ?? //最大為13個字節

  Input(Data, Variable, Absolute)

  為了更好地說明設備的信息,還可以為USB設備定義可選的字符串描述符。定義字符串描述符的好處是可以讓主機顯示有意義的設備信息,如廠商名稱、產品名稱等,這對于非通用設備很有好處。本IC卡設備為非通用設備,因此也定義了字符串描述符。另外,字符串語言可通過LanguageID設定,微軟規定中文的LanguageID為0804H,美國英語的LanguageID為0409H。

3.2 用戶模式客戶程序的編制步驟

  HID類驅動程序及HID.DLL提供了兩類讀寫USB設備的函數。一類是以HidP為前綴,適用于內核模式的客戶驅動程序。另外一類是以HidD為前綴,適用于用戶模式的客戶程序。利用這些函數編制讀寫USB設備的步驟如下:

  第一步,檢測已安裝的HID設備,或稱USB設備枚舉。在和USB設備通信之前,必須得知設備的配置、接口及所用的端點信息,還要獲取設備名。

  ·首先調用HidD_GetHidGuid函數獲取HID設備的類標識(GUID);

  ·調用SetupDiGetClassDevs函數查詢所有已安裝的HID設備,得到一個指向該HID設備集合的句柄;

  ·調用SetupDiEnumDeviceInterfaces函數查詢HID設備集中每一個設備的接口信息;

  ·對每一個接口,調用SetupDiGetDeviceInterfaceDetail函數獲取其詳細的信息,包括設備名稱(頭四個字節),CreateFile用此設備名打開設備。

  ·調用SetupDiDestroyDeviceInfoList函數釋放設備信息集合。

  第二步,打開設備,獲取設備的屬性值以及設備能力描述。

  ·調用CreateFile函數打開本設備。

  ·調用HidD_GetAttributes函數,獲取USB設備的有關屬性。它包含了設備的零售商ID、產品ID及產品的版本號等??梢愿鶕@些信息判斷該設備是否為目標設備。

  ·調用HidD_GetPreparsedData函數,獲取USB設備的預解析數據。這些數據存放在緩沖區內,該緩沖區的數據也可以為其它API函數使用;

  ·調用HidP_GetCaps函數從上述緩沖區中獲取關于該設備能力(如用法、報告描述符的大小等)的描述。調用HidP_GetValueCaps函數得到每一個設備的輸入、輸出及特征報告的屬性值。調用HidD_GetXXXString函數,獲取設備的字符串描述信息。

  第三步,與HID設備交互。

  主機在接收報告的時候,需要從報告中提取數據。由于報告中包含了各種類型的數據,為了方便辨別不同類型的數據,HID類提供了HidP_GetXxx例程,從設備中讀取不同類型的數據。如果程序員知道各個數據的含義,則可直接使用ReadFile函數讀出數據。本程序直接使用ReadFile函數讀出數據。同樣,主機發送數據給設備的時候,也要先創建報告;為了方便發送不同類型的數據給設備,HID類提供了HidP_SetXxx 函數。當然,如果程序員知道各個數據的含義,也可以直接使用WriteFile函數將報告傳給設備。

  完成設備操作后,應關閉設備句柄,釋放預解析數據所占用的內存區域。

微軟為了方便串行通信,提供了一個MSCom控件。同樣,為了方便類似USB接口的HID設備通信,可以將以上的通信程序制作成控件,供不同的HID設備使用。

?

參考文獻

1 USB Implementers' Forum.Device Class Definition for Human Interface Devices (HID),1999

2 USB Implementers' Forum.HID Usage Tables,1999

3 Microsoft Corporation.Microsoft Windows 2000 Driver?Development Kit,2000

4 http://www.usb.org

5 http://www.lvr.com

6 Cypress Semiconductor Corporation.CY7C63001A Universal Serial Bus Microcontroller Datasheet,2000

7 王卓人,鄧晉鈞,劉宗祥.IC卡的技術及其應用.北京:電子工業出版社,1999

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
欧美成人一区二区三区在线观看| 国产精品一卡二卡| 亚洲伊人久久综合| 日韩视频永久免费观看| 91久久精品国产91性色tv| 欧美一区二区视频在线| 亚洲小说欧美另类婷婷| 一本色道久久综合亚洲精品不卡| 亚洲国产综合91精品麻豆| 禁断一区二区三区在线| 国产亚洲a∨片在线观看| 国产精品一区二区久久| 国产精品永久在线| 国产精品欧美日韩一区二区| 欧美性猛交一区二区三区精品| 欧美人与性禽动交情品| 欧美精品二区三区四区免费看视频| 欧美 日韩 国产 一区| 免费在线成人| 欧美国产在线观看| 欧美了一区在线观看| 欧美精品在线一区| 欧美日韩在线播放三区| 欧美视频福利| 国产精品久线观看视频| 国产精品美女在线| 国产毛片一区| 国内精品视频666| 怡红院精品视频| 亚洲国产精品美女| 日韩视频一区二区三区在线播放| 亚洲精选视频免费看| 99在线精品视频| 制服丝袜亚洲播放| 午夜国产不卡在线观看视频| 午夜精品福利一区二区三区av| 欧美一区二区三区婷婷月色 | 亚洲欧美日韩专区| 亚洲电影免费观看高清完整版在线观看| 国产在线欧美| 亚洲福利在线看| 亚洲精品中文字| 亚洲视频电影图片偷拍一区| 亚洲欧美另类中文字幕| 久久精品女人的天堂av| 日韩视频中文字幕| 午夜精品理论片| 久久久五月天| 欧美全黄视频| 国产精品一区二区在线观看不卡| 激情综合自拍| aⅴ色国产欧美| 香蕉尹人综合在线观看| 亚洲日本电影在线| 午夜精品亚洲一区二区三区嫩草| 久久久欧美精品| 欧美日韩裸体免费视频| 国产日本精品| 日韩视频一区二区在线观看 | 亚洲精品韩国| 欧美一区二区三区婷婷月色| 免费精品视频| 国产精品午夜国产小视频| 精品动漫3d一区二区三区| 一本久久a久久精品亚洲| 久久gogo国模裸体人体| 中文精品视频一区二区在线观看| 久久福利精品| 欧美日韩国产精品| 狠狠色综合日日| 亚洲一区三区视频在线观看| 亚洲激情视频网站| 欧美一区二区观看视频| 欧美国产视频日韩| 国产一区av在线| 一区二区三区黄色| 亚洲国产一区二区三区在线播 | 久久久久久久久久久久久9999| 欧美激情bt| 国产日韩精品久久| 亚洲免费观看视频| 亚洲第一在线| 欧美一区二区视频网站| 欧美激情在线免费观看| 国产综合色一区二区三区| 亚洲天堂久久| 99国产精品视频免费观看一公开| 久久精品欧美日韩| 国产精品久久国产三级国电话系列| 亚洲大片在线| 性欧美大战久久久久久久免费观看 | 在线色欧美三级视频| 西西裸体人体做爰大胆久久久| 制服丝袜亚洲播放| 欧美国产激情二区三区| 国模精品一区二区三区| 午夜精品免费在线| 午夜精品久久久久久久99黑人| 欧美人交a欧美精品| 亚洲国产精品一区二区久 | 久久综合色婷婷| 国产婷婷精品| 亚洲免费网址| 亚洲综合日韩在线| 欧美日韩亚洲一区二区三区四区 | 国产精品久久看| 日韩视频一区二区三区在线播放免费观看 | 久久综合久久综合九色| 国产一区二区三区高清| 亚洲欧美国产另类| 欧美亚洲日本一区| 国产精品萝li| 亚洲午夜精品久久久久久app| 亚洲视频一二| 欧美性事在线| 一区二区三区视频在线播放| 在线亚洲一区| 欧美日韩亚洲国产一区| 亚洲精品日韩精品| 99精品福利视频| 欧美日韩一区二区视频在线| 日韩亚洲欧美在线观看| 亚洲色在线视频| 欧美色区777第一页| 99热精品在线观看| 亚洲综合丁香| 国产麻豆成人精品| 欧美一区二区三区视频免费播放| 久久国产精品久久精品国产 | 亚洲国产精品一区二区www在线| 久久久久国产一区二区三区| 国产精品一区二区三区四区五区| 午夜国产一区| 久久这里有精品15一区二区三区| 狠狠色综合色综合网络| 91久久久在线| 欧美日本不卡高清| 在线亚洲一区| 欧美在线欧美在线| 激情综合自拍| 一本综合精品| 国产精品萝li| 久久福利毛片| 欧美搞黄网站| 亚洲色图在线视频| 久久精品欧美日韩| 亚洲国产精品福利| 亚洲曰本av电影| 国产亚洲综合在线| 亚洲精选国产| 国产精品久久精品日日| 欧美一区二区久久久| 牛牛影视久久网| 亚洲另类春色国产| 欧美一区在线直播| 亚洲高清在线| 亚洲免费影视第一页| 国产原创一区二区| 亚洲精品乱码久久久久久日本蜜臀| 欧美视频专区一二在线观看| 午夜精品久久久99热福利| 欧美1区免费| 99热这里只有成人精品国产| 欧美在线在线| 亚洲经典视频在线观看| 午夜国产精品视频| 在线精品在线| 性欧美videos另类喷潮| 在线观看视频亚洲| 亚洲永久精品大片| 激情五月综合色婷婷一区二区| 亚洲视频久久| 黑人一区二区| 亚洲性感激情| 黑丝一区二区三区| 亚洲小说欧美另类社区| 伊人久久成人| 亚洲在线观看视频网站| 在线观看欧美黄色| 午夜精品久久久| 亚洲人成人一区二区三区| 欧美中文字幕视频| 亚洲麻豆视频| 久久一区二区三区国产精品| 一区二区三区www| 免费在线亚洲| 亚洲欧美电影在线观看| 欧美日韩国产天堂| 亚洲第一天堂av| 国产精品一区毛片| 99re视频这里只有精品| 国产在线视频欧美| 亚洲综合电影一区二区三区| 最新亚洲电影| 另类图片国产| 欧美一区二区三区免费观看视频| 欧美日韩综合久久| 亚洲人成网站999久久久综合| 国产亚洲欧美一区二区三区| 亚洲欧美第一页|