基于mClinux的嵌入式USB接口设计

发布者:asd123yui最新更新时间:2013-11-08 来源: dzsc关键字:mClinux  嵌入式  USB接口 手机看文章 扫描二维码
随时随地手机看文章

引言
越来越多的嵌入式设备与外部连接要求更简洁、方便、智能化,所以,USB接口在嵌入式设备中的应用会越来越广泛。本文是“信息家电网络控制平台技术”项目中USB接口的实际设计部分。在该项目中,硬件平台采用了S3C4510B微处理器,软件系统是在mClinux下开发的,项目结题后,组建了USB总线的家居网络系统,实现了信息家电的上网。本文介绍了该嵌入式系统设计中的USB模块软硬件设计。

USB接口硬件设计
S3C4510B没有内置的USB控制器,但提供了两个GDMA通道,可以满足USB高速数据传递的要求。本着与S3C4510B能衔接工作、自身适合在嵌入式设备中应用的原则,确定采用ISP1581高速USB接口芯片。 
ISP1581概述和设计分析
ISP1581是一款低功耗、功能强的高速USB接口器件,它完全符合USB 2.0 规范,并为基于微控制器或微处理器的系统提供了高速USB通信能力。ISP1581支持高速USB系统的自动检测,内部通用DMA 模块使得数据流很方便地集成。另外,多种结构的DMA模块实现了海量存储的应用。这种实现USB 接口的标准组件使得使用者可以结合微控制器,通过使用已有的结构和减少固件上的投资,从而用最快捷的方法实现了最经济的USB外设解决方案。此外,ISP1581可理想地用于许多嵌入式外设,例如打印机、扫描仪、DVD 和数码相机等等。
ISP1581与S3C4510B电路的设计实现
了解了芯片引脚的使用方法,则可以设计出它和S3C4510B的连接电路,如图1所示。
USB接口电路如图2所示。在该图中,1.5kW的电阻要求较高,阻值范围必须是1.5kW±5%内。
采用12MHz的晶振,以便与S3C4510B的晶振相匹配,电容的值一般为20pF左右,以使晶振更好地起振和消噪。
此外,设计印制电路板时要考虑减小信号之间的交叉干扰、电源干扰,降低噪声对电路的影响,提高整个系统的可靠性。在本系统的电路板上,晶体振荡电路对噪声比较敏感,因此在设计这部分电路时特别注意使晶振电阻、电容等相关器件与微控制器尽可能靠近。在布线时,使这部分电路的信号线不与其他任何信号线交叉。此外还采用了一些常规的降低噪声和干扰影响的手段,包括尽可能增加地线和电源线的宽度,使用去耦电容,以及尽量减小元器件引脚长度等等。

USB接口软件设计
USB系统有三个基本组件:主控制器驱动程序HCD、USB驱动程序USBD和主机软件。在嵌入式操作系统中,USB驱动程序和操作系统内核的框图如图3所示,其中USB类驱动程序可以分别驱动两种类型的控制器UHCI和OHCI。当PCI枚举器发现USB主机控制器后,就会装入相关的驱动程序。在此基础上开发驱动程序,实际上就是USB功能驱动程序,即是控制一个给定的功能设备。本项目中的信息家电组网,是用USB总线组建的家居网络,连接到USB设备的每一种类型的功能单元都必须要有功能驱动程序。
ISP1581为微控制器接口提供了灵活的配置,在设计中采用了直接存储器存取(DMA)方式。由于USB设备通过快速DMA方式来读写数据,因此在此作为字符设备进行处理。
在mClinux系统内核中有USB子系统,它的作用是提供支持USB设备驱动程序的API和USB的主机驱动程序。它提供了许多数据结构、宏定义和功能函数来对硬件或设备进行支持。在mClinux下编写USB设备的驱动程序,从严格意义上讲,就是使用这些USB核心的子系统定义的数据结构、宏和函数来编写数据的处理功能。
一般来说,在mClinux环境中编写USB分为如下几个部分。
向系统注册和注销驱动子程序
在mClinux系统里,通过调用register_chrdev向系统注册字符型设备驱动程序。还需定义一个__init usbdriver_init(void)的注册函数,如下:
int __init usbdriver_init(void)
{        int     rc;
rc = register_chrdev(usbdevice _Major, "usbdevice", &usbdriver_fops);
        if (rc < 0) {
   printk(KERN_WARNING "usbdevice: can't get Major %d ",usbdevice_Major);
                return rc;    }     
        return 0;  }  
中断服务子程序
中断服务子程序完成对数据的处理,主要包括读、写等操作,这些操作都是通过数据结构file_operations中的open、write、close、read等命令进行的。系统通过调用request_irq函数来申请中断,通过free_irq来释放中断。为防止其他中断的干扰,用save_flags(flags) cli()来关闭中断,相关处理完毕,用restore_flags(flags) sti()来恢复。其中,填充驱动程序子函数集struct file_operation结构如下:
struct file_operations {  loff_t (*llseek) (struct file *, loff_t, int);
  ssize_t (*read) (struct file *, char *, size_t, loff_t *);
   ssize_t (*write) (struct file *, const char *, size_t, loff_t *);
   int (*readdir) (struct file *, void *, filldir_t);
   unsigned int (*poll) (struct file *, struct poll_table_struct *);   
  int (*open) (struct inode *, struct file *);
     int (*release) (struct inode *, struct file *);
     int (*fsync) (struct file *, struct dentry *);}
I/O服务子程序
通过已注册在系统/dev目录下的设备文件,把设备映射为一个特别文件,其它程序使用这个设备的时候,只要对此特别文件进行I/O操作就可以了。当用户调用时,因为进程的运行状态由用户态变为核心态,地址空间也变为核心地址空间。此时,read、write中参数buf指向用户程序的私有地址空间,所以不能直接访问,必须通过memcpy_fromfs、memcpy_tofs系统函数来访问用户程序的私有地址空间。

结语
鉴于USB的诸多优点和灵活的数据传输方式,嵌入式USB设备必将在信息家电、工控等领域得到更广阔的应用。本文从硬件接口设计和驱动程序编写两个方面对嵌入式设备中USB的设计做了简要的介绍,研究成果已经用在基于USB总线的智能家居网络中,测试结果表明该接口运行正常,数据传输等各方面均达到了技术标准要求

参考文献:

[1]. S3C4510B datasheet http://www.dzsc.com/datasheet/S3C4510B.html.
[2]. ISP1581 datasheet http://www.dzsc.com/datasheet/ISP1581_410269.html.
[3]. PCI datasheet http://www.dzsc.com/datasheet/PCI_1201469.html.
[4]萧世文. USB2.0硬件设计. 清华大学出版社,2002.10
[5] 广州周立功单片机发展有限公司. ISP1581:高速接口器件.

关键字:mClinux  嵌入式  USB接口 引用地址:基于mClinux的嵌入式USB接口设计

上一篇:USB接口技术在外置式采样系统中的应用
下一篇:USB主控芯片SL811HS的固件程序设计

推荐阅读最新更新时间:2024-05-02 22:50

如何构建eCos嵌入式系统
摘要 eCos是一个优秀的嵌入式实时操作系统。eCos的体系结构是一种分层结构,硬件抽象层将操作系统与硬件隔离开,这为把eCos移植到不同的硬件平台提供了便捷的方法,抽象层就像软件与硬件之间的桥梁。主要的移植思想是,按照eCos的模块化设计,完成硬件抽象层。 关键词 eCos 移植 硬件抽象层 嵌入式 可配置操作系统 引言   目前,嵌入式操作系统的种类较多,其中比较流行的有VxWorks、Windows CE、Psos、Palm OS、嵌入式Linux等。这些嵌入式操作系统在开放性、实用性以及性能等方面各有千秋,但大多数为商用产品。除了商用产品外,还有一些免费的嵌入式操作系统,uClinux是其中比较流行的,而eCos则是另一
[嵌入式]
Maxim Integrated保护嵌入式系统的交钥匙方案亮相TRUSTECH
在法国戛纳举办的TRUSTECH 2017展会上(当地时间2017年11月28日至30日) ,Maxim将展示能够有效保护嵌入式系统和联网设备的交钥匙方案,防止您的系统遭受侵入式攻击。有关黑客攻击的新闻屡见不鲜,设计工程师在竭力保证产品安全的同时还必须满足严格的上市时间和预算限制。此外,安全标准证书的成本也在不断上涨。Maxim的嵌入式方案在满足安全要求的前提下,不会为预算带来任何压力。 Maxim将提供以下领域的技术演示: 采用ChipDNA™技术的DS28E38 DeepCover®安全认证器,由于密钥根本没有保存在存储器或其他任何静态存储器中,能够有效防御入侵式物理攻击。这种高成效、物理上无法克隆的技术(PUF
[嵌入式]
Maxim Integrated保护<font color='red'>嵌入式</font>系统的交钥匙方案亮相TRUSTECH
基于ARM的嵌入式Bootloader实现自动升级
0 引言 作为一种32位的高性能、低成本、低功耗的嵌入式RISC(Reduced Instruction Set Computer)微处理器,ARM(Advanced RISC Machines)微处理器目前已经成为应用最广泛的嵌入式微处理器。和基于简单RTOS甚至没有使用任何操作系统的嵌入式程序设计相比,基于ARM- uClinux嵌入式系统的开发采用了成熟、高效、可靠、模块化、易于配置的操作系统,使程序具有良好的可移植性,博得众多嵌入式开发者的青睐 。嵌入式系统由硬件和软件两部分组成,软件部分主要包括Bootloader、内核和文件系统。但由于Bootloader与处理器的体系结构和具体嵌入式板级设备的配置密切相关,至今没有
[单片机]
基于ARM的<font color='red'>嵌入式</font>Bootloader实现自动升级
嵌入式系统与普适计算
摘要:研究嵌入式系统与普适计算的概念、用途及其相关技术,使读者对普适计算这个新名词有一个全面的认识。 关键词:嵌入式系统 普适计算 手持设备 Windows CE 嵌入式设备 引 言   随着计算技术的发展,我们已经由PC时代进入网络时代,进而进入后PC时代。IBM在1999年创造了一个名词--“普适计算” (又叫“普及计算”,Pervasive Computing)。“普适计算”指的就是,“无论何时何地,只要您需要,就可以通过某种设备访问到所需的信息”。从计算技术的角度来看,人类已经由网络计算逐步延伸到了普适计算。   通俗来讲,普适计算的含义十分广泛,所涉及的技术包括移动通信技术、小型计算设备制造技术、小型计算设备上的操作系统技
[嵌入式]
嵌入式ARM-Linux平台上的编译、配置和运行使用
本文介绍了嵌入式ARM-Linux上的常用应用程序wpa_supplicant(以及wpa_supplicant依赖的libnl和openssl)的编译、配置和运行使用,iw、hostapd等应用的编译和使用。 wpa_supplicant 编译和配置运行 从 https://w1.fi/wpa_supplicant/ (git地址git://w1.fi/hostap.git)下载最新的wpa_supplicant源码压缩包,目前最新的为版本2.5. wpa_supplicant的编译依赖于openssl和libnl库( Netlink Protocol Library Suite (libnl) ),openssl是ssl协议的
[单片机]
嵌入式实时系统中的优先级反转问题
摘要:嵌入式实时系统中由于多任务共享资源,通常会出现一些奇怪的现象。本文就什么是优先级反转及其产生原因进行分析,并提出2个行之有效的解决方案。 关键词:嵌入式实时系统 多任务 信号量 优先级反转 1 问题的提出   目前,市场上占有率比较高的商业RTOS有VxWorks/PSOS、QNX、 LynxOS、VRTX,、Windows CE等。这些为数众多的RTOS绝大多数都是多任务实时微内核的结构,采用的是基于优先级的可抢占式调度策略。系统为每一个任务分配一个优先权,调度程序保证当前运行的进程是优先权最高的进程。但是,有时候会出现一种比较奇怪的现象:由于多进程共享资源,具有最高优先权的进程被低优先级进程阻塞,反而使具有中优先级
[嵌入式]
ESPU0808安全芯片在防抄板上的应用技术解析
PC软件的盗版一直是困扰软件行业发展的主要问题,同样,在嵌入式应用领域,随着近些年黑客技术和芯片解剖技术的发展,嵌入式系统所面临的攻击也越来越多,随之而生的防抄板技术也引起了产品设计者的重视。 产品设计者目前所面临的问题主要是黑客对产品的仿制,其目的是获得产品设计技术或者降低产品设计成本,攻击手段主要是抄袭产品设计者的线路板布线图和拷贝获得产品运行程序。目前市场通用的ARM,DSP、单片机通常的安全防护手段很少,更多的程序暴露在透明的Flash或EEPROM中,面对不断发展的攻击技术以及黑客之间的竞争,产品的破解时间和成本越来越低,相对于产品仿制者获得的巨大利益,有时其破解成本甚至可以忽略不计。尤其在一些非行业用户的
[嵌入式]
ESPU0808安全芯片在防抄板上的应用技术解析
12-S3C2440驱动学习(九)嵌入式linux-USB驱动程序(未完待续)
1、学习思路 一个USB设备插入到系统中时,会被系统识别出USB设备,并通过系统上的USB总线驱动程序通过约定好的规范询问USB设备的信息(描述符),如设备名称。USB总线驱动程序负责:识别USB设备,给USB设备找到对应的驱动程序(自己开发)。USB设备通过约定好的规范,把描述符发送给USB总线驱动程序。 问1. 既然还没有 驱动程序 ,为何能知道是 android phone 答1. windows里已经有了USB的总线驱动程序,接入USB设备后,是 总线驱动程序 知道你是 android phone ,提示你安装的是 设备驱动程序 。 问2. USB设备种类非常多,为什么一接入电脑,就能识别出来? 答2.
[单片机]
12-S3C2440驱动学习(九)<font color='red'>嵌入式</font>linux-USB驱动程序(未完待续)
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多每日新闻
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved