




已閱讀5頁,還剩55頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
基于基于 HID 的人機接口設(shè)備的設(shè)計及應(yīng)用的人機接口設(shè)備的設(shè)計及應(yīng)用 摘摘 要要 通用串行總線 USB 是連接計算機系統(tǒng)與外部設(shè)備的一個串口總線標準 也是輸入 輸出接口的技術(shù)規(guī)范 被廣泛應(yīng)用于個人電腦和移動設(shè)備等信息通訊產(chǎn)品 并擴展至攝 影器材 數(shù)字電視 機頂盒 游戲機等相關(guān)領(lǐng)域 HID Human Interface Device 類設(shè)備是 USB 設(shè)備類型中的一種 是直接與人交互的設(shè)備 如鍵盤 鼠標等 HID 類設(shè)備并不一定是標準的外設(shè)類型 只要交換的數(shù)據(jù)格式存儲在報 文的結(jié)構(gòu)中 并且設(shè)備固件支持報文的格式 則任何工作在該限制之內(nèi)的設(shè)備均可稱為 HID 設(shè)備 如電壓計 溫度計 讀卡器等 因此 人機接口設(shè)備有巨大的應(yīng)用市場 針對以上需求 本文致力于開發(fā)一個基于 HID 的人機接口設(shè)備 在上位機編寫相應(yīng)的應(yīng) 用軟件 實現(xiàn)人機接口設(shè)備與主機的通信 本文首先闡述了開發(fā)基于 HID 的人機接口設(shè)備在經(jīng)濟和技術(shù)上的意義 繼而描述了系 統(tǒng)架構(gòu) 基于 VC 的上位機軟件開發(fā) 以及設(shè)備端固件代碼的編寫 文中對 USB 接口通信 協(xié)議做了簡要的介紹 并介紹了基于 VC 的 Windows 下 USB 接口驅(qū)動軟件開發(fā) 最后 本文對在研究和開發(fā)人機接口設(shè)備工作中的不足之處和需要改進的地方進行了總 結(jié) 同時也展望了低成本的人機接口設(shè)備的市場潛力和 USB 發(fā)展的美好前景 關(guān)鍵詞 HID 類 人機接口設(shè)備 USB 通信協(xié)議 HID device based on HID class ABSTRACT Universal Serial Bus is a serial bus standard which connects the computer system and the peripheral equipments It is the input output interface specification as well It is widely used in communication products such as personal computers and mobile devices It is extending to the related fields such as Camera Equipment Digital Television STB and Game Console HID class which short for Human Interface Device is one of the USB device class As we know the Typical HID device are mouse keyboard etc HID class device didn t always be the standard USB device If only the data format is contained by the report structure which is supported by the USB firmware Then we can call all of those devices as HID device such as Voltmeter Thermometer Card reader and so on Therefore the human interface device has a vast potential market So as this this project aims to develop a HID device based on HID class To implement the communication between PC host and the device I need to program the PC application program software etc Firstly this paper set forth the economic and technical importance of the HID device based on HID class And then describe the system framework Also briefly describe the USB specification This paper concludes the shortage during the developing And also prospect the bright future for the low cost HID device Key words HID class HID USB specification 目 錄 摘 要 I ABSTRACT II 1 緒 論 1 1 1 選題背景 1 1 2 選題目標 1 1 3 需求分析 2 1 3 1 用戶需求分析 2 1 3 2 功能需求分析 2 1 4 主要內(nèi)容 2 1 5 本章小結(jié) 3 2 USB 接口技術(shù)介紹 4 2 1 USB 接口技術(shù) 4 2 1 1 USB 簡介 4 2 1 2 USB 的總線拓撲結(jié)構(gòu) 4 2 1 3 USB 系統(tǒng)分層 5 2 1 4 USB 的編碼方式 6 2 1 5 USB 的即插即用 7 2 2 USB 接口 HID 設(shè)備類 7 2 2 1 HID 設(shè)備類簡介 7 2 2 2 HID 數(shù)據(jù)傳輸方式 8 2 2 3 HID 設(shè)備枚舉過程 8 2 2 4 HID 設(shè)備類描述符 9 2 3 本章小結(jié) 10 3 人機接口設(shè)備系統(tǒng)設(shè)計 11 3 1 系統(tǒng)框架 11 3 2 人機接口設(shè)備平臺簡介 12 3 2 1 USB 控制器方案 12 3 2 2 ST2211U 芯片簡介 13 3 3 主要功能 14 3 4 本章小結(jié) 14 4 基于 VC 的 HID 上位機軟件開發(fā) 15 4 1 Windows 驅(qū)動程序模式 15 4 1 1 Windows 驅(qū)動方式 15 4 1 2 WDM 驅(qū)動程序的分層結(jié)構(gòu) 15 4 2 USB 接口 HID 類驅(qū)動原理 16 4 2 1 USB 設(shè)備驅(qū)動體系 16 4 2 2 與 HID 設(shè)備通信的主要 API 函數(shù) 17 4 3 基于 VC 的應(yīng)用程序開發(fā) 18 4 3 1 開發(fā)流程 18 4 3 2 打開設(shè)備功能模塊 19 4 3 3 LCD 顯示功能模塊 23 4 3 4 鍵盤功能模塊 23 4 4 本章小結(jié) 24 5 HID 設(shè)備軟硬件設(shè)計與實現(xiàn) 25 5 1 HID 設(shè)備系統(tǒng)設(shè)計 25 5 2 HID 功能模塊設(shè)計與實現(xiàn) 25 5 2 1 USB HID 驅(qū)動開發(fā) 25 5 2 2 LCD 驅(qū)動開發(fā) 29 5 2 3 鍵盤驅(qū)動開發(fā) 30 5 3 本章小結(jié) 32 6 整機系統(tǒng)調(diào)試 33 6 1 調(diào)試流程 33 6 2 Bus Hound 調(diào)試工具簡介 33 6 3 HID 設(shè)備接口通信調(diào)試 33 6 4 基于 VC 的應(yīng)用軟件調(diào)試 34 6 5 測試結(jié)果 36 7 總結(jié)與展望 39 參考文獻 40 附 錄 41 謝 辭 54 1 緒 論 1 1 選題背景 隨著計算機硬件飛速發(fā)展 外圍設(shè)備日益增多 鍵盤 鼠標 調(diào)制解調(diào)器 打印機 掃描儀早已為人所共知 數(shù)碼相機 MP3隨身聽接踵而至 這么多的設(shè)備 如何接入個人 計算機 為了滿足用戶的需求 以Intel 為首的七家公司 Intel Compaq Microsoft IBM DEC Northern Telecom 以及日本NEC 于1994 年11月推出了USB Universal Serial Bus 通用串行總線 協(xié)議的第一個草案專用于低中速的計算機外設(shè) USB可把多達127個外設(shè)同時連到用戶的系統(tǒng)上 所有的外設(shè)通過協(xié)議來共享USB的帶 寬 其12Mbps的帶寬對于鍵盤鼠標等低中速外設(shè)是完全足夠的 USB允許外設(shè)在主機和其 它外設(shè)工作時進行連接配置使用及移除 即所謂的即插即用 Plug 2 獲得指向 HID 設(shè)備集合句柄 SetupDiGetClassDevs 函數(shù)查詢所有已安裝的 HID 設(shè)備 得到一個指向該 HID 設(shè)備集 合的句柄 SetupDiGetClassDevs IN LPGUID ClassGuid OPTIONAL IN PCSTR Enumerator OPTIONAL IN HWND hwndParent OPTIONAL IN DWORD Flags 3 識別 HID 接口 SetupDiEnumDeviceInterfaces 函數(shù)用來讀取識別一個接口的結(jié)構(gòu)的指針 每一次調(diào)用 必須傳遞一個數(shù)組索引來指定一個接口 SetupDiEnumDeviceInterfaces IN HDEVINFO DeviceInfoSet IN PSP DEVINFO DATA DeviceInfoData OPTIONAL IN LPGUID InterfaceClassGuid IN DWORD MemberIndex OUT PSP DEVICE INTERFACE DATA DeviceInterfaceData 4 獲取目標設(shè)備詳細信息 對每一個接口 調(diào)用 SetupDiGetDeviceInterfaceDetail 函數(shù)獲取其詳細的信息 包括 設(shè)備名稱 頭四個字節(jié) CreateFile 用此設(shè)備名打開設(shè)備 SetupDiGetDeviceInterfaceDetail IN HDEVINFO DeviceInfoSet IN PSP DEVICE INTERFACE DATA DeviceInterfaceData OUT PSP DEVICE INTERFACE DETAIL DATA A DeviceInterfaceDetailData OPTIONAL IN DWORD DeviceInterfaceDetailDataSize OUT PDWORD RequiredSize OPTIONAL OUT PSP DEVINFO DATA DeviceInfoData OPTIONAL 5 打開設(shè)備 調(diào)用 CreatFile 函數(shù)打開設(shè)備 CreateFile LPCSTR lpFileName DWORD dwDesiredAccess DWORD dwShareMode LPSECURITY ATTRIBUTES lpSecurityAttributes DWORD dwCreationDisposition DWORD dwFlagsAndAttributes HANDLE hTemplateFile 6 獲取 USB 設(shè)備的有關(guān)屬性 調(diào)用 HidD GetAttributes 獲取設(shè)備的零售商 ID 產(chǎn)品 ID 及產(chǎn)品的版本號等 如果獲 取成功 則將屬性中的 VID PID 以及設(shè)備版本號與我們的目標設(shè)備進行比較 如果一致 則是目標設(shè)備 則使用讀寫方式打開目標設(shè)備 BOOLEAN stdcall HidD GetAttributes IN HANDLE HidDeviceObject OUT PHIDD ATTRIBUTES Attributes 7 釋放設(shè)備信息集合 SetupDiDestroyDeviceInfoList 函數(shù)釋放設(shè)備節(jié)點及內(nèi)存分配 WINSETUPAPI BOOL WINAPI SetupDiDestroyDeviceInfoList IN HDEVINFO DeviceInfoSet 圖 4 4 即為 VC 中調(diào)用 Windows API 函數(shù)打開 HID 設(shè)備的流程圖 開開始始 使使用用HidD GetHidGuid 得得到到HID類類GUID 結(jié)結(jié)束束 錯錯誤誤號號是是 ERROR NO MORE ITEMS 使使用用SetupDiEnumInterfaceDevice 枚枚舉舉設(shè)設(shè)備備接接口口 使使用用SetupDiEnumDeviceInterfaces 取取得得設(shè)設(shè)備備接接口口詳詳細細信信息息 成成功功 是是否否需需要要操操作作設(shè)設(shè)備備 N 使使用用SetupDiGetClassDev 得得到到HID設(shè)設(shè)備備類類信信息息 利利用用上上一一步步取取得得的的設(shè)設(shè)備備路路徑徑信信息息 使使用用CreateFile打打開開設(shè)設(shè)備備 使使用用Hid GetAttributes 取取得得VID PID等等信信息息 使使用用GetLastError Y N 圖 4 4 打開設(shè)備流程圖 在完成打開設(shè)備功能之后 主機便可與 HID 設(shè)備進行通信了 主機在接收報告的時 候 需要從報告中提取數(shù)據(jù) 由于報告中包含了各種類型的數(shù)據(jù) 為了便辨別不同類型 的數(shù)據(jù) HID 類提供了 HidP GetXxx 例程 從設(shè)備中讀取不同類型的數(shù)據(jù) 如果程序員 知道各個數(shù)據(jù)的含義 則可直接使用 ReadFile 函數(shù)讀出數(shù)據(jù) 同樣 主機發(fā)送數(shù)據(jù)給設(shè) 備的時候 也要先創(chuàng)建報告 為了方便發(fā)送不同類型的數(shù)據(jù)給設(shè)備 HID 類提供了 HidP SetXxx 函數(shù) 當然 如果程序員知道各個數(shù)據(jù)的含義 也可以直接使用 WriteFile 函數(shù)將報告?zhèn)鹘o設(shè)備 在 LCD 顯示與鍵盤鍵盤功能模塊上 我們使用 HidD SetFeature 來傳送一個特征報文給 HID 設(shè)備 HidD SetFeature IN HANDLE HidDeviceObject IN PVOID ReportBuffer IN ULONG ReportBufferLength 4 3 3 LCD 顯示功能模塊 LCD 顯示功能模塊 首先用函數(shù) GetDlgItemText 從文本框獲取用戶輸入信息 并設(shè) 置報告緩沖區(qū)第 1 字節(jié)為 0 x01 自定義 開啟 LCD 顯示功能 主要代碼如下 ReportBuffer 0 0 x00 ReportBuffer 為報文緩沖區(qū) ReportBuffer 1 0 x01 Display command ReportBuffer 2 sendLen HidD SetFeature hDevHandle ReportBuffer 0 x21 讀寫報文緩沖區(qū)時 第一個字節(jié)是 Report ID 其后是報文數(shù)據(jù) 報文緩沖區(qū)默認是 八個報文 并且環(huán)狀排列 因為數(shù)據(jù)讀寫是發(fā)生在主機輪訓(xùn)設(shè)備的時候 并不是由設(shè)備 觸發(fā)產(chǎn)生硬件中斷 所以如不能及時讀寫 新的數(shù)據(jù)會覆蓋舊的數(shù)據(jù) 導(dǎo)致生報文丟失 當數(shù)據(jù)讀寫頻繁時應(yīng)使用特征報文 它可以保證當報文數(shù)據(jù)沒有變化時 HID 不會傳送新 的數(shù)據(jù) 當設(shè)備接收到該命令 設(shè)備將啟動 LCD 功能模塊顯示最多 30 個字符到 LCD 屏上 LCD 命令定義 見表 4 2 表 4 2 LCD 命令定義 偏移量域大小 字節(jié) 值描述 00hbLCDCmd101h LCD 顯示命令 01hbLength1 定義顯示字符的長度 02habDatabLength 顯示在 LCD 上的字符 03h bLengthabRandomData29 bLength 隨機數(shù) 4 3 4 鍵盤功能模塊 鍵盤功能模塊 可啟動開發(fā)板的鍵盤功能 并讀取鍵值 需將報告緩沖區(qū)第 1 字節(jié) 設(shè)置為 0 x02 自定義 主要代碼如下 ReportBuffer 0 0 x00 ReportBuffer 1 0 x02 Read key command HidD SetFeature hDevHandle ReportBuffer 0 x21 當 HID 設(shè)備接收到該命令 設(shè)備將在 LCD 上顯示 Enter Data 以提示用戶 并調(diào) 用按鍵功能模塊等待用戶輸入按鍵 用戶只能輸入 0 9 之間的按鍵 但輸入的按鍵達到 最大長度 6 或者有 Enter 鍵按下時 設(shè)備返回所有所按的按鍵給 PC 讀取鍵值流程結(jié)束 按鍵命令定義見表 4 3 表 4 3 按鍵命令定義 偏移量域大小 字節(jié) 值描述 00hbKeyCmd102h 讀鍵值命令 01habRandomData31 31 個字節(jié)的隨機數(shù) 4 4 本章小結(jié) 本章詳細介紹了主機端 上位機 應(yīng)用程序設(shè)計 詳細分析了打開設(shè)備功能模塊 設(shè)備枚舉的流程 鍵盤功能模塊與 LCD 功能模塊 5 HID 設(shè)備軟硬件設(shè)計與實現(xiàn) 5 1 HID 設(shè)備系統(tǒng)設(shè)計 本項目的人機接口設(shè)備端需要硬件設(shè)計與軟件設(shè)計 硬件方面包括芯片選擇 電路 圖的設(shè)計等 軟件方面 即固件代碼 包括 USB 協(xié)議棧的編寫 鍵盤驅(qū)動及 LCD 驅(qū)動的 編寫 這些都是項目開發(fā)的重點與難點 USB 設(shè)備端的軟件開發(fā)實際上包含著很大的工作量 因為開發(fā)者需要在自己的平臺上 實現(xiàn)一個 USB 設(shè)備端的協(xié)議棧 簡單說來 USB 設(shè)備端的軟件主要需要兩個功能 一是 監(jiān)視設(shè)備的狀態(tài) 控制設(shè)備的行為 自動產(chǎn)生狀態(tài)信息和用戶命令信息 二是完成主機 與設(shè)備之間的 USB 總線通訊 自動處理主機的控制和查詢命令 實現(xiàn)前一個功能的軟件 模塊我們稱為 USB 設(shè)備的通用模塊 而實現(xiàn)后一個功能的軟件模塊我們稱為 USB 設(shè)備的 協(xié)議模塊 5 2 HID 功能模塊設(shè)計與實現(xiàn) 5 2 1 USB HID 驅(qū)動開發(fā) 1 固件流程圖 USB 設(shè)備作為一個完整的硬件設(shè)備 由硬件和固件兩部分組成 其中 固件包括有關(guān) 系統(tǒng)配置和 CPU 的一些設(shè)置模塊 USB 協(xié)議棧模塊等部分 圖 5 1 為本項目中 USB 設(shè)備固 件流程圖 開開始始 設(shè)設(shè)備備復(fù)復(fù)位位 系系統(tǒng)統(tǒng)初初始始化化 發(fā)發(fā)送送USB中中斷斷 是是否否是是EP0中中斷斷 是是否否有有數(shù)數(shù)據(jù)據(jù)發(fā)發(fā)送送 數(shù)數(shù)據(jù)據(jù)存存入入緩緩沖沖區(qū)區(qū)等等待待US B中中斷斷 是是否否有有 其其它它USB中中斷斷 清清系系統(tǒng)統(tǒng)變變量量 USB線線是是否否連連接接 結(jié)結(jié)束束 EP0中中斷斷服服務(wù)務(wù)程程序序 Y N Y Y N N Y N N Y 圖 5 1 USB 固件流程圖 2 HID 屬性描述符 如 2 2 4 所述 HID 類支持標準的 USB 描述符 即設(shè)備描述符 配置描述符 接口描 述符 端點描述符和字符串描述符 此外 作為一個特定的設(shè)備類 HID 有其獨有的類描 述符 即 HID 描述符 報告描述符和物理描述符 下面主要介紹本項目使用的 HID 描述符 端點描述符與報告描述符 HID 描述符跟接口描述符 端點描述符類似 也是隨配置信息一起返回給主機的 主 機并不會單獨發(fā)出請求來讀取它 HID 描述符在配置信息中的位置是緊接接口描述符 HID 描述符詳細設(shè)計如下 HID CLASS DESCRIPTOR DB 09H bLength 域 HID 描述符的長度為 9 個字節(jié) DB 21H bDescriptorType 域 描述符種類為 HID 類描述符 DB 00H bcdHID 域 HID 規(guī)范版本號為 0 x0100 DB 01H DB 00H bCountryCode 域 不支持硬件的目的國家識別碼 DB 01H bNumDescriptors 域 支持的附屬描述符數(shù)為 1 即報告描述符 DB 22H bDescriptorType 域 HID 相關(guān)描述符為 0 x22 即報表描述符 DB 30H bDescriptorLength 域 報告描述符的總長度 0 x0030 即 48 字節(jié) DB 00H 端點描述符詳細設(shè)計如下 ENDPOINT DESCRIPTOR INTERRUPT IN DB 07H bLength 域 端點描述符長度為 7 個字節(jié) DB 05H bDescriptorType 域 描述符種類為端點描述符 DB 83H bEndpointAddress 端點號為 3 DB 03H bmAttributes 域 端點號為 3 的端點是 Interrupt In 端點 DB 08H wMaxPacketSize 域 0 x0008 DB 00H DB 10H bInterval 域 輪詢間隔為 2 ms 報告描述符 顧名思義就是描述 報告 格式的 這個格式使主機和設(shè)備能遵循著 同一個規(guī)則來解釋一個報告中所含有的數(shù)據(jù) 報告 是主機和 HID 設(shè)備之間進行數(shù)據(jù)交 換的最小單位 也就是說 在主機完成對設(shè)備的識別之后 在具體應(yīng)用上的數(shù)據(jù)交換就 得以 報告 的方式進行 報告 的類型有三種 輸入報告 輸出報告和特征報告 輸 入報告就是設(shè)備發(fā)給主機的報告 而輸出報告就是主機發(fā)給設(shè)備的報告 特征報告是主 機發(fā)給設(shè)備的報告 特征報告常在自定義 HID 設(shè)備中被用作主機向設(shè)備發(fā)送自定義數(shù)據(jù) 通過報告 USB HOST 可以分析出報告中數(shù)據(jù)所表示的含義 并通過控制輸入端點 0 返回 另外 主機使用獲取報告描述符命令來獲取報告描述符 注意 該請求是發(fā)送到接口 而不是發(fā)送到設(shè)備 一個報告描述符可以描述多個報告 不同的報告通過報告 ID 來識別 報告 ID 在報告最前面 即第一個字節(jié) 當報告描述符中沒有規(guī)定報告 ID 時 報告中就 沒有 ID 字段 而直接以數(shù)據(jù)開始 與 HID 描述符不同 主機會發(fā)出單獨的請求來讀取報告描述符 關(guān)于報告描述符的 組成 HID 設(shè)備類定義文檔中明確指出 一個報告描述符必須包含但不僅限于以下數(shù)據(jù)項 輸入 輸出或特征 指明了報告的類型 用法 用法頁 用法和用法頁一起指明了數(shù)據(jù) 項的用法 邏輯最小值 邏輯最大值 邏輯最小值和邏輯最大值指明了報告所使用的數(shù) 據(jù)值的范圍 報告大小 指明數(shù)據(jù)項的位數(shù) 報告計數(shù) 指明有多少個這樣的數(shù)據(jù)項 報告描述符詳細設(shè)計如下 HID REPORT DESCRIPTOR DB 06H 用法頁 0 xFFA006 自定義 修飾其下所有主項 DB A0H DB FFH DB 09H 用法 0 x0109 局部項 只修飾下面集合主項 DB 01H DB A1H 應(yīng)用集合開始 01A1 DB 01H DB 09H 用法 0 x0209 DB 02H DB A1H 物理集合開始 0 x00A1 DB 00H DB 06H 用法頁 0 xFFA106 DB A1H DB FFH DB 09H 用法 0 x0309 DB 03H DB 15H 邏輯最小值 127 DB 80H DB 25H 邏輯最大值 128 DB 7FH DB 35H 物理最小值 00 DB 00H DB 45H 物理最大值 255 DB FFH DB 75H 報告大小 8 bits DB 08H DB 95H 報告計數(shù) 8 DB 08H DB 81H 輸入 數(shù)據(jù) 變量 絕對值 DB 02H DB 09H 用法 0 x0409 DB 04H DB 15H 邏輯最小值 127 DB 80H DB 25H 邏輯最大值 128 DB 7FH DB 35H 物理最小值 00 DB 00H DB 45H 物理最大值 255 DB FFH DB 75H 報告大小 8 bits DB 08H DB 95H 報告計數(shù) 32 DB 20H DB B1H 特征 數(shù)據(jù) 變量 絕對值 DB 02H DB C0H 物理集合結(jié)束 DB C0H 應(yīng)用集合結(jié)束 5 2 2 LCD 驅(qū)動開發(fā) 本項目采用 ST7070 點陣液晶顯示控制器來驅(qū)動字符顯示 ST7070 控制器集成了顯示 RAM 字符發(fā)生器 液晶驅(qū)動模塊 MCU 只需利用 3 線 SPI 跟 ST7070 通信 通過寫入一些 控制命令給 ST7070 來控制 ST7070 驅(qū)動液晶屏達到顯示字符等的目的 圖 5 2 顯示了 LCD 驅(qū)動器的原理框圖 主主微微控控制制器器 ST2211U LCD驅(qū)驅(qū)動動器器 ST7070 LCD 液液晶晶顯顯示示屏屏 主主微微控控制制器器 ST2211U LCD驅(qū)驅(qū)動動器器 ST7070 LCD 液液晶晶顯顯示示屏屏 圖 5 2 LCD 驅(qū)動器原理框圖 ST7070 點陣式液晶顯示控制器及 LSI 驅(qū)動器提供包括顯示字母數(shù)字 片假名及符號 的功能 在 4 8 位微處理器控制下 可以對 ST7070 進行配置 以驅(qū)動處理點陣式液晶顯 示器 外接的微處理器可以通過高速串行接口 如 3 線 SPI 或 4 線 SPI 直接控制 ST7070 由于驅(qū)動一個點陣液晶顯示器所需要的功能 例如 顯示 RAM 字符發(fā)生器和液 晶驅(qū)動 都是由內(nèi)部芯片提供的 故此控制器兼容了最小的系統(tǒng) ST7070 部分兼容了 HD44780 KS0066 和 SED1278 的功能 因此允許用戶使用 ST7070 來代替它們 ST7070 字 符發(fā)生存儲器可擴展至生產(chǎn)共達 496 個不同的 5 8 點陣式字型 ST7070 提供了 2 7V 5 5V 的電源供應(yīng) 適合低使用便攜式電池驅(qū)動的低功耗產(chǎn)品 ST7070 的 LCD 驅(qū)動 器組成的 16 個通用信號驅(qū)動器和 80 段信號驅(qū)動器 可以通過級聯(lián)段驅(qū)動器 ST7921 擴展 其尺寸 最大的顯示尺寸可以是一行 80 個字符或兩行 40 個字符 單個 ST7070 可以顯示 最大可顯示一行 16 個字符或兩行 16 個字符 LCD 驅(qū)動器初始化流程 如圖 5 3 所示 Power On Delay 41ms After Vcc 4 5V Function set Delay 38us Display ON OFF control Delay 37us Display clear Delay 1 53ms Entry mode set Initialization end 圖 5 3 LCD 驅(qū)動器初始化流程圖 5 2 3 鍵盤驅(qū)動開發(fā) 本項目采用 4 5 矩陣鍵盤 在鍵盤中按鍵數(shù)量較多時 為了減少 I O 口的占用 通 常將按鍵排列成矩陣形式 如圖 5 4 所示 在矩陣式鍵盤中 每條水平線和垂直線在交 叉處不直接連通 而是通過一個按鍵加以連接 鍵盤是由一組規(guī)則排列的按鍵組成 一 個按鍵實際上是一個開關(guān)元件 按鍵按下時 與此鍵相連的行線與列線導(dǎo)通 行線在無 鍵按下時處在高電平 顯然 如果讓所有的列線也處在高電平 那么 按鍵按下與否不 會引起行線電平的變化 因此 必須使所有列線處在低電平 只有這樣 當有鍵按下時 該鍵所在的行電平才會由高電平變?yōu)榈碗娖?CPU 根據(jù)行電平的變化 便能判定相應(yīng)的 行是否有鍵按下 圖 5 4 4 5 矩陣鍵盤電路圖 行列掃描法又稱為逐行 或列 掃描查詢法 是一種最常用的按鍵識別方法 項目 中 ST2211U 微控制器的 GPIO 口提供的 I O 端口分為四組 Port A B C D 將行線所接 的 PB 7 4 口作為輸出端 列線所接的 PA 4 0 口作為輸入端 識別方法 首先 判斷 鍵盤中有無鍵按下 將全部行線 PB 7 4 置為低電平 然后逐一檢測列線的電平狀態(tài) 只要有一列的電平為低 則表示鍵盤中有鍵被按下 而且閉合的鍵位于低電平線與 4 根 行線相交叉的 4 個按鍵之中 若所有列線均為高電平 則鍵盤中無鍵按下 若確認有鍵 按下 則要判斷閉合鍵所在的位置 依次將行線置為低電平 即在置某根行線為低電平 時 其它線為高電平 在確定某根行線置為低電平后 再逐行檢測各列線的電平狀態(tài) 若某列為低電平 則該列線與置為低電平的行線交叉處的按鍵就是閉合的按鍵 圖 5 5 為本項目的鍵盤驅(qū)動流程圖 開開始始 行行X置置為為低低電電平平 并并 開開始始掃掃描描各各列列Y 是是否否有有鍵鍵按按下下 列列Y是是否否為為高高電電平平 列列值值Y增增一一 列列值值為為6 行行值值X增增一一 行行值值為為5 鍵鍵值值為為0 結(jié)結(jié)束束 Y Y Y 記記錄錄鍵鍵值值 N N N N 圖 5 5 鍵盤驅(qū)動流程圖 5 3 本章小結(jié) 本章詳細描述了設(shè)備端的各個模塊驅(qū)動開發(fā) USB HID 驅(qū)動開發(fā) LCD 驅(qū)動開發(fā)及鍵 盤驅(qū)動開發(fā) 6 整機系統(tǒng)調(diào)試 6 1 調(diào)試流程 正確 合理的調(diào)試方法是成功開發(fā)一個 USB 人機接口設(shè)備必不可少的環(huán)節(jié) 本項目 的調(diào)試過程分三步進行 首先 對于人機接口設(shè)備 借助 PC 調(diào)試軟件 Bus House 將設(shè) 備端的 USB 協(xié)議 數(shù)據(jù)交換等調(diào)通 然后 使用調(diào)試好的人機接口設(shè)備接口開發(fā)上位機 上的應(yīng)用程序 最后 進行整機測試 6 2 Bus Hound 調(diào)試工具簡介 Bus Hound 軟件是由美國 perisoft 公司研制的一種專用于 PC 機各種總線 數(shù)據(jù)包監(jiān) 視和控制的開發(fā)工具軟件 其名 hound 的中文意思為 獵犬 即指其能敏銳地感知到總線 的絲毫變化 Bus Hound 是一個超級軟件總線協(xié)議分析器 用于捕捉來自設(shè)備的協(xié)議包和輸入輸出 操作 其優(yōu)良特性如下 支持所有版本的 IDE SCSI USB 1394 總線 支持各類設(shè)備如硬盤 庫 DVD 鼠標 掃描儀 網(wǎng)絡(luò)照相機等 支持 Windows9X WindowsMe NT4 0 2000 2003 XP 和嵌入式 XP 操作系統(tǒng) 捕捉數(shù)據(jù)的總量僅受機器內(nèi)存限制 可以設(shè)置觸發(fā)信號自動停止 捕獲操作 測試讀取 同步等設(shè)備性能 捕獲設(shè)備驅(qū)動包 例如 IRP 捕獲任意數(shù)量的并行 設(shè)備 而不管其總線類型 易于交換與下載 捕獲的數(shù)據(jù)易于拷貝到其它環(huán)境生成 Html 格式 捕獲的數(shù)據(jù)能保存為文本文件或 ZIP 文件 所有的可捕獲設(shè)備以樹形結(jié)構(gòu)列出 讓 選擇設(shè)備來得更輕松些 可捕獲設(shè)備的啟動過程 用戶愛好設(shè)定功能 如用戶可調(diào)整捕獲 到的數(shù)據(jù)顯示寬度 更宜于查看和使用 查看底層協(xié)議包括 SCSI 的 sense 數(shù)據(jù)和 USB 的 設(shè)置包 查看每階段的時間變化精確到微秒 將輸入輸出發(fā)生的操作實時顯示到屏幕上 純軟件解決方案 不需要對硬件進行任何變更等等 Bus Hound 是一款可以查看 USB 總線數(shù)據(jù)的調(diào)試軟件 Bus Hound 的調(diào)試步驟如下 打開 Bus Hound 中的 Devices 頁 在 Devices 頁選中本項目的 HID compliant device 再轉(zhuǎn)至 Capture 頁 點擊 Run 插入 HID 設(shè)備 6 3 HID 設(shè)備接口通信調(diào)試 采用 Bus Hound 捕獲數(shù)據(jù) 枚舉過程數(shù)據(jù)獲取如下 表 6 1 設(shè)備枚舉數(shù)據(jù)捕獲 傳輸類型傳輸數(shù)據(jù)描述 CTL80 06 00 02 00 00 ff 00 獲取配置描述符的 FF 個字節(jié) 09 02 22 00 01 01 00 80 32 09 04 00 00 01 03 00 00 00 09 21 00 01 00 01 22 30 00 DI 07 05 83 03 08 00 10 CTL80 06 00 01 00 00 12 00 獲取設(shè)備描述符的 18 個字節(jié) DI12 01 10 01 03 00 00 08 71 04 12 a1 01 00 01 02 00 01 設(shè)備描述符 CTL80 06 00 02 00 00 09 00 獲取配置描述符的 9 個字節(jié) DI09 02 22 00 01 01 00 80 32 配置描述符 CTL80 06 00 02 00 00 22 00 獲取設(shè)備描述符的 34 個字節(jié) 09 02 22 00 01 01 00 80 32 配置描述符 09 04 00 00 01 03 00 00 00 接口描述符 09 21 00 01 00 01 22 30 00 HID 描述符 DI 07 05 83 03 08 00 01 端點描述符 其中 CTL 表示 控制傳輸 DI 表示數(shù)據(jù)輸入 可根據(jù) Bus House 捕獲到的信息判 斷 HID 設(shè)備是否被正確的配置 識別 同此法 亦可獲取數(shù)據(jù)交互的具體數(shù)據(jù) 6 4 基于 VC 的應(yīng)用軟件調(diào)試 VC 的調(diào)試方法 首先必須使程序中包含調(diào)試信息 為了增加調(diào)試信息 可以按照下 述步驟進行 打開 Project settings 對話框 可以通過快捷鍵 ALT F7 打開 也可以通 過 IDE 菜單 Project Settings 打開 選擇 C C 頁 Category 中選擇 general 則出 現(xiàn)一個 Debug Info 下拉列表框 可供選擇的調(diào)試信息方式如表 6 2 所示 本項目采用 Program Database for Edit and Continue 的方式 表 6 2 VC 調(diào)試信息方式 命令行 Project settings 說明 無 None 沒有調(diào)試信息 ZdLine Numbers Only 目標文件或者可執(zhí)行文件中只包含全 局和導(dǎo)出符號以及代碼行信息 不包 含符號調(diào)試信息 Z7C 7 0 Compatible 目標文件或者可執(zhí)行文件中包含行號 和所有符號調(diào)試信息 包括變量名及 類型 函數(shù)及原型等 ZiProgram Database 創(chuàng)建一個程序庫 PDB 包括類型信息 和符號調(diào)試信息 ZIProgram Database for Edit and Continue 除了前面 Zi 的功能外 這個選項允許 對代碼進行調(diào)試過程中的修改和繼續(xù) 執(zhí)行 再選擇 Link 頁 選中復(fù)選框 Generate Debug Info 這個選項將使連接器把調(diào)試 信息寫進可執(zhí)行文件和 DLL 如圖 6 1 所示 本項目須添加 hid lib setupapi lib 如果 C C 頁中設(shè)置了 Program Database 以上的選項 則 Link incrementally 可以選擇 選 中這個選項 將使程序可以在上一次編譯的基礎(chǔ)上被編譯 即增量編譯 而不必每次都 從頭開始編譯 圖 6 1 VC 調(diào)試信息設(shè)置 6 5 測試結(jié)果 打開人機接口設(shè)備演示程序 1 打開設(shè)備功能測試 點擊打開設(shè)備按鈕 會出現(xiàn)如圖 6 2 所示的提示信息 具體的枚舉過程見 2 2 3 USB 總線枚舉過程 及表 6 1 枚舉數(shù)據(jù)的捕獲 圖 6 2 打開設(shè)備功能測試 2 LCD 顯示功能測試 在輸入框輸入欲顯示在 LCD 上的字符 再點擊 LCD 顯示按鈕 如圖 6 3 所示 設(shè)備 上的 LCD 液晶顯示屏即會顯示輸入的字符 圖 6 3 LCD 顯示功能測試 具體 LCD 傳輸數(shù)據(jù)用 Bus Hound 捕獲如表 6 3 其中 CTL 為控制傳輸 D0 為數(shù)據(jù)輸 出 D0 輸出的第一個字節(jié) 01 為 LCD 顯示命令 后面為 31 個字節(jié)為欲顯示的字節(jié) 表 6 3 LCD 傳輸數(shù)據(jù)捕獲 傳輸類型傳輸數(shù)據(jù)描述 CTL21 09 00 03 00 00 20 00SET REPORT DO01 0e 48 65 6c 6c 6f 20 44 61 76 69 64 21 21 21 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3 鍵盤功能測試 點擊鍵盤輸入功能 即可在開發(fā)板實現(xiàn)按鍵功能 并回傳至人機接口設(shè)備 如下圖 6 3 所示 顯示框成功輸出 33 32 31 30 37 36 圖 6 4 鍵盤功能測試 具體鍵盤傳輸數(shù)據(jù)用 Bus Hound 捕獲如表 6 4 其中 CTL 為控制傳輸 D0 為數(shù)據(jù)輸 出 DI 為數(shù)據(jù)輸入 D0 輸出的第一個字節(jié) 02 為鍵盤命令 DI 為設(shè)備傳回的鍵值 表 6 4 鍵盤傳輸數(shù)據(jù)捕獲 傳輸類型傳輸數(shù)據(jù)描述 CTL21 09 00 03 00 00 20 00SET REPORT DO02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 DI06 31 30 31 32 33 34 35 DI00 06 31 30 31 32 33 34 35 7 總結(jié)與展望 在本項目的開發(fā)過程中 本人深深的感悟到開發(fā)一個 USB HID 設(shè)備看起來容易 實 則艱難 選擇 HID 設(shè)備類 雖然省略了主機端驅(qū)動程序的開發(fā) 但是設(shè)備端定義為一個 全速 HID 設(shè)備 需要深入了解 USB 2 0 協(xié)議 深入了解 HID 描述符的內(nèi)涵 項目中的許 多地方 比如鍵盤與 LCD 的同步處理 線程的響應(yīng)也做得并不完善 還有待提高 雖然 項目是結(jié)束了 但是感覺對 USB 協(xié)議的理解仍是九牛一毛 是遠遠不夠的 在后續(xù)的工 作中 還要加強學(xué)習(xí) 2008 年 11 月 16 日 隨著 USB3 0 規(guī)范的發(fā)布 新一輪的接口技術(shù)將引領(lǐng) IT 業(yè)接口 技術(shù)的發(fā)展 USB 接口技術(shù)脫胎換骨 USB3 0 支持高達 5 0Gbps 的傳輸速率 并且保持 了良好的向下兼容 十倍于 USB2 0 的傳輸速率和更高的節(jié)能效率 標志著 USB 向高速外 設(shè)進軍的又一里程碑 USB3 0 毫無懸念的將帶動 USB 接口技術(shù)走向更美好的明天 參考文獻 1 王云飛 USB 系統(tǒng)研究 M 清華大學(xué)工程物理系 2001 5 2 李英偉 王成儒 胡正平 USB 2 0 原理與工程開發(fā) 國防工業(yè)出版社 2006 3 武安河 周利莉 Windows 設(shè)備驅(qū)動程序 VxD 與 WDM 開發(fā)實務(wù) M 電子工業(yè)出 版社 2001 4 范文慶 周彬彬 安靖 精通 Windows API 函數(shù) 接口 編程實例 M 人民郵電 出版社 2009 5 周立功 等 PDIUSBD12 USB 固件編程與驅(qū)動程序 M 北京航空航天大學(xué)出版社 2003 6 馬斌 單片機原理及應(yīng)用 M 人民郵電出版社 2009 7 李建忠 單片機原理及應(yīng)用 M 西安電子科技大學(xué)出版社 2002 8 珧建剛 魏安陽 邱淑范 通用串行總線 USB 設(shè)備的驅(qū)動 J 電子技術(shù)應(yīng)用 2001 年第 5 期 第 14 16 頁 9 詹客團 侯國志 呂鐵良等 USB HID 類設(shè)備開發(fā) J 電測與儀表 2004 年 第 5 期 第 48 50 頁 10 Walter Oney Programming the Microsoft Windows Driver Model Microsoft press 2000 11 Compaq Intel Philips Universal Serial Bus Specification Revision2 0 http www usb org 2000 12 Compaq Intel Philips Device Class Definition for Human Interface Devices HID http www usb org 2001 13 ST2211 Integrated Microcontroller User s Manual 2006 14 HID Usage Tables Version 1 11 2001 15 ST7070 Dot Matrix LCD Controller Driver 2008 附 錄 附錄一 上位機打開設(shè)備代碼 void CHidSchoolDlg OnOpenDev 定義一個 GUID 的結(jié)構(gòu)體 HidGuid 來保存 HID 設(shè)備的接口類 GUID GUID HidGuid 定義一個 DEVINFO 的句柄 hDevInfoSet 來保存獲取到的設(shè)備信息集合句柄 HDEVINFO hDevInfoSet 定義 MemberIndex 表示當前搜索到第幾個設(shè)備 0 表示第一個設(shè)備 DWORD MemberIndex DevInterfaceData 用來保存設(shè)備的驅(qū)動接口信息 SP DEVICE INTERFACE DATA DevInterfaceData 定義一個 BOOL 變量 保存函數(shù)調(diào)用是否返回成功 BOOL Result 定義一個 RequiredSize 的變量 用來接收需要保存詳細信息的緩沖長度 DWORD RequiredSize 定義一個指向設(shè)備詳細信息的結(jié)構(gòu)體指針 PSP DEVICE INTERFACE DETAIL DATApDevDetailData 定義一個用來保存打開設(shè)備的句柄 HANDLE hDevHandle 定義一個 HIDD ATTRIBUTES 的結(jié)構(gòu)體變量 保存設(shè)備的屬性 HIDD ATTRIBUTES DevAttributes 初始化設(shè)備未找到 MyDevFound FALSE 對 DevInterfaceData 結(jié)構(gòu)體的 cbSize 初始化為結(jié)構(gòu)體大小 DevInterfaceData cbSize sizeof DevInterfaceData 對 DevAttributes 結(jié)構(gòu)體的 Size 初始化為結(jié)構(gòu)體大小 DevAttributes Size sizeof DevAttributes 調(diào)用 HidD GetHidGuid 函數(shù)獲取 HID 設(shè)備的 GUID 并保存在 HidGuid 中 HidD GetHidGuid 根據(jù) HidGuid 來獲取設(shè)備信息集合 其中 Flags 參數(shù)設(shè)置為 DIGCF DEVICEINTERFACE DIGCF PRESENT 前者表示使用的 GUID 為 接口類 GUID 后者表示只列舉正在使用的設(shè)備 因為我們這里只 查找已經(jīng)連接上的設(shè)備 返回的句柄保存在 hDevinfo 中 注意設(shè)備 信息集合在使用完畢后 要使用函數(shù) SetupDiDestroyDeviceInfoList 銷毀 不然會造成內(nèi)存泄漏 hDevInfoSet SetupDiGetClassDevs AddToInfOut 開始查找設(shè)備 然后對設(shè)備集合中每個設(shè)備進行列舉 檢查是否是我們要找的設(shè)備 當找到我們指定的設(shè)備 或者設(shè)備已經(jīng)查找完畢時 就退出查找 首先指向第一個設(shè)備 即將 MemberIndex 置為 0 MemberIndex 0 while 1 調(diào)用 SetupDiEnumDeviceInterfaces 在設(shè)備信息集合中獲取編號為 MemberIndex 的設(shè)備信息 Result SetupDiEnumDeviceInterfaces hDevInfoSet NULL 如果獲取信息失敗 則說明設(shè)備已經(jīng)查找完畢 退出循環(huán) if Result FALSE break 將 MemberIndex 指向下一個設(shè)備 MemberIndex 如果獲取信息成功 則繼續(xù)獲取該設(shè)備的詳細信息 在獲取設(shè)備 詳細信息時 需要先知道保存詳細信息需要多大的緩沖區(qū) 這通過 第一次調(diào)用函數(shù) SetupDiGetDeviceInterfaceDetail 來獲取 這時 提供緩沖區(qū)和長度都為 NULL 的參數(shù) 并提供一個用來保存需要多大 緩沖區(qū)的變量 RequiredSize Result SetupDiGetDeviceInterfaceDetail hDevInfoSet 然后 分配一個大小為 RequiredSize 緩沖區(qū) 用來保存設(shè)備詳細信息 pDevDetailData PSP DEVICE INTERFACE DETAIL DATA malloc RequiredSize if pDevDetailData NULL 如果內(nèi)存不足 則直接返回 MessageBox 內(nèi)存不足 SetupDiDestroyDeviceInfoList hDevInfoSet return 并設(shè)置 pDevDetailData 的 cbSize 為結(jié)構(gòu)體的大小 注意只是結(jié)構(gòu)體大小 不包括后面緩沖區(qū) pDevDetailData cbSize sizeof SP DEVICE INTERFACE DETAIL DATA 然后再次調(diào)用 SetupDiGetDeviceInterfaceDetail 函數(shù)來獲取設(shè)備的 詳細信息 這次調(diào)用設(shè)置使用的緩沖區(qū)以及緩沖區(qū)大小 Result Set
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 經(jīng)典題型大學(xué)化學(xué)考試試題及答案
- 音樂符號的使用與識別技巧試題及答案
- 親戚房屋轉(zhuǎn)讓合同范例
- 個人鋼結(jié)構(gòu)合同樣本
- 低價轉(zhuǎn)讓股權(quán)合同范例
- 勞務(wù)型承攬合同范例
- 再保險中文合同范例
- 遼寧省素描試題及答案
- 業(yè)績補償質(zhì)押質(zhì)權(quán)合同范例
- 企業(yè)深水井合同范例
- 主題班會AI時代中學(xué)生的機遇與成長
- 供電公司故障搶修服務(wù)規(guī)范
- 初中體育課堂安全教育
- 碼頭安全生產(chǎn)知識
- 《年產(chǎn)100公斤阿司匹林生產(chǎn)工藝設(shè)計》8700字(論文)
- 全屋整裝培訓(xùn)
- 《風(fēng)電安全生產(chǎn)培訓(xùn)》課件
- 常見病用藥指導(dǎo)技術(shù)知到智慧樹章節(jié)測試課后答案2024年秋天津生物工程職業(yè)技術(shù)學(xué)院
- 2025年日歷(日程安排-可直接打印)
- 保密法律法規(guī)
- 鑄牢中華民族共同體意識-形考任務(wù)1-國開(NMG)-參考資料
評論
0/150
提交評論