信息产业培训网

嵌入式系统中USB控制的Host/Slave模式的应用

http://www.miiceic.org.cn   2007-6-14 11:37:56   中程在线   浏览数:
关键字:嵌入式系统;mClinux;USB控制; Host/Slave模式
本文简要介绍由三星ARM7内核的S3C44B0X为嵌入式处理器,&nbspmClinux为嵌入式操作系统平台的专用PDA设备的USB控制Host/Slave模式的应用。
引言

目前,USB 设备产品的应用非常广泛,但市场上能够提供Host/Slave两种模式的USB控制芯片并不多,本系统采用CYPRESS公司的SL811HST芯片作为USB接口的控制芯片,实现Host/Slave两种工作模式。

 

系统介绍

本系统是以三星公司的S3C44B0X为嵌入式处理器,mClinux为操作系统的专用PDA,通过无线方式实现与上位机的通信,同时也可通过USB接口直接控制USB打印机输出。其中USB控制芯片采用CYPRESS公司的SL811HST芯片,它有两种工作模式Host/Slave。模式的改变是由该芯片M/S脚的电平值决定,其值可以通过软件设置来改变。当置M/S脚为低电平时,它是Host模式,可以直接控制打印机;当置M/S脚为高电平时,它是Slave模式,可以下载PC的最新资料,同时可对PDA充电电池充电。

 

硬件设计

三星公司的S3C44B0X是一款专为手持设备和通用设备而设计的,16/32位RISC 结构的嵌入式处理器。

CYPRESS公司的SL811HST是嵌入式的USB 主机或外设接口控制器。其基本功能如下:

1)    支持USB&nbsp1.1 的全速和低速设备;

2)    虚拟的外部总线,使得仅需占用和外接CPU 的1 根地址线A0,数据线为8位;

3)   &nbsp16 个内部寄存器,可以对USB&nbspHost 进行充分的控制;内部多达256 字节的RAM,为USB 传输建立了足够的缓冲区;

4)    操作电压为3.3V,但是I/O 端口为5V&nbspTolerant,因此可以自由地和5V 或3.3V 的CPU 系统连接;

5)    可接12MHz 或48MHz外置晶振,对其操作通过16个寄存器来完成。

SL811HST与主芯片S3C44B0X的连接如图1所示。

GPE5是Host/Slave模式控制管脚,它同时同步控制USB接口的负载方式。GPE4口可以监视USB接口上是否有主USB设备插入,如果有,VUSB为高电平;没有则为低电平。GPE3口用于显示USB设备是否处于就绪或相应的Host/Slave模式工作状态。 

 
软件设计

在Linux操作系统中,驱动程序的加载方式为:

1) 将驱动程序作为可加载的模块(Module),在系统超级用户(Root)权限下使用insmod命令动态加载,使之成为系统核心的一部分。对于USB 设备而言,由于可热插拔,一般采用模块化的设备驱动程序。

2) 将设备驱动程序的源代码加进系统内核,编译移植到嵌入式系统,系统启动后将自动加载驱动。USB 协议栈程序一般采用这种方法加入内核,进而产生一个叫做“USB 核心”的子系统。这个子系统提供了许多数据结构、宏定义、功能函数和应用程序接口(API)来对硬件或设备进行支持。

本系统就是采用第二种方式加载USB驱动的。由于本系统的mClinux包来自于英蓓特公司的包,因此节省了很多工作,具体编译过程如下:

1) 在mClinux内核的USB驱动目录中添加如下三个文件:sl811h-usb.c 、sl811h.h、&nbspsl811husb.h。这两个头文件中主要定义了一些关于811HS/T寄存器的宏。

2) 编辑/uclinux-s3cev40/linux-2.4.x/drivers/usb/config.in文件。

首先在config.in文件开头添加如下语句:

dep_tristate ’Support&nbspfor&nbspUSB’&nbspCONFIG_USB $CONFIG_PCI

if [ "$CONFIG_USB" = "y" -o  "$CONFIG_USB" = "m" ];&nbspthen

  &nbspbool ’ &nbspUSB&nbspverbose&nbspdebug&nbspmessages’&nbspCONFIG_USB_DEBUG

comment ’Miscellaneous&nbspUSB&nbspoptions’

  &nbspbool ’ &nbspPreliminary&nbspUSB&nbspdevice&nbspfilesystem’&nbspCONFIG_&nbspUSB_DEVICEFS

  &nbspif [ "$CONFIG_&nbspEXPERIMENTAL" = "y" ];&nbspthen

     &nbspbool ’ &nbspEnforce&nbspUSB&nbspbandwidth&nbspallocation (EXPERIMENTAL)’&nbspCONFIG_USB_BANDWIDTH

  &nbspelse

   &nbspdefine_bool&nbspCONFIG_USB_&nbspBANDWIDTH&nbspn

  &nbspfi

  &nbspbool ’ &nbspLong&nbsptimeout&nbspfor&nbspslow-responding&nbspdevices (some&nbspMGE&nbspEllipse&nbspUPSes)’&nbspCONFIG_USB_&nbspLONG_TIMEOUT

fi

然后在makefile文件中添加

ifeq ($(CONFIG_USB_&nbspDEBUG),y)

      &nbspL_OBJS+=sl811h-usb.o

endif

最后在/uclinux-s3cev40/linux-2.4.x/drivers/usb/sl811h_usb.c文件中添加如下代码:

#ifdef&nbspCONFIG_USB_DEBUG

       #define&nbspDEBUG

#else

       #undef&nbspDEBUG

#endif

#SL811HS/T-----&nbspUSB&nbspHost&nbspController&nbspdriver

INCLUDEDIR = /usr/src/linux/include

CFLAGS = -D__KERNEL__ -DMODULE -O -Wall -

static -I$(INCLUDEDIR)

VER = $(shell&nbspawk -F\" ’/REL/ {print $$2}’

$(INCLUDEDIR)/linux/version.h)

all:sl811h-usb.o

sl811h-usb.o:sl811h-usb.csl811h-usb.hsl811h.h

gcc&nbspsl811h-usb.c -c $(CFLAGS)

#&nbspEnd&nbspthis&nbspfile

3) 在/usr/local/src/uClinux-s3cev40/fs/dev中增加一个设备文件。因为USB设备主要都是通过快速串行通讯来读写数据, 故一般作为字符设备。在/us 
 
来源:嵌入式技术网
相关连接
最新评论
*以下网友发言不代表中程在线网站的观点和看法
    我要评论

    请您注意
    1、遵守中华人民共和国的各项有关法律规定
    2、承担一切因您的行为而导致的法律责任
    3、本网留言管理人员有权删除其管辖留言内容
    4、您在本网的留言本网有权在网站内转载和引用
    5、参与本留言即表明您已经阅读并接受上述条款
    我爱研发网中电华信阿里西西JAVA爱好者北京英才网全球大学查询网
    中国人的网站导航中国电脑论坛信息产业部新浪科技搜狐IT信息产业部电子教育与考试中心
    IT世界网软件项目交易网中国软件交易网国信培训网亚远景科技....[更多]
    关于我们 | 网站地图 | 周边住宿 | 行车路线 | 联系我们 | 网站律师 | 意见反馈 | 虚位以待 | 友情链接
    中程在线(北京)科技有限公司 版权所有
    总 部:北京市海淀区青东商务楼A座西四层
    企业培训部:010-52636110 52636106 就业培训部:010-68716925 68716926
    邮 件:training@miiceic.org.cn
    京ICP备06053134号
    Copyright © 2005-2008 Miiceic.org.cn All Rights Reserved