基于TMS320C54xx DSP的USB接口實(shí)現(xiàn)
2 TMS320C54XX DSP和AN2131Q接口芯片的硬件連接
TMS320C54xx DSP芯片選用TI公司的TMS320VC5409,Tms320VC5409是定點(diǎn)DSP芯片,它使用改進(jìn)的哈佛結(jié)構(gòu),8級流水線操作,最高速度可以達(dá)到166MIPS。
在AN2131Q芯片和TMS320C54xx DSP芯片之間采用FIFO(First In First Out SRAM)芯片連接,可以使USB接口芯片和DSP之間的最大數(shù)據(jù)交換速度超過USB總線的速度,使之不成為數(shù)據(jù)傳輸?shù)钠款i,從而使DSP和主機(jī)間的數(shù)據(jù)傳輸速度只受USB協(xié)議限制。
由于AN2131Q芯片內(nèi)嵌8位8051處理器,所以使用兩片8位FIFO芯片實(shí)現(xiàn)USB接口和DSP之間的雙向通信。FIFO選用具有1K×9bit內(nèi)存的IDT72V02。從AN2131Q或者DSP傳輸?shù)臄?shù)據(jù)首先保存在FIFO中,然后再由DSP或者AN2131Q讀走,從而使得數(shù)據(jù)的傳輸不會出現(xiàn)堵塞情況,其硬件連接框圖如圖2所示。
由于選用的FIFO只有雙端數(shù)據(jù)總線和狀態(tài)信號,沒有地址總線,所以DSP采用I/O譯碼方式訪問FIFO。FIFO狀態(tài)信號有空(EF)、半滿(HF)和滿(FF),它們都是低有效。合理利用這三個信號可以很有效地提高FIFO的讀寫效率。例如利用HF,如果其無效,表示FIFO中的數(shù)據(jù)沒有達(dá)到半滿,此時不用查詢FF就可以向FIFO中寫入一塊數(shù)據(jù),只要數(shù)據(jù)塊的大小等于或小于FIFO容量的一半,F(xiàn)IFO肯定不會滿溢出。這樣就可以大大提高FIFO的寫入速度。
3 TMS320C54XX DSP芯片和AN2131Q芯片的軟件連接
AN2131Q芯片和TMS320C54XX DSP芯片之間的軟件連接包括四個部分:AN2131Q對FIFO1的寫、AN2131Q對FIFO2的讀、DSP對FIFO1的讀、DSP對FIFO2的寫。為了描述方便,將FIFO1的三個狀態(tài)信號稱之為:EF1、HF1和FF1,將FIFO2的狀態(tài)信號稱為EF2、HF2和HF2。
3.1 AN2131Q寫FIFO1
當(dāng)USB總線上有數(shù)據(jù)要傳送至DSP時,AN2131Q查詢HF1。若HF1無效,AN2131Q一次向FIFO1寫入一個數(shù)據(jù)包。包大小要小于或等于FIFO1容量的一半,寫每一個字節(jié)時不需再查詢FF1。
3.2 DSP讀FIFO1
DSP每次從FIFO1中讀入一個數(shù)據(jù)包。每讀一個字節(jié)前,DSP需要查詢EF1,只有當(dāng)EF1無效(FIFO1不空)時,DSP才可能進(jìn)行讀操作。
3.3 DSP寫FIFO2
當(dāng)DSP有數(shù)據(jù)要傳送至主機(jī)時,DSP把數(shù)據(jù)打包,每次向FIFO2中寫入一包數(shù)據(jù)。方法同AN2131Q寫FIFO1,只不過DSP查詢的信號是HF2。寫完一包后,DSP向AN2131Q發(fā)一個中斷信號,DSP在寫下一包數(shù)據(jù)時要等待AN2131Q的應(yīng)答。AN2131Q應(yīng)答的方法是利用DSP的外部中斷INT1中斷DSP。
3.4 AN2131Q讀FIFO2
AN2131Q收到DSP發(fā)出的中斷信號,應(yīng)答DSP后,從FIFO2中讀入一包數(shù)據(jù),不用再查詢EF2。
3.5 數(shù)據(jù)包格式
每個數(shù)據(jù)包由包頭和數(shù)據(jù)兩部分構(gòu)成如圖3所示。包頭長度為一個字節(jié),指明以字節(jié)為單位包中數(shù)據(jù)(不含包頭)的長度。包中的數(shù)據(jù)要少于或等于64字節(jié),即最大的包總長度為65字節(jié)。
3.6 DSP中斷AN2131Q的方法
通過操作控制字向AN2131Q發(fā)一個負(fù)脈沖,下降沿有效,時序要求如圖4所示。
3.7 DSP讀FIFO狀態(tài)
方法一是DSP通過讀I/O地址0xxx xxxx xxxx x010b可獲得狀態(tài)信號EF1和HF2。方法二是DSP通過置TMS320VC5409狀態(tài)寄存器ST1中的XF位,從BIO引腳上獲取狀態(tài)信號。當(dāng)XF置1時,BIO引腳反映HF2的電平,當(dāng)XF置0時反映EF1的電平。
4 AN2131Q芯片驅(qū)動程序的實(shí)現(xiàn)
AN2131Q芯片的一個特點(diǎn)就是能夠按照個人需要通過下載和重列舉動態(tài)地改變設(shè)備性能。AN2131Q芯片內(nèi)部有不可改變的存儲單元存放特有的代理號(VID)和產(chǎn)品號(PID),VID/PID將綁定主機(jī)中的某個設(shè)備驅(qū)動程序,而該驅(qū)動程序的唯一任務(wù)就是向AN2131Q下載程序代碼。
用戶需要編寫三個程序來實(shí)現(xiàn)USB設(shè)備的使用。一個是負(fù)責(zé)USB接口調(diào)用程序,用于PC機(jī)識別USB設(shè)備;另一個是安裝USB的信息文件,用于對USB設(shè)備的一些說明;第三個是AN2131Q使用的程序,用于對數(shù)據(jù)的傳輸。下面對這三個程序分別做一些簡單的說明。
4.1 負(fù)責(zé)USB接口調(diào)用程序
Cypress提供了制作該程序的模板。首先,將KEIL51編譯生成的16進(jìn)制文件轉(zhuǎn)換為可寫入U(xiǎn)SB RAM中的二進(jìn)制文件。然后將該二進(jìn)制文件拷入模板中,調(diào)用DDK(Device Driver Kit),在DDK環(huán)境下對模板進(jìn)行編譯,生成驅(qū)動程序的系統(tǒng)文件。USB通過GPD(General Purpose Driver)實(shí)現(xiàn)上層軟件與USB的通信。GPD提供一種用戶模式的界面,完成USB設(shè)備的請求和數(shù)據(jù)傳輸。Cypress的開發(fā)工具包中提供了其開發(fā)面板的源程序,而其開發(fā)面板的設(shè)計(jì)就是基于GPD的。這使得開發(fā)者在例子程序的指引下,能快速地編寫出用于通信的應(yīng)用軟件。GPD的設(shè)計(jì)思想是服務(wù)于一般用戶的,其接口函數(shù)具有通用性。通過GPD提供的接口函數(shù)的原型,可以實(shí)現(xiàn)各種USB操作。包括實(shí)現(xiàn)負(fù)責(zé)USB設(shè)備的請求(即打開USB設(shè)備);負(fù)責(zé)USB的I/O口控制;通過改變IOCTL(I/O Control Code)實(shí)現(xiàn)各種操作。
4.2 安裝USB的信息文件
安裝文件的任務(wù)就是將驅(qū)動程序文件綁定到特定的VID/PID。主要說明哪一個文件是負(fù)責(zé)USB接口調(diào)用程序,哪一個文件是AN2131Q需要下載的文件。Crypress公司提供了一個標(biāo)準(zhǔn)的USB安裝信息文件。然而用戶還需要將自己對USB設(shè)備的描述(包括說明、版本號、日期、生產(chǎn)商等信息)加到安裝信息文件中。
4.3 AN2131Q使用的程序
AN2131Q使用的程序是在PC機(jī)找到USB設(shè)備后下載到AN2131Q芯片內(nèi)的程序,此程序?qū)崿F(xiàn)AN2131Q對FIFO和USB接口的監(jiān)控和讀寫數(shù)據(jù)。這個文件因?yàn)樯婕暗较聦佑布倪B接,不可能提供通用的模板,需要用戶自己編寫。
評論