CN1269017C - 一种嵌入式***下usb存储器的驱动开发方法 - Google Patents
一种嵌入式***下usb存储器的驱动开发方法 Download PDFInfo
- 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
Links
Images
Landscapes
- Information Transfer Systems (AREA)
- Stored Programmes (AREA)
Abstract
一种嵌入式***下USB存储器的驱动开发方法,包括:利用现有的IO***和文件***确定整个驱动的***结构;实现对HC模块的初始化,完成HCI接口;实现对USB存储器的识别和配置;在USB传输通道已经正确建立的基础上,通过标准命令完成对USB存储器的容量获取、块读写模块接口;衔接USB底层驱动和上层块驱动以及文件***,实现对块设备的创建和文件***的加载;向用户提供文件创建、打开、删除、读写等接口。利用本发明,可以在嵌入式***下快速、简便地完成USB存储器的驱动开发。从而在嵌入式***中实现对USB存储器的支持,使得嵌入式***中的各种信息可以通过USB存储器来进行传递,充分利用了USB存储器良好的通用性、可靠性、移植性。
Description
技术领域
本发明涉及一种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存储器块读写模块接口,包括命令传输阶段、数据传输阶段、状态传输阶段三个阶段。
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)
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 | 时瑞科技(深圳)有限公司 | 通用嵌入式加载应用***及方法 |
-
2003
- 2003-09-29 CN CN 03134998 patent/CN1269017C/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN1529227A (zh) | 2004-09-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI704487B (zh) | 資料儲存設備及其操作方法 | |
US20050240713A1 (en) | Flash memory device with ATA/ATAPI/SCSI or proprietary programming interface on PCI express | |
KR101969883B1 (ko) | 데이터 저장 장치 및 그것의 동작 방법 | |
US20040158669A1 (en) | Architecture for a serial ATA bus based flash memory apparatus | |
US8489803B2 (en) | Efficient use of flash memory in flash drives | |
US5875349A (en) | Method and arrangement for allowing a computer to communicate with a data storage device | |
KR100914427B1 (ko) | 유니버설 시리얼 버스에 기초한 pc 플래시 디스크의 아키텍처 | |
US8281062B2 (en) | Portable storage device supporting file segmentation and multiple transfer rates | |
US7225289B2 (en) | Virtual IDE storage with PCI express interface | |
KR102381343B1 (ko) | 스토리지 장치 및 상기 스토리지 장치의 동작 방법 | |
US7606964B2 (en) | Virtual USB flash memory storage device with PCI express interface, controller and method thereof | |
CN1841295A (zh) | 通用存储总线适配器 | |
JP5068754B2 (ja) | 改良されたホストインターフェイス | |
CN101078991A (zh) | 基于bios读写内存spd的计算机***信息保存和读取方法 | |
CN1304957C (zh) | 基于移动存储的计算机***磁盘同步写性能提高方法 | |
CN1269017C (zh) | 一种嵌入式***下usb存储器的驱动开发方法 | |
CN1577252A (zh) | 一种自动安装设备驱动程序的方法及设备 | |
CN101051269A (zh) | 智能平台管理接口韧体架构及其建立方法 | |
CN1264094C (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) | 데이터 저장 장치 및 그것의 동작 방법 | |
EP1462946A1 (en) | Architecture for a serial ATA bus based flash memory apparatus | |
KR20140090416A (ko) | 데이터 저장 장치의 동작 방법 |
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 |