CN110737483B - 一种基于Windows USB MassStorage类的信令、数据传输方法 - Google Patents
一种基于Windows USB MassStorage类的信令、数据传输方法 Download PDFInfo
- Publication number
- CN110737483B CN110737483B CN201910970692.5A CN201910970692A CN110737483B CN 110737483 B CN110737483 B CN 110737483B CN 201910970692 A CN201910970692 A CN 201910970692A CN 110737483 B CN110737483 B CN 110737483B
- Authority
- CN
- China
- Prior art keywords
- command
- data
- area
- packet
- response
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/4411—Configuring for operating with peripheral devices; Loading of device drivers
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Transfer Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种基于Windows USB MassStorage类的信令数据传输方法,属于数据传输领域,由在PC侧运行的上位机软件部分和与之通过USB口连接且以MassStorage类枚举到PC的下位机构成,在U盘中设置特定的命令交互区A、数据交互区B,上位机发送给下位机的所有命令都使用标准USB写命令数据包发送到A区;USB设备将接收到的包含命令的数据包写入A区指定地址,USB设备定时查询A区数据,如果查询到A区中存在命令,解析命令并执行,完成后将A区中的命令改写为命令响应。本发明确保MassStorage类下位机对各类命令执行的可靠性,适合数据操作要求高传输量大,USB连接不可靠的场合。
Description
技术领域
本发明属于数据传输领域,涉及一种基于Windows USB MassStorage类的信令、数据传输方法。
背景技术
传统USB Mass Storage类的设备俗称U盘,是即插即用装置,使用现有的“标准”设备驱动程序,无需安装任何设备驱动即可用于所有***行。当操作***检查到USB装置(这里是U盘)***时,就会自动询问该装置相关参数以了解其能力和要求,并自动将适合的驱动程序加载到操作***中,用户就可以正常使用该设备。到该设备从USB接口拨出时,操作***就会自动停止该设备的使用以及卸载其驱动程序。USB装置与其内部存储的软件(固件)一起销售,用于控制该装置(即下位机)的运行,其一般采用通用的标准驱动程序,只对PC端(上位机)下发的读取、写入、擦除等相关标准命令作出响应。
USB接口在PC及消费电子等领域普及率高,因此该种传输方式应用范围很广泛。但也存在以下缺点:传统USB Mass Storage类只能够满足简单的数据传输的需求,不能支持其他扩展命令(如,嵌入式调试设备所常用的调试命令)传输等功能;在数据传输过程中如果出现意外中断(如,U盘意外复位、断电等情况)数据传输命令在U盘重新连接后无法继续执行。
加拿大安大略省的劳伦斯·哈米德与马克·卡尔保罗提出了“一种经USB装置传输扩展命令的方法和协议”的专利(申请号:200680006799.9申请日:2006-02-28),该专利提出了一种将命令包与该命令对应执行的数据包等打包成普通USB读写数据的方式传递给诸如U盘等的下位机,而下位机在接受到了数据包后,按约定方式解包,取出其中的命令包及数据信息来执行,对于下位机的执行结果,也是通过上位机写入一个读取命令,下位机便会将上次命令执行的结果即响应的数据包返回给上位机从而实现了整个命令的执行过程。
该专利提出的命令传输方式通过数据包来发送扩展命令的做法实现了通过标准USB设备传输扩展命令的功能,但无论是命令数据的下发以及执行结果的获取,均由上位机主动,下位机做出对应的响应,且上、下位机应答的交互关系在下位机拨出、意外断电的情况下是不能够被正确执行完成的,整个命令执行过程会被中断,不利于命令执行的可靠性。而USB接口设备本身就支持热插拔,存在用户不按照正常操作流程先在操作***中删除USBMass Storage类设备才硬件拨出的可能性,而很多关键命令,如:格式化、删除U盘内用户保密资料、U盘固件升级等操作如果未正确的执行完成就被用户意外断电,轻则会造成用户USB设备损坏,重则会产生保密信息意外丢失的情况。
发明内容
有鉴于此,本发明的目的在于提供一种确保下位机在未执行上位机命令而掉电后,仍旧能够在下次上电继续执行未完成操作的方案。
为达到上述目的,本发明提供如下技术方案:
一种基于Windows USB MassStorage类的信令、数据传输方法,在USB设备中设置命令交互区A和数据交互区B,上位机发送给USB设备的所有命令都使用标准USB写命令数据包发送到A区,而将实际的命令作为数据封装到标准USB写命令数据包中;USB设备将接收到的包含命令的数据包写入A区指定地址,USB设备定时查询A区数据,如果查询到A区中存在命令,解析命令并执行,完成后将A区中的命令改写为命令响应;USB设备上电枚举成功后,上位机读取A区中的数据,如果是响应包,发送新命令,如果不是响应包,等待USB设备执行A区中的命令。
进一步,USB设备的A区和B区的设置包括基本型和扩展模式,其中基本型的A区由USB设备0地址偏移长度X设置,B区由USB设备0地址偏移长度Y设置,扩展模式的A区和B区合并,均由USB设备0地址偏移长度X设置。
进一步,上位机给USB设备的命令写入A区的命令包格式依次为命令头有效标记—保留区间1—命令执行码—保留区间2—命令执行起始地址—保留区间3—命令执行长度—保留区间4—命令尾有效标记;
当命令执行完成后下位机写入A区的响应包格式依次为响应头有效标记—保留区间1—命令执行响应码—保留区间2—响应起始地址—保留区间3—响应长度—保留区间4—响应尾有效标记;
各个“保留区间”作为数据保护及今后功能扩展使用,数据区格式依次为数据区有效标记1—数据—数据区有效标记2;
还包括根据上述方式扩展而来的衍生型:
多个命令包组合写入方式:命令头有效标记-保留区1-命令执行码1-命令执行起始地址1—命令执行长度1—保留区2—命令执行码2-命令执行起始地址2—命令执行长度2—……—命令执行码n-命令执行起始地址n—命令执行长度n—保留区n—命令尾有效标记;
多个响应包组合写入方式:响应头有效标记-保留区1-命令执行响应码1-响应起始地址1—响应长度1—保留区2—命令执行响应码2-响应起始地址2—响应长度2—……—命令执行响应码n—响应起始地址n—响应长度n—保留区n—响应尾有效标记;
对应多个命令/响应包的数据区格式:数据区有效标记1—命令执行码1数据部分—命令执行码2数据部分—……—命令执行码n数据部分—数据区有效标记2。
进一步,在上位机中设置上位机功能支持模块以实现以下功能:
(1)界面显示、用户操作响应单元:对用户执行的各种操作进行响应,及对命令执行进度、结果进行显示,同时也为各种设置选项提供输入接口;
(2)用户操作命令或命令集转换单元:对用户下发的各种操作,当单个命令无法完成整个功能时,转换为USB设备支持的对应命令或命令集,同时对用户的操作对象(一般是各种数据)进行拆包、分段预处理操作;
(3)命令包、数据包打包组装单元:以规定方式将命令执行码、命令执行起始地址、命令执行长度及数据文件分别打包成有效的命令包、数据包;
(4)响应包及响应数据解析处理单元:将获取到的响应信息按规定方式拆包、解析,判断命令执行的响应结果,提取响应数据,并在需要的情况下对响应数据重新组包、恢复成超大数据包传回给上位机;
(5)命令数据缓存及执行结果记录单元:记录当前USB设备的USB ID号及其在命令执行时缓存本条命令的命令包、数据包信息,且随时记录该命令的执行情况,以便当本条命令执行失败时,上位机能够重新下发该命令或完成上次操作未完成的响应数据获取工作;
(6)A/B区数据读写单元:完成对指定偏移地址的A/B区数据的读写功能;
(7)命令执行流程维护单元:对以上单元的功能执行情况进行判断维护,判断当前命令是否执行失败,是否重新执行当前命令,是否需要提示用户干预操作以及通过USB ID判断当前USB设备是否有上次未完成的操作。
进一步,在USB设备中设置下位机功能支持模块以实现以下功能:
(1)A/B区数据读写单元:完成对指定偏移地址的A/B区数据的读(获取命令包)写(写入响应包)功能,特别是以固定时间间隔轮询A区数据,以便随时获取上位机下发的命令;
(2)命令包、数据包解析及有效性判断单元:以规定方式将命令包、数据包进行解析,并判断其有效性及是否支持该命令;
(3)命令执行单元:将命令包里的命令执行码转换为对应的下位机一系列操作过程,并使用数据包里的数据来具体执行该操作;
(4)响应包及响应数据组装单元:将由命令执行单元执行后的结果以执行响应码及响应数据的方式分别打包成命令执行响应包及响应数据包以便向A/B区写入。
进一步,上位机在下发新命令之前,会先通过USB ID号判断当前USB设备是否有上次未执行完的操作,
A.如果没有,则进行以下操作:
(1)分别根据用户的操作情况生成命令执行码及对应数据,再按照规定组装成命令包、数据包并经过上位机缓存记录后分别写入对应的A/B区,即完成本条命令的下发过程;
(2)在命令下发后,上位机不停地查询A区数据以判断是否有下位机执行完成的响应包写回,在规定时间内获取响应包及响应数据后,上位机进行解包及命令执行结果判断工作,完成本条命令交互流程,上位机进入下一条命令的下发交互流程;
(3)如果以上任一流程执行失败或下位机写回响应包超时,该条命令将会标记为执行失败,根据设置情况重新下发命令、暂停命令执行流程或要求用户干预;
B.如果当前USB设备的上次命令未执行完,上位机读取下位机A区的数据,并判断其是否为上次命令的正常响应包,如果是,就将该响应包及响应数据获取回来,以便完成上次遗留的命令交互过程,然后再进行新命令的下发操作;如果该USB设备的A区不是响应包而是命令包,说明上次命令的响应包还未被下位机写入,在判断A/B区数据与缓存数据一致的情况下,上位机在等待下位机将该命令执行完并写入响应包、响应数据包后,再获取响应数据,以便完成上次未完成的命令,然后再发新命令,如果上位机发现A/B区数据与缓存数据不一致,将重写A/B区以便上次的命令能够正确执行,再进行上述操作;
USB设备以一定时间间隔轮询A、B区的信息,以便及时判断上位机是否有新命令下发,在获取到上位机写入的命令包后,在确认命令包及数据包有效的情况下就会加载数据执行该命令执行码对应操作,并把执行结果,即响应包及响应数据写入指定地址中,从而完整一个命令码的执行过程;
如果USB设备检查到A/B区数据为不合法的命令/数据包,包括为上次命令执行后写入的正常响应包、或被破坏的命令/数据包,则不执行任何操作,等待一定时间再查询A/B区数据,以便让上位机读取响应数据或在上位机重新下发正确的命令、数据包后再继续命令执行过程。
本发明的有益效果在于:可以确保MassStorage类下位机对各类命令执行的可靠性,即使在掉电或受异常干扰中断命令执行后也能够在下次上电继续执行未完成命令,特别适合数据操作要求高传输量大,USB连接不可靠的场合。
本发明的其他优点、目标和特征在某种程度上将在随后的说明书中进行阐述,并且在某种程度上,基于对下文的考察研究对本领域技术人员而言将是显而易见的,或者可以从本发明的实践中得到教导。本发明的目标和其他优点可以通过下面的说明书来实现和获得。
附图说明
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作优选的详细描述,其中:
图1为本发明所述基本型的命令交互区(A区)与数据交互区(B区)示意图;
图2为本发明所述扩展模式的命令交互区(A区)与数据交互区(B区)示意图;
图3为本发明所述命令交互区(A区)的命令包格式图(基本型);
图4为本发明所述命令交互区(A区)的响应包格式图(基本型);
图5为本发明所述数据区格式图(基本型);
图6为本发明所述命令交互区(A区)的命令包格式图(扩展型);
图7为本发明所述命令交互区(A区)的响应包格式图(扩展型);
图8为本发明所述数据区格式图(扩展型);
图9为本发明所述添加本方案功能支持模块的上、下位机结构框图;
图10为本发明所述上、下位机功能支持模块的内部子模块框图;
图11为本发明所述上位机下发命令执行流程图;
图12为本发明所述下位机接收命令并执行的流程图。
具体实施方式
以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
其中,附图仅用于示例性说明,表示的仅是示意图,而非实物图,不能理解为对本发明的限制;为了更好地说明本发明的实施例,附图某些部件会有省略、放大或缩小,并不代表实际产品的尺寸;对本领域技术人员来说,附图中某些公知结构及其说明可能省略是可以理解的。
本发明实施例的附图中相同或相似的标号对应相同或相似的部件;在本发明的描述中,需要理解的是,若有术语“上”、“下”、“左”、“右”、“前”、“后”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此附图中描述位置关系的用语仅用于示例性说明,不能理解为对本发明的限制,对于本领域的普通技术人员而言,可以根据具体情况理解上述术语的具体含义。
本发明的目的在于提供一种确保下位机在未执行上位机命令而掉电后,仍旧能够在下次上电继续执行未完成操作的方案。
为实现本发明所述目的而提供如下设计方案,本方案的主要思想是先存储命令(含命令所需数据),然后再执行的命令方式,具体实施方案由在PC侧运行的上位机软件部分和与之通过USB口连接且以Mass Storage类枚举到PC的下位机构成,在U盘中设置特定的命令、数据交互区(A区和B区)如图1(基本型)及图2(扩展模式),上位机发送给下位机的所有命令(包括标准的USB读写命令以及扩展命令)都使用标准USB写命令数据包发送(实际的命令作为数据封装到USB标准数据包中)到A区;USB设备将接收到的包含命令的数据包写入A区指定地址,USB设备定时查询A区数据,如果查询到A区中存在命令,解析命令并执行,完成后将A区中的命令改写为命令响应。
USB设备上电枚举成功后,上位机读取A区中的数据,如果是响应包,发送新命令,如果不是响应包,等待USB设备执行A区中的命令。上位机给下位机的命令写入命令交互区(A区)的格式(命令包格式)如图3(基本型),而当命令执行完成后下位机写入命令交互区(A区)的格式(响应包格式)如图4(基本型)(各个“保留区间”作为数据保护及今后功能扩展使用),数据区格式如图5。或根据该方式扩展而来的衍生型:多个命令/响应包组合写入、响应方式(如图6、7)及对应多个命令/响应包的数据区格式如图8。
下面以该方式的基本型来说明,由于普通的Mass Storage类设备只能对上位机(PC)的读取、写入、擦除等操作命令进行对应命令响应,无法满足对U盘约定偏移地址的命令交互区(A区如图示包括:命令执行响应码、响应起始地址等参数)及数据交互区(B区)数据的读/写操作要求,因此下位机需要额外本方案的功能支持模块(软件或硬件方式)来实现上述功能;同样上位机需要运行一个额外的软件或软/硬件模块来支持该功能。如图9所示为添加了上、下位机功能支持模块的上下位机结构框图。
新增模块的内部各功能单元结构框图如图10所示,现分别介绍如下:
上位机功能支持模块:(1)界面显示、用户操作响应单元:对用户执行的各种操作进行响应,及对命令执行进度、结果进行显示,同时也为各种设置选项提供输入接口;(2)用户操作命令或命令集转换单元:对用户下发的各种操作,转换为下位机支持的对应命令或命令集(当单个命令无法完成整个功能时),同时对用户的操作对象(一般是各种数据)进行拆包、分段等预处理操作;(3)命令包、数据包打包组装单元:以规定方式将命令执行码、命令执行起始地址、命令执行长度及数据文件分别打包成有效的命令包、数据包;(4)响应包及响应数据解析处理单元:将获取到的响应信息按规定方式拆包、解析,判断命令执行的响应结果,提取响应数据,并在需要的情况下对响应数据重新组包、恢复成超大数据包传回给上位机;(5)命令数据缓存及执行结果记录单元:记录当前USB设备的USB ID号及其在命令执行时缓存本条命令的命令包、数据包信息,且随时记录该命令的执行情况,以便当本条命令执行失败时,上位机能够重新下发该命令或完成上次操作未完成的响应数据获取工作;(6)A/B区数据读写单元:完成对指定偏移地址的A/B区数据的读写功能;(7)命令执行流程维护单元:对以上单元的功能执行情况进行判断维护,判断当前命令是否执行失败,是否重新执行当前命令,是否需要提示用户干预操作以及通过USB ID判断当前USB设备是否有上次未完成的操作等。
下位机功能支持模块:(1)A/B区数据读写单元:完成对指定偏移地址的A/B区数据的读(获取命令包)写(写入响应包)功能,特别是以固定时间间隔轮询A区数据,以便随时获取上位机下发的命令;(2)命令包、数据包解析及有效性判断单元:以规定方式将命令包、数据包进行解析,并判断其有效性及是否支持该命令等;(3)命令执行单元:将命令包里的命令执行码转换为对应的下位机一系列操作过程,并使用数据包里的数据来具体执行该操作;(4)响应包及响应数据组装单元:将由命令执行单元执行后的结果以执行响应码及响应数据的方式分别打包成命令执行响应包及响应数据包以便向A/B区写入。
上位机软件/模块对于本方案的基本型的命令的执行过程如流程图11所示,下面详细阐述整个执行过程:
A、上位机在下发新命令之前,会先通过USB ID号判断当USB设备是否有上次未执行完的操作(如下位机意外掉电),如果没有,则按照正常流程
(1)分别根据用户的操作情况生成命令执行码及对应数据,再按照规定组装成命令包、数据包并经过上位机缓存记录后分别写入对应的A/B区,即完成本条命令的下发过程;
(2)在命令下发后,上位机就不停的查询A区数据以判断是否有下位机执行完成的响应包写回,在规定时间内获取响应包及响应数据后,上位机就进行解包及命令执行结果判断等工作,至此本条命令交互流程就完成了,上位机可以进入下一条命令的下发交互流程。
(3)如果以上任一流程执行失败或下位机写回响应包超时,该条命令将会标记为执行失败,可以根据设置情况重新下发命令、暂停命令执行流程或要求用户干预。
B、如果当前USB设备的上次命令未执完成,上位机会读取下位机A区的数据,并判断其是否为上次命令的正常响应包,如果是,就将该响应包及响应数据获取回来,以便完成上次遗留的命令交互过程,然后再进行新命令的下发操作;如果该USB设备的A区不是响应包而是命令包,说明上次命令的响应包还未被下位机写入,在判断A/B区数据与缓存数据一致的情况下,上位机在等待下位机将该命令执行完并写入响应包、响应数据包后,再获取响应数据,以便完成上次未完成的命令,然后再发新命令,如果上位机发现A/B区数据与缓存数据不一致,将重写A/B区以便上次的命令能够正确执行,再进行上述操作。
下位机模块对于本方案的基本型的命令的执行过程如流程图12所示,整个执行过程描述如下:
下位机均为以一定时间间隔轮询A、B区的信息,以便及时判断上位机是否有新命令下发,在获取到上位机写入的命令包后,在确认命令包及数据包有效的情况下就会加载数据执行该命令执行码对应操作,并把执行结果(响应包及响应数据)写入指定地址中,从而完整一个命令码的执行过程。
如果下位机检查到A/B区数据不为合法的命令/数据包(可能为上次命令执行后写入的正常响应包、或被破坏的命令/数据包)就不会执行任何操作,会等待一定时间再查询A/B区数据,以便让上位机读取响应数据或在上位机重新下发正确的命令、数据包后才继续命令执行过程。
按上述方式,即使在下位机因为异常掉电、干扰等复位情况时,下位机在上电完成在PC的枚举识别后,同样首先会检查A区是否存在有效的命令包,如果存在,则说明上次断电前该命令未执行完成,下位机就会重新执行该命令,并会用执行完成后的响应包及数据覆盖写入到对应的A、B区,以标志该命令执行完成。因此,本套机制对于异常掉电后的上电状态仍旧适用。
下面举例说明上述流程:
删除用户数据:当前U盘容量越来越大,删除数据的操作耗时也随之增加,当下位机收到该删除命令并正在执行时,如果遭受到意外拨出、断电,删除操作就被终止了,用户的资料仍旧未完全删除,有泄密的可能;但如果将该U盘再次上电后,带有本方案功能模块的U盘控制器会先去检查A区的命令包是否有效,如果有效,就会对命令包进行解析并重新执行相应的删除命令,待该命令正确执行完成后,才会改写A区的信息为响应包格式(本操作不需返回响应数据),而对于正常执行完成的命令,由于A区被改写为响应包,下次上电后检测到A区不为命令包,故不会重复执行上次已经成功完成删除操作。
大文件的数据写入操作:当用户对一个8G的U盘进行6G大小文件的写入操作时,如果是直接通过Windows的资源管理器进行,用户在已经拷贝完成前面5G时不小心拨出了U盘,该文件就未被正确的写入U盘中(甚至丢失该文件),下次用户为了正确的将该文件写入U盘,就需要重新拷贝该6G大小文件,费时费力。而采用本方案则可以较方便的解决该问题,充分利用命令包的记录情况避免重复拷贝操作的情况,具体执行过程如下:
当通过上位机软件向U盘写入大文件时,上位机软件会根据下位机B区大小情况将这个一次性的大文件写入操作拆分为多个不大于B区大小的FLASH数据写入命令操作。
在正常流程时:先将第一块待写入数据写入B区,再把FLASH写入操作对应的命令执行码、本次写入的起始地址、长度组装成命令包写入到A区。下位机在轮询中检查到A区命令包写入后,就会在解析该命令包后把B区的数据以指定长度写入到指定起始地址中。最后将写入命令的执行结果以响应包形式(该操作无响应数据)写回A区,从而完成本次数据命令。上位机检测到当前数据块写入成功后,就将待写入的下一个数据块写入B区,以及将对应该数据块的写入地址、长度等信息再次打包为命令包写入A区,继续下一个数据块写入。以上操作一直持续执行到整个命令集均成功执行完成,也即该大文件全都被成功写入到下位机了。
当异常流程时,如当U盘意外拨出时,当前块的写入命令执行失败,上位机就会根据该USB设备的ID号缓存该命令、数据并给出警告信息(或提示用户干预),如果再次检查到该USB ID的设备***且判断有未执行完成的该拷贝操作,根据用户的设置情况(方便用户取消操作)如果用户设置为自动执行未完成的上次操作,上位机软件就会继续进行剩余数据的传输而不必重新进行该6G文件的传输。具体执行过程分为如下几种情况:
A、判断A、B区为正常命令、数据包,说明掉电写入的命令是有效的,就可以等待一段时间再读取A区数据检查响应信息的写入,以便下位机在上电后,先执行完成上次未完成数据块写入命令,待该命令执行完成后,再进行新数据卡的写入命令及数据下发操作,以便继续整个剩余数据的写入操作流程;
B、判断A、B区为正常的响应包、响应数据包,且响应包所携带的响应地址、响应长度信息与上一条数据写入命令向对应,说明掉电前刚好执行完成上一条命令,直接继续整个操作剩余流程即可;
C、判断A、B区为其他情况,说明掉电时破坏了命令、响应包或其读写过程,上位机就根据该USB设备的ID号所对应缓存的上次命令、数据信息重新写入下位机的A、B区,以便下位机重新执行被破坏的掉电数据块的写入命令,待该命令完成后,继续整个操作剩余流程即可。
大文件的数据读取操作:对应大文件的读取过程,和上述写入过程类似这里不再赘述,只不过上位机软件多了个根据下位机发回的数据块地址、长度信息对各个数据块重新拼接、组装以便恢复该大文件的过程;此外,当下位机异常掉电再重新上电后,存在A、B区为正常的响应数据且响应地址、长度信息与上一条命令匹配但上位机并未在掉电前成功读取完成响应数据的情况,此时需上位机通过USB ID号与命令执行失败的记录信息来进行判断,并重新读取上次命令执行响应信息,才能继续剩余流程。
由于每次操作都是数据包/响应数据包写入在命令包/响应包之前,因此保证了下位机在获取到新的命令包时数据包是配套且可靠的,同样也保证了,上位机在读取到新的命令执行响应包时,获取到的对应响应数据是与响应包配套且可靠的。
而对于本方案扩展型的命令执行过程与基本型基本原理一致,只不过上位机可以一次性下发多个命令及对应数据,而下位机则可以依次(或按照某种规律)执行对应命令并写回对应命令的命令执行响应包及响应数据包执行结果(根据实际使用需求可以每执行完成一步就写回该步的执行结果,或整个命令集执行完成后再统一把每步的响应写入对应位置),确保了需要多次命令操作才能够执行完成某一功能的命令集合在掉电、异常重启等情况下的执行有效性。
对于标准命令,将其含有命令、数据、校验等信息的整个标准命令包作为数据包发送到B区,然后发送一条扩展命令到A区,标示该B区的数据为标准命令包,USB设备解析到该扩展命令后,即可从B区完整的取出该标准命令包,再按原有的标准命令执行功能执行该命令。
最后说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本技术方案的宗旨和范围,其均应涵盖在本发明的权利要求范围当中。
Claims (3)
1.一种基于WindowsUSBMassStorage类的信令、数据传输方法,其特征在于:在USB设备中设置命令交互区A和数据交互区B,上位机发送给USB设备的所有命令都使用标准USB写命令数据包发送到A区,而将实际的命令作为数据封装到标准USB写命令数据包中;USB设备将接收到的包含命令的数据包写入A区指定地址,USB设备定时查询A区数据,如果查询到A区中存在命令,解析命令并执行,完成后将A区中的命令改写为命令响应;USB设备上电枚举成功后,上位机读取A区中的数据,如果是响应包,发送新命令,如果不是响应包,等待USB设备执行A区中的命令;
在上位机中设置上位机功能支持模块以实现以下功能:
(1)界面显示、用户操作响应单元:对用户执行的各种操作进行响应,及对命令执行进度、结果进行显示,同时也为各种设置选项提供输入接口;
(2)用户操作命令或命令集转换单元:对用户下发的各种操作,当单个命令无法完成整个功能时,转换为USB设备支持的对应命令或命令集,同时对用户的操作对象进行拆包、分段预处理操作;
(3)命令包、数据包打包组装单元:以规定方式将命令执行码、命令执行起始地址、命令执行长度及数据文件分别打包成有效的命令包、数据包;
(4)响应包及响应数据解析处理单元:将获取到的响应信息按规定方式拆包、解析,判断命令执行的响应结果,提取响应数据,并在需要的情况下对响应数据重新组包、恢复成超大数据包传回给上位机;
(5)命令数据缓存及执行结果记录单元:记录当前USB设备的USBID号及其在命令执行时缓存本条命令的命令包、数据包信息,且随时记录该命令的执行情况,以便当本条命令执行失败时,上位机能够重新下发该命令或完成上次操作未完成的响应数据获取工作;
(6)A/B区数据读写单元:完成对指定偏移地址的A/B区数据的读写功能;
(7)命令执行流程维护单元:对以上单元的功能执行情况进行判断维护,判断当前命令是否执行失败,是否重新执行当前命令,是否需要提示用户干预操作以及通过USBID判断当前USB设备是否有上次未完成的操作;
在USB设备中设置下位机功能支持模块以实现以下功能:
(1)A/B区数据读写单元:完成对指定偏移地址的A/B区数据的读写功能,以固定时间间隔轮询A区数据,以便随时获取上位机下发的命令;
(2)命令包、数据包解析及有效性判断单元:以规定方式将命令包、数据包进行解析,并判断其有效性及是否支持该命令;
(3)命令执行单元:将命令包里的命令执行码转换为对应的下位机一系列操作过程,并使用数据包里的数据来具体执行该操作;
(4)响应包及响应数据组装单元:将由命令执行单元执行后的结果以执行响应码及响应数据的方式分别打包成命令执行响应包及响应数据包以便向A/B区写入;
上位机在下发新命令之前,会先通过USBID号判断当前USB设备是否有上次未执行完的操作,
A.如果没有,则进行以下操作:
(1)分别根据用户的操作情况生成命令执行码及对应数据,再按照规定组装成命令包、数据包并经过上位机缓存记录后分别写入对应的A/B区,即完成本条命令的下发过程;
(2)在命令下发后,上位机不停地查询A区数据以判断是否有下位机执行完成的响应包写回,在规定时间内获取响应包及响应数据后,上位机进行解包及命令执行结果判断工作,完成本条命令交互流程,上位机进入下一条命令的下发交互流程;
(3)如果以上任一流程执行失败或下位机写回响应包超时,该条命令将会标记为执行失败,根据设置情况重新下发命令、暂停命令执行流程或要求用户干预;
B.如果当前USB设备的上次命令未执行完,上位机读取下位机A区的数据,并判断其是否为上次命令的正常响应包,如果是,就将该响应包及响应数据获取回来,以便完成上次遗留的命令交互过程,然后再进行新命令的下发操作;如果该USB设备的A区不是响应包而是命令包,说明上次命令的响应包还未被下位机写入,在判断A/B区数据与缓存数据一致的情况下,上位机在等待下位机将该命令执行完并写入响应包、响应数据包后,再获取响应数据,以便完成上次未完成的命令,然后再发新命令,如果上位机发现A/B区数据与缓存数据不一致,将重写A/B区以便上次的命令能够正确执行,再进行上述操作;
USB设备以一定时间间隔轮询A、B区的信息,以便及时判断上位机是否有新命令下发,在获取到上位机写入的命令包后,在确认命令包及数据包有效的情况下就会加载数据执行该命令执行码对应操作,并把执行结果,即响应包及响应数据写入指定地址中,从而完整一个命令码的执行过程;
如果USB设备检查到A/B区数据为不合法的命令/数据包,包括为上次命令执行后写入的正常响应包、或被破坏的命令/数据包,则不执行任何操作,等待一定时间再查询A/B区数据,以便让上位机读取响应数据或在上位机重新下发正确的命令、数据包后再继续命令执行过程。
2.根据权利要求1所述的基于WindowsUSBMassStorage类的信令、数据传输方法,其特征在于:USB设备的A区和B区的设置包括基本型和扩展模式,其中基本型的A区由USB设备0地址偏移长度X设置,B区由USB设备0地址偏移长度Y设置,扩展模式的A区和B区合并,均由USB设备0地址偏移长度X设置。
3.根据权利要求1所述的基于WindowsUSBMassStorage类的信令、数据传输方法,其特征在于:上位机给USB设备的命令写入A区的命令包格式依次为命令头有效标记—保留区间1—命令执行码—保留区间2—命令执行起始地址—保留区间3—命令执行长度—保留区间4—命令尾有效标记;
当命令执行完成后下位机写入A区的响应包格式依次为响应头有效标记—保留区间1—命令执行响应码—保留区间2—响应起始地址—保留区间3—响应长度—保留区间4—响应尾有效标记;
各个“保留区间”作为数据保护及今后功能扩展使用,数据区格式依次为数据区有效标记1—数据—数据区有效标记2;
还包括根据上述方式扩展而来的衍生型:
多个命令包组合写入方式:命令头有效标记-保留区1-命令执行码1-命令执行起始地址1—命令执行长度1—保留区2—命令执行码2-命令执行起始地址2—命令执行长度2—……—命令执行码n-命令执行起始地址n—命令执行长度n—保留区n—命令尾有效标记;
多个响应包组合写入方式:响应头有效标记-保留区1-命令执行响应码1-响应起始地址1—响应长度1—保留区2—命令执行响应码2-响应起始地址2—响应长度2—……—命令执行响应码n—响应起始地址n—响应长度n—保留区n—响应尾有效标记;
对应多个命令/响应包的数据区格式:数据区有效标记1—命令执行码1数据部分—命令执行码2数据部分—……—命令执行码n数据部分—数据区有效标记2。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910970692.5A CN110737483B (zh) | 2019-10-12 | 2019-10-12 | 一种基于Windows USB MassStorage类的信令、数据传输方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910970692.5A CN110737483B (zh) | 2019-10-12 | 2019-10-12 | 一种基于Windows USB MassStorage类的信令、数据传输方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110737483A CN110737483A (zh) | 2020-01-31 |
CN110737483B true CN110737483B (zh) | 2023-02-24 |
Family
ID=69268823
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910970692.5A Active CN110737483B (zh) | 2019-10-12 | 2019-10-12 | 一种基于Windows USB MassStorage类的信令、数据传输方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110737483B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114003176B (zh) * | 2021-11-03 | 2024-07-02 | 杭州海康存储科技有限公司 | 数据写入方法、装置及硬盘设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1869855A (zh) * | 2005-05-23 | 2006-11-29 | 深圳市江波龙电子有限公司 | 一种usb海量存储设备上应用程序与usb海量存储设备进行命令交互和双向数据传输的方法 |
CN101789019A (zh) * | 2010-02-11 | 2010-07-28 | 株洲南车时代电气股份有限公司 | 一种可移动磁盘在Windows下的控制方法 |
CN103034561A (zh) * | 2011-09-29 | 2013-04-10 | 重庆重邮信科通信技术有限公司 | 通用串行总线的命令传输方法及相关装置 |
CN103731510A (zh) * | 2014-01-24 | 2014-04-16 | 重庆邮电大学 | 一种基于IPv6的无线传感器网络应用层数据交互方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6978339B2 (en) * | 2002-02-22 | 2005-12-20 | Canon Kabushiki Kaisha | Communication system and method of controlling same |
JP5107833B2 (ja) * | 2008-08-29 | 2012-12-26 | 株式会社日立製作所 | ストレージシステム及びストレージシステムの制御方法 |
US20140095822A1 (en) * | 2012-10-01 | 2014-04-03 | Trend Micro Incorporated | Secure removable mass storage devices |
-
2019
- 2019-10-12 CN CN201910970692.5A patent/CN110737483B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1869855A (zh) * | 2005-05-23 | 2006-11-29 | 深圳市江波龙电子有限公司 | 一种usb海量存储设备上应用程序与usb海量存储设备进行命令交互和双向数据传输的方法 |
CN101789019A (zh) * | 2010-02-11 | 2010-07-28 | 株洲南车时代电气股份有限公司 | 一种可移动磁盘在Windows下的控制方法 |
CN103034561A (zh) * | 2011-09-29 | 2013-04-10 | 重庆重邮信科通信技术有限公司 | 通用串行总线的命令传输方法及相关装置 |
CN103731510A (zh) * | 2014-01-24 | 2014-04-16 | 重庆邮电大学 | 一种基于IPv6的无线传感器网络应用层数据交互方法 |
Non-Patent Citations (6)
Title |
---|
A Secure Data Transfer Algorithm for USB Mass Storage Devices to Protect Documents;MAN Magdum,YM Patil;《International Journal of Emerging Engineering Research and Technology》;20170701;第4卷(第2期);第78-84页 * |
Comparision of Data Transfer Protocols over USB;Megha Dey;《International Journal of Engineering Research & Technology》;20121129;第9卷(第1期);第1-6页 * |
USB Host在嵌入式***中的应用研究;孙飞;《中国优秀硕士学位论文全文数据库 (信息科技辑)》;20050815(第8期);I137-20 * |
USB Mass Storage类的设备端固件开发;卞廷波等;《实验科学与技术》;20051230(第04期);第49-52页 * |
USB Mass Storage类设备的设计与实现;韩杰等;《可编程控制器与工厂自动化》;20090315(第03期);第100-103页 * |
USB1.1 Mass Storage类设备的研究与实现;迟玉强等;《电子器件》;20071215(第06期);第2088-2090页 * |
Also Published As
Publication number | Publication date |
---|---|
CN110737483A (zh) | 2020-01-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104881314A (zh) | 一种安装驱动程序的方法及驱动程序安装装置 | |
JP2006286001A (ja) | オペレーティングシステムの回復を目的としたusbメモリデバイスの利用 | |
CN102289418A (zh) | 嵌入式设备烧写***及方法 | |
CN109284117A (zh) | 基于闪存微控制器的固件升级方法和***及闪存微控制器 | |
CN105760191A (zh) | 嵌入式***设备程序烧写量产方法 | |
CN112947978A (zh) | 基于芯片usbhid升级固件的方法、终端设备及计算机可读存储介质 | |
US20100049961A1 (en) | Update method for basic input/output system and update system thereof | |
CN103150188A (zh) | 非x86指令集计算机的x86兼容显卡快速初始化方法 | |
CN107315607B (zh) | 一种驱动自适应加载*** | |
US8176309B2 (en) | Boot system has BIOS that reads rescue operating system from memory device via input/output chip based on detecting a temperature of a hard disk | |
CN103034561B (zh) | 通用串行总线的命令传输方法及相关装置 | |
CN110737483B (zh) | 一种基于Windows USB MassStorage类的信令、数据传输方法 | |
CN117687664A (zh) | 一种dsp的在线升级配置方法及装置 | |
CN103455288B (zh) | 信息处理装置及控制方法 | |
US20070294430A1 (en) | Generating a device address persistent across different instantiations of an electronic device | |
CN113900693A (zh) | 一种固件升级方法、装置、***、电子设备及存储介质 | |
CN110888656B (zh) | 一种多功能烧写器及烧写方法 | |
JP3028055B2 (ja) | Pcカードシステム及びプログラム書き換え方法 | |
CN102929647B (zh) | 数字硬盘录像机中主板与前面板一体化升级的方法及装置 | |
EP2562649B1 (en) | Method for repairing communication abnormality between data card and host | |
CN113590143B (zh) | 基于usb的mcu程序下载方法、电子设备及存储介质 | |
CN106970781A (zh) | 一种操作***识别方法及装置 | |
US7818627B2 (en) | Systems and methods for gathering debug information | |
CN102637133B (zh) | (l、s)波段卫星移动通信***终端机自动升级方法 | |
TWI480799B (zh) | 嵌入式系統之韌體更新方法及設備 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |