摘要:把CY7C68013成功用于光纜檢測系統(tǒng)中,實(shí)現(xiàn)了標(biāo)準(zhǔn)的USB接口。該接口實(shí)現(xiàn)了標(biāo)準(zhǔn)的USB1.1和USB2.0協(xié)議。
關(guān)鍵詞:光纜檢測;USB;接口;CY7C68013
引言
隨著人們對通信的要求越來越高,光通信以其獨(dú)特的優(yōu)勢而越來越普及,與此同時光纜檢測也變得非常重要,為適應(yīng)對預(yù)設(shè)光纜線路的可用狀態(tài)實(shí)時監(jiān)測和管理需求,要求光纜線路監(jiān)測系統(tǒng)能夠?qū)︻A(yù)設(shè)通信光纜進(jìn)行拓?fù)涔芾怼⒏婢芾怼⒔y(tǒng)計分析管理、安全管理、資源管理和系統(tǒng)自維護(hù)。

光纜檢測系統(tǒng)和計算機(jī)之間的接口設(shè)計是該系統(tǒng)的一個重要組成部分。RS-232接口曾經(jīng)取得過巨大成功,但是隨著計算機(jī)與外圍設(shè)備的發(fā)展,RS-232串行端口逐漸成為通信的瓶頸。而USB則突破原有接口的限制,不僅具備較高的通信速率,而且其彈性化設(shè)計可以取代各種外圍設(shè)備所使用的接口,在計算機(jī)外圍接口中也占據(jù)著越來越明顯的優(yōu)勢。
Cypress公司的CY7C68013芯片內(nèi)部是增強(qiáng)型51單片機(jī),控制簡單,并實(shí)現(xiàn)了標(biāo)準(zhǔn)的USB1.1和USB2.0協(xié)議,而且成本較低,用于光纜檢測系統(tǒng)是一個很好的選擇,然而,其實(shí)現(xiàn)架構(gòu)較為復(fù)雜。本文重點(diǎn)分析和討論了其固件程序、驅(qū)動程序等開發(fā)過程,實(shí)踐表明,本文的方法達(dá)到了預(yù)期設(shè)計目的,效果較好。
光纜檢測系統(tǒng)
圖1是光纜線路檢測硬件模塊框圖,由DTE接口單元、主控處理單元和PSTN接口單元組成。
DTE接口單元:提供了RS-232接口,USB接口。USB符合1.1和2.0協(xié)議。
主控處理單元:是系統(tǒng)的核心模塊。主要功能為:從DTE接口單元接收命令,并通過調(diào)制解調(diào)后發(fā)送到遠(yuǎn)端監(jiān)測站;從PSTN接口接收遠(yuǎn)端監(jiān)測站的信號,解調(diào)后發(fā)送到DTE。
PSTN接口單元:提供了分別用于輪詢和中斷兩路PSTN標(biāo)準(zhǔn)接口。
本文采用從底層到上層的結(jié)構(gòu)來敘述如何使USB設(shè)備完成光纜檢測系統(tǒng)和計算機(jī)之間數(shù)據(jù)傳輸?shù)幕竟δ堋?/p>
USB設(shè)備接口設(shè)計
USB設(shè)備接口設(shè)計主要包含兩方面的內(nèi)容:USB芯片和光纜檢測系統(tǒng)之間的接口;USB芯片和計算機(jī)之間的接口設(shè)計。其中USB芯片和光纜檢測系統(tǒng)之間的接口可分為固件配置程序設(shè)計和接口時序設(shè)計;USB芯片和計算機(jī)之間的接口可分為驅(qū)動程序設(shè)計以及驅(qū)動程序和應(yīng)用程序之間的通信。

固件配置程序
USB傳輸類型包括中斷傳輸(interrupt)、批量傳輸(bulk)、等時傳輸(iso)、控制傳輸(control)四種類型,四種類型的相關(guān)特性:數(shù)據(jù)最大長度、數(shù)據(jù)周期性、發(fā)生錯誤是否重傳、可得到的最大帶寬等都存在較大區(qū)別。根據(jù)光纜檢測系統(tǒng)和計算機(jī)之間數(shù)據(jù)交互的特點(diǎn),CY7C68013被配置為slave、異步、bulk模式。圖2是固件程序的框架結(jié)構(gòu),只完成數(shù)據(jù)讀寫的功能,不對數(shù)據(jù)進(jìn)行任何處理。
要實(shí)現(xiàn)最基本的數(shù)據(jù)讀寫功能只需要在TD_Init函數(shù)中進(jìn)行配置,由于篇幅原因這里僅列舉比較重要的一些寄存器的配置情況(表1)。

這里僅僅配置了端點(diǎn)2和端點(diǎn)6,端點(diǎn)2配置為寫設(shè)備地址,端點(diǎn)6配置為讀設(shè)備地址,兩個端點(diǎn)都設(shè)置為4個緩沖區(qū),緩沖區(qū)大小設(shè)置為512bytes,兩個端口都設(shè)置為自動方式,這樣設(shè)置可以使得讀寫數(shù)據(jù)非常方便,大大減少開發(fā)時間和復(fù)雜性。
接口時序設(shè)計
異步slavefifo寫時序設(shè)計
外部主控器進(jìn)程如下:
IDLE:當(dāng)寫事件發(fā)生時,轉(zhuǎn)到狀態(tài)1。
狀態(tài)1:指向IN FIFO,激活FIFOADR[1:O],轉(zhuǎn)向狀態(tài)2。
狀態(tài)2:如果FIFO滿標(biāo)志為1(1:FIFO不滿;0:FIFO滿),則轉(zhuǎn)向狀態(tài)3,否則停留在狀態(tài)2。
狀態(tài)3:傳送總線驅(qū)動數(shù)據(jù)。傳送一個數(shù)據(jù),激活SLWR,轉(zhuǎn)向狀態(tài)4。
狀態(tài)4:如果有更多的數(shù)據(jù)要寫,則轉(zhuǎn)向狀態(tài)2,否則轉(zhuǎn)向IDLE。
實(shí)現(xiàn)異步從屬FIFO讀和實(shí)現(xiàn)異步從屬FIFO寫大同小異,這里不再贅述。
驅(qū)動程序設(shè)計
驅(qū)動程序設(shè)計主要包括驅(qū)動程序設(shè)計、用來安裝驅(qū)動程序的inf文件設(shè)計。Cypress公司為了使用戶使用簡單,已經(jīng)完成了大部分工作,用戶只需要對其驅(qū)動程序和inf文件作一些必要的修改就可以實(shí)現(xiàn)需要的功能。用戶可以去掉Cypress公司提供的部分不需要的功能,同時需要對USB設(shè)備描述符、配置描述符、接口描述符、端點(diǎn)描述符和串描述符進(jìn)行修改。
固件驅(qū)動程序的功能是使計算機(jī)認(rèn)識自己的USB設(shè)備,因此需要對設(shè)備進(jìn)行固件程序配置,固件配置程序可以在Cypress公司提供的框架下進(jìn)行修改,主要是對端點(diǎn)和選擇模式相關(guān)的寄存器進(jìn)行配置,然后通過提供的hex2c將生成的十六進(jìn)制文件轉(zhuǎn)換為一個數(shù)組,并將該數(shù)組替換驅(qū)動程序中的firmware[],用DDK進(jìn)行編譯產(chǎn)生固件驅(qū)動程序。計算機(jī)通過搜索注冊表中的設(shè)備VID和PID來識別USB,如果存在EEPROM或者是FLASH,則這個VID和PID可以開發(fā)人員自己定制。如果沒有EEPROM則VID必須為04b4,PID必須為8613,否則設(shè)備將無法被識別。
下載固件驅(qū)動程序后,需要下載通用驅(qū)動程序,通用驅(qū)動程序可以完成需要設(shè)備完成的一系列功能。通用驅(qū)動程序可以直接使用Cypress公司提供的通用驅(qū)動程序。配置的時候VID和PID必須和inf文件中通用驅(qū)動程序的VID和PID一致。

lnf文件的編寫
所有的USB設(shè)備都至少具有一個VID和PID,VID和PID通過設(shè)備描述符表提交給Windows系統(tǒng),同時,Windows系統(tǒng)使用INF文件將某一個VID和PID綁定到某一設(shè)備驅(qū)動程序。這樣,Windows系統(tǒng)在知道了設(shè)備的VID和PID后,就通過存儲在INF文件中的信息查找該設(shè)備的驅(qū)動程序。第一次安裝后,VID和PID信息就保存在注冊表中,以后當(dāng)該設(shè)備重新插上時,系統(tǒng)就會在注冊表中很快的查找該設(shè)備的驅(qū)動程序信息。
固件驅(qū)動程序的VID和PID必須為04b4和8613(如果有EEPROM則可以定制),固件驅(qū)動程序主要是用來自動加載固件配置;通用驅(qū)動程序的VID和PID必須和固件程序中配置的一致;

讀寫測試的C語言程序
操作設(shè)備之前需要安裝驅(qū)動程序,此時需要把sys文件和inf文件分別拷貝到系統(tǒng)文件夾system32\\drivers和inf下,然后依次選擇驅(qū)動程序目錄文件進(jìn)行安裝即可,驅(qū)動程序安裝成功后就可以對設(shè)備進(jìn)行訪問。訪問過程通常分為三個階段:打開設(shè)備、操作設(shè)備、關(guān)閉設(shè)備。
打開設(shè)備可以通過符號鏈接名方式,用CreateFile函數(shù)可以以同步方式打開設(shè)備,獲取設(shè)備句柄。操作設(shè)備通過DeviceIoControl函數(shù)可以完成,由于接口時鐘不同,所以要用異步方式對設(shè)備進(jìn)行讀寫,否則設(shè)備讀寫將會出現(xiàn)錯誤;讀取設(shè)備時采用直接程序控制方式,即CPU不斷查詢設(shè)備的FULL狀態(tài)位,當(dāng)有數(shù)據(jù)到達(dá)時該位變?yōu)榈碗娖剑珻PU就開始讀取數(shù)據(jù)。設(shè)備操作完成后通過CloseHandle函數(shù)關(guān)閉設(shè)備句柄。
結(jié)語
通過上述從底層到上層設(shè)計的幾個步驟就可以實(shí)現(xiàn)標(biāo)準(zhǔn)的USB1.1和USB2.0協(xié)議,實(shí)踐表明,該設(shè)計在光纜檢測系統(tǒng)中工作良好。隨著個人電腦和各種電子產(chǎn)品,如打印機(jī)、掃描儀、調(diào)制解調(diào)器等,還是新出現(xiàn)的外圍產(chǎn)品,如數(shù)碼相機(jī)、攝像機(jī)、移動硬盤、閃存等,幾乎100%支持USB,因此USB接口的應(yīng)用十分廣闊。