基于USB2.0的TMS320VC5402 HPI自舉
引言
當前,DSP(Digital Signal Processor)芯片已經(jīng)廣泛應用于通信、信號處理、雷達、圖像處理等多個(gè)領(lǐng)域,其強大、高效的運算能力,是其他微處理器無(wú)法比擬的。為充分發(fā)揮DSP運算高效的優(yōu)勢,用戶(hù)程序通常在DSP內部RAM中運行,這就需要利用DSP的自舉引導(Boot loader)功能。在DSP多機系統中,HPI自舉是首選。目前,采用HPI自舉的實(shí)例主要有兩種,一種是用單片機作為主控制器,通過(guò)PC機串口或者外掛的存儲器得到要下載的DSP用戶(hù)程序數據,這種方案無(wú)法實(shí)現系統與PC機之間數據的實(shí)時(shí)高速傳輸;另一種是用PC機并口里控制DSP HPI接口,從而把程序寫(xiě)入DSP 的內部RAM,該方案無(wú)法滿(mǎn)足嵌入式系統的即插即用要求。
USB接口具有即插即用,速度快(最高可達480Mbps)等特點(diǎn),可成為PC機的外圍設備擴展中應用日益廣泛的接口標準,基于USB總線(xiàn)對DSP實(shí)現HPI自舉,可以降低成本,也便于DSP與PC機的高速數據通信,鑒于此種考慮,本文介紹一種利用USB2.0接口控制芯片(CY7C68013-56PVC)實(shí)現TMS320VC5402自舉的實(shí)現方案。
芯片介紹
USB2.0芯片及其GPIF簡(jiǎn)介
本方案采用的USB2.0接口控制芯片是Cvpress公司的CY7C6801356PVC,該系列芯片是世界上第一款支持USB2.0的集成微控制器芯片,它集成有USB2.0收發(fā)器、智能串行接口引擎(SIE)、增強的8051微處理器,通用可編程接口(GPIF)、片上RAM和FIFO存儲器[1]。該系列芯片的智能引擎也支持USB1.1協(xié)議,因此,它具有很好兼容性。
CY7C68013與外設有主/從兩種接口方式:可編程接口GPIF和Slave FIFO,可編程接口GPIF是一個(gè)微狀態(tài)機[2],可由軟件編寫(xiě)讀寫(xiě)控制時(shí)序,也可以作為USB FIFO的主控制器與DSP進(jìn)行無(wú)縫連接,GPIF可工作在自動(dòng)模式,USB總線(xiàn)和GPIF接口域直接進(jìn)行數據傳輸,無(wú)需8051內核直接參入,以此解決USB2.0高速傳輸的“瓶頸”問(wèn)題,GPIF與8051內核關(guān)系如圖1所示。
![]() |
---|
DSP芯片及其HPI簡(jiǎn)介
TMS320VC5402是TI公司的一款性?xún)r(jià)比極高的低功耗定點(diǎn)數字信號處理器(DSP),該芯片的主機接口(HPI,Host Port Interface)被稱(chēng)為HPI-8。這種HPI-8接口的最大特點(diǎn)是它允許主機訪(fǎng)問(wèn)DSP的整個(gè)片內空間。HPI接口通過(guò)HPI控制寄存器(HPIC)、地址寄存器(HPIA)數據寄存器(HPID)和HPI內存塊來(lái)實(shí)現與主機的數據通信。主處理器對HPI的訪(fǎng)問(wèn)由內外兩部分組成,其中外部主要為主處理與HPI寄存器交換數據,而內部則用于為HPI寄存器與DSP存儲單元交換數據(由DMA自動(dòng)完成)。在進(jìn)行數據地實(shí)時(shí)通信時(shí),DSP與主機可以通過(guò)中斷信號進(jìn)行握手。其具體實(shí)現可通過(guò)設置HPIC寄存器的HINT、DSPINT位來(lái)對對方進(jìn)行中斷[3]。
硬件設計
設計原理
自舉從本質(zhì)上說(shuō)就是DSP上電后,在Bootloader引導下,獲取應用程序并開(kāi)始運行的過(guò)程,TMS320VC5402上電以后,當MP/MC為低電平時(shí),系統將從片內ROM的OFF80H開(kāi)始執行,此處的跳轉指令使程序跳轉至BootLoader程序入口處(OF800H處)。Bootloader程序先清除IFR,并設置HPI入口點(diǎn)(0x7F)的值為0,置HINT為低,再檢測INT2是否置位(置位可以通過(guò)將HINT和INT2相連來(lái)實(shí)現),如置位則進(jìn)行HIP自舉[4],具過(guò)程如圖2所示。
![]() |
---|
DSP復位之后,如檢測到HPI自舉方式有效,就可以進(jìn)行HPI自舉引導,基于USB總線(xiàn)的HPI自舉,就是在Bootloader引導下,通過(guò)USB接口控制芯片把程序數據由主機(PC)寫(xiě)入DSP內部RAM(DARAM)并使DSP開(kāi)始運行的過(guò)程,該自舉過(guò)程分為三個(gè)步驟:一是寫(xiě)HPIC,以設置HPI控制參數;二是寫(xiě)HPIA,設置訪(fǎng)問(wèn)DSP的首地址;三是通過(guò)HPID下載程序。
首先,推動(dòng)EZ-USB Control Panel下載CY7C68013的固件程序。當重枚舉結束,驅動(dòng)程序(ezusb.sis)重新安裝成功后,在Control Panel中通過(guò)發(fā)送請求的方式由端點(diǎn)0向HPIC(主要設置BOB位,確定字節配合)發(fā)送兩個(gè)相同的8位控制字,而當HPIC初始化完成之后,再通過(guò)端點(diǎn)0設置欲下載程序段到DSP中的首地址HPIA。HPIC、HPIA設置好之后,就可以通過(guò)端點(diǎn)2下載DSP程序代碼段,程序代碼段需要分段下載,實(shí)際上,CY7C68013通過(guò)端點(diǎn)2把數據寫(xiě)入HPID,然后,DSP按照HPIA指定的地址,由DMA自動(dòng)將HPID中的數據寫(xiě)到RAM,接口控制時(shí)序可由GPIF軟件編程控制,程序數據分段下載完畢之后,再將程序的入口地址通過(guò)端點(diǎn)0寫(xiě)入0x7F處,在主機下載程序的過(guò)程中,DSP將一直檢測0x7F是否為0,如不為0,即判定DSP已由主機進(jìn)行了HPI自舉加載,并按照該值跳轉PC指針,以開(kāi)始運行,進(jìn)而完成HPI自舉。
硬件電路
本設計用CY7C68013-56PVC與TMS320VC5402的HPI口相連接,接口選擇GPIF模式,硬件電路如圖3所示,該方案中,HCNTL[1:0]與GPIF的低位地址線(xiàn)PA3、PA2相連,以選擇需要訪(fǎng)問(wèn)的HPI的HPIA、HPIC,HPID寄存器,CTL0接至HR/W,可作為讀寫(xiě)控制信號,HDS1與輸出信號線(xiàn)CTL1相連,以作為HPI訪(fǎng)問(wèn)的選通信號,HBIL與輸出信號線(xiàn)CTL2相連,已用于識別傳輸的是第一個(gè)字節還是第二個(gè)字節,HRDY接輸入信號線(xiàn)RDY0。用于通過(guò)主機查詢(xún)HPI口的狀態(tài),HINT、INT2與INT0連接,可確保HPI自舉有效,HCS接GND,可使HPI片選信號有效,HPIENA接高電平時(shí),HPI使能,HAS、HDS2接高電平時(shí),信號線(xiàn)禁用。數據線(xiàn)PD[7:0]與HD[7:0]相連,可在控制時(shí)序作用下傳輸一切數據信號。HPI接口控制時(shí)序由CTL0、CTL1、CTL2引腳輸出,在自舉過(guò)程中,系統將關(guān)閉CY7C68013所有的中斷,若要通過(guò)中斷實(shí)現數據通信的握手,可以在自舉完畢打開(kāi)CY7C68013的中斷。
![]() |
---|
CY7C68013的具體配置為:?jiǎn)⒂肎PIF接口控制數據傳輸,GPIF接口采用內部時(shí)鐘(48MHz);端點(diǎn)2設置為批量傳輸輸出端點(diǎn),最大傳輸值是512字節,雙緩沖;終端4、8禁用。端點(diǎn)6可作為批量傳輸輸入端點(diǎn)來(lái)向主機傳輸數據,需要說(shuō)明的是端點(diǎn)6不是自舉所必需的。
軟件設計
DSP應用程序設計
實(shí)現TMS320VC5402 HPI自舉的前提是生成DSP應用程序的分段Hex代碼文件,在CCS中可用匯編語(yǔ)言,C語(yǔ)言等編寫(xiě)應用程序源代碼,經(jīng)匯編、鏈接、編譯后,生成可執行的公共目標文件格式(COFF)的文件,COFF文件不能用于HPI自舉引導,而需要利用TI公司的文件格式轉換工具hex00.exe,將COFF文件轉換為Hex格式文件[5]。格式轉換的關(guān)鍵是正確編寫(xiě)Hex命令文件,下面討論如何編寫(xiě)這種命令文件,例如將包含text段的源程序鏈接、編譯生成test.out文件,編寫(xiě)命令文件時(shí),可利用hex500.exe將test.out轉換為對應text段的Hex文件,命令文件test為.cmd如下:
-i //生成Intel格式
test.out //輸入文件
ROMS
{
PAGE 0:ROM1:org=0x2000,Length=0x2000,romwidth=16,memwidth=16,
files={test1.hex} //text段的起始地址為0x2000
} //如有多端就可增加多個(gè)ROM SECTIONS
{text:paddr=0x2000} //如有多端就可增加多個(gè)部分
在DOS環(huán)境下,利用hex500.exe轉換命令文件test.cmd,就可得到test1.hex文件,通過(guò)CY7C68013把test1.hex文件寫(xiě)入DSP內部RAM,再把程序的入口地址寫(xiě)入0x7F處,便可完成自舉。
USB固件程序設計
Cypress公司提供有USB的輔助開(kāi)發(fā)工具:EZ-USB Control Panel,GPIF Designer。通過(guò)GPIF Designer可以生成GPIF波形圖及相應的C源代碼gpif.c。Cypress公司同時(shí)提供了固件程序框架,因而可把gpif.c加入固件程序框架進(jìn)行開(kāi)發(fā),從而提高開(kāi)發(fā)效率。本方案中,固件程序設計的重點(diǎn)是對GPIF的編程,以便生成符合HPI接口的時(shí)序的波形描述代碼,以用于控制數據傳輸,HPI自舉需要的GPIF控制波形描述符為:?jiǎn)巫止潓?xiě)(兩種),FIFO寫(xiě)。HPIA、HPIC的初始化需要單字節寫(xiě)控制時(shí)序,程序代碼寫(xiě)入HPID需要FIFO寫(xiě)控制時(shí)序,若要實(shí)現二者的數據通信,還需要單字節讀、FIFO讀等控制波形描述符。
HPIC、HPIA的初始值是在EZUSB Control Panel中通過(guò)制造商請求工具欄由EP0發(fā)送的,固件程序中還要有相應的請求處理程序,以完成具體的設置,如假定HPIC請求類(lèi)型的ID為0xB6.HPIC=0x0101(BOB位為1),則請求工具欄的具體參數應為:Req=0xB6,Value=0x0000,Index=0xBEEF,Length=2,Dir=0,Hex Bytes=0101,固件中應加入的請求處理程序為:
case 0xB6:
{EPOBCL=0; //EP0使能
while(EP01STAT&bmEP0BSY); //等待EPO數據接收完畢
while(!HPI_RDY); //等待HPI處理完畢
IOA=0x00; //選擇HPIC寄存器
GPIFWFSELECT=0x1E; //選擇寫(xiě)低字節的單字節寫(xiě)控制波形
while(?。℅PIFTRIG&0x80))
{;}
XGPIFSGLDATLX=EP0BUF[0]; //寫(xiě)低字節數據
GPIFWFSELECT=0x4E; //選擇寫(xiě)高字節的單字節寫(xiě)控制波形
while(?。℅PIFTRIG&0x80))
{;}
XGPIFSGLDATALX=EP0BUF[1]; //寫(xiě)高字節數據
break;}
設置程序下載的首地址(HPIA值)的請求處理程序與設置HPIC的程序基本相同,只需按照請求類(lèi)型的ID,來(lái)改變訪(fǎng)問(wèn)寄存器的地址即可,訪(fǎng)問(wèn)HPIA時(shí),HCNTL[1:0]=10b,即IOA=0x08。
訪(fǎng)問(wèn)HPID下載程序數據時(shí),可采用大端點(diǎn)EP2自動(dòng)打包方式(AUTOIN=1),即將數據發(fā)送到端點(diǎn)后,自動(dòng)傳到FIFO中,等待寫(xiě)HPID條件具備,再啟動(dòng)GPIF,以將程序數據寫(xiě)入HPID,訪(fǎng)問(wèn)HPDI可采用地址自動(dòng)增加模式(HCNTL[1:0]=01b),寫(xiě)數據前,地址自動(dòng)加1,這樣,數據便可以經(jīng)過(guò)DSP內部DMA自動(dòng)寫(xiě)入內部RAM,寫(xiě)HPID的程序如下:
if(GPIFTRIG&0x80) //GPIF接口是否處于空閑狀態(tài)
{if(?。‥P24FIFOELGS&0x02)) //自動(dòng)向量是否可以訪(fǎng)問(wèn)EP2FIFO中數據
{IOA=0x04; //選擇HPID寄存器,且訪(fǎng)問(wèn)時(shí)地址自動(dòng)增加
while(!HPI_RDY); //等待HPI處理完畢
SYNCDELAY;
GPIFTCB1=EP2FIFOBCH; //寫(xiě)入的字節數
SYNCDELAY;
GPIFTCB0=EP2FIFOBCL;
SYNCDELAY;
GPIFTRIG=GPIF_EP2; //啟動(dòng)寫(xiě)數據
SYNCDELAY;
While(?。℅PIFTRIG&0x80) //等待寫(xiě)入完畢
{;}
SYNCDELAY;}}
這樣程序數據就可以分段通過(guò)端點(diǎn)2寫(xiě)入DSP內部RAM,最后再把入口地址寫(xiě)入0x7F,以完成HPI自舉,值得注意的是,采用此種方式訪(fǎng)問(wèn)HPID時(shí),寫(xiě)入HPIA的初值為程序入口的一個(gè)地址,例如,寫(xiě)test1.hex時(shí),應設定HPIA=0x1fff。
為縮短開(kāi)發(fā)周期,本設計采用開(kāi)發(fā)包中通用驅動(dòng)(ezusb.sys)和EZUSB Control Panel進(jìn)行開(kāi)發(fā)、調試、也可以對通用驅動(dòng)、控制面板的源程序在VC++環(huán)境(需要DDK的支持)下進(jìn)行二次開(kāi)發(fā),以便編譯出開(kāi)發(fā)者滿(mǎn)意的驅動(dòng)程序和上位機程序。
結束語(yǔ)
通過(guò)實(shí)踐證明,基于USB2.0總線(xiàn)DSP HPI自舉的方案是可行的,可以達到預期效果,該方案可以省掉外擴的EPROM、FLASH及RAM等程序存儲器,故可節約成本,也便于DSP軟件算法升級,而且符合嵌入式系統要求,有很好的應用前景,當然,該方案還有待進(jìn)一步優(yōu)化與增強,若要訪(fǎng)問(wèn)外部存儲器,還需要編寫(xiě)二次引導程序,以便通過(guò)該程序把內部存儲器中的數據編譯到外部存儲器,若需DSP與主機實(shí)時(shí)通信,則需要USB固件和DSP源程序中編寫(xiě)相應的中斷服務(wù)程序。
評論