<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > USB技術(shù)在情報指揮系統維修模擬器中的應用

USB技術(shù)在情報指揮系統維修模擬器中的應用

作者: 時(shí)間:2007-09-14 來(lái)源:網(wǎng)絡(luò ) 收藏
摘要:情報維修訓練器中采用作為計算機與仿真單體的接口,本文從工作原理、硬件設計、固件程序、主機程序和驅動(dòng)程序五個(gè)方面論述了接口的開(kāi)發(fā)過(guò)程,并給出了基于控制傳輸的系統設計方法。
關(guān)鍵詞:USB;控制傳輸;固件;驅動(dòng)

1、工作原理

情報維修訓練器屬于分布式仿真系統,系統結構如圖1所示。其中,各仿真節點(diǎn)由單體計算機和仿真單體組成,仿真網(wǎng)絡(luò )采用局域網(wǎng),主控機用于集中配置各單體參數,觸摸屏用于操作界面。因為USB總線(xiàn)具有結構簡(jiǎn)單、即插即用、低功耗、廣泛的軟硬件支持等優(yōu)點(diǎn),傳輸速度也從USB1.1協(xié)議支持的12Mbps 發(fā)展到了USB2.0協(xié)議支持的480Mbps,另外其星型拓撲結構能支持多達127個(gè)外設同時(shí)工作,所以本系統采用USB總線(xiàn)來(lái)實(shí)現單體計算機和仿真單體之間的控制和通信。

圖1系統框圖

1.1 USB的枚舉與重枚舉

USB芯片具有軟特性,外設可以利用USB接口從主機下載8051程序代碼到內部RAM運行,而不需要外部程序存儲器,方便了固件調試和升級。為支持這種軟特性,USB將端點(diǎn)0作為默認地址,外設初次連接主機時(shí)作為默認設備使用端點(diǎn)0進(jìn)行自動(dòng)枚舉,當固件下載到內部RAM后,經(jīng)過(guò)重枚舉使外設具有用戶(hù)在固件中設置的功能屬性。

外設和主機連接時(shí)會(huì )自動(dòng)加載驅動(dòng)程序,加載什么驅動(dòng)程序由USB設備描述符中的VID(2個(gè)字節)和PID(2個(gè)字節)決定,默認設備的VID和PID是0547和2131。當有多個(gè)外設同時(shí)工作時(shí),需要不同的VID和PID加以區分,可利用EEPROM來(lái)存儲外設的VID和PID信息,以便加載對應的驅動(dòng)程序。

1.2 USB傳輸類(lèi)型

USB定義了控制、中斷、批量和同步四種數據傳輸類(lèi)型??刂苽鬏斒亲顝碗s和重要的傳輸類(lèi)型,也是USB枚舉階段最主要的數據交換方式。USB設備初次連到主機后就是通過(guò)控制傳輸來(lái)讀取地址信息和設備描述符的,這樣主機才能識別設備并安裝相應的驅動(dòng)程序,其它三種傳輸方式也才能夠得以使用。因此,控制傳輸是其它三種傳輸的前提和基礎。

中斷傳輸主要用于數據量小、速度要求不高的數據傳輸,如鼠標、鍵盤(pán)等;批量傳輸主要用于大容量數據的傳輸,比如硬盤(pán)接口、刻錄機接口等;同步傳輸多用于音頻流等需要恒定傳輸速率的數據傳輸,比如音箱、顯示器的接口等。

在維修模擬訓練器中,單體計算機和仿真單體之間傳輸的主要是控制信息,數據量不大,因此主要采用控制傳輸。

2、 USB硬件電路設計

USB硬件電路的核心是USB芯片,本電路采用的是Cypress公司提供的AN2131QC,封裝形式為80引腳PQFP。其結構框圖如圖2所示,USB收發(fā)器與USB總線(xiàn)的 D+和D-相連,串行接口引擎對串行數據進(jìn)行編碼和譯碼,并執行錯誤更正、位填充等操作,最后發(fā)送數據字節到端口或從端口接收數據字節。內部微處理器是一個(gè)改進(jìn)的8051內核,使用標準的8051指令系統,但執行速度更快,功能更強,與標準8051相比具有以下不同:

(1)一個(gè)總線(xiàn)周期包含4個(gè)時(shí)鐘周期,空閑周期被消去,而標準8051則為12個(gè)時(shí)鐘周期,因此速度提高了3倍;

(2)增加了第二個(gè)數據指針;

(3)增加了第二個(gè)UART;

(4)增加了第三個(gè)16位定時(shí)器;

(5)非多路復用的16位地址總線(xiàn);

(6)增加了8個(gè)中斷。

設計AN2131QC的外圍電路時(shí),要注意以下幾個(gè)問(wèn)題:

(1)AN2131QC有總線(xiàn)供電和外部供電兩種供電方式,主機可以向外圍USB設備提供最大500mA的電流,當USB設備耗電小于500mA時(shí)就可以使用總線(xiàn)供電。AN2131QC的工作電壓是+3.3V,總線(xiàn)提供的電壓是+5V,可以用電壓轉換芯片MAX882或AMS1117進(jìn)行電壓轉換。電源引腳2、21、22、42、62都接+3.3V,并通過(guò)一個(gè)0.1uF電容接地,使電壓更加穩定。引腳5、6、13、14、72通過(guò) 1K電阻接地。

(2)USBD+和USBD-通過(guò)24Ω電阻接到USB總線(xiàn)的D+和D-,可抑制噪聲干擾。

(3)Xin(19)和Xout(20)之間接12MHz晶振,并通過(guò)兩個(gè)30pF電容接地。

(4)Reset(25)引腳通過(guò)0.1uF電容接+3.3V,10K電阻接地。

(5)SDA(64)、SCL(65)、Wakeup(66)、WR(40)、RD(41)通過(guò)10K上拉電阻接+3.3V。

3、 固件程序

USB固件程序用Keil C編寫(xiě),使用Keil uVision編譯器進(jìn)行編譯調試。一個(gè)USB固件主要包括以下文件:

Fw.c:固件框架源文件,main()函數就位于該文件中;

Periph.c:用戶(hù)函數定義,用戶(hù)初始化函數TD_Init()和用戶(hù)函數TD_Poll()的定義就位于該文件中;

Dscr.a51:USB描述符表,對加載驅動(dòng)程序有重要意義的VID和PID信息就位于該文件的設備描述符中;

Ezusb.lib:EZ-USB固件函數庫;

USBJmpTb.OBJ:中斷向量和跳轉表。

Ezusb.h、Ezregs.h:編寫(xiě)程序時(shí)必須包括的頭文件,前者包含USB函數庫的常量定義、宏定義、全局變量聲明和函數原型等,后者包含位標志定義和寄存器變量聲明。

固件程序的運行流程如圖3所示,USB上電復位后進(jìn)入main()函數先初始化內部狀態(tài)變量,然后調用用戶(hù)初始化函數TD_Init()。從該函數返回后使能中斷,然后每隔1s進(jìn)行一次設備重枚舉直到端點(diǎn)0接受到主機的SETUP數據包。檢測到SETUP包后開(kāi)始任務(wù)調度,任務(wù)調度的步驟如下:

(1)調用用戶(hù)函數SetupCommand(),判斷是否受到SETUP包;

(2)分析判斷SETUP包,如果是標準設備請求命令則執行標準請求,如果是用戶(hù)請求命令則調用TD_Poll()進(jìn)行數據處理并反饋給主機結果;

(3)判斷是否收到USB掛起信號,收到則調用TD_Suspend()。從該函數返回后再檢測是否發(fā)生USB喚醒事件,未檢測到則處理器進(jìn)入掛起狀態(tài),否則調用TD_Resume(),程序繼續運行。

需要用戶(hù)自己編寫(xiě)的代碼主要包括TD_Init()、TD_Poll()。在本系統中,TD_Init()主要完成端點(diǎn)的選擇和配置,以及外圍器件的初始化。TD_Poll()將根據接收的主機命令對數據進(jìn)行處理,之后將處理結果或狀態(tài)信息反饋給主機。

4、 主機程序

主機程序主要用于發(fā)送用戶(hù)命令和參數,接收USB設備的運行狀態(tài)和處理結果。本系統的主機程序用VC++6.0編寫(xiě)實(shí)現,因為采用的是控制傳輸,用到的主要函數是CreateFile()和DeviceIoControl()。前者用于獲得設備句柄,其本質(zhì)是先由設備驅動(dòng)器生成一個(gè)句柄,然后將這個(gè)句柄分配給外設。獲得設備句柄后,用DeviceIoControl()對設備進(jìn)行讀寫(xiě)。主要程序代碼如下:

DeviceHANDLE=CreateFile(".ezusb-0",

GENERIC_WRITE,

FILE_SHARE_WRITE,

NULL,

OPEN_EXISTING,

0,

NULL);

If (DeviceHANDLE==INVALID_HANDLE_VALUE)

MessageBox("無(wú)法創(chuàng )建設備","Information Box",MB_OK|MB_ICONINFORMATION);

else

bResult=DeviceIoControl(DeviceHANDLE,

IOCTL_EZUSB_VENDOR_OR_CLASS_REQUEST,

myrequest,

sizeof(VENDOR_OR_CLASS_REQUEST_CONTROL),

returndata,

n,

nBytes,

NULL);

在本系統中,主機發(fā)送給外設最多的是VENDOR_OR_CLASS_REQUEST_CONTROL類(lèi)型的請求,其結構定義如下:

typedef struct _VENDOR_OR_CLASS_REQUEST_CONTROL

{

UCHAR direction; //傳輸方向,0為主機到設備,1為設備到主機

UCHAR requestType; //請求類(lèi)型,0為用戶(hù),1為類(lèi)

UCHAR recepient; //接收者類(lèi)型,0為設備,1為接口,2為端點(diǎn),3為其他

UCHAR requestTypeReservedBits;

UCHAR request;

USHORT value;

USHORT index;

};

其中后四個(gè)參數分別對應于設備請求命令的bRequestType、bRequest、wValue和wIndex(具體定義參考文獻[1]),因為發(fā)送的是用戶(hù)自己的設備請求命令而非標準設備請求命令,所以bRequestType的值可設為0;且bRequest的值不能與標準設備請求命令的bRequest值相沖突;雙字節的value和index可用來(lái)傳遞主機給USB設備的參數。

5、 驅動(dòng)程序

要實(shí)現USB設備的固件下載和重枚舉需要編寫(xiě)兩個(gè)驅動(dòng)程序,通用驅動(dòng)(GPD)和固件裝載驅動(dòng)。前者完成主機與外設的通信和控制,一般不用重新編寫(xiě),可直接采用Cypress公司提供的ezusb.sys。后者負責在外設連到主機時(shí)將正確的驅動(dòng)程序裝載到AN2131QC的RAM中,完成對外設的重新設置。主機根據新的設置安裝通用驅動(dòng),重新枚舉外設為一個(gè)新的USB設備。固件裝載驅動(dòng)的開(kāi)發(fā)過(guò)程如下:

(1)新建一個(gè)目錄dev_io,將Cypressusbdriversezloader目錄下的文件復制到該目錄下。

(2)打開(kāi)該目錄下的sources文件,將TARGETNAME=ezloader改為T(mén)ARGETNAME=dev_io。

(3)利用hex2c將dev_io.hex轉換為dev_io.c: hex2c dev_io.hex dev_io.c

(4)將fireware.c中的fireware[]數組用dev_io.c中的fireware[]數組替換。

(5)進(jìn)入C:NTDDKBIN目錄,在命令行方式下鍵入SETENV C:NTDDK回車(chē),此時(shí)顯示設置環(huán)境完成,然后返回dev_io運行BUILD Cc,這時(shí)會(huì )在dev_iolibi386free或checked目錄下生成我們需要的固件裝載設備驅動(dòng)程序,將該驅動(dòng)程序復制到c:windowssystem32drivers目錄下。

(6)為了使該驅動(dòng)程序正確工作,必須為它寫(xiě)一個(gè)安裝信息文件,即.inf文件。它將設備的VID和PID綁定到特定的設備驅動(dòng)程序上??煞抡臻_(kāi)發(fā)包提供的inf文件編寫(xiě),具體步驟參見(jiàn)文獻[5]。

6、結束語(yǔ)

本文從工作原理、硬件設計、固件程序、主機程序和驅動(dòng)程序五個(gè)方面系統論述了情報維修模擬訓練器中USB接口開(kāi)發(fā)的全過(guò)程,并給出了基于控制傳輸的USB系統設計方法,為今后的維修模擬訓練系統開(kāi)發(fā)提供了一種規范、快捷的接口設計方法。

本文的創(chuàng )新觀(guān)點(diǎn)主要有兩點(diǎn):1、與傳統的VXI、PXI等總線(xiàn)相比,在情報指揮系統維修模擬訓練器中采用USB總線(xiàn)作為仿真單體和單體計算機之間的接口能簡(jiǎn)化硬件,即插即用,使仿真單體具有便攜能力。2、USB接口支持多達127個(gè)外設的能力使系統具有很強的單體擴展能力,而且支持多個(gè)單體同時(shí)工作。

參考文獻

[1] 馬偉.計算機USB系統原理及其主/從機設計.北京:北京航空航天出版社.2002
[2] 顏榮江,俞志強,張進(jìn),陰大興.EZ-USB2100系列單片機原理、編程及應用.北京:北京航空航天出版社.2002
[3] 王宏,王鑫,李輝,周云峰,孫書(shū)鷹. usb技術(shù)在虛擬維修訓練系統.電腦開(kāi)發(fā)與應用.2004年第17卷第3期.26-29
[4] 邵高平. 通用串行總線(xiàn)(usb)及其開(kāi)發(fā)方法.微計算機信息. 1995年第15卷第3期.10-12
[5] Cypress Semiconductor Corporation, EZLOADER Design Notes, 98.5;



關(guān)鍵詞: USB 指揮系統 模擬 中的應用

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>