通用串行总线 (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控制芯片的方式使选择微处理器的空间更加广阔。
1 系统总体设计方案
系统的主要功能是在以arm为核心的嵌入式系统中实现usb的主机控制能力,以便在没有计算机介入的情况下对usb设备进行直接的控制及读写操作。如图1所示,系统主要由arm7微处理器、flash、sdram、usb主机控制芯片和串口组成。arm处理器选用的是三星公司的s3c4510b,这是一款基于arm7内核的微处理器,具有低功耗、高性能的特点 [2][3]。flash用来存放uclinux操作系统和一些十分重要的数据,sdram则是操作系统和应用程序的运行空间、数据及堆栈区。usb主机控制芯片选用的是cypress公司的sl811hs,这是一款双功能的控制芯片,既可以用来做主机又可以做外设,系统中主要使用了它作为主机控制器的功能[4]。
300)this.width=300" align=middle border=0>
2 硬件电路设计
2.1 flash存储器电路
flash存储器是一种可在系统进行电擦写,掉电后信息不丢失的存储器,在嵌入式系统中广泛应用。它在系统中通常用于存放程序代码、常量表、以及一些在系统掉电后需要保存的用户数据等。常用的flash为8位或16位的数据宽度,编程电压为单3.3v。系统中选用一片16位的flash存储器am29lv160b,单片存储容量2mb,用于存放操作系统和程序代码,系统上电或复位后从此获得第一条指令并开始执行,因此,应将flash存储器配置到rom/sram/falsh bank0,即将s3c4510b的nrcs<0>接到其片选引脚ce#端。将s3c4510b的b0size[1:0]置为‘10’,选择rom/sram/falsh bank0为16位工作方式。
2.2 sdram 电路
与flash存储器相比,sdram不具有掉电保持数据的特性,但其存取速度大大高于flash存储器,因此,它在系统中主要用作程序的运行空间、数据及堆栈区。当系统启动时,cpu首先从复位地址即flash的0x0处读取启动代码,在完成系统的初始化后,程序代码将被调入sdram中运行以提高系统的运行速度。同时,系统及用户堆栈、运行数据也都存放在其中。系统中选用hy57v641620,它的存储容量为8mb,工作电压为3.3v,16位数据宽度。根据系统需求,可以构建16位或32位的sdram存储系统,但为了充分发挥32位cpu的数据处理能力,本系统采用32位的sdram存储系统。选用两片hy57v641620并联构建32位的sdram存储系统。
2.3 串口电路
串口的主要作用是向计算机传输信息,这些信息可以在计算机的超级终端上显示,以便于调试程序时监测程序的内部变量值;在uclinux操作系统运行时,串口将用来显示它的启动信息和运行状态,向操作系统发送命令对其进行控制也需要通过串口来完成。
2.4 jtag调试接口
jtag接口主要是用来实现芯片的嵌入式调试及在系统编程的功能,如对flash器件进行编程等。arm公司的集成开发环境ads可以通过jtag下载线或仿真器和系统板上的jtag接口相连,通过jtag接口把在ads中编译好的程序下载到系统板上以进行调试。
2.5 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为低且处于写状态时,arm向sl811hs的片内地址指针寄存器写入地址值,当a0变为高时,则可对写入的地址中的数据进行读写。a0与arm的addr2相连,因此对sl811hs写地址时应将arm的地址总线低位置为0x0,而读写数据时应将其置为0x4。ncs和arm的necs0相连,即把sl811hs分配到arm的外部i/o口0。
3 系统软件
3.1 uclinux操作系统
为了降低硬件成本及运行功耗,有一类cpu在设计中取消了内存管理单元mmu,uclinux就是专门针对这类cpu而设计的,它主要由以下几个部分构成:boot loader、内核初始化、系统调用函数/捕获函数、设备驱动和文件系统。
其中boot loader被用来初始化系统板上的硬件资源,可见,这部分代码是硬件相关的,必须根据系统板上不同的硬件资源进行相应的配置。uclinux源代码中针对s3c4510b的片内特殊功能寄存器以及其他相关硬件信息的定义位于linux-2.4.xincludeasm-armnommuarch-snds100hardware.h中,而对这些硬件进行初始化的代码则位于linux-2.4.xarcharmnommuootcompressedhead.s中,通过对这两个文件进行适当的修改,即可使uclinux适合于不同的系统板。本系统中主要是更改了flash和sdram的容量及数据宽度,开启了外部i/o口0并设定为8位数据宽度以用来配置sl811hs,并把它的基地址设定为0x01400000。
完成对源代码的修改之后就可以进行内核的编译。编译是在装有linux及所需的交叉编译工具链的计算机上来进行的,编译生成的image.ram可以下载到sdram中直接运行,image.rom可以烧写到flash中,系统上电或重启后,将从flash的0x0地址处开始执行,对硬件资源进行初始化后进入uclinux。
3.2 usb驱动程序
从linux2.4内核以后,linux的设备驱动中加入了对usb的支持,uclinux也秉承了这一特点。uclinux中的usb驱动程序由主机控制器驱动程序(hcd)、usb核心驱动程序(usbd)、usb设备驱动程序(包括集线器驱动程序)3个部分组成。由于usb主机控制器主要有ohci和uhci两大标准,所以uclinux分别为符合这两种标准的主机控制器提供了相应的驱动程序。但是sl811hs是为嵌入式系统设计的,它不符合主要是为计算机而制定的ohci和uhci标准,因此,必须为它提供专门的驱动程序。
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主机端的功能,实现外设之间直接的数据传输。
共1条
1/1 1 跳转至页
arm系统设计及其usb主机扩展方案
关键词: 系统 设计 及其 主机 扩展 方案 控制 数据 传
共1条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图四被打赏50分 | |
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 |