《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 模擬設(shè)計(jì) > 設(shè)計(jì)應(yīng)用 > DSP的嵌入式USB主機(jī)接口設(shè)計(jì)
DSP的嵌入式USB主機(jī)接口設(shè)計(jì)
劉 兵 徐家愷 劉 陽
摘要: 在簡單介紹嵌入式USB芯片SL811HS的基礎(chǔ)上,給出了DSP的嵌入式USB主機(jī)接口軟、硬件設(shè)計(jì)的思路和方法,用以實(shí)現(xiàn)DSP和USB設(shè)備間的數(shù)據(jù)傳輸。
Abstract:
Key words :

  摘  要: 在簡單介紹嵌入式title="USB">USB芯片SL811HS的基礎(chǔ)上,給出了DSP的嵌入式USB主機(jī)接口軟、硬件設(shè)計(jì)的思路和方法,用以實(shí)現(xiàn)DSP和USB設(shè)備間的數(shù)據(jù)傳輸。
  關(guān)鍵詞: 嵌入式USB  DSP  USB固件  海量存儲(chǔ)器

   近年來,通用串行總線(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)任,而市場上各式各樣的USB產(chǎn)品基本上都是SLAVE。USB技術(shù)在PC上應(yīng)用獲得成功的同時(shí),USB開發(fā)者還為USB尋找到了新的應(yīng)用空間——嵌入式系統(tǒng)領(lǐng)域,使嵌入式USB技術(shù)成為USB發(fā)展的新亮點(diǎn)。該技術(shù)可應(yīng)用在多種場合,例如:數(shù)碼相機(jī)可以將拍下的照片隨時(shí)轉(zhuǎn)移到移動(dòng)存儲(chǔ)器上或者直接在打印機(jī)上輸出,手機(jī)和PDA等手持設(shè)備間可隨意交換音頻、視頻等及其他各類文件……其市場前景巨大。
  本文介紹采用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、讀閘門信號(hào)nRD、寫閘門信號(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的使用比較特殊,訪問芯片時(shí),首先將A0置0,通過D0~D7寫入目標(biāo)RAM地址,然后在下一次讀寫周期中,將A0置1,這樣D0~D7上就變成訪問的數(shù)據(jù)。在每次讀寫操作后,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ī)長度寄存器(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)。
  處理器通過訪問上述寄存器來進(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非常簡單。TMS320VC5402與SL811HS的硬件連接圖如圖2所示。

  硬件設(shè)計(jì)很簡單,SL811HS的M/S接高電平,工作在主機(jī)模式下;DSP的IOSTRB#作為片選nCS輸入;讀寫信號(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)過非運(yùn)算后才能接到INT0#上。經(jīng)過如上的映射,DSP向奇地址I/O空間寫數(shù)據(jù)對(duì)選擇SL811HS的目標(biāo)RAM,訪問偶地址I/O空間時(shí)則傳輸相應(yīng)的數(shù)據(jù)。
3  軟件設(shè)計(jì)
3.1 SL811HS存儲(chǔ)器讀寫軟件

  SL811HS片內(nèi)RAM的訪問可以用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ù)單元指針和訪問字節(jié)數(shù),以下給出它們的源代碼。
  void Wr811hsBuf(u16 address,u16*buffer,u16 length)
  { port0000=address;//選擇SL811HS要寫
            //的第1個(gè)RAM單元
   While(length--)//將DSP緩沖區(qū)的數(shù)據(jù)
            //逐一寫入SL811HS
     port0001=*buffer++;//每寫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)資源較少,功能比較簡單,也可以不用RTOS,而直接自己編寫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ù)總長度Length、DSP數(shù)據(jù)緩存區(qū)指針*Buffer。USB傳輸函數(shù)程序流程圖如圖3所示。


  USB主機(jī)檢測到設(shè)備連接好后要對(duì)其進(jìn)行配置,稱為設(shè)備的枚舉,該部分固件的核心是設(shè)備請(qǐng)求函數(shù)VendorCmd。VendorCmd構(gòu)建在usbXfer函數(shù)之上,通過調(diào)用usbXfer進(jìn)行若干次的控制傳輸來實(shí)現(xiàn)??刂苽鬏斢?個(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è)備的枚舉過程主要包括以下步驟:(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盤為例,類代碼08h(海量存儲(chǔ)器類),子類代碼06h(SCSI指令集子類),傳輸協(xié)議50h(Bulk-Only傳輸協(xié)議)。按照這些標(biāo)準(zhǔn),則U盤的操作過程可分為指令、數(shù)據(jù)和狀態(tài)3個(gè)階段,也就是主機(jī)首先向設(shè)備Bulk-Out端點(diǎn)寫包含SCSI的指令塊(CBW),然后從Bulk-In讀數(shù)據(jù)或向Bulk-Out端點(diǎn)寫數(shù)據(jù),最后從Bulk-In端點(diǎn)讀取傳輸狀態(tài)(CSW)。
4  結(jié)束語
  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)處理的場合。
參考文獻(xiàn)
1   Anderson D.USB系統(tǒng)體系.北京:中國電力出版社,2000
2   Universal Serial Bus Specification Revision 1.1.www.usb.
     org,1998
3   Cypress Semiconductor Corporation.SL811HS Datasheet.2002
 

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。