自动执行ata/atapi指令的方法

文档序号:6650056阅读:452来源:国知局
专利名称:自动执行ata/atapi指令的方法
技术领域
本发明提供一种方法,尤指一种自动执行指令来控制一主机与一外围装置之间的资料交换的方法。
背景技术
在这信息导向的社会,电子信息存取装置在商业上或是在家用应用上正逐渐地扮演很重要的地位,举例来说,个人计算机、光学储存装置以及其它外围装置已经广为人们所接受,并且也已成为重要的科技产品。为了结合上述这些科技产品的功能以及优点,必须要采用总线来连接前述的科技产品,举例来说,经常采用的总线有IDE总线(也称为ATA总线、PATA总线)或是SATA总线。
请参阅图1,图1为公知电子系统10的示意图。电子系统10包含有一主机(host)11以及一ATA/ATAPI装置18。主机11包含有一中央处理器(CPU)12,一存储器14电连接至该中央处理器12,以及一ATA/ATAPI主机控制器16电连接至中央处理器12以及存储器14。ATA/ATAPI装置18藉由一总线(譬如一ATA/ATAPI总线)而电连接至ATA/ATAPI主机控制器16。在此,考虑从主机11传递资料至ATA/ATAPI装置18的动作,举例来说,中央处理器12输出ATA/ATAPI装置18所需的资料至存储器14,接着,中央处理器12会控制ATA/ATAPI主机控制器16来取得存储器内的资料,并且进一步将资料传递至ATA/ATAPI装置18;另一方面,关于从ATA/ATAPI装置18传递资料至主机11的动作,首先,中央处理器12控制ATA/ATAPI主机控制器16从ATA/ATAPI装置18取得欲传输的资料,并且将所取得的资料存入存储器14中。如业界所公知,ATA/ATAPI主机控制器16为一经由中央处理器12驱动的被动零件,此外,主机控制器16是根据ATA/ATAPI协议来与ATA/ATAPI装置18进行沟通。
一般来说,ATA/ATAPI协议是经由中央处理器12所执行,其程序如下所述。首先,中央处理器12藉由ATA/ATAPI主机控制器16送出一指令至ATA/ATAPI装置18,并等待从ATA/ATAPI装置18送出的中断请求(interrupt);检测ATA/ATAPI装置18的状态;激活该指令所须的数据传输;检测该指令的执行结果;以及接着继续执行下一个指令。所以,上述的操作需要中央处理器12多次的介入来完成数据传输的目的。
举例来说,如果主机11发出一指令至ATA/ATAPI装置18,主机11必须先检测ATA/ATAPI装置18的状态,接着藉由写入一I/O缓存器来发出一指令至ATA/ATAPI装置18。这些步骤都需要好几次的I/O周期(I/Ocycle)才能完成,而这些I/O周期都会消耗时间,而I/O周期的操作时间皆受限于ATA/ATAPI的规格。在发出一指令后,主机11需要等待ATA/ATAPI装置1 8准备好传输或接收资料,而当ATA/ATAPI装置18准备好以后,ATA/ATAPI装置18会送出一中断请求INTRQ来通知主机11可以开始传输资料。对于主机11而言,中断请求INTRQ为一输入的中断信号,因此,主机11便需要处理该事件、检测状态以及接着开始数据传输,而这些步骤会一直地重复,直到所有的资料都传输完毕为止。当一外围装置的响应时间较长时,中央处理器便会耗费相当多的时间来等待该外围装置的响应以及检测该外围装置的状态。
在所有的资料都传输完毕以后,ATA/ATAPI装置18必须把该指令已经处理完毕的信息告知主机11,此外,主机11也必须再一次地检测状态。以主机11所执行的多任务系统(multi-task system)为例,主机11必须要切换正在处理中的多个工作以处理多个事件,并且等候许多I/O周期来检测状态以处理可能发生的错误;因此,无论中央处理器12的运算速度有多快,被执行的ATA/ATAPI指令若越多,则中央处理器12就需要消耗越多的处理时间。
请参阅图2,图2为公知DMA数据传输的流程图。如图2所示,DMA数据传输包含有下列步骤步骤100开始;步骤102主机11读取一状态缓存器(status register)或是一备用状态缓存器(alternative status register),直到BSY=0以及DRQ=0;步骤104主机11将一适当的DEV位写入一Device/Head缓存器;步骤106主机11读取该状态缓存器(status register)或是该备用状态缓存器直到BSY=0以及DRQ=0;步骤108主机11写入需要的参数至一Features缓存器、一Sector Count缓存器、一CHS缓存器以及该Device/Head缓存器;步骤110主机11初始化一DMA信道(DMA channel);步骤112主机11将一ATA/ATAPI指令码写入一指令缓存器(commandregister);步骤114ATA/ATAPI装置18设定BSY=1以及准备开始执行该指令码;步骤116ATA/ATAPI装置18检测是否有错误发生?如果有一个错误发生,则执行步骤118;若则,执行步骤122;步骤118ATA/ATAPI装置18设定状态位(status bit)以及错误位(errorbit);步骤120ATA/ATAPI装置18检测是否继续数据传输?若数据传输仍必须继续,则执行步骤122;否则,执行步骤126;步骤122ATA/ATAPI装置18发出一DMARQ,并继续数据传输;步骤124ATA/ATAPI装置18检测是否还有资料需要传输?如果还有资料需要传输,则执行步骤130;否则,执行步骤126;步骤126ATA/ATAPI装置18设定BSY=0以及DRQ=0,发出INTRQ并收回DMARQ,接着执行步骤130;步骤128主机11重置该DMA信道,并且执行步骤132;步骤130ATA/ATAPI装置18继续发出DRQ或是BSY,并且接着执行步骤116;以及步骤132结束。
首先,主机11需要检测ATA/ATAPI装置18的状态(步骤102),因此,主机11是轮询(poll)该状态缓存器中一忙碌位(busy bit)BSY以及一资料请求位(data request bit)DRQ;在此请注意,该忙碌位为ATA/ATAPI装置18中一控制电路(control logic)所设定,用以指出现在ATA/ATAPI装置18的状态是否为一可存取状态,而该资料请求位则用来指出ATA/ATAPI装置18是否请求其与主机11之间的数据传输。因此,主机11必须不断地等候直到BSY=0以及DRQ=0(步骤104)。接着,主机11会于Device/Head缓存器中写入适当的DEV位;在此请注意,Device/Head缓存器是用来纪录进行任一磁盘存取操作所需的ATA/ATAPI装置的识别号码(ID number)以及磁头号码(headnumber)。在步骤104之后,主机11需要再次检测ATA/ATAPI装置18的状态,因此,主机11会轮询该状态缓存器直到BSY=0以及DRQ=0(步骤106)。接着,主机11写入所需的参数至ATA/ATAPI装置18中的缓存器以指出欲透过总线传输的资料区块的数目(步骤108)。假设电子系统10是处理一数据传输的指令(举例来说,数据传输是指一DMA数据传输),因此,主机11会初始化一DMA信道(步骤110)并且把该指令码写入指令缓存器(步骤112);在步骤114之中,ATA/ATAPI装置18会将BSY设定为1,并且准备开始执行主机11发出的指令码。在此,如果有一个错误发生(步骤116),则ATA/ATAPI装置18便会设定状态位以及错误位;状态位以及错误位是包含有ATA/ATAPI装置18执行上一个指令的状态信息(步骤118)。在步骤118之后,如果仍需要继续数据传输(步骤120),则ATA/ATAPI装置18会发出一DMARQ;在此,DMARQ是用来表示需要激活DMA数据传输来传输资料(步骤122);如果所有的资料还没有传输完成(步骤124),则ATA/ATAPI装置18会持续发出BSY或是DRQ来维持目前的DMA数据传输(步骤130),这表示ATA/ATAPI装置18可以传输资料至主机11或从主机11获得资料。此外,如果所有的资料都已经成功地传输完毕(步骤124),则ATA/ATAPI装置18会把BSY以及DRQ都重置为0,并且发出INTRQ至主机11,而如前所述,INTRQ是用来中断主机11的执行。除此之外,ATA/ATAPI装置18亦会收回DMARQ(步骤126),因此,主机11便会重置该DMA信道(步骤128)。最后,该指令码若非被完整地执行,其便是于执行中被中止(步骤132)。
请参阅图3,图3为公知非资料(non-data)传输或是PIO数据传输的流程图。如图3所示,PIO数据传输包含有以下步骤步骤200开始;
步骤202主机11读取一状态缓存器或是一备用状态缓存器,直到BSY=0以及DRQ=0;步骤204主机11把适当的DEV位写入一Device/Head缓存器;步骤206主机11读取该状态缓存器或是该备用状态缓存器,直到BSY=0以及DRQ=0;步骤208主机11写入需要的参数至Features缓存器,Sector Count缓存器,CHS缓存器以及Drive/Head缓存器;步骤210主机11写入一指令码至一指令缓存器;步骤212ATA/ATAPI装置18设定BSY=1以及准备开始接收资料;步骤214ATA/ATAPI装置18检测是否有错误发生?若有一错误发生,则执行步骤216;否则,执行步骤218;步骤216ATA/ATAPI装置18设定错误位以及状态位,并且依据需求来设定DRQ,接着执行步骤220;步骤218当ATA/ATAPI装置18准备好接收资料后,ATA/ATAPI装置18设定DRQ=1;步骤220ATA/ATAPI装置18设定BSY=0;步骤222ATA/ATAPI装置18检测DRQ是否为1?若DRQ=1,则执行步骤224;否则,执行步骤226;步骤224主机11传输资料至ATA/ATAPI装置18;步骤226主机11读取该状态缓存器或是该备用状态缓存器;步骤228ATA/ATAPI装置18检测是否有一错误于数据传输前发生?若有一错误发生,则执行步骤230;否则,执行步骤232;步骤230ATA/ATAPI装置18设定BSY=0以及DRQ=0,且发出INTRQ,并接着执行步骤248;步骤232ATA/ATAPI装置18设定BSY=1,以及处理从主机11所传输过来的资料;步骤234ATA/ATAPI装置18检测是否有一错误在数据传输后发生或是数据传输完成?若数据传输后有一错误发生或是数据传输完成,则执行步骤236;否则,执行步骤238;步骤236ATA/ATAPI装置18设定BSY=0且发出INTRQ,以及接着执行步骤248;步骤238ATA/ATAPI装置18设定BSY=0以及DRQ=0,并发出INTRQ,以及接着执行步骤240;步骤240中断机制是否被激活?若是,则执行步骤242;否则,执行步骤244;步骤242主机11等待一中断,并且执行步骤246;步骤244主机11读取该备用状态缓存器,直到BSY=0;步骤246主机11读取且储存该状态缓存器的资料内容,接着执行步骤212;以及步骤248结束。
首先,步骤200至步骤210与图2所示的步骤100至步骤110相同,为了简化说明,故于此不另赘述。在步骤212之中,ATA/ATAPI装置18设定BSY=1以及准备好开始接收资料,接着,ATA/ATAPI装置18便检测是否有一错误发生(步骤214);若有一错误发生,则ATA/ATAPI装置18设定错误位(errorbit)以及状态位,并且依据需要来设定DRQ(步骤216),在此,DRQ是用来指出ATA/ATAPI装置18需要继续传输资料。另一方面,若没有错误发生,则ATA/ATAPI装置18于准备好接收资料时,其会设定DRQ。接着,ATA/ATAPI装置18设定BSY=0(步骤220)以及检测是否DRQ=1(步骤222),其中若DRQ=1,则主机11会传输资料至ATA/ATAPI装置18(步骤224),接着会读取该状态缓存器或是该备用状态缓存器(步骤226)。
若有一错误发生(步骤228),则ATA/ATAPI装置18会设定BSY=0以及DRQ=0,并且发出INTRQ(步骤230);最后,该非数据传输或是该PIO数据传输便会因为发生错误而被终止(步骤248)。此外,如果没有错误发生(步骤228),则ATA/ATAPI装置18会设定BSY=1,并且处理从主机11所传递过来的资料(步骤232)。接着,如果有一错误发生或是数据传输已经完成(步骤234),则ATA/ATAPI装置18会设定BSY=0,并且输出INTRQ来通知主机11(步骤236)。最后,该非数据传输或是该PIO数据传输就成功地完成运作或因为错误而结束(步骤248);除此之外,如果没有错误发生或是数据传输尚未完成(步骤234),则ATA/ATAPI装置18会设定BSY=0以及DRQ=1,并且输出INTRQ来通知主机11(步骤238)。
如果电子系统10具有中断机制,举例来说,一中断致能位(driveinterrupt enable bit)nIEN被设定为0(步骤240),则主机11会等待一中断(在此该中断可为INTRQ)(步骤242),接着,当收到INTRQ后,主机11会读取与储存该状态缓存器的资料内容,以清除ATA/ATAPI装置18目前的中断状态(步骤246),并且回到步骤212来传输后续资料;另一方面,如果电子系统10并没有激活中断机制(eIEN=1)(步骤240),则主机11便读取该备用状态缓存器直到BSY=0,然后再读取并储存状态缓存器的内容(步骤246),并且该主机11会回到步骤212来传输后续资料。
如上所述,我们可以很明显地看出,主机11本身需要处理整个数据传输的流程,换句话说,在整个数据传输的流程之中,主机11会经常被中断,因此整体中央处理器的效能会因为不断的工作切换而大幅恶化。
公知技术揭露了很多方法来解决上述的问题。一个常见的做法是增加一个额外的微控制器,来帮助一主机处理器(host processor)控制外围装置;换句话说,主机处理器会送出指令至微控制器来控制外围装置。在此,虽然主机处理器无须再直接控制外围装置,但是该微控制器可以视为一个处理器,换句话说,微控制器仍然需要附加的软件来控制外围装置,因此,这样的方法并不属于硬件加速的方法。
此外,在Keith Balmer所揭露的美国公开专利NO.2002/0065995中,其是使用一批次指令(batch command)。因此,主机处理器可以将原先欲写入至装置缓存器的内容,写入至ATA/ATAPI主机控制器中的缓存器;接着,ATA/ATAPI主机控制器会将该内容从其缓存器写入该外围装置上的缓存器;相同地,原先欲从外围装置的缓存器读取的内容也会被先写入至该ATA/ATAPI主机控制器,接着,ATA/ATAPI主机控制器会读取该内容。虽然此一方法可以确实地加快主机处理器存取装置中缓存器的速度,但是对于整个ATA协议的加速效果仍然相当有限。
除此之外,在Tony Goodfellow所揭露的美国专利No.6275879中,其揭露了一影子复制装置缓存器(shadowing device register)的方法,换句话说,原先欲写入一外围装置的缓存器的资料会先被储存,并且被自动地转送至相对应外围装置。此外,该外围装置的缓存器会被轮询,并且该外围装置的缓存器的资料内容会影子复制(shadow)至ATA/ATAPI主机控制器中。在此一方法之中,虽然主机处理器不会受限于该外围装置的缓存器,但是相同地,这方法也只加速了与该外围装置的缓存器有关的相对应操作,对于整个ATA/ATAPI协议而言,整体的加速效果依然相当有限。
在Jams Arthur McDonald等人所揭露的美国专利NO.6421760中,其揭露了一个完全由硬件实现的ATA主机控制器来执行ATA协议。该ATA主机控制器可以支持以下的三个操作(1)读取并且检测该外围装置的状态缓存器的内容;(2)连续写入资料至外围装置中8个缓存器;(3)初始化256字符的数据传输(256-word data transfer)。在此一方法之中,该ATA主机控制器可以无须主机处理器的帮忙,其可自行执行ATA协议;但是,此一方法具有另外一个严重的问题,亦即,因为该ATA主机控制器完全以硬件来加以实作,故该主机处理器并没有办法可改变该ATA主机控制器的操作程序,且该ATA主机控制器只能用来控制一般的ATA装置。换句话说,如果所要处理的装置换成一ATAPI装置,或是ATA装置没有办法与主机完全兼容,则这样的ATA主机控制器就没有办法适当地运作。
ATA/ATAPI主机接取标准(ATA/ATAPI host adapter standard)定义了一个更有弹性的方法。根据该标准,主要存在三个基本的运作(1)写入一8位的缓存器;(2)轮询一状态缓存器中的忙碌位(亦即BSY);以及(3)初始化一数据传输。当执行该ATA协议的时候,会先执行一连串写入该外围装置的缓存器的动作,此外,在写入该外围装置的缓存器之前,会先轮询该状态缓存器中该忙碌位,接着,在完成写入该外围装置的缓存器的动作完成以后,便初始化该数据传输。在此一方法之中,其虽然比先前所述的公知方法更具有操作弹性,并达成了自动执行协议的目的,但是此一方法仍旧没有办法支持更复杂的协议。举例来说,对于一个需要传输好几次资料的PIO指令,或是需要传输16位指令封包的ATAPI指令来说,此一方法便无法支持。
因此,对于前述的问题,我们需要一个更有弹性的系统以及方法,能无须微处理器的介入便可自行地处理协议来控制并存取ATA/ATAPI装置。

发明内容
因此本发明的主要目的之一在于提供一种自动执行ATA/ATAPI指令以控制主机与外围装置之间数据传输的系统以及方法,以解决上述问题。
根据本发明的申请专利范围,其是揭露一种自动执行至少一指令集来沟通一主机以及至少一具有多个不同大小缓存器的外围装置的方法。该主机包含有一储存装置,一主机处理器,一主机控制器,以及一无须额外处理器辅助的指令解译器。该方法包含有利用该处理器于该储存装置建立该指令集;利用该处理器来触发该指令解译器以直接从该储存装置读取该指令集;以及利用该指令解译器来处理该指令集以控制该主机控制器存取该外围装置中该多个缓存器。
此外,本发明另揭露一种自动执行至少一指令集以于一主机以及至少一外围装置之间传递资料的方法。该主机包含有一储存装置,一处理器,一不需要额外处理器辅助的主机控制器,以及一指令解译器。该方法包含有利用该处理器于该储存装置中建立该指令集;利用该处理器来触发该指令解译器来直接从该储存装置中读取该指令码;利用该指令解译器来执行该指令集以指定每次传输资料量大小给主机控制器;利用该指令解译器来执行该指令集以触发该主机控制器激活该主机以及该外围装置之间一资料传递。
本发明的优点之一在于本发明系统利用一指令解译器来自动执行ATA/ATAPI指令,因此主机上中央处理器的负载就大大地减轻了,换句话说,因为原本会影响中央处理器的运作的中断数目大幅度的降低,因此中央处理器便能够具有更佳的效能。


图1为公知电子系统的示意图。
图2为公知DMA数据传输的流程图。
图3为公知非数据传输或是PIO数据传输的流程图。
图4为本发明电子系统的一实施例的功能方块图。
图5为本发明指令集中指令码的对照表。
图6以及图7为图4所示的指令解译器的运作流程图。
符号说明10、20电子系统 11、21主机12、22中央处理器14、24存储器16、26ATA/ATAPI主机控制器 18、28ATA/ATAPI装置30指令解译器具体实施方式
请参阅图4,图4为本发明电子系统20的一实施例的功能方块图。类似于图1所示的电子系统10,本发明电子系统20包含有一主机21以及一ATA/ATAPI装置28。主机21包含有一存储器24,一中央处理器(CPU)22,一ATA/ATAPI主机控制器(ATA/ATAPI host controller)26,以及一指令解译器(command interpreter)30。存储器24是用来储存多个指令集(commandset)以及数据;中央处理器(CPU)22是电连接至存储器24,用来建立该多个指令集以及储存该多个指令集至存储器24中;ATA/ATAPI主机控制器26是电连接至ATA/ATAPI装置28(在此,ATA/ATAPI装置28可为一光驱或是一磁盘驱动器),用来与ATA/ATAPI装置沟通。图1所示的主机11与图4所示的主机21之间主要是差别在于电子系统20包含有指令解译器30,其是电连接至中央处理器22,存储器24以及ATA/ATAPI主机控制器26,用来根据所执行的指令集,从存储器24中取得所须的资料、传输所须的资料至ATA/ATAPI主机控制器26以及与ATA/ATAPI主机控制器26沟通。在此请注意,ATA/ATAPI主机控制器26可以支持多个ATA/ATAPI装置28,也就是说,在本实施例中,ATA/ATAPI装置28的数目仅仅只用以说明,而非本发明的限制条件。除此之外,ATA/ATAPI主机控制器26是可以直接地存取存储器24。
在本实施例之中,指令解译器30可视为中央处理器22的代理者,用来代为控制ATA/ATAPI主机控制器26与ATA/ATAPI装置28之间的数据处理,也就是说,指令解译器30可以帮助中央处理器22驱动ATA/ATAPI主机控制器26,例如,处理ATA/ATAPI装置28所发出的INTRQ、从存储器24加载该指令集以及处理该指令集中的指令码。因此,在数据传输的过程中,主机21上的中央处理器22只需要处理指令解译器30所发出的响应(response),而不需要直接处理所有从ATA/ATAPI装置28发出的响应。举例来说,当许多资料区块必须要在主机21以及ATA/ATAPI装置28之间被传输的时候,ATA/ATAPI装置28在每次准备好接收对应ATA/ATAPI指令的资料时,其会发出INTRQ来通知主机21,但是在本实施例之中,ATA/ATAPI装置28实际上仅会通知指令解译器30,而不是通知中央处理器22,也就是说,指令解译器30会处理该INTRQ并且执行该指令集的下一个指令码,此外,指令解译器30只会于该指令集完全地被执行时或是有错误发生时通知中央处理器22有关数据传输的状态,因此,输入至中央处理器22的中断数目便减少了,中央处理器2 2也因此可以拥有更佳的效能。
在此请注意,本实施例中,因为指令解译器30可以有效率地处理一部分中央处理器22的工作,所以中央处理器22是于存储器24设置多个指令集而非多个单一ATA/ATAPI指令,这使得ATA/ATAPI指令可自动执行以达到更佳的数据传输效能。除此之外,这些指令集会以指令队列(command queue)的方式进行处理,换句话说,每一个指令集都包含有下一个指令集的信息以及在存储器24中相对应的地址。此外,在本实施例之中,每一个指令集是由多个指令码组成,用来定义ATA/ATAPI主机控制器26的多种运作,举例来说,写入资料至一装置上的缓存器、轮循(polling)该装置的缓存器或是检测该装置的缓存器等等。
请同时参阅图5以及图2、图3,图5为本发明指令集中指令码的对照表。在此请注意,指令集是由图4所示的指令解译器30所执行,也就是说,指令解译器30执行一指令集,而该指令集包含有如图2或图3所示的流程中所须的所有指令码,举例来说,一个指令码可以用来支持图2或图3所示的一个步骤。指令解译器30执行一“检测缓存器(check the register)”指令码来驱动ATA/ATAPI主机控制器26读取一控制缓存器的内容,接着会比较该内容以及一特定屏蔽。另一方面,当指令解译器30想要驱动ATA/ATAPI主机控制器26来写入参数至一指令缓存器(步骤112),会执行一“写入缓存器(writethe register)”指令码。当ATA/ATAPI主机控制器26初始化ATA/ATAPI主机控制器26以及ATA/ATAPI装置28之间的数据传输,指令解译器30会先执行一“设定字节数目(set byte count)”指令码来驱动ATA/ATAPI主机控制器26设定储存装置以及外围装置之间每一次数据传输所对应的资料量外围。在此请注意,在ATA中的PIO/DMA指令协议(PIO/DMA command protocol)下,每次数据传输的资料量为主机21所设定,因此,指令解译器30便无须执行一“加载字节数目(load byte count)”指令码来得知前述的每一次数据传输所对应的资料量;但是在PACKET指令协议(PACKET command protocol),亦即ATAPI协议之中,因为每一次数据传输所对应的资料量是由ATA/ATAPI装置28所设定,所以指令解译器30便必须在开始传输前执行该“加载字节数目”指令码来侦测每次数据传输的传输量。接着,指令解译器30会执行一“开始数据传输(data transfer go)”指令码来驱动ATA/ATAPI主机控制器26开始传输资料至ATA/ATAPI装置28。在此请注意,指令解译器30另提供了一个硬件定时器(hardware timer),并且指令解译器30可以在执行其它指令码之前,先执行一“加载定时器(load timer)”指令码来防止后续指令码(包含“开始数据传输”指令码)的操作停滞,此外,中央处理器22也可以建置一个软件定时器(software timer)来计时指令码的执行,以及在该软件定时器逾时(timeout)后停止执行指令解译器30的运作。
在ATA/ATAPI装置28开始处理指令之后,以及一个错误(譬如于数据传输时所产生的CRC错误)发生时,ATA/ATAPI装置28不但会设定状态位以及错误位,其也同时会发出一个INTRQ来通知主机21。在本实施例之中,在指令解译器30接收到ATA/ATAPI装置28经由ATA/ATAPI主机控制器26而发出的INTRQ之后,本发明指令解译器30会决定该INTRQ是否要传递到中央处理器22,换句话说,如果指令解译器30决定传递INTRQ来通知中央处理器22有错误发生,则中央处理器22会激活一个中断服务程序(interrupt serviceroutine,ISR)来处理该INTRQ,且其另会决定该数据传输是否需要停止执行。然而,如果指令解译器30决定不传递该INTRQ至中央处理器22,则中央处理器22就不会因为该INTRQ而被中断,且指令码的操作程序会接着处理该INTRQ。总结来说,指令解译器30可以根据设计的需求,来决定是否要传递接收到的INTRQ至中央处理器22。
在指令集的最后,有一“指令结束(command end)”指令码,其是用来通知指令解译器30该指令集已成功地被执行,而若有告知的需要,则指令解译器30会通知主机处理器该指令集已经完全地处理完毕,以及若还有其它待执行的指令集,则指令解译器30会继续执行下一个指令集。
请参阅图6以及图7,图6以及图7为图4所示的指令解译器30的运作流程图。如图6以及图7所示,为了简化起见,指令解译器30所执行的指令集仅仅只包含几个指令码,譬如“检测数据大小(check data size)”指令码,“写入缓存器(write the register)”指令码,“检测缓存器(check theregister)”指令码,“加载字节数目(load byte count)”指令码,“设定字节数目(set byte count)”指令码,“加载定时器(load timer)”指令码,“跳出(jump)”指令码,以及“指令结束(command end)”指令码。然而,请注意,于一指令集之中,本发明并没有限制指令码的数量。指令解译器30的运作包含有下列步骤步骤300开始;步骤302检测存储器24中一指令队列是否是空的(empty)?如果该指令队列是空的,则执行步骤342;否则,执行步骤304;步骤304取得一指令集;步骤306从该指令集中取得一指令码;步骤308执行该指令码;
步骤309检测该指令码是否为“检测数据大小(check data size)”指令码?若是,则执行步骤310;否则,执行步骤312;步骤310检测剩余的资料大小是否符合一预定状况;步骤311剩余的资料大小是否无法符合该预定状况?若是,则执行步骤340;否则,执行步骤336;步骤312检测该指令码是否为“写入缓存器(write the register)”指令码?若是,则执行步骤313;否则,执行步骤316;步骤313写入信息至ATA/ATAPI装置28中一缓存器;步骤314“写入缓存器(write the register)”指令码是否执行失败?若是,则执行步骤340;否则,执行步骤336;步骤316检测该指令码是否为“检测缓存器(check the register)”指令码?若是,则执行步骤320;否则,执行步骤322;步骤318检测ATA/ATAPI装置28的状态;步骤320“检测缓存器(check the register)”指令码是否执行失败?若是,则执行步骤340;否则,执行步骤336;步骤322检测该指令码是否为“开始数据传输(datat ransfer go)”指令码?若是,则执行步骤324;否则,执行步骤328;步骤324开始数据传输;步骤326“开始数据传输”指令码是否执行失败?若是,则执行步骤340;否则,执行步骤336;步骤328检测该指令码是否为“加载定时器(load timer)”指令码?若是,则执行步骤330;否则,执行步骤334;步骤330激活一定时器;
步骤332“加载定时器(load timer)”指令码是否执行失败?若是,则执行步骤340;否则,执行步骤336;步骤334检测该指令码是否为“跳出(jump)”指令码?若是,则执行步骤336;否则,执行步骤338;步骤336获得下一个指令码的存储器地址,接着回到步骤306;步骤338检测该指令码是否为“指令集结束(end of command set)”指令码?若是,则执行步骤356;否则,执行步骤358;步骤340停止执行该指令集,并接着执行步骤356;步骤342结束;步骤344检测该指令码是否为“加载字节数目(load byte count)”指令码?若是,则执行步骤346;否则,执行步骤350;步骤346藉由读取外围装置的缓存器来得到数据传输量的大小;步骤348“加载字节数目”指令码是否执行失败?若是,则执行步骤340;否则,执行步骤336;步骤350检测该指令码是否为“设定字节数目(set byte count)”指令码?若是,则执行步骤352;否则,执行步骤338;步骤352藉由该指令码来得到数据传输量的大小;步骤354“设定字节数目(set byte count)”指令码是否执行失败?若是,则执行步骤340;否则,执行步骤336;步骤356通知主机上的处理器该指令集已经执行完毕,接着回到步骤302;以及步骤358没有动作(no operation),并回到步骤336。
首先,中央处理器22会建立多个指令集,并且将该多个指令集以一指令队列的方式储存于存储器24之中,接着,中央处理器22控制指令解译器30开始存取该指令队列(步骤300)。指令解译器30检测该指令队列是否是空的(步骤302),如果该指令队列是空的,这代表原本储存在该指令队列中的所有指令集已经执行完毕,换句话说,指令解译器30已经完成处理中央处理器22所分配的所有指令集(步骤342)。然而,如果该指令队列不是空的,指令解译器30会从存储器24中读取该指令队列,并且以“先进先出(first in firstout)”的方式加载一指令集(步骤304);此外,指令解译器30会从加载的指令集中取得一指令码(步骤306)。
接着,指令解译器30会决定该指令码为哪一种指令码,因此指令解译器30会检测该指令码是否为“检测数据大小”指令码(步骤309),“写入缓存器”指令码(步骤312),“检测缓存器”指令码(步骤316),“开始数据传输”指令码(步骤322),“加载定时器”指令码(步骤328),“加载字节数目”指令码(步骤344),“设定字节数目”指令码(步骤350),“指令集结束”指令码(步骤338),或是“跳出”指令码(步骤334)。很明显地,如果该指令码为“检测数据大小”指令码(步骤309),则指令解译器30是控制ATA/ATAPI主机控制器26来检测剩下的资料大小,以检查目前指令集所驱动的数据传输的进程(步骤310),举例来说,该预定状况可以设定为资料大小为0,亦即,若检测出剩余的数据量为0,指令解译器30会将其视为所有数据都已经传输完毕,因为符合了该预定状况。对于其它的指令码来说,如果该指令码为“写入缓存器”指令码(步骤312),指令解译器30会控制ATA/ATAPI主机控制器26来写入信息至一缓存器,举例来说,与储存地址有关的参数会被写入ATA/ATAPI装置28中的缓存器上;相同地,若该指令码为其它指令码(譬如“加载定时器”指令码,“检测缓存器”指令码等等),则指令解译器30会执行相对应的操作(步骤310、313、318、324、330、336、346、352)。在步骤311、314、320、326、332、348、354中,指令解译器30会检测步骤310、313、318、324、330、336、352的对应操作是否已经成功执行,如果指令解译器30检测出该指令码没有成功得到应有的结果(步骤311、311、320、326、332、348、354),或是该定时器产生逾时(步骤332),则指令解译器30会放弃执行(abort)目前的指令集(步骤340),并且回到步骤302来重新检测该指令队列是否为空的。如先前所述,当指令解译器30放弃执行该指令集时,指令解译器30会藉由一中断来通知中央处理器22,接着中央处理器22会决定如何来处理此一执行失败(execution failure),举例来说,中央处理器22可以建立另外一个指令队列,或是传送一个失败信息给使用者。
如果该指令码为“跳出”指令码(步骤334),这代表指令解译器30必须跳出去执行该指令集中另一指令码,而非下一个指令码。如先前所述,每一个指令码都包含有下一个指令码的信息,基本上,除了“跳出”指令码以外,指令解译器30会依序执行指令集中所有的指令码,因此,如果指令解译器30执行“跳出”指令码,则指令解译器30会从中得知下一个要执行的指令的存储器地址(步骤306),接着从该指令集中取得该下一个指令码(步骤306),在此请注意,本发明提供两种“跳出”指令码第一种为“直接跳出(directlyjump)”指令码,而另外一种为“条件性的跳出(conditional jump)”指令码,其中“条件性的跳出”指令码为根据“检测资料大小”程序代码的操作结果来决定是否要跳出。然而,如果指令解译器30所执行的指令码不是上述曾经提及的任一指令码,指令解译器30会决定该指令码为“没有动作”,并且继续执行下一个指令码(步骤358)。如果该指令码为“指令集结束”指令码(步骤338),这表示指令解译器30已经完全地执行该指令集中定义的协议,因此,指令解译器30会将该指令集已经完全执行完毕的信息通知主机处理器(步骤356),并且再一次地检测该指令队列(步骤302);相反地,如果该指令集尚未完全执行完毕,指令解译器30会取得下一个指令码的存储器地址(步骤336),并且根据下一个指令码的存储器地址来取得下一个指令码(步骤306)。
在此请注意,在图6以及图7之中,这些指令码的排列顺序仅仅只作为本发明一实施例,而非本发明的限制条件;换句话说,指令解译器30可以先检测该指令码是否为“加载定时器”指令码,接着再检测该指令码是否为“检测缓存器”指令码,这样的操作并不会违背本发明的精神,也就是说,本发明指令解译器30可以执行各式各样的指令码,甚至可以依据不同的顺序来执行这些指令码。此外,请注意,本发明指令解译器30可应用于DMA数据传输模式或是PIO数据传输模式,均属本发明的范畴。
如前所述,指令解译器30可以藉由执行一个由主机21建立的指令集,来取代原本由主机12本身依据ATA/ATAPI协议所执行的操作,并且,本发明指令解译器30不需要额外的微处理器或是主机12的介入,就可以完全执行所需的操作,特别是针对PIO数据传输模式,在每一次的数据传输之中,无论一个资料区块仅仅只包含一个区段(sector)或是多个区段,本发明指令解译器30不但支持只传输单一资料区块,其亦也可支持传输多个资料区块。
除此之外,如果指令解译器30必须要支持ATAPI装置所采用的PACKET指令协议(ATAPI协议),上述的操作也可以做相对应的修改。举例来说,在传送一个指令之后,于PACKET指令协议的规定下,必须要再写入12位的指令封包(command packet);这12位的指令封包为该指令的一部分,而不是一般我们所提到的资料。在此请注意,举例来说,一般的装置缓存器,例如Device/Head缓存器以及指令缓存器都仅仅只是一个8位的缓存器,因此,指令码就必须设计为可以同时支持8位以及16位的操作,这样才能支持所有连接于IDE总线上的装置(譬如先前所述的ATAPI装置)。此外,对于PACKET指令来说,无论是在DMA或是PIO数据传输模式,即使主机还没有完全接收到需要的资料,装置端都可以随时中断该指令,这个问题在公知技术中没有得到解决,因此公知技术中需要主机处理器或额外的微控制器来处理。但是在本发明中,可以藉由在一指令集中加入一例外处理的指令码来解决此一问题。
相较于公知技术,本发明是利用指令解译器来自动执行ATA/ATAPI指令,因此中央处理器的负载可以大幅度地降低,换句话说,因为中央处理器所接收到的中断次数大大地降低,因此中央处理器的效能也因此可大幅度地提高。除此之外,本发明指令解译器无须额外的处理器来处理协议,而因为指令码的适当设计,本发明指令解译器可以藉由执行主机中处理器所建立的指令集来支持所有与缓存器的运作有关的协议。
以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。
权利要求
1.一种自动执行ATA/ATAPI指令的方法,自动执行至少一指令集来沟通一主机以及至少一具有多个不同大小缓存器的外围装置,该主机包含有一储存装置,一主机处理器,一主机控制器,以及一无须额外处理器辅助的指令解译器,该方法包含有下列步骤利用该主机处理器于该储存装置建立该指令集;利用该主机处理器来触发该指令解译器以直接从该储存装置读取该指令集;以及利用该指令解译器来处理该指令集以控制该主机控制器存取该外围装置中该多个缓存器。
2.如权利要求1所述的方法,其中该外围装置为一ATA/ATAPI装置,以及该主机控制器为一ATA/ATAPI控制器。
3.如权利要求1所述的方法,其中该指令集包含有一指令码,以及该方法包含有利用该指令解译器来计时该指令码的执行时间,其中当该指令码的执行时间到达一预定时间时,该指令解译器会放弃执行该指令码的操作。
4.如权利要求1所述的方法,其另包含有步骤利用该指令解译器来执行一指令码以指出该指令集的结尾。
5.如权利要求1所述的方法,其中该指令集包含有一指令码,以及该方法另包含有利用该指令解译器来执行该指令码以驱动该主机控制器侦测来自该外围装置的一信号的状态是否改变。
6.如权利要求5所述的方法,其中该信号为一INTRQ。
7.如权利要求6所述的方法,其中该指令解译器可以决定是否要将该INTRQ传递至该主机处理器。
8.如权利要求1所述的方法,其中该指令集包含有多个指令码,以及该方法另包含有利用该指令解译器来执行一指令码以评估该外围装置中一缓存器的内容,其中该缓存器的内容是由另一指令码所设定,以及如果该缓存器的内容符合一预定条件,放弃执行该指令码的下一个指令码。
9.一种自动执行ATA/ATAPI指令的方法,自动执行至少一指令集以于一主机以及至少一外围装置之间传递资料,该主机包含有一储存装置,一主机处理器,一不需要额外处理器辅助的主机控制器,以及一指令解译器,该方法包含有利用该主机处理器于该储存装置中建立该指令集;利用该主机处理器来触发该指令解译器直接从该储存装置中读取该指令码;利用该指令解译器对该主机控制器指定每次传输资料区块的大小;利用该指令解译器来执行该指令集以触发该主机控制器激活该主机以及该外围装置之间一资料传递。
10.如权利要求9所述的方法,其中该指令集包含有一指令码,以及该指令码是用来指出每一次数据传输时的资料区块的大小。
11.如权利要求9所述的方法,其中该指令集包含有一指令码,以及每一次数据传输时的数据区块的大小是经由利用该指令解译器执行该指令码来读取该外围装置而获得。
12.如权利要求9所述的方法,其中该指令集包含有多个指令码,以及该方法另包含有利用该指令解译器来执行一指令码以检测对应于先前执行的指令码的一剩余资料大小是否符合一预定条件。
13.如权利要求12所述的方法,其中若符合该预定条件,该指令解译器停止执行下一个指令码。
14.如权利要求12所述的方法,其中后续指令码的执行顺序是由该指令码的检测结果来决定。
15.如权利要求9所述的方法,其中该外围装置为一ATA/ATAPI装置,以及该主机控制器为一ATA/ATAPI控制器。
16.如权利要求9所述的方法,其中该指令集包含有一指令码,以及该方法另包含有利用该指令解译器来执行该指令码以设定一定时器,以及若该定时器在没有该主机处理器介入之下逾时,该指令解译器会停止执行该数据传输。
全文摘要
本发明揭露一种自动执行至少一指令集来沟通一主机与至少一具有多个不同大小缓存器的外围装置的方法。该主机包含有一储存装置,一主机处理器,一主机控制器,以及一无须额外处理器帮忙的指令解译器。该方法包含有利用该主机处理器于该储存装置中建立该指令集;利用该主机处理器来触发该指令解译器从该储存装置直接读取该指令集;以及利用该指令解译器来执行该指令集以控制该主机控制器存取该外围装置中该多个缓存器。
文档编号G06F13/38GK1770134SQ200510115420
公开日2006年5月10日 申请日期2005年11月3日 优先权日2004年11月3日
发明者陈展辉, 郑宇伦 申请人:联发科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1