摘 要: 在簡(jiǎn)單介紹嵌入式title="USB">USB芯片SL811HS的基礎(chǔ)上,,給出了DSP的嵌入式USB主機(jī)接口軟、硬件設(shè)計(jì)的思路和方法,用以實(shí)現(xiàn)DSP和USB設(shè)備間的數(shù)據(jù)傳輸,。
關(guān)鍵詞: 嵌入式USB DSP USB固件 海量存儲(chǔ)器
近年來(lái),,通用串行總線(USB)發(fā)展非常迅速,它具有成本低,、速度快,、總線供電、可熱插拔等特點(diǎn),,被認(rèn)為是目前PC和外設(shè)連接的最佳方案,,因而得到了廣泛的應(yīng)用。USB技術(shù)規(guī)范將USB數(shù)據(jù)傳輸雙方劃分為2種類型:HOST和SLAVE,,即主機(jī)和從屬設(shè)備,。目前,USB主機(jī)一般都是由PC擔(dān)任,,而市場(chǎng)上各式各樣的USB產(chǎn)品基本上都是SLAVE,。USB技術(shù)在PC上應(yīng)用獲得成功的同時(shí),USB開(kāi)發(fā)者還為USB尋找到了新的應(yīng)用空間——嵌入式系統(tǒng)領(lǐng)域,,使嵌入式USB技術(shù)成為USB發(fā)展的新亮點(diǎn),。該技術(shù)可應(yīng)用在多種場(chǎng)合,例如:數(shù)碼相機(jī)可以將拍下的照片隨時(shí)轉(zhuǎn)移到移動(dòng)存儲(chǔ)器上或者直接在打印機(jī)上輸出,手機(jī)和PDA等手持設(shè)備間可隨意交換音頻,、視頻等及其他各類文件……其市場(chǎng)前景巨大,。
本文介紹采用TMS320VC54x DSP和嵌入式USB主機(jī)芯片的連接,實(shí)現(xiàn)USB設(shè)備和DSP的數(shù)據(jù)傳輸,。
1 SL811HS芯片
SL811HS是Cypress公司的一款低價(jià)位的嵌入式USB主/從二用芯片,。SL811HS支持USB1.1規(guī)范,工作在主機(jī)模式下,,可以和低速或全速設(shè)備進(jìn)行通信,,可以很方便地和MCU、DSP等處理器或者和ISA,、PCMCIA等總線建立連接,。
SL811HS主機(jī)模式下的功能框圖如圖1所示。在片選信號(hào)nCS,、讀閘門(mén)信號(hào)nRD,、寫(xiě)閘門(mén)信號(hào)nWR等控制信號(hào)、地址線A0和數(shù)據(jù)總線D0~D7的作用下,,它可以映射到處理器的I/O空間或存儲(chǔ)器空間,。SL811HS片內(nèi)有256字節(jié)的RAM,其中低16字節(jié)是控制寄存器和狀態(tài)寄存器,,剩下的240字節(jié)用作數(shù)據(jù)緩存,。地址線A0的使用比較特殊,訪問(wèn)芯片時(shí),,首先將A0置0,,通過(guò)D0~D7寫(xiě)入目標(biāo)RAM地址,然后在下一次讀寫(xiě)周期中,,將A0置1,,這樣D0~D7上就變成訪問(wèn)的數(shù)據(jù)。在每次讀寫(xiě)操作后,,RAM地址指針會(huì)自動(dòng)指向下一個(gè)數(shù)據(jù)單元,。
SL811HS片內(nèi)寄存器分為二部分,第一部分負(fù)責(zé)USB的傳輸,,包括USB主機(jī)控制寄存器(USB Host Control Register),、USB主機(jī)基址寄存器(USB Host Base Address)、USB主機(jī)長(zhǎng)度寄存器(USB Host Base Length),、USB主機(jī)令牌,、端點(diǎn)寄存器(USB Host PID, Device Endpoint)、USB狀態(tài)寄存器(USB Status),、USB主機(jī)設(shè)備地址寄存器(USB Host Device Address),、USB傳輸計(jì)數(shù)器(USB Transfer Count),;第二部分負(fù)責(zé)SL811HS的工作,包括控制寄存器1(Control Register 1),、中斷使能寄存器(Interrupt Enable Register),、中斷狀態(tài)寄存器(Interrupt Status Register)、SOF低位計(jì)數(shù)器(SOF Counter LOW),、硬件版本寄存器(HW Revision Register),,SOF高位計(jì)數(shù)器(SOF Counter HIGH)、控制寄存器2(Control Register 2),。
處理器通過(guò)訪問(wèn)上述寄存器來(lái)進(jìn)行數(shù)據(jù)傳輸控制和獲取傳輸狀態(tài),。另外,SL811HS提供了USB-A和USB-B二組USB主機(jī)控制寄存器,,因此可以采用乒乓方式進(jìn)行USB傳輸,。而數(shù)據(jù)的CRC校驗(yàn)則由芯片自動(dòng)完成。
2 硬件設(shè)計(jì)
本設(shè)計(jì)中采用的DSP是TI公司的TMS320VC5402,,它有64KB的I/O空間,,映射SL811HS非常簡(jiǎn)單。TMS320VC5402與SL811HS的硬件連接圖如圖2所示,。
硬件設(shè)計(jì)很簡(jiǎn)單,,SL811HS的M/S接高電平,工作在主機(jī)模式下,;DSP的IOSTRB#作為片選nCS輸入;讀寫(xiě)信號(hào)的邏輯表達(dá)式分別為:nRD=IOSTRB#+(!R/W#),,nWR= IOSTRB#+R/W#,;二者的地址線A0和數(shù)據(jù)線D0~D7對(duì)應(yīng)連接;DSP的輸出XF提供硬件復(fù)位脈沖,。此外,,由于SL811HS的中斷請(qǐng)求INTR高電平有效,而DSP的中斷是下降沿觸發(fā),,所以INTR要經(jīng)過(guò)非運(yùn)算后才能接到INT0#上,。經(jīng)過(guò)如上的映射,DSP向奇地址I/O空間寫(xiě)數(shù)據(jù)對(duì)選擇SL811HS的目標(biāo)RAM,,訪問(wèn)偶地址I/O空間時(shí)則傳輸相應(yīng)的數(shù)據(jù),。
3 軟件設(shè)計(jì)
3.1 SL811HS存儲(chǔ)器讀寫(xiě)軟件
SL811HS片內(nèi)RAM的訪問(wèn)可以用2個(gè)函數(shù)實(shí)現(xiàn):Wr811hsBuf(u16 address,u16*buffer,、u16 length)和Rd811-hsBuf(u16 address,,u16*buffer,u16 length),,其中的參數(shù)分別為SL811HS的RAM地址,、DSP數(shù)據(jù)單元指針和訪問(wèn)字節(jié)數(shù),,以下給出它們的源代碼。
void Wr811hsBuf(u16 address,,u16*buffer,,u16 length)
{ port0000=address;//選擇SL811HS要寫(xiě)
//的第1個(gè)RAM單元
While(length--)//將DSP緩沖區(qū)的數(shù)據(jù)
//逐一寫(xiě)入SL811HS
port0001=*buffer++,;//每寫(xiě)1次,,SL811HS
//自動(dòng)指向下一個(gè)RAM單元
}
void Rd811hsBuf(u16 address,u16*buffer,,u16 length)
{ port0000=address,;//選擇SL811HS要讀的
//第1個(gè)RAM單元
While(length--) //將SL811HS的數(shù)據(jù)
//逐一讀出放到DSP緩沖區(qū)
*buffer++=port0001;//每讀1次,,SL811HS
//自動(dòng)指向下一個(gè)RAM單元
}
3.2 USB主機(jī)的Firmware設(shè)計(jì)
USB的設(shè)計(jì)最困難的就是Firmware(固件)設(shè)計(jì),,固件編程要遵循復(fù)雜的USB規(guī)范,所以比硬件設(shè)計(jì)工作量大得多,。
主機(jī)端的固件編程可以基于WINCE,、VxWorks、Linux等嵌入式操作系統(tǒng),。Cypress公司網(wǎng)站上有SL811HS在這些RTOS平臺(tái)上的驅(qū)動(dòng)源碼,。但如果系統(tǒng)資源較少,功能比較簡(jiǎn)單,,也可以不用RTOS,,而直接自己編寫(xiě)SL811HS的USB底層驅(qū)動(dòng)。筆者就是采用了這一方法,,故工作量并不大,。
USB事務(wù)處理一般由3個(gè)階段組成:令牌階段、數(shù)據(jù)階段和握手階段,。令牌階段定義了事務(wù)處理的類型,,包括SETUP、IN和OUT,;數(shù)據(jù)階段負(fù)責(zé)運(yùn)送和傳輸相關(guān)的數(shù)據(jù),,Data0和Data1二種數(shù)據(jù)包交替使用,以支持雙方的傳輸同步,;握手階段由收方向發(fā)方提供反饋,,告知數(shù)據(jù)是否正確接收。
在嵌入式USB設(shè)計(jì)中,,固件的核心部分是USB傳輸函數(shù)usbXfer,。usbXfer管理著USB的事務(wù)處理,其入口參數(shù)有:設(shè)備地址UsbAddr,、端點(diǎn)地址Endpoint,、令牌包類型PID,、端點(diǎn)最大負(fù)荷Payload、傳輸數(shù)據(jù)總長(zhǎng)度Length,、DSP數(shù)據(jù)緩存區(qū)指針*Buffer,。USB傳輸函數(shù)程序流程圖如圖3所示。
USB主機(jī)檢測(cè)到設(shè)備連接好后要對(duì)其進(jìn)行配置,,稱為設(shè)備的枚舉,,該部分固件的核心是設(shè)備請(qǐng)求函數(shù)VendorCmd。VendorCmd構(gòu)建在usbXfer函數(shù)之上,,通過(guò)調(diào)用usbXfer進(jìn)行若干次的控制傳輸來(lái)實(shí)現(xiàn),。控制傳輸由3個(gè)階段組成:建立階段,、數(shù)據(jù)階段和狀態(tài)階段,。建立階段,主機(jī)進(jìn)行SETUP事務(wù)處理,,向目標(biāo)設(shè)備發(fā)送標(biāo)準(zhǔn)設(shè)備請(qǐng)求,;數(shù)據(jù)階段,由若干個(gè)IN事務(wù)處理或OUT事務(wù)處理組成,;狀態(tài)階段,,主機(jī)則完成與數(shù)據(jù)階段相反的事務(wù)處理,結(jié)束本次控制傳輸,。
設(shè)備的枚舉過(guò)程主要包括以下步驟:(1)主機(jī)請(qǐng)求設(shè)備控制端點(diǎn)0,,以確定缺省管道支持的最大數(shù)據(jù)量。(2)主機(jī)給USB設(shè)備分配1個(gè)惟一的地址,。(3)主機(jī)從描述符中讀取配置信息并加以執(zhí)行,。(4)主機(jī)驗(yàn)證設(shè)備所需要的資源是否可以獲得。(5)主機(jī)給USB設(shè)備發(fā)送1個(gè)配置值,,指出如何使用該設(shè)備。
枚舉成功后,,主機(jī)和設(shè)備就可根據(jù)設(shè)備接口類型,,采用相應(yīng)的接口協(xié)議進(jìn)行數(shù)據(jù)控制和傳輸。USB設(shè)備類型主要?jiǎng)澐譃椋阂纛l設(shè)備類,、顯示設(shè)備類,、人機(jī)接口類、海量存儲(chǔ)器類等,。特定的設(shè)備類又劃分為若干個(gè)子類,,它們又有可能采用不同的接口協(xié)議傳輸指令和數(shù)據(jù)。以U盤(pán)為例,,類代碼08h(海量存儲(chǔ)器類),,子類代碼06h(SCSI指令集子類),,傳輸協(xié)議50h(Bulk-Only傳輸協(xié)議)。按照這些標(biāo)準(zhǔn),,則U盤(pán)的操作過(guò)程可分為指令,、數(shù)據(jù)和狀態(tài)3個(gè)階段,也就是主機(jī)首先向設(shè)備Bulk-Out端點(diǎn)寫(xiě)包含SCSI的指令塊(CBW),,然后從Bulk-In讀數(shù)據(jù)或向Bulk-Out端點(diǎn)寫(xiě)數(shù)據(jù),,最后從Bulk-In端點(diǎn)讀取傳輸狀態(tài)(CSW)。
4 結(jié)束語(yǔ)
DSP加上嵌入式USB主機(jī)接口后,,一方面可以和設(shè)備之間傳輸數(shù)據(jù),,另一方面又可對(duì)數(shù)據(jù)進(jìn)行壓縮和變換等算法處理。這對(duì)于音視頻信號(hào)等數(shù)據(jù)采集系統(tǒng),,是一個(gè)很好的接口方案,。故該系統(tǒng)非常適用于數(shù)據(jù)采集并進(jìn)行信號(hào)處理的場(chǎng)合。
參考文獻(xiàn)
1 Anderson D.USB系統(tǒng)體系.北京:中國(guó)電力出版社,,2000
2 Universal Serial Bus Specification Revision 1.1.www.usb.
org,,1998
3 Cypress Semiconductor Corporation.SL811HS Datasheet.2002