CY7C68013芯片的USB接口固件設計
1 USB芯片CY7C68013介紹
CY7C68013屬于Cypress公司的FX2系列產(chǎn)品,是Cypress公司生產(chǎn)的第一款USB2.0芯片。
CYTC68013是一個(gè)帶增強型MCS51內核和USB接口的單片機,完全遵從USB2.O協(xié)議,可提供高達480 Mbps的傳輸率;內部集成PLL(鎖相環(huán)),最高可使5l內核工作在48MHz;對外提供兩個(gè)串口,可以方便地與外部通信;片內擁有8 KB的RAM,可完全滿(mǎn)足系統每次傳輸數據的需要,無(wú)需再外接RAM。由于芯片內部沒(méi)有ROM,一旦USB設備斷開(kāi)與PC的連接,程序代碼將無(wú)法保存,需要每次在PC機接入USB設備后,重新下載。另外,CY7C68013支持一種“E2PROM引導方式”,即先將固件下載到片外E2PROM中,當每次USB設備通電后,FX2自動(dòng)將片外E2PROM中的程序讀入芯片中。
CY7C68013與外設有主/從兩種接口方式:可編程接口GPIF和Slave FIFO??删幊探涌贕PIF是主機方式,可以通過(guò)軟件編寫(xiě)讀/寫(xiě)控制時(shí)序,靈活方便,幾乎可以與所有8/16位接口的控制器、存儲器和總線(xiàn)實(shí)現無(wú)縫連接。Slave FTFO是從機方式,外部控制器可以像對待普通FIFO一樣對芯片內的多個(gè)緩沖區進(jìn)行讀/寫(xiě);S1ave FIFO方式也可以靈活配置,以適應不同的需要。
2 硬件設計思想
USB數據傳輸流程如圖l所示。
工作流程可分為兩個(gè)部分:芯片初始化部分和數據傳輸部分。
2.1 芯片初始化部分
本部分是適用于任何USB傳輸過(guò)程中的芯片初始化部分。當USB接口接入PC后,首先進(jìn)行PC的設備搜索,從USB端獲得設備的VID/PID,以及USB芯片的工作方式;然后PC機通過(guò)得到的VID/PID獲取設備的驅動(dòng),保證設備的工作。與此同時(shí),USB芯片上電開(kāi)始,MCU開(kāi)始從E2PROM中獲取MCU的工作狀態(tài)、采用的工作模式、數據傳輸方式、所用到傳輸方式端點(diǎn)的大小以及傳輸方向,并對接口器件進(jìn)行相應芯片寄存器的初始化。實(shí)現內容因具體芯片而異,因此確定接口器件后再說(shuō)明寄存器初始化的方法。
2.2 數據傳輸部分
不同器件相接實(shí)現方式不同,在此以CY7C68013與DSP6416 HPI接口數據傳輸實(shí)現為例,介紹數據傳輸流程。
首先,簡(jiǎn)單地介紹一下DSP611 6 HPI接口。HPI是一個(gè)并行端口,通過(guò)HPI可以直接訪(fǎng)問(wèn)DSP的存儲空間,也可以通過(guò)DMA/EDMA控制器實(shí)現對DSP存儲空間的訪(fǎng)問(wèn)。HPI口可以提供16/32位的數據接口,通過(guò)主機或者CPU訪(fǎng)問(wèn)HPI控制寄存器(HPIC)來(lái)確定HPI接口的數據帶寬。
確定了DSPHPI作為USB的接口器件,DSPHPI接口的初始化如下:對于DSP,為了滿(mǎn)足數據的正常傳輸,需要對HPIC寄存器進(jìn)行設置,即設置字長(cháng),初始化時(shí)假設DSP向主機發(fā)送中斷和Ready信號。因為沒(méi)有用到HPT的地址線(xiàn),因此不需要設置HPIA寄存器。此時(shí)DSP已經(jīng)做好了接收或發(fā)送數據的準備。
為了滿(mǎn)足與HPI接口讀/寫(xiě)時(shí)序的無(wú)縫連接,此處采用了GPIF傳輸模式。流程如下:
當數據PC端發(fā)送時(shí),USB收發(fā)機將收到的信號發(fā)送給CY7C68013,USB芯片接收到數據后先存放在端點(diǎn)寄存器里,等到數據放滿(mǎn)數據緩存區時(shí),USB芯片啟動(dòng)GPIF,將數據送入DSP。當DSP接收到數據后會(huì )對HPIC控制器進(jìn)行設置,發(fā)送給USB中斷信號,提示收到數據包,即完成1次PC→DSP傳輸。
當數據從DSP端發(fā)送時(shí),HPIC寄存器發(fā)送中斷至USB芯片,USB芯片做好接收數據的準備;然后HPI將數據送入USB芯片,等數據緩存區放滿(mǎn)l024字節后,將數據通過(guò)USB發(fā)送至PC機接收端。
3 硬件電路的設計與實(shí)現
如前所述,接口電路方面USB為了滿(mǎn)足HPI接口的讀/寫(xiě)時(shí)序采用GPIF方式。
3.1 CY7C68013與HPI接口電路
CY7C68013與HPT接口電路原理圖如圖2所示。
這里需要說(shuō)明的有如下幾點(diǎn):
①HHWIL主要用來(lái)區分第1個(gè)/第2個(gè)Halfword的傳輸,且僅在半寧傳輸時(shí)出現。由于主機沒(méi)有數據線(xiàn)和地址線(xiàn)復用的情況,因此在這里將HAS置高電平。
HDSl、HDS2作為數據選通信號,主要用于主機尋址HPI周期內控制數據傳輸,在本次工作中沒(méi)有用到,而為了調試方便,保留了HDSl和HDS2,通過(guò)高低電平控制它們的變化。由于HDSl、HDS2和HCS在片內是組合為一個(gè)低有效的HSTROBE信號,其組成關(guān)系如下:
HSTROBE=NOT(HDSl XOR HDS2)OR HCS所以HDSl置低電平,HDS2置高電平,利用HCS的信號變化控制HPI讀/寫(xiě)初始化。
②HCNTL[1:O]主要用來(lái)控制當前訪(fǎng)問(wèn)的是HPI的哪個(gè)寄存器。在HP1初始化時(shí)完成HPIC寄存器的控制信息。HPID寄存器主要實(shí)現數據傳輸時(shí)數據的讀?。瘜?xiě)入。此處沒(méi)有用到HPI的地址操作,因此HPIA作為地址寄存器不需要送入控制信息。
③HD[15:O]對應于PB[7:o]、PD[7:0]接口,由于為半字傳輸方式,因此在這里需要將HD5置低電平,以滿(mǎn)足芯片復位時(shí)HD5為低電平。
3.2 固件調試部分
固件程序流程圖如圖3所示。
(1)初始化部分
該部分用來(lái)確定整個(gè)過(guò)程采用的方式,確定端點(diǎn)的傳輸方式、方向和緩存區的大小,設置HPI接口的HPIC寄存器以及設備的枚舉。本設計采用的是GPIF傳輸方式,端點(diǎn)選擇的是批量傳輸。采用的端點(diǎn)是EP2和EP6。EP2傳輸方向為OUT,緩存區大小為1024字節;EP6傳輸方向為IN,緩存區大小為l024字節;通過(guò)對HPIC的操作確定HPI的工作方式以及HPID的數據傳輸方式。編寫(xiě)GPIF數據中斷函數和USB設備描述符。
(2)GPIF波形部分
GPIF波形采用Cypress公司提供的GPIF Designer來(lái)實(shí)現。GPIF Designer通過(guò)簡(jiǎn)單形象的界面解決了復雜程序表示的GPIF時(shí)序設計問(wèn)題。與DSP HPI接口相符合的讀、寫(xiě)時(shí)序如圖4和圖5所示。
(3)中斷產(chǎn)生時(shí)GPIF數據傳輸
在程序中實(shí)現每當緩存區數據達到l024字節或為最后一包數據時(shí),自動(dòng)進(jìn)行數據傳輸。下面的程序是EP2將數據發(fā)送到DSP端的程序:
EP6將從DSP收到的數據傳給主控端的程序如下:
4 總 結
本文以CY7C68013和DSP HPI接口為例描述了USB芯片的固件程序流程和設計思想。通過(guò)采用GPIF模擬了HPI接口的讀/寫(xiě)時(shí)序,實(shí)現了DSP與USB的無(wú)縫連接。
評論