嵌入式系统中USB控制的Host/Slave模式的应用
2008-12-25 10:27
561 查看
摘 要:本文简要介绍由三星ARM7内核的S3C44B0X为嵌入式处理器, mClinux为嵌入式操作系统平台的专用PDA设备的USB控制Host/Slave模式的应用。
关键词:嵌入式系统;mClinux;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 1.1 的全速和低速设备;
2) 虚拟的外部总线,使得仅需占用和外接CPU 的1 根地址线A0,数据线为8位;
3)  16 个内部寄存器,可以对USB Host 进行充分的控制;内部多达256 字节的RAM,为USB 传输建立了足够的缓冲区;
4) 操作电压为3.3V,但是I/O 端口为5V Tolerant,因此可以自由地和5V 或3.3V 的CPU 系统连接;
5) 可接12MHz 或48MHz外置晶振,对其操作通过16个寄存器来完成。
SL811HST与主芯片S3C44B0X的连接如图1所示。
GPE5是Host/Slave模式控制管脚,它同时同步控制USB接口的负载方式。GPE4口可以监视USB接口上是否有主USB设备插入,如果有,VUSB为高电平;没有则为低电平。GPE3口用于显示USB设备是否处于就绪或相应的Host/Slave模式工作状态。
图1  SL811HSTT与主芯片连接图
软件设计
在Linux操作系统中,驱动程序的加载方式为:
1) 将驱动程序作为可加载的模块(Module),在系统超级用户(Root)权限下使用insmod命令动态加载,使之成为系统核心的一部分。对于USB 设备而言,由于可热插拔,一般采用模块化的设备驱动程序。
2) 将设备驱动程序的源代码加进系统内核,编译移植到嵌入式系统,系统启动后将自动加载驱动。USB 协议栈程序一般采用这种方法加入内核,进而产生一个叫做“USB 核心”的子系统。这个子系统提供了许多数据结构、宏定义、功能函数和应用程序接口(API)来对硬件或设备进行支持。
本系统就是采用第二种方式加载USB驱动的。由于本系统的mClinux包来自于英蓓特公司的包,因此节省了很多工作,具体编译过程如下:
1) 在mClinux内核的USB驱动目录中添加如下三个文件:sl811h-usb.c 、sl811h.h、 sl811husb.h。这两个头文件中主要定义了一些关于811HS/T寄存器的宏。
2) 编辑/uclinux-s3cev40/linux-2.4.x/drivers/usb/config.in文件。
首先在config.in文件开头添加如下语句:
dep_tristate 'Support for USB' CONFIG_USB $CONFIG_PCI
if [ "$CONFIG_USB" = "y" -o "$CONFIG_USB" = "m" ]; then
 bool '  USB verbose debug messages' CONFIG_USB_DEBUG
comment 'Miscellaneous USB options'
 bool '  Preliminary USB device filesystem' CONFIG_ USB_DEVICEFS
 if [ "$CONFIG_ EXPERIMENTAL" = "y" ]; then
 bool '  Enforce USB bandwidth allocation (EXPERIMENTAL)' CONFIG_USB_BANDWIDTH
 else
 define_bool CONFIG_USB_ BANDWIDTH n
 fi
 bool '  Long timeout for slow-responding devices (some MGE Ellipse UPSes)' CONFIG_USB_ LONG_TIMEOUT
fi
然后在makefile文件中添加
ifeq ($(CONFIG_USB_ DEBUG),y)
 L_OBJS+=sl811h-usb.o
endif
最后在/uclinux-s3cev40/linux-2.4.x/drivers/usb/sl811h_usb.c文件中添加如下代码:
#ifdef CONFIG_USB_DEBUG
#define DEBUG
#else
#undef DEBUG
#endif
#SL811HS/T----- USB Host Controller driver
INCLUDEDIR = /usr/src/linux/include
CFLAGS = -D__KERNEL__ -DMODULE -O -Wall -
static -I$(INCLUDEDIR)
VER = $(shell awk -F/" '/REL/ {print $$2}'
$(INCLUDEDIR)/linux/version.h)
all:sl811h-usb.o
sl811h-usb.o:sl811h-usb.csl811h-usb.hsl811h.h
gcc sl811h-usb.c -c $(CFLAGS)
# End this file
3) 在/usr/local/src/uClinux-s3cev40/fs/dev中增加一个设备文件。因为USB设备主要都是通过快速串行通讯来读写数据, 故一般作为字符设备。
关键词:嵌入式系统;mClinux;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 1.1 的全速和低速设备;
2) 虚拟的外部总线,使得仅需占用和外接CPU 的1 根地址线A0,数据线为8位;
3)  16 个内部寄存器,可以对USB Host 进行充分的控制;内部多达256 字节的RAM,为USB 传输建立了足够的缓冲区;
4) 操作电压为3.3V,但是I/O 端口为5V Tolerant,因此可以自由地和5V 或3.3V 的CPU 系统连接;
5) 可接12MHz 或48MHz外置晶振,对其操作通过16个寄存器来完成。
SL811HST与主芯片S3C44B0X的连接如图1所示。
GPE5是Host/Slave模式控制管脚,它同时同步控制USB接口的负载方式。GPE4口可以监视USB接口上是否有主USB设备插入,如果有,VUSB为高电平;没有则为低电平。GPE3口用于显示USB设备是否处于就绪或相应的Host/Slave模式工作状态。
图1  SL811HSTT与主芯片连接图
软件设计
在Linux操作系统中,驱动程序的加载方式为:
1) 将驱动程序作为可加载的模块(Module),在系统超级用户(Root)权限下使用insmod命令动态加载,使之成为系统核心的一部分。对于USB 设备而言,由于可热插拔,一般采用模块化的设备驱动程序。
2) 将设备驱动程序的源代码加进系统内核,编译移植到嵌入式系统,系统启动后将自动加载驱动。USB 协议栈程序一般采用这种方法加入内核,进而产生一个叫做“USB 核心”的子系统。这个子系统提供了许多数据结构、宏定义、功能函数和应用程序接口(API)来对硬件或设备进行支持。
本系统就是采用第二种方式加载USB驱动的。由于本系统的mClinux包来自于英蓓特公司的包,因此节省了很多工作,具体编译过程如下:
1) 在mClinux内核的USB驱动目录中添加如下三个文件:sl811h-usb.c 、sl811h.h、 sl811husb.h。这两个头文件中主要定义了一些关于811HS/T寄存器的宏。
2) 编辑/uclinux-s3cev40/linux-2.4.x/drivers/usb/config.in文件。
首先在config.in文件开头添加如下语句:
dep_tristate 'Support for USB' CONFIG_USB $CONFIG_PCI
if [ "$CONFIG_USB" = "y" -o "$CONFIG_USB" = "m" ]; then
 bool '  USB verbose debug messages' CONFIG_USB_DEBUG
comment 'Miscellaneous USB options'
 bool '  Preliminary USB device filesystem' CONFIG_ USB_DEVICEFS
 if [ "$CONFIG_ EXPERIMENTAL" = "y" ]; then
 bool '  Enforce USB bandwidth allocation (EXPERIMENTAL)' CONFIG_USB_BANDWIDTH
 else
 define_bool CONFIG_USB_ BANDWIDTH n
 fi
 bool '  Long timeout for slow-responding devices (some MGE Ellipse UPSes)' CONFIG_USB_ LONG_TIMEOUT
fi
然后在makefile文件中添加
ifeq ($(CONFIG_USB_ DEBUG),y)
 L_OBJS+=sl811h-usb.o
endif
最后在/uclinux-s3cev40/linux-2.4.x/drivers/usb/sl811h_usb.c文件中添加如下代码:
#ifdef CONFIG_USB_DEBUG
#define DEBUG
#else
#undef DEBUG
#endif
#SL811HS/T----- USB Host Controller driver
INCLUDEDIR = /usr/src/linux/include
CFLAGS = -D__KERNEL__ -DMODULE -O -Wall -
static -I$(INCLUDEDIR)
VER = $(shell awk -F/" '/REL/ {print $$2}'
$(INCLUDEDIR)/linux/version.h)
all:sl811h-usb.o
sl811h-usb.o:sl811h-usb.csl811h-usb.hsl811h.h
gcc sl811h-usb.c -c $(CFLAGS)
# End this file
3) 在/usr/local/src/uClinux-s3cev40/fs/dev中增加一个设备文件。因为USB设备主要都是通过快速串行通讯来读写数据, 故一般作为字符设备。
相关文章推荐
- USB主机方式在嵌入式系统的应用
- 浅谈基于ARM与LINUX系统的嵌入式USB主机设计应用案例
- 嵌入式系统在工业控制中的应用
- 如何在应用系统中实现数据权限的控制功能
- 外观模式及其在简单的学生资格审查系统中的应用(C++实现)
- 设置系统工作在SVC模式---嵌入式回归第七篇
- 嵌入式系统开发之驱动篇002——完整的linux驱动 + 应用测试demo(神文)
- 嵌入式Linux应用学习(一)------QT控制LED设备硬件
- spring security 一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架
- 时间片轮询模式在构建单片机实时系统中的应用
- 在嵌入式Linux系统中应用的GTK+和X分析
- 多版本并发控制(MVCC)在分布式系统中的应用
- 表示-抽象-控制——系统结构模式学习笔记
- 构建嵌入式Linux应用系统 —— mp3播放器 madplay的移植
- 多任务应用系统构建模式
- protobuf基于微型嵌入式系统的应用
- 【转】嵌入式系统关键技术分析与开发应用
- 嵌入式linux系统与应用
- 嵌入式系统的应用和市场
- 状态机在嵌入式前后台系统中的应用(有助于理解短信收接)