摘 要: 介紹了一種利用USB通信協(xié)議的方法實現(xiàn)下位機與上位機之間的通信傳輸。該方法以滿足符合標(biāo)準(zhǔn)的USB2.0協(xié)議為基礎(chǔ),以EZ-USB FX2為設(shè)計的基礎(chǔ)構(gòu)架,以Cypress公司推出最具性價比的一種內(nèi)嵌增強51單片機的芯片CY7C68013為核心,來構(gòu)建下位機與上位機的數(shù)據(jù)傳輸通道。給出了系統(tǒng)的硬件設(shè)計方案、固件驅(qū)動程序以及計算機端的應(yīng)用程序設(shè)計方法及流程。通過USB數(shù)據(jù)通信表明,USB2.0高速接口的帶寬能夠達(dá)到480 Mb/s的通信速率,能夠充分滿足普通接口數(shù)據(jù)傳輸所需速率,有效提高了傳輸效率,并且能將接收到的數(shù)據(jù)保存在計算機系統(tǒng)中,以備使用。因此,USB2.0通信接口的設(shè)計在數(shù)據(jù)傳輸?shù)膶嶋H運用中有值得探索的價值。
關(guān)鍵詞: 數(shù)據(jù)傳輸;USB2.0;高速接口;相互通信;驅(qū)動程序
0 引言
隨著多媒體技術(shù)的發(fā)展,對外設(shè)與主機之間的數(shù)據(jù)傳輸率有了更高的要求,且傳統(tǒng)的計算機與外設(shè)通過串行、并行或PCI總線傳輸,要占用計算機系統(tǒng)資源,擴展性較差,而且傳輸速率和通信距離有限,已無法滿足計算機外設(shè)發(fā)展需求[1],對于傳統(tǒng)的RS232串口通信來說也很難滿足與上位機之間所需要的10 Mb/s以上的通信速率,因此,USB總線技術(shù)應(yīng)運而生。目前,國內(nèi)外主要采用USB1.1和USB2.0這兩種規(guī)范,USB1.1主要用于低速傳輸要求的場合,支持1.5 Mb/s和12 Mb/s傳輸速率。而USB2.0規(guī)范則能提高到480 Mb/s[2],盡管如此,在某些特定的傳輸速率與外圍設(shè)備系統(tǒng)中,外設(shè)與USB接口上仍存在不可忽視的瓶頸。
但是由Cypress公司生產(chǎn)的USB2.0控制器CY7C68013提供了一種獨特的接口方式,即通用可編程接口(GPIF)方式,不僅很容易滿足USB通信接口的傳輸要求,并且較傳統(tǒng)接口方式而言有如下兩大優(yōu)點[3]:(1)數(shù)據(jù)傳輸過程中不需要CPU的干涉,使得傳輸速率明顯提高,從而充分利用USB2.0的傳輸寬帶;(2)由軟件設(shè)置讀寫控制,提高傳輸穩(wěn)定性。因此,本文把GPIF接口功能的優(yōu)勢綜合利用在設(shè)計中并合理配置,使數(shù)據(jù)能夠快速下載并上傳到計算機上保存及顯示。
1 USB接口硬件電路設(shè)計
1.1 系統(tǒng)總體設(shè)計框圖
系統(tǒng)的總體設(shè)計由電源電平轉(zhuǎn)換電路、串行EEPROM電路、主芯片最小系統(tǒng)電路、引出口電路和PC-USB接口5部分組成,連接框圖如圖1所示。
該USB高速接口模塊是作為與上位機通信傳輸?shù)囊粋€重要橋梁,所以PC-USB接口必不可少,用USB線連接完成該電路與計算機的傳輸總線,采用CY7C68013芯片的GPIF接口模式來完成控制信號的發(fā)送與數(shù)據(jù)的讀取。因此,該模塊的電源也由USB總線提供。由于USB接口提供的是5 V/500 mA的電源,而由CY7C68013A芯片資料得知工作電壓為3.3 V,即需要將5 V電壓轉(zhuǎn)換成3.3 V的電平轉(zhuǎn)換模塊。串行EEPROM采用24C64(8 KB)來存放PID/VID程序,引出口電路將芯片主要管腳引出,使得與其他外設(shè)連接提供方便。
1.2 主芯片最小系統(tǒng)
采用的CY7C68013A芯片,較100和128引腳封裝,其56引腳封裝的缺少部分管腳功能,雖然不能在線仿真,但可進行簡單調(diào)試,通過廠商的請求可以完成。具體設(shè)計如圖2所示。
其最小系統(tǒng)中包含24 MHz晶振振蕩電路,晶振兩邊的電容大小范圍可取22 pF~30 pF和復(fù)位電路,復(fù)位電路1 k/0.1 F的RC電路,系統(tǒng)能夠正常上電復(fù)位。SCL是漏極開路輸出,SDA引腳是漏極遲滯輸入,在與EEPROM的SCL和SDA連接時,必須外接1.5 k~10 k的上拉電阻。PB0-PB7、PD0-PD7均為雙向I/O口引腳,也是復(fù)用引腳,可分別作為GPIF數(shù)據(jù)總線的低8位和高8位。CLKOUT引腳時鐘輸出可為12/24/48 MHz,作為其他外設(shè)的時鐘。端點2配置為寫設(shè)備地址,端點6配置為讀設(shè)備地址,每個端點都設(shè)置為4個緩沖區(qū)[4]。IFCLK為接口時鐘,作為同步時鐘數(shù)據(jù)的輸入輸出。
1.3 硬件部分工作過程
數(shù)據(jù)傳輸通信的主要控制芯片為CY7C68013,主要完成信號處理和單片機控制功能。系統(tǒng)的數(shù)據(jù)傳輸模塊通過USB連接到計算機,按下復(fù)位鍵后上電復(fù)位,功能設(shè)備將被識別并枚舉[1]。在設(shè)計中將程序下載到串行E2PROM中,主控芯片首先檢測FX2的啟動模式,若檢測到E2PROM存在且首字節(jié)是0xC2,則按C2加載。下載固件,根據(jù)USB描述符配置信息上電復(fù)位完成重枚舉[5]。再轉(zhuǎn)移到片內(nèi)8.5 KB的RAM存放數(shù)據(jù)和程序進行軟配置,配置特定端點緩沖區(qū)來進行數(shù)據(jù)的高速傳輸與讀取。其中采用GPIF可編程接口方式利用FX2的GPIF方式構(gòu)建USB數(shù)據(jù)傳輸通道,由軟件編程輸出讀寫控制波形讀取FIFO標(biāo)識,控制FIFO的選通,可對外部通用總線接口進行訪問。
2 USB接口軟件程序設(shè)計
2.1 固件程序設(shè)計
固件程序是指用于控制硬件系統(tǒng)、完成芯片的初始化的代碼,存儲在USB接口芯片或微控器中,所以FX2要先下載固件再使用,處理各種設(shè)備的請求,完善對芯片的配置,對主機與外部設(shè)備間的數(shù)據(jù)傳輸作出相應(yīng)處理,達(dá)到主機與外設(shè)通信的目的。Cypress公司為了降低用戶對固件編程的難度,提供了一套配套的固件程序開發(fā)框架,可直接在Keil C51環(huán)境中進行編譯,并可在固件庫里調(diào)用一些函數(shù)、常量或數(shù)據(jù)結(jié)構(gòu)來修改自己的程序。
固件框架的源文件包括由Keil提供的8051頭文件,庫函數(shù)聲明以及變量、宏和數(shù)據(jù)類型定義,F(xiàn)X2寄存器頭文件,固件框架源文件,用戶可修改的鉤子函數(shù),用戶可修改的USB描述符列表,EZ-USB庫文件和中斷跳轉(zhuǎn)目標(biāo)文件[6]。在上電復(fù)位程序起始時,固件程序首先會自動初始化所有的內(nèi)部變量,接著調(diào)用初始化函數(shù)TD_Init(),固件就會把USB接口設(shè)置為未配置狀態(tài)并開啟中斷使能,循環(huán)延時間隔1 s后開始設(shè)備重枚舉直到端點0接收到Setup包為止退出循環(huán)。只要檢測到了Setup包,固件構(gòu)架就會啟動與PC主機合作的分配器,執(zhí)行任務(wù)調(diào)度。固件程序框架如圖3所示。
2.2 應(yīng)用程序設(shè)計
應(yīng)用程序編寫最主要的問題是實現(xiàn)上位機向外部設(shè)備發(fā)送指定命令數(shù)據(jù)包,設(shè)備能夠接收到上位機傳遞的指定數(shù)量的數(shù)據(jù)以及在通過執(zhí)行命令后能夠向其返送數(shù)據(jù),達(dá)到上位機與設(shè)備能夠相互通信的效果。主機應(yīng)用程序通過驅(qū)動程序來完成對設(shè)備的控制和通信,采用具有友好界面的VC++6.0軟件編寫測試系統(tǒng)的應(yīng)用程序,充分利用VC++的MFC框架的豐富資源,在與設(shè)備通信時首先通過Win32函數(shù)CreateFile()來取得訪問設(shè)備驅(qū)動程序的句柄[7]。得到句柄后向設(shè)備提交相應(yīng)的IOCTL控制碼,進行讀寫和控制操作完成相應(yīng)操作后,通過Win32函數(shù)DeviceIoControl()關(guān)閉設(shè)備結(jié)束一次數(shù)據(jù)傳輸操作。在用戶編寫的TD_Poll()函數(shù)中,檢測到有命令數(shù)據(jù)包傳送,單片機將讀取EP2端點的數(shù)據(jù),直到EP2端點的數(shù)據(jù)為空,獲得上位機發(fā)送來的命令數(shù)據(jù)包。根據(jù)命令字的定義來執(zhí)行相應(yīng)操作,并向命令EP6端點寫數(shù)據(jù)發(fā)送給主機。
3 測試結(jié)果
在系統(tǒng)測試中,單片機與上位機的通信由用戶自己編譯的執(zhí)行軟件BulkLoop.exe來體現(xiàn)。
由軟件編程向單片機發(fā)送數(shù)據(jù),由控制按鈕點擊實現(xiàn)特定指令發(fā)送,在沒有獲取設(shè)備信息時顯示的是運用軟件界面信息,如圖4(a)所示,單片機在接收到數(shù)據(jù)處理后接口電路中LED燈亮暗顯示,同時獲取設(shè)備信息。單片機通過模擬按鍵向上位機發(fā)送特定數(shù)據(jù),上位機接收數(shù)據(jù),顯示的是設(shè)備信息,如圖4(b)所示。
4 結(jié)論
利用Cypress公司提供的USB2.0高速接口芯片CY7C68013A芯片,完成了硬件設(shè)計與軟件程序的設(shè)計,使之達(dá)到了單片機與上位機通信的效果。在以后各個領(lǐng)域上的數(shù)據(jù)傳輸通信存在著必不可少的使用價值。
芯片所具有的可編程特性大大提高了系統(tǒng)工作的準(zhǔn)確性與可靠性,數(shù)據(jù)穩(wěn)定性高,不易丟失,便于數(shù)據(jù)的傳輸和處理。再加上USB接口設(shè)備具有熱插拔和即插即用的特性,使模塊更具有較高的實用價值,是值得推廣的優(yōu)良設(shè)計。
參考文獻
[1] 劉吉名,裴東興.基于CY7C68013的USB2_0數(shù)據(jù)傳輸模塊設(shè)計[J].電子測量實驗室,2008,31(3):94-96.
[2] 張晶.基于USB2.0接口的數(shù)字圖像通信模塊設(shè)計[D].南京:南京理工大學(xué),2008.
[3] 李英偉,王成儒,練秋生,等.USB2.0原理與工程開發(fā)(第二版)[M].北京:國防工業(yè)出版社,2007.
[4] 趙林,孟令軍,于磊,等.基于CY7C68013A的USB2.0高速接口設(shè)計[J].電子技術(shù)應(yīng)用,2014,40(1):131-133.
[5] 陳玉輝,鐘洪聲,李廷軍.基于CY7C68013a的USB2.0接口設(shè)計[J].大眾科技,2010,134(10):23-24.
[6] 趙志勇.USB2.0通信接口設(shè)計[J].兵工自動化,2005,24(3):56-57.
[7] 胡文靜,陳松.基于EZ-USB芯片CY7C68013的驅(qū)動程序設(shè)計[Z].岳陽:華東師范大學(xué),2005.