最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

Bulk-Only协议及其实现

IT圈 admin 24浏览 0评论

2024年3月19日发(作者:九水之)

!""#

年第

$

期福建电脑

%

&’()*+,(-

协议及其实现

孙庚解晓茹

唐山

"./"""

)(

河北科技大学唐山分院,河北

摘要

&’()*+,(-

协议是

01&

组织针对大容量存储设备制定的一种块存储类协议,目前已经普遍应用于各

种移动存储设备。深刻理解此协议对于开发性能可靠的移动存储设备具有重要意义。文章阐述了

&’()*+,(-

协议的

重要内容,并结合实例介绍了此协议的实现方法。

关键词

大容量存储设备

&’()*+,(-2&3213

$

、引言

01&

是目前在打印机,数字存储设备,输入

K

输出设备,数

码像机,

LM/

播放器等其他周边设备中得到广泛应用的连接方

式。

01&

设备具有使用方便,速度快,连接灵活,即插即用,总线

供电等优点。基于

01&

接口的大容量存储设备

G

01&L8??19N:O

87;

H

应运而生,目前市场上的这类设备主要有:

01&

移动硬盘,

01&

外置光驱,

01&

外置软驱,

01&

闪存盘

闪盘

01&2NDO

P8Q9E(8?BK1D8:9L;568

卡读卡器等。由于

01&

大容量存储设备

的方便与快捷,它们很快得到用户的认可。针对大容量移动存储

设备的软件设计,

01&

组织定义了大容量存储设备的类规范,这

个类规范包括四个独立的子类规范,即:

$R01&L8??19N:87;

2(8??2N,9:N(K&’()KS,9;::’P9

G

2&S

H

<:8,?PN:9!R01&L8??19N:87;

2(8??&’()*+,(-<:8,?PN:9/R01&L8??19N:87;2(8??T

D8,5&(NQ)#R01&L8??19N:87;2(8??0ES2NDD8,51P;Q6@6Q8O

96N,

。其中后两个子规范则定义了存储介质的操作命令。前两个

子规范定义了数据

K

命令

K

状态在

01&

上的传输方法。

2&S

传输

规范使用

2N,9:N(K&’()KS,9;::’P9

三种类型的端点进行数据

K

K

状态传送。

&’()*+,(-

传输规范则仅仅使用

&’()

端点传送

数据

K

命令

K

状态。本文就

&’()*+,(-

传输规范的重要内容进行

阐述,并给出一种软件实现方案。

!

、协议介绍

&’()*+,(-

传输规范使用控制端点清除

&’()

端点的

1

状态和发送此规范定义的两个块存储类请求

J;?;9

请求

U;9L8VA0I

请求

。而数据

K

命令

K

状态的传输则仅仅使用

&’()

端点。

$

命令

K

数据

K

状态传输流程图

$

是数据

K

命令

K

状态在

01&

总线上的传输流程图。根据

此图我们可以将

&’()

管道上的传输状态定义为:空闲、

2&3

理、

>898*+’9

从主机向设备传输数据

>898*S,

从设备向主

机传输数据

213

处理、管道阻塞等六种状态。设备在空闲状

态下接收到的数据包为

2&3

包;在

>898*+’9

状态下接收到的

数据包为主机期待写入存储设备的数据;在

>898*S,

状态下,主

机请求从存储设备读取数据,设备将向主机发送这些数据包;在

213

状态下,设备封装并发送

213

包以向主机返回状态信息。

从图

$

中可知:任何

&’()*+,(-

事务均是以主机向设备发送

2&3

包并试图建立相应的数据传输开始的。设备接收到

2&3

包,检查并解释它,试图满足主机的要求,并通过

213

向主机返

回状态信息。

!R$

命令块包

2&3

2&3

2NDD8,5&(NQ)3:8P

是主机通过

&’()*+’9

端点向

设备发送的命令块包。它必须起始于包边界,并且必须以

/$

节的短包传输结束,如同

!

所示:

字节

4.%#/!$"

"*/52&3167,89’:;

#*452&3<87

=*$$52&3>898<:8,?@;:A;,79B

$!CD2&3E(87?

$/:;?;:F;5

G

"

H

C2&3A0I

$#:;?;:F;5

G

"

H

C2&32&A;,79B

$%*/"2&32&

!2&3

52&3167,89’:;W2&3

包的标记,表明这是一个

2&3

包,这个域

的值为

#/#!%/%%B

52&3<87

:由主机发送的命令块标记。当设备返回相应的

213

包时,必须使

5213<87

域的值与此值相同。

52&3>898<:8,?@;:A;,79B

:主机期待命令执行期间在

&’()*S,

&’()*+’9

端点上传输的数据的字节长度。如果这个域的值是

"X

则在

2&3

213

之间设备和主机不传输任何数据,并且设

备将忽略在

CD2&3E(87?

域中的

>6:;Q96N,

位的值。

CD2&3E(87?

:规范中只使用了此域的最高位,我们将其称为方

向位。方向位为

"

,表示将进入

>898*+’9

状态;方向位为

$

,表示

将进入

>898*S,

状态;

C2&3A0I

:命令块被发送到的逻辑单元号。

C2&32&A;,79B

2&32&

的有效字节长度。它定义了有效的命令

块长度。合法值为

$*$.

2&32&

:由设备执行的命令块。设备将解释此域的头

C2&O

32&A;,79B

个字节,以作为由

CS,9;:@8Q;1’C2(8??

此值在固件定

义的接口描述符中指定

结构中所标识的命令集的命令块。

!R!

命令状态包

213

213

G

2NDD8,51989’?3:8P

H

是设备通过

&’()*S,

端点向主

机发送的状态包。它必须起始于包边界,并且必须以

$/

字节的

短包传输结束。如图

/

所示:

字节

4.%#/!$"

"*/5213167,89’:;

#*45213<87

=*$$521389:J;?65’;

$!C2131989’?

/213

5213167,89’:;W213

包的标记,表明这是一个

213

包,这个域的

值为

%/#!%/%%B

5213<87

:设备必须将这个域设置为与相应的

2&3

包的

52&3O

!

福建

&’(

域值一致。

)*+,-’.’/012)30

:对于

-’.’453.

传输,设备将在此域中报告主

机期待的数据量

6*7,*7809(.:

与设备实际处理的数据量之

间的差值。对于

-’.’4;9

传输,设备将在此域中报告主机期待的

数据量与设备实际发送的数据量之间的差值。

6*+,+.’.31

:表明命令成功或失败信息。如果命令成功执行,则

设备将设置此域的值为

#

;如果命令执行失败,则设备将设置此

域的值为

%

;如果设备接收到无效的

*7,

或命令执行过程中遇

到管道阻塞等情况,则设备将设置此域的值为

"

。规范规定了

%<

种情况下的

6*+,+.’.31

域值的设置。详见参考文献

%

<

、协议的实现

大容量存储设备的软件开发分为主机方的驱动程序开发和

设备方的固件开发两部分。

,29)=>1"###?,29)=>1@0?,29)=>1

AB

等操作系统提供了基于

73CD459CE

协议的大容量存储设备

的驱动程序,因此如果设备只是在这些操作系统下使用,则无需

自行开发驱动程序。但是考虑到

,29)=>1FG

操作系统目前还被

某些用户使用,为了满足这些用户的需求,设备开发商需开发设

备驱动程序。

主机方的

73CD459CE

协议的实现

本例中

73CD459CE

协议在主机方的实现采用

,-@

驱动模

型,它是设备驱动程序的一部分。包括

73CD59CE+.’I.;=

73CDJ

&I’91K0I

73CD59CE+09)*7,*=LMC0.0

73CD59CEN0.+.’.31

73CD59J

CE/010./0O=P0IE

73CD59CEN0.+.’.31*=LMC0.0

73CD59CE&I’91K0I-’.J

’*=LMC0.0

73CD59CEN0.@’Q839

等模块,由于篇幅有限,在这里只

给出部分模块的实现。

%

定义如下数据结构:

??

用于在驱动程序各层次模块间传递

;?5

请求

.EM0)0K1.I3O.R;5BS*TU&

V

W85XNY)=Z

B[5;-;=MZ

W*S/#*)6Z

W*S/*)6809(.:Z

B[5;--’.’73KK0IZ

W85XN-’.’809(.:Z

W85XN7C=OD+2]0Z

W85XNYC’(1Z

W85XN+.’.31Z

*S/839Z

^

;5BS*TU&_

#B;5BS*TU&Z

??

用于封装

*7,

.EM0)0K1.I3O.R*5@@SX-R785*TR,/SBBU/

V

W85XN)*7,+2(9’.3I0Z

W85XN)*7,&’(Z

W85XN)*7,-’.’&I’91K0I809(.:Z

W*S/6L*7,YC’(1Z

W*S/6*7,839Z

W*S/6*7,809(.:Z

W*S/*7,*7

%!

a

Z

^

*5@@SX-R785*TR,/SBBU/_

#B*5@@SX-R785*TR,/SBBU/Z

??

用于保存

*+,

.EM0)0K1.I3O.R*5@@SX-R+&S&W+R,/SBBU/

V

W85XN)*+,+2(9’.3I0Z

W85XN)*+,&’(Z

W85XN)*+,-’.’/012)30Z

W*S/6*+,+.’.31Z

^

*5@@SX-R+&S&W+R,/SBBU/_

#B*5@@SX-R+&S&W+R,/SBBU/Z

"

模块实现

$73CD59CE+.’I.;=

模块

本模块是所有的

73CD459CE

协议相关的

;?5

请求的主处

理模块。具体实现如下:

P=2)73CD59CE+.’I.;=

b

;XB-U[;*URUA&UX+;5X-0P2O0UQ.0912=9

c

V

B;5BS*TU&;=B’OD0.Z

B*5@@SX-R785*TR,/SBBU/*7,Z

电脑

"##$

年第

%

;=B’OD0.d-0P2O0UQ.0912=94e;=B’OD0.Z

-0P2O0UQ.0912=94e/&/WUZ

??+0.3M.:0O=LL’9)6C=OD>I’MM0IK=I.:21I0f301.

*7,dg

b

-0P2O0UQ.0912=94e*7,

c

Z

*7,4e)*7,+2(9’.3I0d*7,R+;NXS&W/UZ

*7,4e)*7,&’(d#Z

*7,4e)*7,-’.’&I’91K0I809(.:d

-0P2O0UQ.0912=94e7E.01&=&I’91K0IZ

*7,4e6L*7,YC’(1d

b

;=B’OD0.4eYC’(1g;5RY8SN+R-S&SR;X

c

h

#QG#i#Z

*7,4e6*7,839d;=B’OD0.4e839Z

*7,4e6*7,809(.:d;=B’OD0.4e*)6809(.:Z

/.C*=ME@0L=IE

b

*7,4e*7,*7_;=B’OD0.4e*)6_;=B’OD0.4e*)J

6809(.:

c

Z

??+09).:0O=LL’9)6C=OD>I’MM0I.=.:0)0P2O0H

??*’CC173CD59CE+09)*7,*=LMC0.0>:09.I’91K0I

??O=LMC0.01H

73CD&I’91K0I

b

-0P2O0UQ.0912=9_

-S&SR5W&_

*7,_

<%_

73CD59CE+09)*7,*=LMC0.0

c

Z

^

$73CD&I’91K0I

模块

此模块有五个参数,其中最后一个参数是当请求完成时需

调用的函数入口。模块的实现描述如下:

P=2)73CD&I’91K0I

b

;XB-U[;*URUA&UX+;5X-0P2O0UQ.0912=9_

;XW*S/&I’91K0I-2I0O.2=9_

;XB[5;-73KK0I_

;XW85XN73KK0I809(.:_

;XB;5R*5@B8U&;5XR/5W&;XU*=LMC0.2=9/=3.290

c

V

B;5R+&S*TR85*S&;5XX0Q.+.’ODZ

W+7-RB;BURSX-8UB2M0’9)C0Z

B;/B;IMZ

BW/7WI6Z

根据

&I’91K0I-2I0O.2=9

-0P2O0UQ.0912=9

W16;9.0IK’O0

域赋值;

WI6d-0P2O0UQ.0912=94eWI6Z

;IMd-0P2O0UQ.0912=94e;IMZ

73CD

传输建立一个

W/7

初始化我们的

;IM

*=LMC0.2=9/=3.290

注册为

;IM

的完成处理例程

Z

;IM

传递到

W+7

的驱动程序栈;

^

$73CD59CE+09)*7,*=LMC0.0

模块

此模块是

*7,

请求的完成处理例程。如果

*7,

包发送失

败,那么此模块将向设备发送复位请求,即调用

73CD59CE/010J

./0O=P0IE

模块;否则,将调用

73CD&I’91K0I

模块开始数据阶段的

传输。

$73CD59CEN0.+.’.31

模块

此模块调用

73CD&I’91K0I

模块以获得

*+,

包。

$73CD59CE/010./0O=P0IE

模块

此模块使用

W+7

的控制管道向设备发送

73CD459CE

协议

定义的

/010.

请求以复位

73CD

管道。

设备方的

73CD459CE

协议的实现

设备方的

73CD459CE

协议的实现是固件开发的一部分,由

于固件是和硬件密切相关的软件,因此我们以

B:C2M1

公司的

B-;W+7-%"

芯片为例,来阐述协议的实现。

根据

W+7

协议,在固件实现时,需要定义一些描述符来向主

机注册一些静态信息。在这里只针对描述符中与

73CD459CE

现相关的部分加以说明,关于描述符的详细描述见参考文献

<

%

描述符的定义

$

设备描述符:

此描述符的

6-0P2O0*C’11

6-0P2O0+36*C’11

6-0P2O0BI=.=O=C

域的值均设置为

#

,以通知主机我们将在接口描述符中指定类、

子类及其使用的协议。

$

接口描述符

将此描述符的

6;9.0IK’O0*C’11

域设置为

G#:

6-0P2O0+36*C’11

设置为

j

6;9.0IK’O0BI=.=O=C

设置为

j#:

,以通知主机我们的设备

属于块存储类、子类代码为

j

即采用

G#k#2

作为命令块标准,也

!""#

年第

$

期福建电脑

%

S

可以选用其他规范

、采用

&’()*+,(-

协议进行传输。

DKM

中断;

$

端点描述符

读取

G>/MH&>$!

的中断寄存器的低

;

位至标志寄存器

/,.7N(E=9

/,.7N(E=9T&’()+’.1,3

采用

&’()*+,(-

协议的设备只使用控制端点和

&’()

端点,

5N

S

读取端点的最后事务状态并清除

G>/MH&>$!

的中断标志;

而控制端点不需注册,因此我们只需定义

&’()*+’.

端点和

&’()+’.

端点缓冲区的数据读至环路缓冲区;

&’()*/,

端点的描述符。对于

&’()*+’.

端点,

01,2345,.6227899

清空

&’()+’.

端点缓冲区;

V

域的值设置为

"!:

;对于

&’()*/,

端点,

01,2345,.6227899

域的值

/,.7N(E=9T&’()/,1,3

8(985N

这些域的设置如设置为

;!:

。其余各域的值两端点的设置相同,

S

读取端点的最后事务状态并清除

G>/MH&>$!

的中断标志;

下:

V

0<8,=.:

设置为

%

0>89?753.47@-38

设置为

A

0B6..750’.89

设置

V

!

CDEFGE?)8.H5I8

设置为

#":

0/,.87JE(

设置为

"

$&’()+’.

处理模块

!

模块实现

S

5N

O

&4.H.E.8RR"

P

进入

K&L

处理模块;

固件中

&’()*+,(-

协议的实现分布到整个固件设计的四个

5N

O

&4.H.E.8RRQ

P

进入

KHL

处理模块;

V

层次模块,即:主循环模块、中断服务模块、

&’()+’.

处理模块、

$K&L

处理模块

&’()/,

处理模块、

K&L

处理模块及

KHL

处理模块。

S

读取环路缓冲区

&’NN87

,判断是否是有效的

K&LU

$

主循环模块

K&L

有效

5N

0BK&LW(E=9

的方向位

RR$

固件的执行时,首先初始化硬件芯片

G>/MH&>$!

S

5N

&4.H.E.8R!

8(98&4.H.E.8R$

然后初始化我们定义的一些变量:如标志寄存器

/,.7N(E=9

O

可进

存储

K&L

的重要数据;

行位存取

P

、用于保存

&’()

传输状态的

&4.H.E.8

O

"*

空闲,

$*

DKM

中断;

V

字节长度环路数据缓冲区

&’NN87>E.E+’.

!*>E.E/,

Q*KHL

P

8(98

阻塞

&’()

管道;

及用于存储

K&L

V

R&’()

端点描述符的

CDEFGE?)8.H5I8

域值

缓冲区。最后进入此模块。此模块根据标志寄存器的值将处理

$KHL

处理模块

派发到固件的其它模块。实现描述为:

S

DKM

中断;

C:5(8

O

$

PS

5N

O

/,.7N(E=9T&’()+’.1,3

P

进入

&’()+’.

处理模块

U

8(985N

O

/,.7N(E=9T&’()/,1,3

P

进入

&’()/,

处理模块;

TTTTTT

V

封装

$Q

字节的

KHL

并将其写入

&’()*/,

端点缓冲区;

&’()*/,

端点缓冲区有效;

&4.H.E.8R"

V

$

中断服务模块

&’()

端点有有效数据时,

G>/MH&>$!

将向

DKM

请求中

断服务。实现描述:

结束语

#

市近年来,

MH&

移动存储产品越来越得到广大用户的认可,

场上出现了各种品牌的

MH&

移动硬盘、闪存盘。深刻理解并正确

实现

&’()*+,(-

协议对于开发性能优良的移动存储产品具有重

要的意义。

参考文献

X

$

Y

X

!

Y

X

Q

Y

MH&DE99H.47E=8K(E99&’()*+,(-@7E,9347.Z:..3[CCCT’90T47=Z$]]]

MH&

大容量存储设备的开发

》《

电子设计技术

黄建明,,,

!""!TA

闪存盘固件的设计与实现

孙庚,,中科院研究生院硕士论文,

!""QTA

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

O

上接第

$$

P

第五,加强与国际间的合作,避免闭

门造车,要同全球性的电子商务发展相适

应。电子商务是在信息网络的基础上全球

一体化经济活动,发展我国的电子商务应

当加强国际合作和交流。同时,要推动国

经贸、家重点行业海关、商检、银行、税

务、运输等部门

电子商务应用示范工程,

鼓励企业应用和发展电子商务,培育我国

的电子商务市场环境,增加国际贸易机

会,提高国际竞争能力。

参考文献

X

$

Y

X

!

Y

X

Q

Y

谢天保,张景

T

智能电子商务框架模型的研究

T

计算机工程

T!""Q

#

月第

!]

卷第

A

刘彬

T

试论中国电子商务发展状况沈阳航空工业学院学报

T!""Q

Q

月第

!"

卷第

$

吴昌林

T

浅谈

!$

世纪电子商务的现状和发展

T

江西农业大学学报

O

社会科学版

P

T!""Q

Q

月第

!

卷第

$

2024年3月19日发(作者:九水之)

!""#

年第

$

期福建电脑

%

&’()*+,(-

协议及其实现

孙庚解晓茹

唐山

"./"""

)(

河北科技大学唐山分院,河北

摘要

&’()*+,(-

协议是

01&

组织针对大容量存储设备制定的一种块存储类协议,目前已经普遍应用于各

种移动存储设备。深刻理解此协议对于开发性能可靠的移动存储设备具有重要意义。文章阐述了

&’()*+,(-

协议的

重要内容,并结合实例介绍了此协议的实现方法。

关键词

大容量存储设备

&’()*+,(-2&3213

$

、引言

01&

是目前在打印机,数字存储设备,输入

K

输出设备,数

码像机,

LM/

播放器等其他周边设备中得到广泛应用的连接方

式。

01&

设备具有使用方便,速度快,连接灵活,即插即用,总线

供电等优点。基于

01&

接口的大容量存储设备

G

01&L8??19N:O

87;

H

应运而生,目前市场上的这类设备主要有:

01&

移动硬盘,

01&

外置光驱,

01&

外置软驱,

01&

闪存盘

闪盘

01&2NDO

P8Q9E(8?BK1D8:9L;568

卡读卡器等。由于

01&

大容量存储设备

的方便与快捷,它们很快得到用户的认可。针对大容量移动存储

设备的软件设计,

01&

组织定义了大容量存储设备的类规范,这

个类规范包括四个独立的子类规范,即:

$R01&L8??19N:87;

2(8??2N,9:N(K&’()KS,9;::’P9

G

2&S

H

<:8,?PN:9!R01&L8??19N:87;

2(8??&’()*+,(-<:8,?PN:9/R01&L8??19N:87;2(8??T

D8,5&(NQ)#R01&L8??19N:87;2(8??0ES2NDD8,51P;Q6@6Q8O

96N,

。其中后两个子规范则定义了存储介质的操作命令。前两个

子规范定义了数据

K

命令

K

状态在

01&

上的传输方法。

2&S

传输

规范使用

2N,9:N(K&’()KS,9;::’P9

三种类型的端点进行数据

K

K

状态传送。

&’()*+,(-

传输规范则仅仅使用

&’()

端点传送

数据

K

命令

K

状态。本文就

&’()*+,(-

传输规范的重要内容进行

阐述,并给出一种软件实现方案。

!

、协议介绍

&’()*+,(-

传输规范使用控制端点清除

&’()

端点的

1

状态和发送此规范定义的两个块存储类请求

J;?;9

请求

U;9L8VA0I

请求

。而数据

K

命令

K

状态的传输则仅仅使用

&’()

端点。

$

命令

K

数据

K

状态传输流程图

$

是数据

K

命令

K

状态在

01&

总线上的传输流程图。根据

此图我们可以将

&’()

管道上的传输状态定义为:空闲、

2&3

理、

>898*+’9

从主机向设备传输数据

>898*S,

从设备向主

机传输数据

213

处理、管道阻塞等六种状态。设备在空闲状

态下接收到的数据包为

2&3

包;在

>898*+’9

状态下接收到的

数据包为主机期待写入存储设备的数据;在

>898*S,

状态下,主

机请求从存储设备读取数据,设备将向主机发送这些数据包;在

213

状态下,设备封装并发送

213

包以向主机返回状态信息。

从图

$

中可知:任何

&’()*+,(-

事务均是以主机向设备发送

2&3

包并试图建立相应的数据传输开始的。设备接收到

2&3

包,检查并解释它,试图满足主机的要求,并通过

213

向主机返

回状态信息。

!R$

命令块包

2&3

2&3

2NDD8,5&(NQ)3:8P

是主机通过

&’()*+’9

端点向

设备发送的命令块包。它必须起始于包边界,并且必须以

/$

节的短包传输结束,如同

!

所示:

字节

4.%#/!$"

"*/52&3167,89’:;

#*452&3<87

=*$$52&3>898<:8,?@;:A;,79B

$!CD2&3E(87?

$/:;?;:F;5

G

"

H

C2&3A0I

$#:;?;:F;5

G

"

H

C2&32&A;,79B

$%*/"2&32&

!2&3

52&3167,89’:;W2&3

包的标记,表明这是一个

2&3

包,这个域

的值为

#/#!%/%%B

52&3<87

:由主机发送的命令块标记。当设备返回相应的

213

包时,必须使

5213<87

域的值与此值相同。

52&3>898<:8,?@;:A;,79B

:主机期待命令执行期间在

&’()*S,

&’()*+’9

端点上传输的数据的字节长度。如果这个域的值是

"X

则在

2&3

213

之间设备和主机不传输任何数据,并且设

备将忽略在

CD2&3E(87?

域中的

>6:;Q96N,

位的值。

CD2&3E(87?

:规范中只使用了此域的最高位,我们将其称为方

向位。方向位为

"

,表示将进入

>898*+’9

状态;方向位为

$

,表示

将进入

>898*S,

状态;

C2&3A0I

:命令块被发送到的逻辑单元号。

C2&32&A;,79B

2&32&

的有效字节长度。它定义了有效的命令

块长度。合法值为

$*$.

2&32&

:由设备执行的命令块。设备将解释此域的头

C2&O

32&A;,79B

个字节,以作为由

CS,9;:@8Q;1’C2(8??

此值在固件定

义的接口描述符中指定

结构中所标识的命令集的命令块。

!R!

命令状态包

213

213

G

2NDD8,51989’?3:8P

H

是设备通过

&’()*S,

端点向主

机发送的状态包。它必须起始于包边界,并且必须以

$/

字节的

短包传输结束。如图

/

所示:

字节

4.%#/!$"

"*/5213167,89’:;

#*45213<87

=*$$521389:J;?65’;

$!C2131989’?

/213

5213167,89’:;W213

包的标记,表明这是一个

213

包,这个域的

值为

%/#!%/%%B

5213<87

:设备必须将这个域设置为与相应的

2&3

包的

52&3O

!

福建

&’(

域值一致。

)*+,-’.’/012)30

:对于

-’.’453.

传输,设备将在此域中报告主

机期待的数据量

6*7,*7809(.:

与设备实际处理的数据量之

间的差值。对于

-’.’4;9

传输,设备将在此域中报告主机期待的

数据量与设备实际发送的数据量之间的差值。

6*+,+.’.31

:表明命令成功或失败信息。如果命令成功执行,则

设备将设置此域的值为

#

;如果命令执行失败,则设备将设置此

域的值为

%

;如果设备接收到无效的

*7,

或命令执行过程中遇

到管道阻塞等情况,则设备将设置此域的值为

"

。规范规定了

%<

种情况下的

6*+,+.’.31

域值的设置。详见参考文献

%

<

、协议的实现

大容量存储设备的软件开发分为主机方的驱动程序开发和

设备方的固件开发两部分。

,29)=>1"###?,29)=>1@0?,29)=>1

AB

等操作系统提供了基于

73CD459CE

协议的大容量存储设备

的驱动程序,因此如果设备只是在这些操作系统下使用,则无需

自行开发驱动程序。但是考虑到

,29)=>1FG

操作系统目前还被

某些用户使用,为了满足这些用户的需求,设备开发商需开发设

备驱动程序。

主机方的

73CD459CE

协议的实现

本例中

73CD459CE

协议在主机方的实现采用

,-@

驱动模

型,它是设备驱动程序的一部分。包括

73CD59CE+.’I.;=

73CDJ

&I’91K0I

73CD59CE+09)*7,*=LMC0.0

73CD59CEN0.+.’.31

73CD59J

CE/010./0O=P0IE

73CD59CEN0.+.’.31*=LMC0.0

73CD59CE&I’91K0I-’.J

’*=LMC0.0

73CD59CEN0.@’Q839

等模块,由于篇幅有限,在这里只

给出部分模块的实现。

%

定义如下数据结构:

??

用于在驱动程序各层次模块间传递

;?5

请求

.EM0)0K1.I3O.R;5BS*TU&

V

W85XNY)=Z

B[5;-;=MZ

W*S/#*)6Z

W*S/*)6809(.:Z

B[5;--’.’73KK0IZ

W85XN-’.’809(.:Z

W85XN7C=OD+2]0Z

W85XNYC’(1Z

W85XN+.’.31Z

*S/839Z

^

;5BS*TU&_

#B;5BS*TU&Z

??

用于封装

*7,

.EM0)0K1.I3O.R*5@@SX-R785*TR,/SBBU/

V

W85XN)*7,+2(9’.3I0Z

W85XN)*7,&’(Z

W85XN)*7,-’.’&I’91K0I809(.:Z

W*S/6L*7,YC’(1Z

W*S/6*7,839Z

W*S/6*7,809(.:Z

W*S/*7,*7

%!

a

Z

^

*5@@SX-R785*TR,/SBBU/_

#B*5@@SX-R785*TR,/SBBU/Z

??

用于保存

*+,

.EM0)0K1.I3O.R*5@@SX-R+&S&W+R,/SBBU/

V

W85XN)*+,+2(9’.3I0Z

W85XN)*+,&’(Z

W85XN)*+,-’.’/012)30Z

W*S/6*+,+.’.31Z

^

*5@@SX-R+&S&W+R,/SBBU/_

#B*5@@SX-R+&S&W+R,/SBBU/Z

"

模块实现

$73CD59CE+.’I.;=

模块

本模块是所有的

73CD459CE

协议相关的

;?5

请求的主处

理模块。具体实现如下:

P=2)73CD59CE+.’I.;=

b

;XB-U[;*URUA&UX+;5X-0P2O0UQ.0912=9

c

V

B;5BS*TU&;=B’OD0.Z

B*5@@SX-R785*TR,/SBBU/*7,Z

电脑

"##$

年第

%

;=B’OD0.d-0P2O0UQ.0912=94e;=B’OD0.Z

-0P2O0UQ.0912=94e/&/WUZ

??+0.3M.:0O=LL’9)6C=OD>I’MM0IK=I.:21I0f301.

*7,dg

b

-0P2O0UQ.0912=94e*7,

c

Z

*7,4e)*7,+2(9’.3I0d*7,R+;NXS&W/UZ

*7,4e)*7,&’(d#Z

*7,4e)*7,-’.’&I’91K0I809(.:d

-0P2O0UQ.0912=94e7E.01&=&I’91K0IZ

*7,4e6L*7,YC’(1d

b

;=B’OD0.4eYC’(1g;5RY8SN+R-S&SR;X

c

h

#QG#i#Z

*7,4e6*7,839d;=B’OD0.4e839Z

*7,4e6*7,809(.:d;=B’OD0.4e*)6809(.:Z

/.C*=ME@0L=IE

b

*7,4e*7,*7_;=B’OD0.4e*)6_;=B’OD0.4e*)J

6809(.:

c

Z

??+09).:0O=LL’9)6C=OD>I’MM0I.=.:0)0P2O0H

??*’CC173CD59CE+09)*7,*=LMC0.0>:09.I’91K0I

??O=LMC0.01H

73CD&I’91K0I

b

-0P2O0UQ.0912=9_

-S&SR5W&_

*7,_

<%_

73CD59CE+09)*7,*=LMC0.0

c

Z

^

$73CD&I’91K0I

模块

此模块有五个参数,其中最后一个参数是当请求完成时需

调用的函数入口。模块的实现描述如下:

P=2)73CD&I’91K0I

b

;XB-U[;*URUA&UX+;5X-0P2O0UQ.0912=9_

;XW*S/&I’91K0I-2I0O.2=9_

;XB[5;-73KK0I_

;XW85XN73KK0I809(.:_

;XB;5R*5@B8U&;5XR/5W&;XU*=LMC0.2=9/=3.290

c

V

B;5R+&S*TR85*S&;5XX0Q.+.’ODZ

W+7-RB;BURSX-8UB2M0’9)C0Z

B;/B;IMZ

BW/7WI6Z

根据

&I’91K0I-2I0O.2=9

-0P2O0UQ.0912=9

W16;9.0IK’O0

域赋值;

WI6d-0P2O0UQ.0912=94eWI6Z

;IMd-0P2O0UQ.0912=94e;IMZ

73CD

传输建立一个

W/7

初始化我们的

;IM

*=LMC0.2=9/=3.290

注册为

;IM

的完成处理例程

Z

;IM

传递到

W+7

的驱动程序栈;

^

$73CD59CE+09)*7,*=LMC0.0

模块

此模块是

*7,

请求的完成处理例程。如果

*7,

包发送失

败,那么此模块将向设备发送复位请求,即调用

73CD59CE/010J

./0O=P0IE

模块;否则,将调用

73CD&I’91K0I

模块开始数据阶段的

传输。

$73CD59CEN0.+.’.31

模块

此模块调用

73CD&I’91K0I

模块以获得

*+,

包。

$73CD59CE/010./0O=P0IE

模块

此模块使用

W+7

的控制管道向设备发送

73CD459CE

协议

定义的

/010.

请求以复位

73CD

管道。

设备方的

73CD459CE

协议的实现

设备方的

73CD459CE

协议的实现是固件开发的一部分,由

于固件是和硬件密切相关的软件,因此我们以

B:C2M1

公司的

B-;W+7-%"

芯片为例,来阐述协议的实现。

根据

W+7

协议,在固件实现时,需要定义一些描述符来向主

机注册一些静态信息。在这里只针对描述符中与

73CD459CE

现相关的部分加以说明,关于描述符的详细描述见参考文献

<

%

描述符的定义

$

设备描述符:

此描述符的

6-0P2O0*C’11

6-0P2O0+36*C’11

6-0P2O0BI=.=O=C

域的值均设置为

#

,以通知主机我们将在接口描述符中指定类、

子类及其使用的协议。

$

接口描述符

将此描述符的

6;9.0IK’O0*C’11

域设置为

G#:

6-0P2O0+36*C’11

设置为

j

6;9.0IK’O0BI=.=O=C

设置为

j#:

,以通知主机我们的设备

属于块存储类、子类代码为

j

即采用

G#k#2

作为命令块标准,也

!""#

年第

$

期福建电脑

%

S

可以选用其他规范

、采用

&’()*+,(-

协议进行传输。

DKM

中断;

$

端点描述符

读取

G>/MH&>$!

的中断寄存器的低

;

位至标志寄存器

/,.7N(E=9

/,.7N(E=9T&’()+’.1,3

采用

&’()*+,(-

协议的设备只使用控制端点和

&’()

端点,

5N

S

读取端点的最后事务状态并清除

G>/MH&>$!

的中断标志;

而控制端点不需注册,因此我们只需定义

&’()*+’.

端点和

&’()+’.

端点缓冲区的数据读至环路缓冲区;

&’()*/,

端点的描述符。对于

&’()*+’.

端点,

01,2345,.6227899

清空

&’()+’.

端点缓冲区;

V

域的值设置为

"!:

;对于

&’()*/,

端点,

01,2345,.6227899

域的值

/,.7N(E=9T&’()/,1,3

8(985N

这些域的设置如设置为

;!:

。其余各域的值两端点的设置相同,

S

读取端点的最后事务状态并清除

G>/MH&>$!

的中断标志;

下:

V

0<8,=.:

设置为

%

0>89?753.47@-38

设置为

A

0B6..750’.89

设置

V

!

CDEFGE?)8.H5I8

设置为

#":

0/,.87JE(

设置为

"

$&’()+’.

处理模块

!

模块实现

S

5N

O

&4.H.E.8RR"

P

进入

K&L

处理模块;

固件中

&’()*+,(-

协议的实现分布到整个固件设计的四个

5N

O

&4.H.E.8RRQ

P

进入

KHL

处理模块;

V

层次模块,即:主循环模块、中断服务模块、

&’()+’.

处理模块、

$K&L

处理模块

&’()/,

处理模块、

K&L

处理模块及

KHL

处理模块。

S

读取环路缓冲区

&’NN87

,判断是否是有效的

K&LU

$

主循环模块

K&L

有效

5N

0BK&LW(E=9

的方向位

RR$

固件的执行时,首先初始化硬件芯片

G>/MH&>$!

S

5N

&4.H.E.8R!

8(98&4.H.E.8R$

然后初始化我们定义的一些变量:如标志寄存器

/,.7N(E=9

O

可进

存储

K&L

的重要数据;

行位存取

P

、用于保存

&’()

传输状态的

&4.H.E.8

O

"*

空闲,

$*

DKM

中断;

V

字节长度环路数据缓冲区

&’NN87>E.E+’.

!*>E.E/,

Q*KHL

P

8(98

阻塞

&’()

管道;

及用于存储

K&L

V

R&’()

端点描述符的

CDEFGE?)8.H5I8

域值

缓冲区。最后进入此模块。此模块根据标志寄存器的值将处理

$KHL

处理模块

派发到固件的其它模块。实现描述为:

S

DKM

中断;

C:5(8

O

$

PS

5N

O

/,.7N(E=9T&’()+’.1,3

P

进入

&’()+’.

处理模块

U

8(985N

O

/,.7N(E=9T&’()/,1,3

P

进入

&’()/,

处理模块;

TTTTTT

V

封装

$Q

字节的

KHL

并将其写入

&’()*/,

端点缓冲区;

&’()*/,

端点缓冲区有效;

&4.H.E.8R"

V

$

中断服务模块

&’()

端点有有效数据时,

G>/MH&>$!

将向

DKM

请求中

断服务。实现描述:

结束语

#

市近年来,

MH&

移动存储产品越来越得到广大用户的认可,

场上出现了各种品牌的

MH&

移动硬盘、闪存盘。深刻理解并正确

实现

&’()*+,(-

协议对于开发性能优良的移动存储产品具有重

要的意义。

参考文献

X

$

Y

X

!

Y

X

Q

Y

MH&DE99H.47E=8K(E99&’()*+,(-@7E,9347.Z:..3[CCCT’90T47=Z$]]]

MH&

大容量存储设备的开发

》《

电子设计技术

黄建明,,,

!""!TA

闪存盘固件的设计与实现

孙庚,,中科院研究生院硕士论文,

!""QTA

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

O

上接第

$$

P

第五,加强与国际间的合作,避免闭

门造车,要同全球性的电子商务发展相适

应。电子商务是在信息网络的基础上全球

一体化经济活动,发展我国的电子商务应

当加强国际合作和交流。同时,要推动国

经贸、家重点行业海关、商检、银行、税

务、运输等部门

电子商务应用示范工程,

鼓励企业应用和发展电子商务,培育我国

的电子商务市场环境,增加国际贸易机

会,提高国际竞争能力。

参考文献

X

$

Y

X

!

Y

X

Q

Y

谢天保,张景

T

智能电子商务框架模型的研究

T

计算机工程

T!""Q

#

月第

!]

卷第

A

刘彬

T

试论中国电子商务发展状况沈阳航空工业学院学报

T!""Q

Q

月第

!"

卷第

$

吴昌林

T

浅谈

!$

世纪电子商务的现状和发展

T

江西农业大学学报

O

社会科学版

P

T!""Q

Q

月第

!

卷第

$

发布评论

评论列表 (0)

  1. 暂无评论