ARM和LINUX系统下嵌入式USB主机的设计_arm框架下的linux系统
ARM和LINUX系统下嵌入式USB主机的设计由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“arm框架下的linux系统”。
ARM和LINUX系统下嵌入式USB主机的设计
摘要:根据实际应用中嵌入式系统常需要具备USB 主机功能而大多数微处理芯片没有集
成这一功能的实际情况,提出了一套基于S3C44B0X 和SL811HST 的系统解决方案。本系统以
ARM7 核心板加USB 扩展板为硬件实现方法;在ucLinux 系统下实现USB 驱动程序的编写和
加载。该系统成本低廉,运行稳定,适合应用于手持式设备上及野外工作场合。
关键词:ARM7,ucLinux,USB 主机,驱动程序引言
通用串行总线(Universal Serial Bus,即USB是一种新型的高速串行总线,作为一种
快速、灵活的总线接口,已经在电子产品中广泛应用。同时人们对USB的期望也越来越高,希望USB能应用在各种计算机领域中。但是,由于USB通信模型是一种Host/Slave主从式结构,经由USB总线进行通信的双方必须有一方在通信控制中担当主机,而两个USB设备之间则无法
直接进行基于USB的数据交换。这就大大限制了USB在嵌入式设备中的应用。
ARM(Advanced RISC Machine作为一种低功耗、高性能的32位嵌入式微处理器,在中
高端嵌入式设备开发中有着广泛的应用。有些ARM芯片的生产厂商在以ARM为内核的微处理器
中集成了USB主机控制器,但是,更多的ARM处理器是不带USB主机功能的。解决这一问题的
方法就是在需要使用USB设备的嵌入式系统中外扩一片USB主机控制器芯片,使之具有与USB
设备进行数据传输的能力。本设计考虑设计一种USB主、从机一体化的外部扩展模块,通过
简单地改变跳线,使得ARM核心的嵌入式设备既可作为USB主机,又可以作为USB从机。总体设计
由于目前USB从机的硬件及软件方面的开发已经比较成熟,可以直接使用现有的资源,所以本设计主要讨论USB主机功能的实现,目标任务是ARM核心板能够读写外接USB设备,这
里选择最常用的U盘,实现读、写U盘数据。
系统分为ARM核心板和SL811HST扩展板两大部分。核心板是一个由ARM7微处理器、FLASH、SDRAM、JTAG口和串口组成的最小系统。ARM处理器选用的是三星公司的S3C44B0X,这是一
款基于ARM7TDMI内核的微处理器,具有低功耗、高性能的特点。FLASH用来存放ucLinux操作
系统和一些十分重要的数据,SDRAM则是操作系统和应用程序的运行空间、数据及堆栈区,JTAG口和串口用于下载和调试。扩展板主要由USB主控芯片及其外围电路和USB主、从接口构
成。USB主控制芯片选用的是Cypre公司的SL811HST,这是一款双功能的控制芯片,通过设
置开关既可以用来做主机又可以做从机。USB接口分为主机接口和从机接口,与主控芯片功
能配套。硬件电路
Flash存储器是一种可在系统进行电擦写,掉电后信息不丢失的存储器。常用的Flash
为8位或16位的数据宽度,编程电压为单3.3V。系统中选用一片16位的Flash存储器
SST39VF1601,单片存储容量2M,用于存放操作系统和程序代码,系统上电或复位后从此获
得第一条指令并开始执行,因此,应将Flash存储器配置到BANK0,即将S3C44B0X的nGCS
接到其片选引脚CE#端;将S3C44B0X的OM[1:0]置为10,选择BANK0为16位工作方式。
与Flash存储器不同,SDRAM不具有掉电保持数据的特性,但其存取速度大大高于Flash
存储器,因此,它在系统中主要用作程序的运行空间、数据及堆栈区,系统及用户堆栈、运
行数据也都存放在其中。系统中选用一片HY57V641620HG,它的存储容量为8M,工作电压为
3.3V,16位数据宽度。1620的CS与S3C44B0X的nGCS6连接。
JTAG接口主要是用来实现芯片的嵌入式调试及在系统编程的功能,如对Flash器件进行
编程等。串口的主要作用是向计算机传输信息,这些信息可以在计算机的超级终端上显示,以便于调试程序时监测程序的内部变量值;在ucLinux操作系统运行时,串口将用来显示它的
启动信息和运行状态,向操作系统发送命令对其进行控制也需要通过串口来完成。
ARM核心板的硬件组成如图1所示:
Cypre公司的SL811HST芯片是一款嵌入式的USB主机/从机控制器,它的双功能端口既
可作为USB主机又可作为从机来支持全速或低速的USB器件,能够与单片机、DSP和ARM等实现
无缝接口。数据线为8位,只需要9根线用于系统的数据通讯,16个内部寄存器,可以对USB
Host进行充分的控制。内部多达256字节的RAM,为USB传输建立了足够的缓冲区。它的主要
优点有:通过其M/S引脚对主/从模式方便的进行选择;提供全速和低速2种USB总线速度方式;
硬件自动产生帧起始包SOF和CRC5/16校验;片上集成了接口引擎(SIE)、单端口根Hub、USB
收发器和256B的SRAM,其中0x00~0x0F共16个字节是寄存器区,其余的240B是数据缓冲区。
SL811HS只有一根地址线A0。A0=1用于设定偏移量,A0=0用于读写数据。读写数据应该首先
指定偏移量,然后实现读取时序。A0与ARM的ADDR0相连。nCS和ARM的nGCS2相连,即把SL811HST 分配到ARM的外部I/O口02。
SL811HST与S3C44B0X的连接如图2所示:
图 2 SL811HST 与S3C44B0X 连接图软件系统
本设计的软件系统是在Linux环境下编写调试运行的,前期工作为下载ucLinux内核包,打补丁包等。ucLinux是专门针对如ARM7这类无MMU的CPU而设计的,它主要由以下几个部分
构成:BootLoader、内核初始化、系统调用函数/捕获函数、设备驱动和文件系统。其中
BootLoader被用来初始化系统板上的硬件资源,必须根据系统板上不同的硬件资源进行相应 的配置。本系统中主要是更改了FLASH和SDRAM的容量及数据宽度,开启了外部I/O口2并设定
为8位数据宽度以用来配置SL811HST,并把它的基地址设定为0x012000000完成对源代码的修
改之后就可以进行内核的编译。编译是在装有Linux及所需的交叉编译工具链的计算机上来
进行的,编译生成的image.ram文件可以下载到SDRAM中直接运行,image.rom文件可以烧写
到FLASH中,系统上电或重启后,将从FLASH的0x0地址处开始执行,对硬件资源进行初始化
后进入ucLinux。
从Linux2.4内核以后,Linux的设备驱动中加入了对USB的支持,ucLinux也秉承了这一
特点。本设计采用内核编译的方式加载USB驱动,将驱动程序的源代码加进ucLinux系统内核,编译移植到嵌入式系统,系统启动后将自动加载驱动。
编译过程如下:
1:在ucLinux内核的USB驱动目录中添加如下三个文件:s181lh-usb.c、sl8llh.h、s1811husb.h。;
2:编辑/uclinux-s2cev40/linux-2.4.x/drivers/usb/config.in文件。修改这个文件的内容加入对SL811HST的描述语句:
dep_tristate’Support for USB’CONFIG_USB $CONFIG_PCI
if[“$CONFIG_USB”=“y” –o“$CONFIG_USB”=“m”];then
bool ‘USB verbose debug meages’ C0NFIG_USB_DEBUG comment ‘Miscellaneous
USB options’
bool ‘Preliminary USB device filesys tem’CONFIG_USB_DEVICEFS
if [ “$CONFIG_EXPERIMENTAL”= “Y”];then
bool ‘ Enforce USB bandwidth allocation(EXPERIMENTAL’C0NFIG_USB_BANDWIDTH
else
define_bool CONFIG_USB_BANDWIDTH n fi
bool ‘Long timeout for slow-responding devices(some MGE
Ellipse UPSes’ CONFIG_USB_L0NG_TIME0UT
3:修改MAKEFILE文件,添加如下语句:
ifeq($(CONFIG-USB-DEBUG.y
L_OBJS+=sl8llh-usb.O
endif
4:编辑/uclinux-s3cev40/linux-2.4.x/drivers/usb/sl811h_usb.c文件,添加如下代
码:
#ifdef C0NFIG_USB_DEBUG
#define DEBUG
#else
#undef DEBUG
#endif
#SL811HS/T---USB Host Controller driver
INCLUDEDIR =usr/src/1inux/include
CFLAGS=-D_KERNEL_-DM0DULE-0-Wall-static-I$(INCLUDEDIR
VER=$(shell awk-F\” ‘/REL/{print$$2}’
$(INCLUDEDIR/linux/version.h
all:sl8llh-usb.O
sl8llh-USB.O:sl811h-usb.csl8llh-usb.hsl8llh.h
gcc s18llh-usb.c –c $(CFLAGS
#End this file
5:在/user/local/src/uClinux-s3cev40/fs/dev中增加一个设备文件。在
/user/local/src/uClinux-s3cev40/fs/devfs下执行
mknod usb0 c 127 0
mknod usb1 c 127 1 6:执行make xconfig,用户内核设置选择y;
7:执行make dep;
8:执行make。
USB 设备驱动程序被编译进ucLinux 内核,包含在image.bin 文件中。在系统启动时,USB 设备驱动就自动执行了。总结
本文作者创新点:巧妙利用ucLinux 内核模块,简化开发过程,节约成本。
本设计以uclinux 嵌入式操作系统为平台,充分发挥了SL811HST 芯片的Host/Slave 两种模式 的作用,整套系统上电运行结果证明,本系统设计能够顺利的读写U 盘数据,并且达到USB1.1 的全速。此系统价格低廉,实现简单有效。为嵌入式系统添加USB 主机接口,使得USB 能应用在没
有PC 的领域中,真正实现USB 点对点的通讯。在需要野外大量采集记录数据的场合,如勘测,气
象等领域,嵌入式USB 主机方便携带;在需要远距离传输数据的场合,在USB 设备上增加无线网卡,数据就可以实时传送,等等。
本设计如应用于中等规模的电子公司,估计每年可节约成本100 万圆以上。
责任导师批注:论文叙述清楚,无文字错误,不涉及机密,不是一稿多投。
粟梅
参考文献
[1] SL811HST embedded USB host/slave controller [M].Cypre
Semiconductor.2002.5-6,19-21.[2] 蔡伯根.基于 ARM 的嵌入式大容量存储设备的设计[J].微计算机信息,2008,6-2 :
146-148
[3] 闵华松,钱丽.嵌入式系统中USB 控制的Host/Slave 5 :.。模式的应用[J].电子设计应用,2007, 152-154
ARM和LINUX系统下嵌入式USB主机的设计ARM和LINUX系统下嵌入式USB主机的设计类别:嵌入式系统摘要:根据实际应用中嵌入式系统常需要具备USB 主机功能而大多数微处理芯片没有集成......
南京邮电大学通信与信息工程学院实验报告实验名称:实验一基于ADS开发环境的设计实验二嵌入式Linux交叉开发环境的建立 实验三嵌入式Linux环境下的程序设计课程名称嵌入式系统......
基于ARM嵌入式的远程监控系统设计摘要:基于ARM 内核的嵌入式系统在远程监控报警系统中的设计实现与应用。核心部分主要包 括 ARM 嵌入式平台设计及 μC-OS 嵌入式实时操作系......
摘要科技改变生活,科技为人类带来了更舒适更方便的解决方案,智能家居是现代化科技的体现,智能家居也正是在应人们需求下而产生的。本设计的内容是设计一个基于ARM的智能家居远......
接VIC部分一旦产生IRQ中断,微控制器切换到IRQ模式,并跳转到向量表0x0018地址执行指令。一旦产生FIQ中断,微控制器切换到FIQ模式,并跳转到向量表0x001C地址执行指令,然后跳转到FIQ......
