国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

USB接口與上位機(jī)軟件設(shè)計(jì)

2020-06-04 03:56:10鄒連英
自動(dòng)化與儀表 2020年5期
關(guān)鍵詞:固件驅(qū)動(dòng)程序端點(diǎn)

鄒連英,高 寧

(武漢工程大學(xué) 電氣信息學(xué)院,武漢430205)

在現(xiàn)代科學(xué)研究、工業(yè)生產(chǎn)和工作環(huán)境下,對(duì)各種電子設(shè)備產(chǎn)生的數(shù)據(jù)進(jìn)行采集、處理和傳輸?shù)倪^程是必不可少的。USB 接口作為外設(shè)和主機(jī)間的一種高速、穩(wěn)定、靈活的雙向數(shù)據(jù)通道,在數(shù)據(jù)采集、工業(yè)控制和日常生活中具有廣泛的應(yīng)用[1]。由于其支持熱插拔且價(jià)格低廉的特性,如今已成為各種計(jì)算機(jī)和電子設(shè)備外設(shè)接口的首選解決方案[2]。

USB2.0 支持低速1.5 Mb/s、全速12 Mb/s、高速480 Mb/s 三種速率,本文結(jié)合USB2.0 的Slave FIFO工作方式和高速的傳輸速率,以Cypress 公司的CY7C68013 芯片為核心,設(shè)計(jì)和開發(fā)了滿足一般微處理器實(shí)現(xiàn)數(shù)據(jù)傳輸和控制的固件程序和上位機(jī)人機(jī)界面程序。

1 USB 芯片選型

USB 芯片將USB 總線的底層協(xié)議封裝起來提供指令給用戶使用,使用戶脫離復(fù)雜的底層邏輯,直接通過發(fā)送指令控制數(shù)據(jù)傳輸實(shí)現(xiàn)主機(jī)和設(shè)備間的通訊和控制。為了實(shí)現(xiàn)復(fù)雜的數(shù)據(jù)傳輸和指令控制功能,一般USB 芯片需要通過多個(gè)I/O 接口驅(qū)動(dòng)外圍邏輯電路[3-4]。

USB 接口芯片根據(jù)內(nèi)部是否嵌入微控制器分為2 種類型。內(nèi)部沒有嵌入微控制器的USB 接口芯片只能處理與USB 相關(guān)的通信工作,但價(jià)格比較低廉。這種類型的芯片有National Semiconductor 公司的USBN9602/9603,Philips 公 司 的PDIUSB11/11A/12 系列等。對(duì)于內(nèi)部已經(jīng)嵌入微控制器的USB 接口芯片類型,它們能夠完成擴(kuò)展的USB 基礎(chǔ)功能,這類芯片資料豐富,一般具有官方例程提供API 函數(shù)實(shí)現(xiàn)USB 功能,易于芯片的開發(fā)。如Cypress 公司的基于增強(qiáng)型8051 內(nèi)核的EZ-USB FX2 系列,Atmel公司的基于AVR 的AT76C711 等。

在本設(shè)計(jì)中選擇Cypress 公司生產(chǎn)的CY7C68013A芯片。該芯片提供的資料豐富,功能完整,應(yīng)用比較廣泛,能夠滿足數(shù)據(jù)傳輸速度的要求,價(jià)格比較合理。此外,擁有內(nèi)嵌微處理器的CY7C68013A 可以將USB 固件程序通過USB 下載到片上RAM 存儲(chǔ)器,且不需要額外設(shè)備,開發(fā)比較方便。

2 USB 固件程序設(shè)計(jì)

2.1 Slave FIFO 工作模式介紹

EZ-USB 系列的芯片在進(jìn)行數(shù)據(jù)的批量傳輸時(shí),主要有Slave FIFO 和GPIF 兩種模式。Slave FIFO模式相對(duì)來說更加常用,這種工作模式將數(shù)據(jù)的傳輸都看作為對(duì)普通FIFO 的讀和寫,外部邏輯電路作為USB 的主控制器,上位機(jī)作為從控制器,USB芯片作為傳輸?shù)耐ǖ烂撾x出來。外部邏輯電路產(chǎn)生Slave FIFO 需要的傳輸時(shí)序,即可與上位機(jī)進(jìn)行通訊。圖1為Slave FIFO 工作模式的連接示意圖。其中FD 數(shù)據(jù)總線作為外部邏輯和USB 芯片的傳輸通道,F(xiàn)IFOADR[1:0]用于選擇緩沖區(qū)端點(diǎn),F(xiàn)LAGA、FLAGB、FLAGC 用于給出緩沖區(qū)空滿標(biāo)志,SLRD和SLWR 分別是FIFO 讀/寫選通信號(hào),SLOE 控制輸出。

由于Slave FIFO 的讀寫是由外部邏輯控制的,則需要在外部邏輯芯片上設(shè)計(jì)讀寫狀態(tài)機(jī)以控制讀寫引腳邏輯。為了便于對(duì)整個(gè)系統(tǒng)的控制,本設(shè)計(jì)對(duì)端點(diǎn)間FIFO 數(shù)據(jù)采用異步方式進(jìn)行讀、寫。讀寫邏輯可以根據(jù)FIFO 的空滿標(biāo)志,在外部邏輯上通過狀態(tài)機(jī)編程實(shí)現(xiàn)。

圖1 Slave FIFO 工作模式連接圖Fig.1 Slave FIFO connection diagram

2.2 固件程序功能設(shè)計(jì)

設(shè)計(jì)固件程序的目的就是為了控制硬件設(shè)備完成預(yù)定的目標(biāo),基于微控制器及其外圍電路的硬件設(shè)備的正常工作都需要固件的參與和控制[5]。本設(shè)計(jì)采用了基于Slave FIFO 的自動(dòng)數(shù)據(jù)傳輸模式,這種模式能將配置好后的端點(diǎn)FIFO 內(nèi)的數(shù)據(jù)自動(dòng)發(fā)送或接收到USB 主機(jī),只需要配置相應(yīng)寄存器即可。USB 芯片的固件程序主要負(fù)責(zé)處理上位機(jī)發(fā)來的USB 設(shè)備請(qǐng)求,同時(shí)也控制芯片的外圍電路進(jìn)行數(shù)據(jù)傳輸。包括5 個(gè)方面:

(1)給特殊功能寄存器賦值,初始化設(shè)備;

(2)對(duì)主機(jī)的設(shè)備請(qǐng)求進(jìn)行響應(yīng),完成主機(jī)對(duì)設(shè)備的控制;

(3)設(shè)備枚舉、數(shù)據(jù)傳輸、標(biāo)準(zhǔn)主機(jī)請(qǐng)求等動(dòng)作過程中會(huì)向微控制器申請(qǐng)中斷,響應(yīng)這些中斷以保證USB 芯片的正常工作;

(4)對(duì)發(fā)送和接收數(shù)據(jù)的端點(diǎn)進(jìn)行配置和控制,實(shí)現(xiàn)數(shù)據(jù)的正確發(fā)送和接收;

(5)對(duì)外圍電路進(jìn)行控制,保證設(shè)備正常工作。

2.3 固件程序框架

Cypress 公司的官方網(wǎng)站為設(shè)計(jì)者提供了開發(fā)固件的程序框架和豐富資料。設(shè)計(jì)者可以在這些框架的基礎(chǔ)上在相應(yīng)的地方添加合適的代碼以完成特定用戶需求,即可讓USB 固件完成和實(shí)現(xiàn)相關(guān)設(shè)計(jì)。

固件框架通過一個(gè)任務(wù)循環(huán)來控制和使用USB 傳輸,首先會(huì)初始化所有設(shè)備內(nèi)部狀態(tài)變量,然后調(diào)用用戶初始化函數(shù)TD_Init(),接著進(jìn)行重枚舉,重枚舉完成后固件程序開始進(jìn)行任務(wù)調(diào)度。主要任務(wù)有用戶任務(wù)函數(shù)TD_Poll(),標(biāo)準(zhǔn)設(shè)備請(qǐng)求和掛起事件。其中TD_Init()函數(shù)需要定義全局變量和參數(shù)的初始化,設(shè)置Slave FIFO 的時(shí)鐘頻率、傳輸方向、端點(diǎn)選擇、端點(diǎn)深度等。TD_Poll()函數(shù)實(shí)現(xiàn)任務(wù)的調(diào)度和實(shí)施,包含了用戶預(yù)期工作任務(wù)的主要部分,通過主循環(huán)不斷被調(diào)用,本設(shè)計(jì)端點(diǎn)工作方式為自動(dòng)讀寫,所以這個(gè)函數(shù)沒有相應(yīng)設(shè)置。

3 上位機(jī)人機(jī)界面設(shè)計(jì)

3.1 應(yīng)用程序開發(fā)

USB 數(shù)據(jù)采集系統(tǒng)應(yīng)用場(chǎng)合多、領(lǐng)域廣,界面程序的開發(fā)不同于其他部分開發(fā)的特殊要求,用戶一般希望界面可以實(shí)現(xiàn)設(shè)備管理和數(shù)據(jù)處理的功能并且盡可能的直觀、簡(jiǎn)潔。從用戶的需求出發(fā)在上位機(jī)界面上有如下構(gòu)想:

(1)上位機(jī)的角色一般由PC 機(jī)來承擔(dān),工作在Windows 操作系統(tǒng)下,所以上位機(jī)界面的設(shè)計(jì)需要Windows 平臺(tái)下的開發(fā)工具,如VB、VS、LabVIEW、DELPHI 等,本設(shè)計(jì)采用Visual Studio 2010(簡(jiǎn)稱VS2010)。

(2)應(yīng)用軟件采用在MFC 框架基礎(chǔ)上開發(fā)的對(duì)話框程序界面。MFC(Microsoft Foundation Classes)是微軟基礎(chǔ)類庫(kù)的簡(jiǎn)稱,主要封裝了大部分Windows API 函數(shù)。本質(zhì)上MFC 類庫(kù)是C++語言和Windows 操作系統(tǒng)間的接口,使用MFC 編程是選擇類庫(kù)中合適的類,通過調(diào)用類中的成員函數(shù)實(shí)現(xiàn)相應(yīng)功能[6]。使用MFC 框架的程序界面可以使用戶更容易學(xué)習(xí)和熟悉程序的使用方法。

(3)使用Cypress 公司提供的開發(fā)包中的CyAPI控制函數(shù)類庫(kù),在使用Cypress 公司的通用USB 驅(qū)動(dòng)程序的基礎(chǔ)上,在VS2010 的界面工程中加入CyAPI.h 和CyAPI.lib 即可調(diào)用USB 設(shè)備控制函數(shù),完成USB 傳輸任務(wù)。

3.2 功能模塊介紹

Windows 應(yīng)用程序工作的基本流程是與用戶發(fā)出的命令進(jìn)行交互,然后把交互處理結(jié)果輸出到屏幕,這樣的過程就需要用戶接口,即對(duì)話框,也即一個(gè)可以接收消息、反饋消息、被移動(dòng)、被關(guān)閉的窗口。綜合用戶的功能要求對(duì)界面的模塊進(jìn)行了劃分,整個(gè)界面分為了設(shè)置區(qū)、設(shè)備區(qū)、路徑保存區(qū)和執(zhí)行區(qū)4 個(gè)部分,如圖2所示。

其中設(shè)置區(qū)對(duì)USB 設(shè)備的端點(diǎn)進(jìn)行選擇,設(shè)置每個(gè)包傳輸?shù)淖畲蟠笮?、傳輸初值和遇錯(cuò)停止等。設(shè)備區(qū)的下拉菜單選擇連接到上位機(jī)的USB 設(shè)備,刷新程序。路徑選擇區(qū)點(diǎn)擊按鈕選擇文件存儲(chǔ)路徑。執(zhí)行區(qū)能夠開始和停止USB 傳輸任務(wù),復(fù)位USB 設(shè)備和查看USB 任務(wù)執(zhí)行過程中的信息。

圖2 上位機(jī)界面圖Fig.2 Interface diagram of upper computer

4 USB 設(shè)備驅(qū)動(dòng)程序的使用

4.1 驅(qū)動(dòng)程序的介紹

應(yīng)用程序在訪問硬件設(shè)備時(shí)需要通過驅(qū)動(dòng)程序作為軟件接口,驅(qū)動(dòng)程序讓應(yīng)用程序在訪問硬件時(shí),屏蔽具體設(shè)備的物理連接和底層協(xié)議。USB 總線設(shè)備驅(qū)動(dòng)程序遵循由微軟定義的Win32 驅(qū)動(dòng)程序模型WDM(Windows Drivers Model),擴(kuò)展名一般為.sys。WDM 驅(qū)動(dòng)程序負(fù)責(zé)在一個(gè)特權(quán)層實(shí)現(xiàn)應(yīng)用程序和操作系統(tǒng)的通信,例如一個(gè)驅(qū)動(dòng)程序通過允許或保留某個(gè)應(yīng)用程序?qū)τ布氖褂脵?quán)限實(shí)現(xiàn)對(duì)硬件中斷的響應(yīng)和DMA 傳輸[7]。開發(fā)驅(qū)動(dòng)程序是整個(gè)USB 開發(fā)中最難、涉及知識(shí)最多、實(shí)現(xiàn)方式較底層的部分,但Cypress 公司針對(duì)EZ-USB 系列芯片提供了一套通用的驅(qū)動(dòng)程序(ezusb.sys),能夠完成一般的USB 任務(wù)。除非項(xiàng)目中需要特殊USB 功能,通常使用通用驅(qū)動(dòng)程序即可。

4.2 驅(qū)動(dòng)程序的加載

Windows 使用USB 設(shè)備描述符中的產(chǎn)商ID(VID)和產(chǎn)品ID(PID)來尋找匹配設(shè)備的驅(qū)動(dòng)程序。INF 文件描述了驅(qū)動(dòng)程序和VID、PID 的連接關(guān)系。當(dāng)Windows 發(fā)現(xiàn)新的設(shè)備連入時(shí),會(huì)掃描所有可以選擇的INF 文件,選擇與ID 最匹配的INF 文件,若找不到則需用戶指定地址。找到INF 文件后,系統(tǒng)將驅(qū)動(dòng)程序可執(zhí)行文件復(fù)制到正確地址,驅(qū)動(dòng)程序被裝入內(nèi)存,然后就可以進(jìn)行正常的I/O 操作了。

5 實(shí)驗(yàn)結(jié)果

對(duì)數(shù)據(jù)采集的結(jié)果進(jìn)行驗(yàn)證,在上位機(jī)程序中選定USB 設(shè)備并輸入開始按鈕特征值,點(diǎn)擊開始按鈕,外部電路或模擬信號(hào)收到開始特征值數(shù)據(jù)包并解析其中參數(shù),根據(jù)開始包中的參數(shù)確定實(shí)驗(yàn)時(shí)間和實(shí)驗(yàn)次數(shù)。系統(tǒng)開始工作后上位機(jī)接收到的數(shù)據(jù)會(huì)直接存入txt 文件中,測(cè)試結(jié)果如圖3所示,可以看出,經(jīng)實(shí)際測(cè)試,數(shù)據(jù)傳輸準(zhǔn)確無誤,沒有出現(xiàn)數(shù)據(jù)的丟包、混亂等錯(cuò)誤,傳輸速率可達(dá)30 MHz/s 以上,滿足設(shè)計(jì)要求。

圖3 數(shù)據(jù)傳輸結(jié)果圖Fig.3 Result diagram of data transmission

6 結(jié)語

本文以外部電路的數(shù)字信號(hào)采集平臺(tái)和PC 機(jī)之間的數(shù)據(jù)傳輸及指令控制的工程研究為背景,進(jìn)行了基于USB 總線技術(shù)的Slave FIFO 工作模式的數(shù)據(jù)傳輸系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn),并對(duì)這個(gè)系統(tǒng)的功能和模塊進(jìn)行了詳細(xì)的研究和分析。USB 控制器CY7C68013 已經(jīng)被廣泛應(yīng)用到許多數(shù)據(jù)傳輸領(lǐng)域,由于USB 具有靈活的接口和可編程特性,提高了系統(tǒng)可靠性和可擴(kuò)展性。希望本文能夠?yàn)閿?shù)據(jù)采集和傳輸?shù)难芯繉W(xué)者提供一些參考和啟發(fā)。

猜你喜歡
固件驅(qū)動(dòng)程序端點(diǎn)
非特征端點(diǎn)條件下PM函數(shù)的迭代根
不等式求解過程中端點(diǎn)的確定
參數(shù)型Marcinkiewicz積分算子及其交換子的加權(quán)端點(diǎn)估計(jì)
基于固件的遠(yuǎn)程身份認(rèn)證
基丁能雖匹配延拓法LMD端點(diǎn)效應(yīng)處理
提取ROM固件中的APP
電腦愛好者(2015年7期)2015-04-09 08:54:02
一種通過USB接口的可靠固件升級(jí)技術(shù)
奧林巴斯XZ—2新固件升級(jí)
驅(qū)動(dòng)程序更新與推薦
驅(qū)動(dòng)程序更新與推薦
日喀则市| 恭城| 新野县| 兴宁市| 正定县| 宣恩县| 凌源市| 东源县| 崇信县| 右玉县| 罗源县| 黔南| 南岸区| 临夏市| 斗六市| 忻州市| 灌云县| 余姚市| 邯郸市| 泾川县| 壤塘县| 白玉县| 黄梅县| 天长市| 安庆市| 镶黄旗| 吴堡县| 蒲江县| 赣榆县| 楚雄市| 葫芦岛市| 呈贡县| 界首市| 香格里拉县| 巴南区| 陆良县| 西乌| 西盟| 元阳县| 扎囊县| 兴宁市|