CN1269017C - 一种嵌入式系统下usb存储器的驱动开发方法 - Google Patents

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

Info

Publication number
CN1269017C
CN1269017C CN 03134998 CN03134998A CN1269017C CN 1269017 C CN1269017 C CN 1269017C CN 03134998 CN03134998 CN 03134998 CN 03134998 A CN03134998 A CN 03134998A CN 1269017 C CN1269017 C CN 1269017C
Authority
CN
China
Prior art keywords
usb
usb storage
interface
module
driving
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN 03134998
Other languages
English (en)
Other versions
CN1529227A (zh
Inventor
符冬阳
张景涛
谢锐
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ZTE Corp
Original Assignee
ZTE Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by ZTE Corp filed Critical ZTE Corp
Priority to CN 03134998 priority Critical patent/CN1269017C/zh
Publication of CN1529227A publication Critical patent/CN1529227A/zh
Application granted granted Critical
Publication of CN1269017C publication Critical patent/CN1269017C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Stored Programmes (AREA)
  • Information Transfer Systems (AREA)

Abstract

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

Description

一种嵌入式系统下USB存储器的驱动开发方法
技术领域
本发明涉及一种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(AT Attachment,AT附加装置,是一种IDE驱动器接口规范)硬盘驱动,挖掘出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闪存盘驱动的整个过程。

Claims (5)

1、一种嵌入式系统下USB存储器的驱动开发方法,包括以下步骤:
1.1利用现有的输入输出系统和文件系统确定整个驱动的系统结构;
1.2实现对主控制器模块的初始化,完成主控制器接口;
1.3实现对USB存储器的识别和配置;
1.4通过标准命令完成对USB存储器的容量获取、块读写模块接口;
1.5衔接USB底层驱动和上层块驱动以及文件系统,实现对块设备的创建和文件系统的加载;
1.6向用户提供文件创建、打开、删除、读写等接口。
2、权利要求1所述的嵌入式系统下USB存储器的驱动开发方法,其特征在于,所确定的整个驱动的系统结构依次为:上层应用、IO系统和文件系统、USB驱动层和主控制器驱动层、硬件部分,使用块驱动作为文件系统和USB存储器驱动之间的接口;上层应用直接调用IO系统和文件系统提供的接口;IO系统在文件系统之上提供各种文件操作接口;文件系统在块驱动接口之上挂接文件系统;块驱动接口连接底层各种驱动入口和嵌入式系统提供的文件系统库;USB驱动层在HC驱动层之上完成相关的USB协议,并提供块驱动所需的接口;主控制器驱动层实现主控制器硬件的初始化,并完成主控制器接口;硬件部分包括主机端的主控制器模块以及USB存储器。
3、权利要求2所述的嵌入式系统下USB存储器的驱动开发方法,其特征在于,所述USB驱动层包括:USB存储器识别与配置模块;USB存储器容量获取模块;USB存储器数据块读模块;USB存储器数据块写模块;USB存储器复位模块。
4、权利要求1所述的嵌入式系统下USB存储器的驱动开发方法,其特征在于,所述的实现对USB存储器的识别和配置过程包括:设备加电后通过复位进入默认状态,通过控制端点对设备进行地址设置;将配置值写入设备。
5、权利要求1所述的嵌入式系统下USB存储器的驱动开发方法,其特征在于,所述通过标准命令完成对USB存储器块读写模块接口,包括命令传输阶段、数据传输阶段、状态传输阶段三个阶段。
CN 03134998 2003-09-29 2003-09-29 一种嵌入式系统下usb存储器的驱动开发方法 Expired - Fee Related CN1269017C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 03134998 CN1269017C (zh) 2003-09-29 2003-09-29 一种嵌入式系统下usb存储器的驱动开发方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 03134998 CN1269017C (zh) 2003-09-29 2003-09-29 一种嵌入式系统下usb存储器的驱动开发方法

Publications (2)

Publication Number Publication Date
CN1529227A CN1529227A (zh) 2004-09-15
CN1269017C true CN1269017C (zh) 2006-08-09

Family

ID=34286251

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 03134998 Expired - Fee Related CN1269017C (zh) 2003-09-29 2003-09-29 一种嵌入式系统下usb存储器的驱动开发方法

Country Status (1)

Country Link
CN (1) CN1269017C (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100454238C (zh) * 2005-04-28 2009-01-21 上海贝尔阿尔卡特股份有限公司 一种实现与设备对象无关的dohm软件接口
CN100458970C (zh) * 2005-07-04 2009-02-04 联咏科技股份有限公司 嵌入式存储单元结构以及存储装置的系统结构与操作方法
CN100481051C (zh) * 2007-04-24 2009-04-22 杭州华三通信技术有限公司 通用串口总线主机控制器驱动通用适配层实现方法及装置
US8812769B2 (en) * 2008-10-30 2014-08-19 Sandisk Il Ltd. Data storage devices
CN106371884B (zh) * 2016-09-18 2019-12-20 时瑞科技(深圳)有限公司 通用嵌入式加载应用系统及方法

Also Published As

Publication number Publication date
CN1529227A (zh) 2004-09-15

Similar Documents

Publication Publication Date Title
US20050240713A1 (en) Flash memory device with ATA/ATAPI/SCSI or proprietary programming interface on PCI express
US20040158669A1 (en) Architecture for a serial ATA bus based flash memory apparatus
US8489803B2 (en) Efficient use of flash memory in flash drives
US6286057B1 (en) Method and arrangement for allowing a computer to communicate with a data storage device
US8281062B2 (en) Portable storage device supporting file segmentation and multiple transfer rates
US7225289B2 (en) Virtual IDE storage with PCI express interface
US8904095B2 (en) Data storage device and operating method thereof
US20070033326A1 (en) Enhanced host interfacing methods
KR20030084947A (ko) 유니버설 시리얼 버스를 기초한 pc 플래시 디스크의아키텍처
US7606964B2 (en) Virtual USB flash memory storage device with PCI express interface, controller and method thereof
JP5068754B2 (ja) 改良されたホストインターフェイス
CN101078991A (zh) 基于bios读写内存spd的计算机系统信息保存和读取方法
CN1304957C (zh) 基于移动存储的计算机系统磁盘同步写性能提高方法
CN1650276A (zh) Ata/sata组合控制器
CN1269017C (zh) 一种嵌入式系统下usb存储器的驱动开发方法
CN1577252A (zh) 一种自动安装设备驱动程序的方法及设备
CN101051269A (zh) 智能平台管理接口韧体架构及其建立方法
CN1264094C (zh) 利用光盘和移动存储介质启动并运行计算机系统的方法
CN1438583A (zh) 监测计算机系统资源的装置及串行总线和该资源相通方法
CN106951268A (zh) 一种申威平台支持NVMe硬盘启动的实现方法
US20090083021A1 (en) Emulation of ahci-based solid state drive using nand interface
US20070226451A1 (en) Method and apparatus for full volume mass storage device virtualization
KR101995034B1 (ko) 데이터 저장 장치 및 그것의 동작 방법
CN1735855A (zh) 用于处理数据传送的方法和装置
EP1462946A1 (en) Architecture for a serial ATA bus based flash memory apparatus

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20060809

Termination date: 20140929

EXPY Termination of patent right or utility model