摘 要: 以S3C44BOX作為主控制器、SL811HS作為接口芯片構建USB主機的硬件設計方案及軟件實現。該系統把USB主機引入嵌入式系統" title="嵌入式系統">嵌入式系統中,拓寬了USB的應用領域。
關鍵詞: SL811HS USB主機 嵌入式系統
隨著USB(Univeral Serial Bus)應用領域的逐步擴大,人們對于USB的期望也越來越高。尤其是在移動數據領域,希望能通過PDA等移動設備直接與USB外設" title="外設">外設通信,使USB可以應用在沒有PC的領域。但任何一次USB的數據傳輸都必須由主機發起和控制,所有USB設備只能與主機建立連接,任何兩個外設之間或兩個主機之間無法直接通信。由于當前大多數主機使用PC,所以所使用的USB移動設備都是只能在PC上使用的USB設備,如USB移動硬盤、USB接口的數碼相機等,只能通過PC進行文件和數據交換。因此開發嵌入式的USB主機系統十分必要。
1 硬件電路設計
本文采用三星公司ARM7系列的S3C44BOX作為主處理器,Cypress公司生產的SL811HS作為USB主控制器。
1.1 S3C44BOX芯片介紹
S3C44BOX微處理器是三星公司專為手持設備和一般應用提供的高性價比和高性能的微控制器解決方案。它使用ARM7TDMI內核,最高工作頻率為66MHz。S3C44BOX通過在ARM7TDMI基礎上擴展完整的通用外圍器件,使系統費用降至最低。集成的片上" title="片上">片上功能主要有:(1)擴展內存控制器(FP/FDO/SDRAM控制,片選邏輯);(2)帶8KB緩存的2.5V靜態ARM7TDMI CPU核;(3)帶有1個專用DMA通道的LCD控制器;(4)2個通用DMA通道,1個帶外部請求管腳的DMA通道;(5)1個多主機I2C總線控制器;(6)5個PWM定時器及1個內部定時器;(7)看門狗定時器;(8)71個通用I/O口,8個外部中斷源;(9)能量控制模式:正常、低、休眠和停止模式;(10)8個10位ADC;(11)帶PLL的片上時鐘發生器。
1.2 SL811HS芯片介紹
SL811HS是一款嵌入式USB主機/設備控制器" title="設備控制器">設備控制器,它既可做主機控制器,又可做設備控制器,本系統只用做USB主機控制器。SL811HS的功能模塊如圖1所示。
SL811HS的主要特點:(1)可作為USB主機或設備的接口控制器;(2)支持USB協議1.1,提供全速和低速兩種總線速度方式;(3)片上集成了SIE、單端口根Hub、USB收發器和256B的SRAM;(4)3.3V工作電壓,接口兼容5V電平;(5)硬件自動產生幀起始包SOF和CRC5/16校驗。
1.3 硬件電路
處理器與SL811HS的連線如圖2所示。8位數據總線、中斷請求引腳接S3C44BOX的數據總線D0~D7和外部中斷2,片選連到處理器的nGCS1,即Bank1,A0是地址指針信號。M/S是工作模式選擇,M/S=1是Slave模式,M/S=0是Master模式。此處M/S接地,工作在主機(Host)模式。D+和D-是與USB設備相連的數據信號。由于USB接在S3C44B0X的Bank1上,因此SL811HS的RAM基址是0x02000000。
2 軟件設計
處理器對SL811HS的狀態進行檢測和控制等操作都是基于寄存器實現的,因此從硬件的角度看,系統編程就是對其一系列寄存器和緩存區的讀/寫訪問。
2.1 SL811HS的相關寄存器介紹
SL811HS內帶256B的RAM,其片內尋址范圍為0x00~0xFF,CPU可以通過接口進行訪問。其中低地址的16個字節是SL811HS定義的寄存器,其余的240字節則是存儲緩存區。寄存器分布如表1所示。
USB-A Host與USB-B Host是兩套完全并行的寄存器,即其功能和結構完全相同。例如,EP0XferLen的功能與EP1XferLen的功能和使用方法完全一樣。之所以這樣安排是為了實現“乒乓”的數據處理機制。這種機制下,兩套寄存器完全可以交替操作,即其中一套正在被配置時,另一套可以進行數據傳輸,從而提高系統處理數據的效率。
2.2 讀寫程序的實現
SL811HS的外接總線地址與數據信號是復用的,通過A0信號來區分地址和信號。由上面的硬件電路設計可知,A0接ARM的A0地址線,其基地址為0x02000000。另外SL811HS采用自動地址增加模式。下面給出讀寫緩存區的程序。
#define USB_SL811ADDR (*(volatile unsigned char*)0x02000000)
#define USB_SL811DATA (*(volatile unsigned char*)0x02000001)
void SL811Write(U8 address,U8 value)
{
USB_SL811ADDR=address;
USB_SL811DATA=value;
}
U8 SL811Read(U8 address)
{
USB_SL811ADDR=address;
return USB_SL811DATA;
}
void SL811BufRead(U8 addr,U8*s,U8 c)
{
U8 i;i=c;
USB_SL811ADDR=addr;
while (i--)
*s++=USB_SL811DATA;
}
void SL811BufWrite(U8 addr,U8*s,U8 c)
{
USB_SL811ADDR=addr;
while (c--)
USB_SL811DATA=*s++;
}
本文給出了在S3C44BOX處理器上外擴USBHost的具體設計,并詳細介紹了SL811HS的功能及其工作原理。在此基礎上,可以開發讀取U盤、攝像頭等USB設備的嵌入式" title="的嵌入式">的嵌入式系統。此設計將會廣泛地應用到數據采集系統、工控、遠程監控等領域。
參考文獻
1 馬偉.計算機USB系統原理及其主/從機設計.北京:北京航空航天大學出版社,2004
2 吳明暉.基于ARM的嵌入式系統開發與應用.北京:人民郵電出版社,2004
3 SL811 Embeded USB Host/Slave Controller Data Sheet.Cypress Semiconductor Corporation,2002