摘要:TMS320VC5509A是TI推出的新一代高性能、低功耗數字信號處理芯片,并擴充了當今流行的USB設備接口模塊。本文介紹了嵌入式系統USB接口的特點和主要軟件模塊,分析了TMS320VC5509A USB接口模塊的結構,給出了USB設備固件的設計和實現方案。該方案層次清晰,可移植性強,具有廣泛的適用性。
關鍵詞:USB;TMS320VC5509A;片上支持庫CSL;固件協議棧
引言
DSP的優(yōu)勢是其出色的數據運算能力,但它的通信接口功能一般都較弱。隨著嵌入式系統在各個領域的廣泛應用,越來越多的應用不僅要求嵌入式處理器有足夠的數據處理能力,還希望有簡單、可靠的數據通信功能。USB是目前非常流行的通信接口,具有低功耗、即插即用、廣泛的軟硬件支持、價格低廉等優(yōu)點。TI最新推出的新一代TMS320VC5509A DSP,整合了嵌入式系統的許多功能,具有高性能(400MIPS@200MHz)、低功耗的特點,并在外設中集成了USB設備接口,具有廣泛的適用性[4]。
1、嵌入式系統中的USB接口
USB作為計算機領域的新型接口技術,至今在嵌入式系統中的應用還處于起步階段,遠不如RS232等傳統接口應用普及。這主要是因為USB的許多優(yōu)點都是從使用者角度而言的,從開發(fā)者的角度來看,USB接口的協議復雜性增加了,為USB固件及PC驅動設計增加了難度。VC5509A 是一種帶有USB設備控制器的數字信號處理器,使用VC5509A DSP,可以不用外擴USB控制器芯片,即可實現帶USB通信功能的智能外設。
一般來說,一個完整的USB接口軟件主要由四個部分組成:USB主機端設備驅動程序、USB主機端應用程序、USB設備端通信固件程序和USB設備端應用程序。
其中,應用程序根據各種不同的系統需求而不同。USB接口軟件的主要難點在于USB設備端通信固件程序和主機端的設備驅動程序,這里主要介紹設備端固件的設計與實現。
2、VC5509A USB模塊硬件結構分析
VC5509A的USB模塊有16個端點(endpoint)。其中有兩個控制端點,輸入端點0和輸出端點0;14個通用端點,輸入端點1~7和輸出端點1~7[3]。
USB接口的數據傳輸的方向可以分為Out傳輸(由主機到USB設備)和In傳輸(由USB設備到主機)[1]。In傳輸時,CPU或者USB DMA控制器將數據放在Buffer RAM中,進而數據通過UBM(USB Buffer Manager)到達SIE(串行接口引擎),由SIE負責將片內的并行數據轉換成串行數據后通過USB接口輸出。Out傳輸與之方向相反,原理和傳輸路徑相同。圖1所示為主機與DSP存儲器之間通過USB接口進行數據傳輸的示意圖。
3、USB的固件設計與實現
使用VC5509A DSP芯片的USB接口,DSP系統對外部而言可以看作一個USB設備。USB設備作為一個完整的硬件設備,是由硬件和固件兩部分組成的。固件包括有關系統的配置、模塊初始化以及USB協議棧三部分。其中,系統配置是在芯片上電就完成的,與具體系統實現的功能密切相關。因此對于VC5509A來說,固件設計需要實現的主要功能可分為兩部分:
1) USB設備的初始化與配置:告知主機設備的能力和特性,并為設備分配地址。
2) USB1.1的標準的協議的應答(即實現固件協議棧),并以批量(BULK)方式通過InEndpoint2與OutEndpoint2完成DSP與PC機的數據交換。
3.1 初始化配置
VC5509A的USB固件設計中,初始化配置是很重要的一環(huán)。對于55xx系列的DSP芯片,TI在其開發(fā)環(huán)境CCS中帶有芯片支持庫CSL(chip support library),CSL以函數或者宏的形式提供一系列DSP硬件操作接口。使用CSL可以使USB模塊驅動的編寫變得方便快捷[2]。編寫通信接口固件可以通過CSL對USB模塊進行配置,具體步驟:
初始化應用函數接口向量指針,USB_setAPIVectorAddress()函數使得使用者可以通過函數調用表來訪問芯片支持庫CSL的USB應用函數API。
初始化USB時鐘產生器以產生USB模塊所需要的48MHz時鐘。USB模塊需要48MHz時鐘驅動,CLKIN的時鐘可以不等于48MHz,但必須通過USB時鐘產生器產生48MHz時鐘?梢酝ㄟ^USB_initPLL()函數來完成。該函數有三個參數,第一個是輸入頻率,第二個是輸出頻率,第三個是輸入時鐘分頻數。
初始化函數USB_init()初始化USB模塊。該函數有三個參數,第一個是USB設備號,第二個指向一個以NULL結束的初始化端點目標的句柄組成的數組,第三個是幀預起始定時器的計數值。
當USB模塊初始化完成后,通過USB_devConnect函數,使USB模塊與總線聯接,發(fā)送和接收USB源數據。USB模塊與主機的相連接,需要在DSP上運行相應的代碼,以支持USB協議。如果沒有USB協議處理代碼,DSP將不能處理接受到的數據,導致DSP被主機掛起。USB協議處理代碼將在3.2傳輸方式和3.3的固件程序框架中介紹。
USB模塊配置與初始化代碼如下:
CSL_init(); /*初始化片上支持庫*/
USB_setAPIVectorAddress(); /*初始化應用函數接口向量指針*/





