原创 ARM系统设计及其USB主机扩展方案

2007-5-25 20:53 2224 4 4 分类: MCU/ 嵌入式

ARM系统设计及其USB主机扩展方案


 


 摘要:本文介绍了以ARM为核心微处理器的嵌入式系统的设计方法,以及USB主机控制芯片在ARM系统中的扩展方案,在此硬件平台的基础上,对ucLinux操作系统的移植和应用进行说明,并探讨了USB主机控制芯片驱动程序的设计。


关键词:ARM; USB主机; ucLinux; USB驱动程序 


    通用串行总线 (Universal Serial Bus,即USB)是一种目前广泛应用的计算机外围串行通信标准,但是,无论是采用USB1.1还是采用支持高速数据传输的USB2.0所设计的USB系统,都需要以计算机为主机控制数据的传输,而两个设备之间则无法直接进行USB传输,这就大大限制了USB在这些嵌入式设备中的应用。为此,USB OTG应运而生,它规范定义了双功能设备,这种设备既具有USB主机的功能,又具有USB外设的功能,这样就可以在诸多的嵌入式设备中使用USB主机的功能,大大方便了设备间的互连[1]


ARM(Advanced RISC Machine)既是一类微处理器的通称,也是设计这种处理器内核的公司的名字。作为一种低功耗、高性能的32位嵌入式微处理器,现在已经被广泛应用在各个领域中,但现在很多以ARM为内核的嵌入式设备都只具有USB外设的功能。为了在嵌入式设备中使用USB主机的功能,必须给ARM系统外扩一片USB主机控制器芯片。有些ARM芯片的生产厂商也在以ARM为内核的微处理器中集成了USB主机控制器,但是,更多的ARM处理器是不带USB功能的,外部扩展USB控制芯片的方式使选择微处理器的空间更加广阔。


系统总体设计方案


    系统的主要功能是在以ARM为核心的嵌入式系统中实现USB的主机控制能力,以便在没有计算机介入的情况下对USB设备进行直接的控制及读写操作。如图1所示,系统主要由ARM7微处理器、FLASHSDRAMUSB主机控制芯片和串口组成。ARM处理器选用的是三星公司的S3C4510B,这是一款基于ARM7内核的微处理器,具有低功耗、高性能的特点 [2][3]FLASH用来存放ucLinux操作系统和一些十分重要的数据,SDRAM则是操作系统和应用程序的运行空间、数据及堆栈区。USB主机控制芯片选用的是Cypress公司的SL811HS,这是一款双功能的控制芯片,既可以用来做主机又可以做外设,系统中主要使用了它作为主机控制器的功能[4]


300)this.width=300" align="middle" border="0">


硬件电路设计


21  FLASH存储器电路


Flash存储器是一种可在系统进行电擦写,掉电后信息不丢失的存储器,在嵌入式系统中广泛应用。它在系统中通常用于存放程序代码、常量表、以及一些在系统掉电后需要保存的用户数据等。常用的Flash8位或16位的数据宽度,编程电压为单3.3V。系统中选用一片16位的Flash存储器AM29LV160B,单片存储容量2MB,用于存放操作系统和程序代码,系统上电或复位后从此获得第一条指令并开始执行,因此,应将Flash存储器配置到ROM/SRAM/FALSH BANK0,即将S3C4510BnRCS<0>接到其片选引脚CE#端。将S3C4510BB0SIZE[1:0]置为‘10’,选择ROM/SRAM/FALSH Bank016位工作方式。


22  SDRAM 电路


Flash存储器相比,SDRAM不具有掉电保持数据的特性,但其存取速度大大高于Flash存储器,因此,它在系统中主要用作程序的运行空间、数据及堆栈区。当系统启动时,CPU首先从复位地址即FLASH0x0处读取启动代码,在完成系统的初始化后,程序代码将被调入SDRAM中运行以提高系统的运行速度。同时,系统及用户堆栈、运行数据也都存放在其中。系统中选用HY57V641620,它的存储容量为8MB,工作电压为3.3V16位数据宽度。根据系统需求,可以构建16位或32位的SDRAM存储系统,但为了充分发挥32CPU的数据处理能力,本系统采用32位的SDRAM存储系统。选用两片HY57V641620并联构建32位的SDRAM存储系统。


2串口电路


串口的主要作用是向计算机传输信息,这些信息可以在计算机的超级终端上显示,以便于调试程序时监测程序的内部变量值;在ucLinux操作系统运行时,串口将用来显示它的启动信息和运行状态,向操作系统发送命令对其进行控制也需要通过串口来完成。


24  JTAG调试接口


JTAG接口主要是用来实现芯片的嵌入式调试及在系统编程的功能,如对Flash器件进行编程等。ARM公司的集成开发环境ADS可以通过JTAG下载线或仿真器和系统板上的JTAG接口相连,通过JTAG接口把在ADS中编译好的程序下载到系统板上以进行调试。


25  USB主机控制器SL811HS


由于S3C4510B本身不带USB控制电路逻辑模块,所以必须外扩一片USB控制芯片以实现USB传输。系统中使用的SL811HS主要有以下几点特性:


l         能工作在两种模式下——主模式或从模式,可以通过硬件或者软件进行控制。


l         符合USB1.1标准。


l         8位双向数据总线,采用I/O端口传输方式,在从模式下还支持DMA方式。


如图2所示,它主要由CPU接口、中断控制、主/从模式控制、USB SIE、时钟模块、SRAM及根集线器等模块组成。


300)this.width=300" align="middle" border="0">


 


它与S3C4510B的主要信号接口电路如图3所示:


       300)this.width=300" align="middle" border="0">


 


    SL811HS采用了数据线和地址线复用的方式,当A0为低且处于写状态时,ARMSL811HS的片内地址指针寄存器写入地址值,当A0变为高时,则可对写入的地址中的数据进行读写。A0ARMADDR2相连,因此对SL811HS写地址时应将ARM的地址总线低位置为0x0,而读写数据时应将其置为0x4nCSARMnECS0相连,即把SL811HS分配到ARM的外部I/O0


系统软件


31  ucLinux操作系统


    为了降低硬件成本及运行功耗,有一类CPU在设计中取消了内存管理单元MMUucLinux就是专门针对这类CPU而设计的,它主要由以下几个部分构成:Boot Loader、内核初始化、系统调用函数/捕获函数、设备驱动和文件系统。


其中Boot Loader被用来初始化系统板上的硬件资源,可见,这部分代码是硬件相关的,必须根据系统板上不同的硬件资源进行相应的配置。ucLinux源代码中针对S3C4510B的片内特殊功能寄存器以及其他相关硬件信息的定义位于linux-2.4.x\include\asm-armnommu\arch-snds100\hardware.h中,而对这些硬件进行初始化的代码则位于linux-2.4.x\arch\armnommu\boot\compressed\head.S中,通过对这两个文件进行适当的修改,即可使ucLinux适合于不同的系统板。本系统中主要是更改了FLASHSDRAM的容量及数据宽度,开启了外部I/O0并设定为8位数据宽度以用来配置SL811HS,并把它的基地址设定为0x01400000


完成对源代码的修改之后就可以进行内核的编译。编译是在装有Linux及所需的交叉编译工具链的计算机上来进行的,编译生成的image.ram可以下载到SDRAM中直接运行,image.rom可以烧写到FLASH中,系统上电或重启后,将从FLASH0x0地址处开始执行,对硬件资源进行初始化后进入ucLinux


3.2          USB驱动程序


    Linux2.4内核以后,Linux的设备驱动中加入了对USB的支持,ucLinux也秉承了这一特点。ucLinux中的USB驱动程序由主机控制器驱动程序(HCD)、USB核心驱动程序(USBD)、USB设备驱动程序(包括集线器驱动程序)3个部分组成。由于USB主机控制器主要有OHCIUHCI两大标准,所以ucLinux分别为符合这两种标准的主机控制器提供了相应的驱动程序。但是SL811HS是为嵌入式系统设计的,它不符合主要是为计算机而制定的OHCIUHCI标准,因此,必须为它提供专门的驱动程序。


    ucLinux中内置了Cypress公司为自己的SL811HS编写的Linux下的驱动程序,但这个驱动是为StrongArm SA1100而编写的,而SA1100上可以运行Linux而不能运行ucLinux,因此这个驱动程序并不适合ucLinux,在编译中无法通过。因此,本系统没有使用Cypress提供的代码,而选择自己编写代码。


    SL811HS驱动程序的总体结构如图4所示,最底层是其寄存器和数据缓冲区的读写函数,供上层的函数调用。通过对SL811HS的寄存器及数据缓冲区的一系列读写操作,可以实现进行USB传输所需要的设置事务、输入事务和输出事务[5]USB的四种传输方式,控制传输、中断传输、批量传输和同步传输就是由上述三种事务所构成。有了这些底层的函数之后,就可以对SL811HS进行初始化,然后对设备进行枚举以获取该设备的一系列描述符,最后就可以配置设备并实现各种传输协议。


    300)this.width=300" align="middle" border="0">


    文中讲述了以ARM为核心微处理器的USB主机控制系统的一般设计方法,并对其上运行的操作系统及驱动程序做出初步分析。ARM在嵌入式系统中现在已经取得了广泛的应用,而USB设备端口在嵌入式系统中也是十分普遍。随着USB OTG的推出,必将有越来越多的外设具有USB主机端的功能,实现外设之间直接的数据传输。

  
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
4
关闭 站长推荐上一条 /3 下一条