掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘 要: 采用Cypress公司的CY7C68013芯片設(shè)計(jì)了通用的USB接口,結(jié)合MAX7128的串/并/串轉(zhuǎn)換和光纖收發(fā)系統(tǒng),實(shí)現(xiàn)數(shù)據(jù)的高速傳輸。介紹了系統(tǒng)的軟硬件結(jié)構(gòu), 詳細(xì)介紹了固件設(shè)計(jì)和WDM驅(qū)動(dòng)程序的結(jié)構(gòu)、特性、工作機(jī)制、軟件流程及與USB設(shè)備通信的方法。測(cè)試表明,該系統(tǒng)達(dá)到了預(yù)期的設(shè)計(jì)目標(biāo)和實(shí)用要求。
USB控制器是以USB串口引擎為主的專用集成電路,并可延伸至對(duì)其進(jìn)行管理的MCU以及相應(yīng)的軟硬件。目前市場(chǎng)上供應(yīng)的USB控制器主要有2種:帶USB接口的單片機(jī)(MCU)或純粹的USB接口芯片。帶USB接口的單片機(jī)可分為2類:一類是從底層設(shè)計(jì)專用于USB控制的單片機(jī),如Cypress公司的CY7C63513、CY7C64013等[1],由于開(kāi)發(fā)工具的專用性,往往應(yīng)用于各種專業(yè)應(yīng)用場(chǎng)合,如微機(jī)主板等[2-4];另一類是增加了USB接口的普通單片機(jī),如Intel公司的8X931、8X930以及Cypress公司的EZ-USB,由于均基于8051內(nèi)核,因而得到了廣泛應(yīng)用。
1 CY7C68013與系統(tǒng)結(jié)構(gòu)簡(jiǎn)介
Cypress公司的CY7C68013芯片是集成USB2.0協(xié)議的微處理器,支持12 Mb/s的全速傳輸和480 Mb/s的高速傳輸,具有控制傳輸、中斷傳輸、塊傳輸和同步傳輸4種傳輸方式,內(nèi)部包括一個(gè)增強(qiáng)型8051處理器內(nèi)核、一個(gè)串行接口引擎(SIE)、一個(gè)USB收發(fā)器、8.5 KB片上RAM和4 KB FIFO存儲(chǔ)器以及一個(gè)通用可編程接口(GPIF)。8051可工作在48 MHz/24 MHz/12 MHz時(shí)鐘頻率,內(nèi)部可自動(dòng)產(chǎn)生480 MHz的頻率供USB2.0串行收發(fā)引擎使用。由于數(shù)據(jù)緩沖器與SIE相連接,數(shù)據(jù)進(jìn)入收發(fā)器后,通過(guò)SIE可直接轉(zhuǎn)向FIFO,通過(guò)8 bit或16 bit數(shù)據(jù)接口與外設(shè)連接,存取數(shù)據(jù)。微控制器不參與數(shù)據(jù)傳輸,但允許以FIFO或RAM的方式訪問(wèn)這些共享FIFO,從而實(shí)現(xiàn)低速控制、高速傳輸。CY7C68013有GPIF/SLAVE FIFO/GPIO 3種接口模式,本系統(tǒng)采用Slave FIFO接口模式,選用控制傳輸和塊傳輸2種方式,外部控制器可像普通FIFO一樣對(duì)FIFO進(jìn)行讀寫(xiě)。
本數(shù)據(jù)傳輸系統(tǒng)分為3部分:發(fā)送端和接收端、CY7C68013控制器、具有并/串(或串并轉(zhuǎn)換)功能的CPLD芯片(MAX7128)以及光纖傳輸模塊。其中,CY7C68013和MAX7128之間采用并行連接方式,MAX7128與激光發(fā)送(接收)模塊間是串行連接,如圖1(a)所示。
圖1(a)中,主機(jī)將數(shù)據(jù)發(fā)送到CY7C68013端點(diǎn)FIFO緩沖器中,然后CY7C68013將端點(diǎn)FIFO中的數(shù)據(jù)分字節(jié)放到一組I/O口上,并且使能讀信號(hào),MAX7128讀取I/O上的邏輯值,當(dāng)接收512 B后,MAX7128將這512 B的數(shù)據(jù)從低到高串行發(fā)送給激光發(fā)送模塊;數(shù)據(jù)經(jīng)過(guò)光纖傳輸,進(jìn)入激光接收模塊,輸出串行信號(hào),通過(guò)MAX7128實(shí)現(xiàn)串并轉(zhuǎn)換,數(shù)據(jù)寬度為8 bit,通過(guò)CY7C68013的從屬FIFO的寫(xiě)入時(shí)序即可將數(shù)據(jù)寫(xiě)入CY7C68013的端點(diǎn)緩沖器中。
USB數(shù)據(jù)傳輸接口開(kāi)發(fā)分為4個(gè)層次,接口硬件、接口軟件、驅(qū)動(dòng)和應(yīng)用程序如圖1(b)所示。
2 固件程序設(shè)計(jì)
由于高速數(shù)據(jù)傳輸不需要固件程序參與,固件程序僅僅處理主機(jī)的發(fā)送請(qǐng)求。在發(fā)送端,固件將數(shù)據(jù)放置到I/O口上供MAX7128讀??;在接收端,MAX7128完成串并轉(zhuǎn)換后,將數(shù)據(jù)用特定時(shí)序?qū)懭隒Y7C68013。此時(shí)只需設(shè)定寄存器,固件程序相對(duì)簡(jiǎn)單,圖2為發(fā)送和接收固件程序流程。
CY7C68013芯片固件程序負(fù)責(zé)處理主(從)機(jī)發(fā)送來(lái)的各種請(qǐng)求,以完成與外圍電路間的各種數(shù)據(jù)傳輸。本系統(tǒng)固件一共包含九個(gè)程序文件,其中的頭文件分別定義了CY7C68013中的寄存器名和特殊功能寄存器、通用的CY7C68013常量、數(shù)據(jù)類型和宏、特殊功能寄存器所需要的同步延遲宏、用來(lái)描述CY7C68013狀態(tài)的各種USB描述符、INT2和INT4中斷跳轉(zhuǎn)表等。主函數(shù)負(fù)責(zé)處理標(biāo)準(zhǔn)USB請(qǐng)求和自定義請(qǐng)求,控制整個(gè)硬件系統(tǒng)的運(yùn)行。接收端固件主循環(huán)不用做任何操作,與發(fā)送端程序流程圖完全相同。其固件運(yùn)行的主程序清單如下,負(fù)責(zé)處理主機(jī)發(fā)出的各種USB請(qǐng)求。
……
TD_Init();//初始化用戶設(shè)備
EZUSB_IRQ_ENABLE();//使能USB中斷(INT2)
EZUSB_ENABLE_RSMIRQ();//使能喚醒中斷
INTSETUP |=(bmAV2EN | bmAV4EN);//使能INT2
//和INT4中斷跳轉(zhuǎn)向量
USBIE |=bmSUDAV | bmSUTOK | bmSUSP | bmURES |
bmHSGRANT;//使能所選擇的中斷
EA=1;//打開(kāi)8051中斷
UsbDisconnect();
CKCON=(CKCON&(~bmSTRETCH)) | FW_STRETCH_
VALUE;//設(shè)為0值
Sleep=FALSE;//清除sleep標(biāo)志
while(TRUE)//主循環(huán)
{
if(GotSUD)//等待SETUP令牌數(shù)據(jù)的到來(lái)
{
ParseControlTransfer();//處理SETUP令牌數(shù)據(jù)
GotSUD=FALSE;//清除SUDAV標(biāo)志
}
if (Sleep)
{
Sleep=FALSE;//清除sleep標(biāo)志
do
{
EZUSB_Susp();//置8051為空閑
}
while(!Rwuen&&EZUSB_EXTWAKEUP());
EZUSB_Resume();//從空閑狀態(tài)恢復(fù)
}
TD_Poll();//完成用戶任務(wù)
}
……
需要強(qiáng)調(diào)的是:固件程序設(shè)計(jì)完成后需要進(jìn)行調(diào)試,確保系統(tǒng)硬件正常工作。
(1)工作時(shí)鐘頻率的確定:晶振兩引腳對(duì)地電壓均為1.6 V左右,此時(shí)CLKOUT引腳默認(rèn)輸出為24 MHz,當(dāng)輸出48 MHz時(shí),電壓為2.5 V。
(2)電平觸發(fā)中斷方式:中斷后一定要讀上次傳輸狀態(tài)寄存器(命令40 H~45 H),以清除中斷寄存器中的中斷標(biāo)志,這樣中斷輸出才能變回高電平。
(3)使能端口:接收到Setup包后,必須用ACKsetup命令重新使能端口為低電平。
(4)緩沖區(qū)數(shù)據(jù)標(biāo)志:在向IN端點(diǎn)寫(xiě)完數(shù)據(jù)后,必須設(shè)置EP2BCH:L,指明緩沖區(qū)中的數(shù)據(jù)有效,示意可以發(fā)送到主機(jī)。當(dāng)IN端點(diǎn)的數(shù)據(jù)被外設(shè)讀走后,一定要調(diào)用OUTPKTEND來(lái)清除緩沖區(qū)數(shù)據(jù),否則無(wú)法向IN端點(diǎn)寫(xiě)入數(shù)據(jù)。
在USB設(shè)備枚舉的過(guò)程中,可采用USB調(diào)試工具BusHound軟件來(lái)抓取它和主機(jī)的通信數(shù)據(jù)進(jìn)行分析,以檢查硬件和固件程序的工作是否正確。
3 驅(qū)動(dòng)程序設(shè)計(jì)
為了配合CY7C68013的工作,需要有驅(qū)動(dòng)程序以使上位機(jī)程序能正常訪問(wèn)USB芯片。以Cypress公司提供的參考程序?yàn)榛A(chǔ),增加自定義控制請(qǐng)求即可。
由于驅(qū)動(dòng)程序必須和系統(tǒng)的總線驅(qū)動(dòng)進(jìn)行通信,系統(tǒng)總線驅(qū)動(dòng)為WDM(Win32 Driver Model)驅(qū)動(dòng)。因此,USB驅(qū)動(dòng)程序采用WDM設(shè)備驅(qū)動(dòng)程序[8]。由于USB總線驅(qū)動(dòng)程序(USBD)一般由操作系統(tǒng)提供,負(fù)責(zé)與實(shí)際的硬件打交道,因此,重點(diǎn)是開(kāi)發(fā)USB設(shè)備驅(qū)動(dòng)程序(USB Device Driver)。USB設(shè)備的WDM驅(qū)動(dòng)程序是通過(guò)創(chuàng)建URB(USB請(qǐng)求塊),并向USB總線驅(qū)動(dòng)程序發(fā)送包含URB的IRP來(lái)實(shí)現(xiàn)對(duì)USB設(shè)備信息的發(fā)送和接收。此外,USB設(shè)備驅(qū)動(dòng)程序除負(fù)責(zé)處理應(yīng)用程序的I/O請(qǐng)求外,還要處理PnP請(qǐng)求。
CY7C68013的驅(qū)動(dòng)程序包括2部分:usbfft.sys,專用于下載芯片的固件程序;loaderfft.sys,上位機(jī)和CY7-
C68013進(jìn)行通訊的部分,用于實(shí)現(xiàn)數(shù)據(jù)收發(fā)功能。這2個(gè)部分都存放在上位機(jī)上,當(dāng)系統(tǒng)上電或USB連接時(shí),固件部分將自動(dòng)下載到芯片的RAM中供8051執(zhí)行。
4 應(yīng)用程序設(shè)計(jì)
上位機(jī)是人機(jī)交互的平臺(tái),需要良好的操作界面。
應(yīng)用程序是完成數(shù)據(jù)發(fā)送與接收并且對(duì)系統(tǒng)進(jìn)行有效控制的平臺(tái),不僅需要向CY7C68013發(fā)送數(shù)據(jù),還需要將接收的數(shù)據(jù)顯示出來(lái)并保存。此外為了系統(tǒng)測(cè)試的方便,增加了誤碼率和速率測(cè)試模塊,以測(cè)試系統(tǒng)的整體性能。
本系統(tǒng)上位機(jī)的主要功能有:(1)文件的發(fā)送;(2)文件的接收;(3)速率測(cè)試;(4)誤碼率測(cè)試;(5)系統(tǒng)控制,用來(lái)獲取CY7C68013描述符以及其內(nèi)部寄存器的情況,并對(duì)整個(gè)系統(tǒng)進(jìn)行控制,如使能CY7C68013的數(shù)據(jù)輸出功能及片內(nèi)數(shù)據(jù)轉(zhuǎn)移功能等。
系統(tǒng)中定義了6個(gè)時(shí)間控件來(lái)完成數(shù)據(jù)的發(fā)送與接收,timer1、timer3和timer4分別完成文件、誤碼率及速率測(cè)試的發(fā)送,Timer2、timer6和timer8分別完成文件、誤碼率及速率測(cè)試的接收。另外定義了一個(gè)時(shí)間控件來(lái)控制開(kāi)啟哪一個(gè)接收數(shù)據(jù)時(shí)間控件。為了保證有效判斷所接收到的數(shù)據(jù)是文件、速率測(cè)試還是誤碼率測(cè)試數(shù)據(jù),在timer1、timer3和timer4發(fā)送前都先發(fā)送一個(gè)512 B的前導(dǎo)包。全為1時(shí)表示下一個(gè)數(shù)據(jù)包包含著速率測(cè)試數(shù)據(jù),全為2時(shí)表示下一個(gè)數(shù)據(jù)包包含著誤碼率測(cè)試數(shù)據(jù),全為3時(shí)表示下一個(gè)數(shù)據(jù)包包含著文件數(shù)據(jù)。這樣就能判斷出應(yīng)該開(kāi)啟哪一個(gè)接收時(shí)鐘。
具體的文件數(shù)據(jù)處理方法是:文件打開(kāi)后,先將文件緩沖,定義一個(gè)二維數(shù)組:行512 B,列由文件大小決定。數(shù)組的第一個(gè)512 B前20 B記錄所發(fā)送文件的大小,并且在最開(kāi)始的5 B以0xAA填充,表明這個(gè)數(shù)據(jù)包是全部文件的開(kāi)始,當(dāng)文件大小不足填滿最后的512 B時(shí),數(shù)據(jù)補(bǔ)0,但數(shù)組結(jié)尾為0xAA。
采用CY7C68013設(shè)計(jì)的高速數(shù)據(jù)傳輸系統(tǒng),經(jīng)過(guò)測(cè)試,達(dá)到了設(shè)計(jì)要求,實(shí)現(xiàn)了數(shù)據(jù)的高速傳輸,為下一步開(kāi)展數(shù)據(jù)編碼/譯碼、調(diào)制/解調(diào)研究打下了良好的基礎(chǔ)。
摘 要:從硬件與軟件方面介紹了基于PXI技術(shù)的1553B總線通訊模塊的設(shè)計(jì),并對(duì)PXI總線接口設(shè)計(jì)、驅(qū)動(dòng)程序的開(kāi)發(fā)、 SDRAM存儲(chǔ)器的控制和1553B總線通信協(xié)議實(shí)現(xiàn)等關(guān)鍵技術(shù)進(jìn)行了詳細(xì)的闡述,為航空領(lǐng)域測(cè)控系統(tǒng)開(kāi)發(fā)P...
關(guān)鍵字: PXI技術(shù) 驅(qū)動(dòng)程序 SDRAM存儲(chǔ)器 1553B總線PnP全稱Plug-and-Play,譯文為即插即用。PnP的作用是自動(dòng)配置低層計(jì)算機(jī)中的板卡和其他設(shè)備,然后告訴對(duì)應(yīng)設(shè)備都做了什么。PnP的任務(wù)是把物理設(shè)備和軟件設(shè)備驅(qū)動(dòng)程序相配合,并操作設(shè)備,在每個(gè)設(shè)備和它的驅(qū)動(dòng)程序...
關(guān)鍵字: PnP 驅(qū)動(dòng)程序 操作設(shè)備作?者:道哥,10年嵌入式開(kāi)發(fā)老兵,專注于:C/C、嵌入式、Linux。關(guān)注下方公眾號(hào),回復(fù)【書(shū)籍】,獲取Linux、嵌入式領(lǐng)域經(jīng)典書(shū)籍;回復(fù)【PDF】,獲取所有原創(chuàng)文章(PDF格式)。目錄kill命令和信號(hào)使用kill...
關(guān)鍵字: 信號(hào) 應(yīng)用程序 驅(qū)動(dòng)程序驅(qū)動(dòng)程序本質(zhì)上是軟件代碼,主要作用是計(jì)算機(jī)系統(tǒng)與硬件設(shè)備之間完成數(shù)據(jù)傳送的功能,只有借助驅(qū)動(dòng)程序,兩者才能通信并完成特定的功能。
關(guān)鍵字: 驅(qū)動(dòng)程序 硬件設(shè)備 UNIX驅(qū)動(dòng)程序(Device Driver)全稱為“設(shè)備驅(qū)動(dòng)程序”,是一種可以使計(jì)算機(jī)和設(shè)備通信的特殊程序,可以說(shuō)相當(dāng)于硬件的接口,操作系統(tǒng)只能通過(guò)這個(gè)接口,才能控制硬件設(shè)備的工作,假如某設(shè)備的驅(qū)動(dòng)程序未能正確安裝,便不能正常...
關(guān)鍵字: 驅(qū)動(dòng)程序 聲卡 設(shè)備作?者:道哥,10年嵌入式開(kāi)發(fā)老兵,專注于:C/C、嵌入式、Linux。關(guān)注下方公眾號(hào),回復(fù)【書(shū)籍】,獲取Linux、嵌入式領(lǐng)域經(jīng)典書(shū)籍;回復(fù)【PDF】,獲取所有原創(chuàng)文章(PDF格式)。目錄API函數(shù)編寫(xiě)驅(qū)動(dòng)程序編寫(xiě)應(yīng)用...
關(guān)鍵字: 編寫(xiě) 驅(qū)動(dòng)程序 字符設(shè)備驅(qū)動(dòng)作?者:道哥,10年嵌入式開(kāi)發(fā)老兵,專注于:C/C、嵌入式、Linux。關(guān)注下方公眾號(hào),回復(fù)【書(shū)籍】,獲取Linux、嵌入式領(lǐng)域經(jīng)典書(shū)籍;回復(fù)【PDF】,獲取所有原創(chuàng)文章(PDF格式)。目錄示例程序目標(biāo)編寫(xiě)驅(qū)動(dòng)程序編寫(xiě)應(yīng)...
關(guān)鍵字: GPIO 編寫(xiě) 驅(qū)動(dòng)程序打印機(jī) 在我們的辦公區(qū)域?qū)嵱眯允欠浅?qiáng)的,不僅可以提高辦公的效率,而且還能節(jié)省用戶時(shí)間,是一款非常不錯(cuò)的辦公小助手。長(zhǎng)時(shí)間使用, 打印機(jī)驅(qū)動(dòng)程序無(wú)法使用 ,怎么回事呢?用戶一定要做出詳細(xì)了解,是否需要重新安裝,下面我們一...
關(guān)鍵字: 驅(qū)動(dòng)程序 打印機(jī)驅(qū)動(dòng)