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 月第 ! 卷第 $ 期