主页 PC知识 网管技术 黑客帝国 安全技术 开放系统 程序设计 搜索 技术论坛

 

相关联接
 
RHU本级分类

技术开发
桌面应用
嵌入技术
问答(FAQ)
基础知识
企业应用&技巧

 
RHU阅读排行
·Grub安装、配置以及使用实例汇总讲解
·突破传统:Linux下如何架设BT服务器
·技术入门:怎样用Linux实现组播路由转发
·教您如何制作Red Hat 9自动安装光盘
·Linux应用技巧:用GRUB4DOS修复GRUB
·企业应用指南:Linux上的MRTG监控中心
·Linux揭开USB主机设计的神秘面纱
·Linux应用经验技巧:Linux用Nasm巧汇编
·经验技巧:如何对Apache做Web压缩
·Linux经验技巧:Kill多个进程的妙招

 
 
RHU最新文章
·用ubuntu server8.10做php-web服务器方法
·Ubuntu下命令行FTP客户端NcFTP安装使用
·Linux系统各版本的本地root密码破解方法
·分享:Linux操作系统下实现远程开机
·超级双系统 解决Linux与Windows双引导问题
·分享:Linux操作系统下的硬盘提速方案
·收集:Linux操作系统使用经验大分享
·让WordPress在Ubuntu上跑起来
·Vista下通过Grub4DOS建立Vista和Ubuntu
·优化Linux服务器硬盘性能的七个实用技巧

 
 
RHU相关搜索









 
 
RHU广而告之

 
 
>您的位置:首页 -> Linux/Unix-> 企业应用&技巧
Linux揭开USB主机设计的神秘面纱

作者:RHU-TAC编辑员 来自:RHU网络采集 时间:2005-8-29 双击滚屏 收藏本页 字体:


点击 查看RHU2004全年文章


嵌入式Linux和普通Linux并无本质区别。PC上用到的硬件,嵌入式Linux几乎都支持。Linux上各种硬件的驱动程序源代码都可以得到,为用户编写自己专有硬件的驱动程序带来很大方便。这里我们就对在嵌入式Linux平台上进行USB主机控制器的软、硬件设计做一个简单介绍。

主动识别USB

目前,大部分的嵌入式产品都具有USB 接口功能,但实际指的是下位机的功能,不具备主动识别USB设备,更不能对其进行控制和读写等操作,这也是美中不足的地方。比如在一个工业数据采集的领域中,由于便携式嵌入设备的存储容量一般非常有限,经常需要使用USB优盘作为数据存储的载体。

这就要在项目中实现一个嵌入式的USB主机来采集数据,并且把数据存储到优盘中。这里,这个USB主机只需具有控制读写功能就行了,不必实现外设的功能,因为它根本不用连接到PC。用户的需求呼唤USB主机实现嵌入式化,也就是开发和设计嵌入式的USB主机。

移动数据交换和存储,是近年来信息技术行业的热点。如今,各式各样的移动存储设备有如雨后春笋般出现。它们从最早的存储量为几KB、能存储用户个人信息的USB小钥匙,到容量可与PC硬盘媲美的USB活动硬盘,再到以Flash作为存储介质的USB闪盘和优盘,直到今天大量的PC外设和多媒体家电中大量使用的数据存储器。

同时,我们也应注意到:移动数据交换业,是伴随着通用串行总线(Universal Serial Bus,简称为USB)的成熟而兴起的。USB既是数据交换的媒介,又是其核心。可以说,没有USB,就不会有移动数据业务如此迅猛地发展。

从USB问世,从1.1到协议规范2.0版本再到目前的USB OTG(On-The-Go),USB在不断自我完善,并走向成熟。厂商对于USB的硬件和软件支持的也越来越完备。现在开发一个USB外设产品,所需要投入的成本和时间大大降低了。

随着USB应用领域的逐渐扩大,对于USB的期望也越来越高。希望USB能应用在各种计算机领域中,尤其是在移动数据领域中;希望能通过PDA等移动设备直接和USB外设通信,使得USB能应用在没有PC的领域中。

USB的拓扑结构中居于核心地位的是Host(也称为主机)。任何一次USB的数据传输都必须由主机来发起和控制,所有的USB外设都只能和主机建立连接,任何两个外设之间或是两个主机之间无法直接通信。而目前,大量的扮演主机角色的是个人电脑PC。

因此,我们目前所买到和使用的USB移动设备,都是USB的外设,比如USB的移动硬盘、USB接口的数码相机等。所有这些设备都只能在PC上使用,只能通过PC来进行相互的文件和数据交换。这正是USB的弱点。

数码相机和MP3播放器等类似的产品都是作为USB的外设。现在的技术条件下,我们只能通过PC作为数码文件的中介。我们首先是把数码相机连接到PC上,并且安装相应的驱动程序和用户界面,把数码相机存储盘上的内容复制到PC硬盘上。然后,把USB打印机连接到PC。最后,再把照片打印出来。整个过程,很复杂,更是不方便。

有了嵌入式的USB主机,就不需要PC的介入。这里,需要做的就是在MP3播放器、数码相机里嵌入USB主模块,使其由传统的USB外设成为USB主机。这样,这些嵌入式的主机就可以直接和移动硬盘、打印机等USB的外设连接,实现所需的功能。
USB 主机设计

传统意义的USB开发,仅仅是对USB外设的开发。USB底层驱动程序和USB主控制器驱动程序都由Windows等操作系统提供。有关这些驱动程序的细节过程都蒙着一层神秘的面纱。所以,要设计USB 主机,就须设计这两部分驱动程序,Windows源码不公开,这些细节资料就无从得到。但是,嵌入式Linux 操作系统具有得天独厚的条件。

当然,目前并不是所有版本的嵌入式Linux(如uCLinux)都支持USB设备。是否支持USB设备是由Linux核心决定的。因此,嵌入式Linux操作系统采用什么版本的核心就成为是否支持USB设备的关键。一般而言,Release版的2.2.XX及以前的版本都不支持USB设备,2.4.XX及以后的版本都加入了对USB设备的支持。因此,在做开发之前应该将内核升级为2.4.10或以上版本。

USB设备是通过USB总线连接到USB主机上。主机通过与设备相连的逻辑通道与设备进行通信。在通信过程中,USB主机充当数据流的源端或者目的端。在USB系统设计中,USB主机接口的设计一直是其难点所在。

USB主机控制器完成了主机与设备之间的电气和协议层的匹配,主要包括以下功能:串并转换、帧起始、数据处理、协议使用、传输错误处理、远程唤醒、根Hub、主机系统接口等。

在嵌入式Linux平台上进行USB主机开发所需开发环境:

1.开发主机:Linux系统,开发主机上还装有目标系统上运行的uCLinux操作系统和应用软件的所有源代码,以及编译、调试这些源代码所需的工具软件。

2.目标系统:嵌入式Linux系统及其电路板。

下面简要介绍一下USB 主接口的软硬件设计:

USB Host接口的硬件设计

USB总线与计算机系统的接口部分就是主机控制器。它可以被看作一个硬件、固件和软件的综合体。USB主机与设备之间的通信最终都将通过USB主机控制器和USB设备的总线接口之间相连的电缆进行,任何一个输出请求都是由主机控制器组织成包的形式发往总线的。

USB总线中只有一个主机,它是USB树形结构的根,通过一个根Hub来提供一个或多个连接点,从它分发连接着各个USB设备。USB主机控制器硬件接口设计的目的是在嵌入式Linux系统开发板上增加一个USB Host接口,使其能够作为USB主机与各种USB Slave设备进行通讯。

硬件上首先要选择支持USB主机的接口芯片。现在比较成熟的有Cypress公司的SL811HS和Philips公司的ISP1161。并且选用一款合适的MCU和MPU来控制。这款MCU的选用比较讲究。因为,整个USB协议框架是非常复杂的。那么这就需要MCU具有足够的RAM,用以处理大量的数据缓冲区、大量的变量、数据存储等。8KB的RAM是最基本的要求,而且越大越好。

其次系统要有大量的程序存储区,一般Flash的需求大概在10KB~60KB左右。之所以有如此大的范围,是因为USB定义很多的类,用以支持不同类型的USB外设。每一类就有其不同的驱动程序,因此,设计的嵌入式USB主机支持的类越多,那么需要的程序空间就越大。

例如,要实现Mass Storage类就需要10K所有的Flash空间。本人推荐USB Host接口芯片选用Scanlogic公司的SL811HS/T。这是市场上为数不多的,既能用作Host模式又能用作Slave模式的,具有标准微处理器总线接口USB控制芯片,它适合于非PC设备。在Host模式下,它支持嵌入式主机与USB外围设备的通信;在Slave模式下,可以作为主机的一个外设。

固件方面,就是要实现完整的USB主机协议类,包括设备的上电检测、设备重起、分配地址、读取设备的各种描述符等基本的操作,更重要的是要实现每一类USB设备的协议栈。简单来说,每一类设备的协议栈就是一个特定的驱动程序。传统的做法,我们是在PC上使用WDM来编制驱动程序。这里,在嵌入式系统的开发环境里就要像开发嵌入式的软件一样,可以用C语言、汇编语言等来实现。

USB Host接口的软件设计

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

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

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

完成驱动程序后,要进行系统配置 ,通常步骤如下:

1.编写Makefile文件。

2.增加设备文件。因为USB设备主要都是通过快速串行通讯来读写数据,故一般作为字符设备。

3.在目标系统上插入驱动程序模块到内核。编译完成后,驱动程序作为一个模块动态加入到uCLinux内核中。至此,USB主机控制器的软件设计完成。这个嵌入式的USB主机能够具有同装有Windows 操作系统的PC一样的功能;能够直接对USB的移动存储设备进行读取;能够自动识别设备并把设备配置为标准的磁盘驱动器;能够直接进行文件的读取、格式化等一系列操作。

为了通用,可以选用朗科公司的USB优盘作为外设。目前整个系统可以直接对优盘进行操作,读取优盘中的文件、写文件到优盘中等。可以在嵌入式Linux平台上运行USB主机,作为嵌入式设备与USB Slave设备进行通信。

小结

我们对在嵌入式Linux平台上进行USB主机控制器的软、硬件设计做了简单的介绍。设计的重点和难点主要在于主机控制器芯片的驱动程序开发,但作为开放系统,在Linux上开发设备驱动程序有着其它嵌入式系统不可比拟的优势,大量的开放源码无疑可以加速开发的进程并使得其应用更加的广泛。因此,USB作为一种新型的高速外设总线,在嵌入式Linux领域必定有着广阔的应用前景


OVER

[1] 页 RedHyphone.Union 投稿邮箱
[特别声明]:
本站文章大多搜索转载自网络中,如果侵犯了您的权利,请告之我们。本站将立即删除。
本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
查看评论】【向上滚屏】【关闭窗口】【 打印
-相关文章
  • openSUSE 11.1 Final - 正式发布
  • [视频]Opera Mini 4.2 正式版发布
  • dll注入系统进程(开源代码)
  • 认知盲区 解惑双网卡双线路DNS解析
  • FlashFXP 简体中文版 3.7.5 Build 1303 Beta[烈火]
  • -文章评论 (关闭)
    ·还没有相关的评论!

    网上大名:
    红旋风网络技术联盟 RHUTech.Union
     
    Copyright © 2000-2007 RedHyphone.Union All Rights Reserved. 红旋风联盟版权所有.皖ICP备05011033号
    中国红旋风网络技术联盟 | www.RedHyphone.net
    Mailto:Redhyphone@gamil.com