基于SL811HS的嵌入式USB主机的实现
2008-05-29
作者:段海龙,程 健
摘 要: 以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