首页> 中国专利> 一种嵌入式系统下USB存储器的驱动开发方法

一种嵌入式系统下USB存储器的驱动开发方法

摘要

一种嵌入式系统下USB存储器的驱动开发方法,包括:利用现有的IO系统和文件系统确定整个驱动的系统结构;实现对HC模块的初始化,完成HCI接口;实现对USB存储器的识别和配置;在USB传输通道已经正确建立的基础上,通过标准命令完成对USB存储器的容量获取、块读写模块接口;衔接USB底层驱动和上层块驱动以及文件系统,实现对块设备的创建和文件系统的加载;向用户提供文件创建、打开、删除、读写等接口。利用本发明,可以在嵌入式系统下快速、简便地完成USB存储器的驱动开发。从而在嵌入式系统中实现对USB存储器的支持,使得嵌入式系统中的各种信息可以通过USB存储器来进行传递,充分利用了USB存储器良好的通用性、可靠性、移植性。

著录项

  • 公开/公告号CN1529227A

    专利类型发明专利

  • 公开/公告日2004-09-15

    原文格式PDF

  • 申请/专利权人 中兴通讯股份有限公司;

    申请/专利号CN03134998.6

  • 发明设计人 符冬阳;张景涛;谢锐;

    申请日2003-09-29

  • 分类号G06F3/06;G06F9/445;

  • 代理机构深圳市楼外楼专利事务所;

  • 代理人曹建军

  • 地址 518057 广东省深圳市南山区高新技术产业园科技南路中兴通讯大厦A座6层

  • 入库时间 2023-12-17 15:30:37

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2015-11-11

    未缴年费专利权终止 IPC(主分类):G06F3/06 授权公告日:20060809 终止日期:20140929 申请日:20030929

    专利权的终止

  • 2006-08-09

    授权

    授权

  • 2004-11-17

    实质审查的生效

    实质审查的生效

  • 2004-09-15

    公开

    公开

说明书

技术领域

本发明涉及一种USB存储器的驱动开发方法,尤其是一种嵌入式系统下的USB存储器的驱动开发方法。

背景技术

目前,USB(Universal Serial Bus:通用串行总线)存储器已经广泛应用到了个人计算机领域,充分体现出了其携带方便、操作简单的优点。但是USB存储器在嵌入式系统中的应用还很少。目前在嵌入式系统中,存储设备大多还局限在固定的FLASH或笔记本硬盘上,使用起来极不方便,容量上非常固定,一旦系统设计完成之后,容量就很难变动,这样就可能出现不能满足使用或出现浪费的情况。另外因为缺乏移动性,也不方便信息的交互、保存。造成嵌入式系统下USB存储器很少应用的主要原因是:嵌入式系统下USB存储器的驱动开发难度较大,成本较高。因此,在嵌入式系统下如何快速,简便地进行USB存储器的驱动开发成为亟待解决的问题。

发明内容

本发明的目的在于:在嵌入式系统下,提供一种快速,简便的USB存储器的驱动开发方法。

本发明的目的是这样实现的:

1.1利用现有的IO系统(输入输出系统)和文件系统确定整个驱动的系统结构;

1.2实现对HC模块(主控制器模块)的初始化(针对不同的HC硬件模块实现不同的HC初始化),完成HCI接口(主控制器接口);

1.3实现对USB存储器的识别和配置,包括:设备加电后通过复位可进入默认状态,通过控制端点对设备进行地址设置;将配置值写入设备;

1.4在USB传输通道已经正确建立的基础上,通过标准命令完成对USB存储器的容量获取、块读写模块接口;其中,完成对USB存储器块读写模块接口,包括命令传输阶段、数据传输阶段、状态传输阶段三个阶段;

1.5衔接USB底层驱动和上层块驱动以及文件系统,实现对块设备的创建和文件系统的加载;

1.6向用户提供文件创建、打开、删除、读写等接口。

本发明所确定的整个驱动的系统结构依次为:上层应用、IO系统和文件系统、USB驱动层和主控制器驱动层、硬件部分;其中USB驱动层包括USB存储器识别与配置模块、USB存储器容量获取模块、USB存储器数据块读模块、USB存储器数据块写模块、USB存储器复位模块;使用块驱动作为文件系统和USB存储器驱动之间的接口;上层应用直接调用IO系统和文件系统提供的接口;IO系统在文件系统之上提供各种文件操作接口;文件系统在块驱动接口之上挂接文件系统;块驱动接口连接底层各种驱动入口和嵌入式系统提供的文件系统库;USB驱动层在HC驱动层之上完成相关的USB协议,并提供块驱动所需的接口;主控制器驱动层实现主控制器硬件的初始化,并完成主控制器接口;硬件部分包括主机端的主控制器模块以及USB存储器。

利用本发明,可以在嵌入式系统下快速、简便地完成USB存储器的驱动开发。从而在嵌入式系统中实现对USB存储器的支持,使得嵌入式系统中的各种信息可以通过USB存储器来进行传递,充分利用了USB存储器良好的通用性、可靠性、移植性。

附图说明

图1是本发明的流程图;

图2是本发明的驱动开发对象层次架构示意图;

图3是本发明中USB存储器识别和配置步骤流程图;

图4是本发明中USB存储器块读操作步骤流程图;

图5是本发明的USB存储器块写操作步骤流程图。

具体实施方式

本发明利用嵌入式系统中现有的文件系统和ATA硬盘驱动,挖掘出ATA硬盘驱动和USB存储器本质上的相似之处,那就是它们都是块设备,从用户的角度来看它们都能够进行文件的读写等操作。通过采用嵌入式系统中现有的块设备上层接口以及文件系统,针对块设备驱动所需要提供的底层接口,推导出在嵌入式系统中实现USB存储器正常操作所需要的最少功能接口,主要包括USB存储器的初始化接口、获取存储器容量接口、数据块读接口、数据块写接口、设备复位接口。在底层的这些接口中实现对USB相关协议的支持,并支持标准的USB闪存盘、USB硬盘等USB存储设备。

从系统的角度来说,要在嵌入式系统中实现对USB存储器的支持,需要两个必不可少的部分:硬件部分、软件驱动。

硬件部分包括HC(Host Controller,主控制器)模块和USB存储器。HC模块连接在嵌入式系统中,许多专用的芯片包含有USB HC模块,可以支持一到几个USB端口。USB存储器是连在USB端口上的存储设备,可以是USB闪存盘,也可以是带USB接口的笔记本硬盘。

而整个软件驱动的组成包括7个部分:

A模块:块设备封装以及IO系统;

B模块:USB存储器识别与配置模块;

C模块:USB存储器容量获取模块;

D模块:USB存储器数据块读模块;

E模块:USB存储器数据块写模块;

F模块:USB存储器复位模块;

G模块:HC初始化模块;

其中,A模块用来提供USB存储器上层的IO操作,包括对文件系统的初始化、完成文件读写操作等。

G模块完成HC的初始化,这一部分需要根据硬件的变化作相应的设置,包括PCI配置、中断的挂接、HC各种寄存器的初始化,根据硬件的具体设计以及硬件相关手册来完成。

B、C、D、E、F五个模块建立在G模块的上层,需要利用G模块提供的相关接口,实现USB和主存类相关协议,并对上层(A模块)提供必不可少的功能接口。

具体地说,B模块主要对USB存储器进行识别和配置。模块对HC进行操作,构建标准的USB请求,通过HCI接口(Host Controller Interface)向USB端口所连的设备发出标准请求,以获得USB设备的各种信息,USB设备的各种信息是通过设备响应USB标准请求返回的描述符来描述的。主要有设备描述符(Device Descriptor)、配置描述符(Configuration Descriptor)、接口描述符(Interface Descriptor)、端点描述符(Endpoint Descriptor)。其中,可以通过设备描述符获得设备的类型,通过配置描述符获得配置信息以及接口的个数,通过接口描述符获得一个配置中的一个特定接口信息,并获得本接口所包含的端点数目,而端点描述符则反映了端点的类型、数据传输方向以及传输包的最大大小。通过对这些描述的比较,我们可以知道所连接的USB设备是否被本驱动模块支持,还可以根据所获得的配置信息对设备进行特定的配置,配置完成之后,就可以对设备进行下一步的块数据访问了。总的说来,B模块所要完成的是,在上层接口与USB存储器之间构建一个符合USB协议标准的传输通道,以便于后面进行特定的命令、数据传输。

C模块要实现的是获得USB存储器的容量。这个模块的调用是在正确运行B模块之后。通过B模块已经建立好的USB传输通道,向USB存储器传送容量获取命令,USB存储器以块数和块大小的格式返回容量数据,二者的乘积就是USB存储器的物理容量(以字节为单位),这个数据被上层的接口使用,为块读写操作提供大小和边界的依据。

D模块实现指定块数据的读取。通过B模块已经建立好的USB传输通道,向USB存储器发送读块命令,并指定需要读取的初始块地址以及块数,USB存储器将这些块的数据返回。

E模块实现向指定的块写入数据。通过B模块已经建立好的USB传输通道,向USB存储器发送读写命令,并指定需要写入的初始块地址以及块数,USB存储器将通过USB传输通道获取的数据写入存储器相应的块中。

F模块主要完成对USB端口进行复位。在对USB端口或USB存储器进行操作遇到问题需要复位时,可以调用此功能接口。这个接口也是完成上层块驱动必不可少的。

本发明驱动开发方法流程如图1所示:

第一步,利用现有的IO系统(输入输出系统)和文件系统确定整个驱动的系统结构。具体的层次结构如图2。确定使用块驱动作为文件系统和USB存储器驱动之间的接口是本发明中很重要的一点。通过实践,我们采用图2的层次结构作为整个USB存储器驱动的架构。整个层次清晰而简练。上层应用直接调用IO系统和文件系统提供的接口,他们不必关心底层的操作细节。IO系统在文件系统之上提供各种文件操作接口。文件系统在块驱动接口之上挂接文件系统。块驱动接口作为USB驱动和文件系统之间的桥梁,连接底层各种驱动入口和嵌入式系统提供的文件系统库。USB驱动层在HC驱动层之上完成相关的USB协议,并提供块驱动所需的接口。HC驱动层针对特定的USB HC硬件,实现硬件的初始化等操作,并完成HCI(主控制器接口)。硬件部分包括主机端的HC模块以及外接的USB存储器。

第二步,针对不同的HC硬件模块实现不同的HC初始化,完成HCI接口。驱动的主体框架确定以后,进入实际的驱动开发,首先遇到的就是要对最底层的硬件HC模块进行初始化,并完成HCI接口。市场上主要有两大类USB主控制器,一类支持通用主控制器接口(Universal Host Controller Interface,简称UHCI),一类支持开放主控制器接口(Open Host Controller Interface,简称OHCI)。对主控制器的初始化也主要是针对这两种接口规范。

第三步,实现对USB存储器的识别和配置。这一步对开发出来的USB存储器驱动的兼容性非常重要。图3描述了USB存储器识别和配置过程中的状态转换和相关操作。设备加电后通过复位可进入默认状态,进入默认状态后,可以通过控制端点(端点0)对设备进行地址设置,一个USB接口最多可连127个设备,要与不同的设备通信,必须首先对设备进行编址,编址之后就可以使用设定的地址访问设备了,此时的设备转入已编址状态。之后的操作是获取设备的各种描述符信息,从设备和接口的类、子类、协议可以判断此设备是否被支持。我们所支持的USB存储器属于USB协议中提到的MASS STORAGE类(海量存储设备类),并且支持SCSI(Small Computer SystemInterface)子类,使用的传输协议是BULK-ONLY传输(块传输)。如果USB端口上连接的设备是驱动支持的类型,就进入配置过程。配置过程将配置值写入设备,设备进入已配置状态。至此,USB传输通道已经建立,可以对设备进行后续的读写等操作了。

第四步,在USB传输通道已经正确建立的基础上,通过标准命令完成对USB存储器的容量获取、块读写模块接口。块读写的过程如图4和图5。都是分为三个阶段:命令传输阶段、数据传输阶段、状态传输阶段。要注意的是,数据传输是以整块位单位的。

第五步,衔接USB底层驱动和上层块驱动以及文件系统,实现对块设备的创建和文件系统的加载。

第六步,向用户提供文件创建、打开、删除、读写等接口。

本发明结合USB从上层的文件系统、块驱动推导出USB存储器驱动系统的整体结构,再依据最底层的USB主控制器硬件和USB存储器,从下往上完成相关的底层接口,最后综合调试。构成了嵌入式系统下开发USB闪存盘驱动的整个过程。

下面针对一个更为具体实例做详细描述:

结合图2驱动的整体层次结构来进行说明。整个系统按照硬件和软件两个大的部分。

硬件部分的USB存储器采用USB闪存盘。主控制器部分采用Intel公司的南桥芯片82371EB,这块芯片内部带有一个支持UHCI的USB主控制器,并带有两个USB端口。

软件部分的操作系统采用通信领域广泛应用的VxWorks实时操作系统,VxWorks提供了上层IO系统、文件系统以及相关的块驱动层。我们借助VxWorks的块驱动推导出需要实现的USB闪存盘底层相关接口,主要包括:UsbDevInit(USB闪存盘的识别和配置)、UsbGetCapacity(USB闪存盘容量获取)、UsbBlockRead(USB闪存盘块读)、UsbBlockWrite(USB闪存盘块写)、UsbDevReset(USB闪存盘复位)。

软件部分的详细处理步骤是这样的:

首先必须完成82371EB芯片USB主控制器的初始化工作,包括对USB主控制器模块的PCI配置,相关寄存器的设置,以及实现UHCI接口。这些可以参照芯片手册完成。

对于以后的操作我们针对USB闪存盘设计了一个设备结构。用来存储设备的连接状况、当前所处的状态、设备的各种属性(包括描述符、容量、读写支持等)、支持的操作等。以后的各种操作都需要参考这个结构的状态。

在完成USB主控制器和USB闪存盘设备结构的初始化后,只要有设备连到USB端口,就会产生Resume中断(这个中断表明USB端口有设备连上或拔出),此时即会调用USB设备识别和配置例程。这个过程按照图3所描述的过程进行。在正确的识别和配置USB闪存盘后,就表明USB设备的初始化过程成功了(也就是通常所说的USB枚举过程)。

之后的块读写和容量获取等操作都是通过USB传输管道(pipe),采用USB闪存盘所支持的SCSI命令来实现的。按照执行SCSI命令的三个阶段,完成READ(读块),WRITE(写块),READCAPACITY(读容量)三个命令,也就实现了相关的三个功能接口。这些功能接口作为块驱动的底层驱动入口被调用。

结合USB从VxWorks上层的文件系统、块驱动推导出USB闪存盘驱动系统的整体结构,再依据最底层的USB主控制器硬件和USB闪存盘,从下往上完成相关的底层接口,最后综合调试。构成了VxWorks实时操作系统下开发USB闪存盘驱动的整个过程。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号