嵌入式檢測系統的應用程序設計
1、 引言
本文引用地址:http://dyxdggzs.com/article/148933.htm嵌入式系統(Embedded Systems)被定義為以應用為中心,以計算機技術(shù)為基礎,軟件硬件可裁剪,適應應用系統對功能、可靠性、成本、體積、功耗嚴格要求的專(zhuān)用計算機系統,它是面向用戶(hù)、產(chǎn)品和用戶(hù)的,它具有功耗低、體積小、可靠性高、處理速度快等優(yōu)點(diǎn)。該嵌入式檢測系統采用嵌入式微控制器(microcontroller unit)為核心,以單片機89C52和Philip公司的單純的USB接口芯片PDIUSBD12為主要器件,所以該檢測系統是一個(gè)USB接口設備,而USB接口設備在生活中已經(jīng)隨處可見(jiàn)了,它由三部分組成:具有USB接口的PC系統,能夠支持USB的系統軟件和使用USB接口的設備。它的提出是基于采用通用連接技術(shù),實(shí)現外設的簡(jiǎn)單快速連接,達到方便用戶(hù)、降低成本、擴展PC連接外設范圍的目地。它的最顯著(zhù)優(yōu)點(diǎn)是支持熱插拔,當用戶(hù)插入USB外設后,計算機能夠自動(dòng)識別接入的外設,而不需要重新啟動(dòng)系統。
用戶(hù)對USB設備的控制是通過(guò)應用程序來(lái)實(shí)現的。但應用程序不能直接訪(fǎng)問(wèn)USB設備,它必須先與驅動(dòng)程序通信,通過(guò)驅動(dòng)程序來(lái)訪(fǎng)問(wèn)USB設備。所以,應用程序的工作是把用戶(hù)的對設備的請求翻譯成相應的控制代碼,并將其傳遞給驅動(dòng)程序,同時(shí)還負責接收從驅動(dòng)程序返回的數據。為對應用程序的工作原理有一個(gè)較深入的了解,下面先總體介紹一下應用程序與USB設備的通信流程。
2、 USB總線(xiàn)特性
USB是英文Universal Serial Bus的縮寫(xiě),中文含義是“通用串行總線(xiàn)”。它不是一種新的總線(xiàn)標準,而是應用在PC領(lǐng)域的新型接口技術(shù)。
那么為什么選用USB呢?因為它具有很多很好的特性。包括:
2.1使用方便
使用USB接口可以連接多個(gè)不同的設備,支持熱插拔。在軟件方面,為USB設計的驅動(dòng)程序和應用軟件可以自動(dòng)啟動(dòng),無(wú)需用戶(hù)干預。 USB設備也不涉及IRQ沖突等問(wèn)題,它單獨使用自己的保留中斷,不會(huì )同其它設備爭用PC機有限的資源,為用戶(hù)省去了硬件配置的煩惱。USB設備能真正做到“即插即用”。
2.2速度加快
快速性能是USB技術(shù)的突出特點(diǎn)之一。USB接口的最高傳輸率比串口快了整整100倍,也比并口快了十多倍。今后USB的速度還將會(huì )不斷提高。
2.3連接靈活
USB接口支持多個(gè)不同設備的串列連接,一個(gè)USB口理論上可以連接127個(gè)USB設備。而每個(gè)外設間距離(電纜長(cháng)度)可達5米。USB還能智能識別USB鏈上外圍設備的接入或拆卸。 在USB方式下,所有的外設都在機箱外連接,不必打開(kāi)機箱;
2.4獨立供電
普通使用串口、并口的設備都需要單獨的供電系統,而USB設備則不需要,因為USB接口提供了內置電源。USB電源能向低壓設備提供5V的電源,因此新的設備就不需要專(zhuān)門(mén)的交流電源了,從而降低了這些設備的成本并提高了性?xún)r(jià)比。
3、通信流程
在應用程序與設備開(kāi)始通信之前,設備必須先連接在總線(xiàn)上。然后Windows檢測該設備,通過(guò)設備列舉,取得設備的各種描述符。Windows將從該設備所讀取的描述符,與它的.inf文件做比較來(lái)識別該設備,找出應該使用哪個(gè)設備驅動(dòng)程序來(lái)與設備通信,然后載入選定的驅動(dòng)程序。
接下來(lái)應用程序取得一個(gè)設備的句柄,此句柄讓?xiě)贸绦蜃R別該設備以及與它通信。設備的句柄是一個(gè)惟一的標識符,由Windows指定給每個(gè)設備的實(shí)例變量。應用程序通過(guò)調用帶有一個(gè)能識別該設備的符號鏈接的CreateFile API函數,來(lái)取得該設備的句柄。該符號鏈接包含一個(gè)全域惟一標識符(globally unique identifier,GUID)。GUID是一個(gè)128位的號碼,Windows用來(lái)惟一識別一個(gè)對象。
當設備已經(jīng)連接好準備傳輸數據后,主機就可以開(kāi)始要求傳輸。當用戶(hù)要讀取一個(gè)數據捕獲單位的數據時(shí),他可以按下應用程序的按鈕來(lái)讀取一個(gè)讀數,或是選擇讓?xiě)贸绦蛎糠昼娨笠粋€(gè)讀數。
在用戶(hù)請求一個(gè)傳輸之后,應用程序開(kāi)始與設備通信。它通過(guò)API函數來(lái)與USB設備溝通。API包含有3個(gè)與設備交換數據的函數:ReadFile,WriteFile和DeviceControl。 ReadFIle與WriteFile是一般用途的函數,用來(lái)讀取與寫(xiě)入數據到驅動(dòng)程序內。讀取與寫(xiě)入的數據,是儲存在函數所指定的緩沖區內。DeviceIoControl是另一個(gè)傳輸緩沖區數據的函數,它包含一個(gè)碼用來(lái)識別一個(gè)特定的要求。與ReadFile和WriteFile不同的是,DeviceIoControl函數可以雙向傳輸數據。
當一個(gè)應用程序啟動(dòng)一個(gè)API調用來(lái)讀/寫(xiě)一個(gè)USB設備時(shí),Windows把此調用傳遞給合適的設備驅動(dòng)程序。設備驅動(dòng)程序把請求轉換為USB總線(xiàn)類(lèi)驅動(dòng)能理解的格式。
當應用程序與設備的通信結束時(shí),對于此設備驅動(dòng)程序的句柄就必須通過(guò)CloseHandle API釋放出來(lái)。當其中的一個(gè)應用程序調用CloseHandle函數,驅動(dòng)程序首先收到“清除”IRP,驅動(dòng)程序應當在“清除”例程中清除和此設備有關(guān)的待處理的IRP。然后收到“關(guān)閉”設備對象。到此,一個(gè)完整的通信過(guò)程就完成了。
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)
評論