串行硬盘接口协议中命令冲突的解决方法及主设备的制作方法

文档序号:6472186阅读:270来源:国知局
专利名称:串行硬盘接口协议中命令冲突的解决方法及主设备的制作方法
技术领域
本发明涉及通信技术领域,尤其涉及串行硬盘接口协议中命令冲突的解 决方法及主设备。
背景技术
SATA (Serial Advanced Technology Attachment,串行硬盘接口 )采用 串行连接方式,具有结构简单、支持热插拔等优点。SATA支持NCQ (Native Command Queuing,本地命令队列)操作,NCQ最多只有32个命令,通过
对命令队列中的命令进行重新排序实现智能数据管理,优化硬盘磁头的寻道 延迟以及潜伏期,极大的改善数据传输的速度,提高存储的性能。AHCI (Advanced Host Controller Interface,高级主控接口 )是对SATA的进一步 改进,它允许存储驱动程序启用SATA功能,实现包括NCQ在内的诸多功能。
但是,根据SATA协议规定,在实现NCQ操作的过程中在同等条件下, Device (从设备,如SATA硬盘,光驱,外置硬盘等)优先Host (主设备,如 计算机主机等)进行数据传输。这里的优先是指,当Host还在发送命令的时 候,如果Device希望开始传输其所接收的Host之前发送的命令所请求的数 据,那么Host必须放弃其本次命令发送,转而开始接收Device传送来的数 据。这样就存在一个问题,即Host如何能够在接收完Device的数据后重新准 确无误的发起先前失败的命令?如果Host不能很好重新发起先前失败的命 令,那么错误的命令发送必然致使错误的数据传输。
如图1所示,以Host直接和Device对接为例,来说明有哪些情况下会出现 NCQ冲突
4首先,Host创建了一个本地命令队列;
然后,Host向Device发送X_RDYp表明准备发送命令FIS ( Frame Information Structure,帧信息结构),如果Host收到Device发送的R—RDYp 表明Device已经准备好接收命令FIS,即Host和Device实现握手;
接着,Host发送第一个命令FIS, Devcie接收无误后回复一个D2H (Device to Host,从设备到主设备的FIS)表明命令FIS接收完成;
循环多次,每次Host发送命令FIS之前都要和Device先握手,Host连续发 送N个命令FIS,此时Device对接收的命令序列进行排队优化,决定传输这些 命令所请求数据的先后顺序;
Host准备发送第N + 1个命令FIS,当Host发送X—RDYp后,Devcie此时 回复了X—RDYp表明Device不希望再接收Host的命令FIS,而是希望开始传输 其所接收的Host之前发送的命令所请求的数据,此时两个X—RDYp就出现了 NCQ冲突,根据SATA协议规定Device优先的原则,此时Host需要将通道让 给Device,由Device传输FIS (即Device的数据以FIS形式传输)。
再如图2所示,以Host与Device之间联有PM ( Port Multiplier,端口扩充 器)为例,来说明有哪些情况下会出现NCQ冲突
首先,Host创建了一个本地命令队列;
然后,Host发送X—RDYp表明准备发送命令FIS,此时PM直接透传 X—RDYp给Device, Device发送FLRDYp表明可以接收命令FIS, PM直接透 传R—RDYp给Host,即Host发送命令FIS之前先和Device实现握手;
接着,Hos汰送第一个命令FIS, PM直接透传命令FIS给Device, Devcie 接收无误后回复一个D2H表明命令FIS接收完成;
循环多次,每次Host发送命令FIS之前Host和Device都先握手,Host连续 发送N个命令FIS,此时Device在对命令序列进行排队优化,决定传输这些命 令所请求数据的先后顺序;Host准备发送第N + 1个命令FIS,当Host发送X—RDYp后,Devcie此时 回复了X—RDYp表明Device不希望再接收Host的命令FIS,而是希望开始传输 Host前面发送命令所请求的数据,此时PM侦测到了 NCQ冲突并根据PM协 议,将直接屏蔽Device发送来的这个X一RDYp,同时PM根据Devcie优先的原 则,直接向Host反馈一个R—ERRp表明Host的命令FIS发送不成功,Host收到 R—ERRp以后,知道出现NCQ冲突,则Host将通道让给Device,由Device传 输FIS。
当出现上述图1或图2所述的这两种NCQ冲突的时候,需要Host确保冲突 当前的命令FIS不会丢失,并且能够在Devcie完成数据传输后重新开始发送命 令FIS。所以,目前NCQ冲突的解决方式主要是直接在Host内部增加一定深度 的Buffer(緩存),将出现冲突时Host正在发送的命令FIS保存备份,等 Devcie完成数据传输后Host再重新发送该命令FIS。
但是,在实现本发明过程中,发明人发现现有技术中至少存在如下问

1、 在Host内部增加Buffer (緩存),必然会增大Host的寄存器数量,例 如按一个H2D (Host to Device,主设备到从设备的FIS)长度为5个Dword
(Double word,双字)共为5x32 = 160比特,需要160个单位比特寄存器。
2、 由于在SATA链路上,数据或者握手信息的传输需要一定的时间,所 以当Host侦测到NCQ冲突的时刻点进行命令FIS备份时,SATA控制器的 DMAC (直接存储访问控制器)可能刚开始取Host的命令FIS或者可能已经取 了命令FIS的一部分Dword或者可能取完了整个命令FIS,这样,就需要一个 指针来表示出备份的重发标记位,这样势必会增加逻辑复杂度。

发明内容
本发明的实施例提供了 一种串行硬盘接口协议中命令冲突的解决方法及 主设备,其主设备的寄存器数量少,逻辑复杂度低。一种串行硬盘接口协议中命令冲突的解决方法,包括
对发送的命令对应的命令号进行备份,当所述主设备与从设备产生命令 冲突时,所述主设备根据所述备份的命令号来解决所述冲突。
一种串行硬盘接口协议中的主设备,包括
命令号生成模块,用于根据各个命令生成区别所述各个命令的命令号; 标准寄存器,用于存储所述命令号;
备份寄存器,用于发送命令时备份所述发送命令对应的命令号。 由上述本发明的实施例提供的技术方案可以看出,主设备对发送命令的 命令号进行备份,当主设备与从设备产生命令冲突而导致主设备的命令发送 失败时,主设备根据备份的命令号重新发送命令,不仅避免了由于命令冲突 导致的数据传输错误,而且存储所述备份命令号的寄存器的位宽较小,降低 逻辑复杂度。


为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所 需要使用的附图作筒单地介绍,显而易见地,下面描述中的附图仅仅是本发 明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的 前提下,还可以根据这些附图获得其他的附图。
图1为现有技术中主设备直接对接从设备时命令冲突示意图2为现有技术中主设备与从设备之间连接有端口扩充器时命令冲突示意
图3为本发明实施例一命令沖突解决方法流程框图4为本发明实施例二命令冲突解决方法流程框图5为本发明实施例二命令冲突解决方法中主设备各状态跳转示意图6为本发明实施例三主设备的结构框图。
具体实施例方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行 清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而 不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做 出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
如图3所示,本实施例提供一种串行硬盘接口协议中命令冲突的解决方 法,适用于SATA协议以及AHCI协议中,Host直接和Devcie对接、Host外挂 PM后和Devcie互连情况下出现的命令冲突,包括
备份命令号的步骤1: Host对其发送命令FIS对应的命令号进行备份;
发送命令的步骤2: Host发送该命令FIS;
重新发送命令的步骤3:出现NCQ冲突,Host将通道让给Device,等待 Device传输完数据后,Host根据备份的命令号重新发送该命令,继续传输 NCQ沖突之时的命令FIS。
可以知道,由于NCQ最多只有32个命令,那么用5个比特区分表示对应 的32个命令号,使得存储备份命令号的寄存器位宽较小,只需要5个单位比特
区别各个发送命令FIS的命令号,也可以是根据各个发送命令FIS按预设规则 重新生成的区别不同发送命令F IS的命令号。
在Host直接和Devcie对接的情况下,当Host发送X—RDYp表明准备发送 命令FIS后,Devcie此时回复了 X—RDYp表明Device不希望接收Host的命令 FIS,而是希望开始传输其所接收的Host之前发送的命令所请求的数据,此时 出现NCQ冲突,Host需要将通道让给Device,等待Device传输完数据后, Host根据备份的命令号重新发送该命令,继续发送NCQ沖突之时的命令FIS传输。
在Host外挂PM后和Devcie互连情况下,当Host发送X—RDYp表明准备发 送命令FIS后,Devcie此时回复了X—RDYp表明Device不希望再接收Host的命 令FIS,而是希望开始传输其所接收的Host之前发送的命令所请求的数据,此 时PM侦测到了 NCQ冲突并根据PM协议并将直接屏蔽这个X一RDYp直接向 Host反馈一个R—ERRp表明Host的命令FIS发送失败,Host收到R—ERRp以 后,知道出现NCQ冲突,则Host将通道让给Device,等待Device传输完数据 后,Host根据备份的命令号重新发送该命令,继续传输NCQ冲突之时的命令 FIS。
由上述实施例提供的技术方案可以看出,无论是Host直接和Devcie对接 还是Host外挂PM后和Devcie互连,主设备都首先对每次发送命令FIS对应的
失败时,主设备可以根据备份命令号重新发送与备份命令号对应的命令,这 样,不仅避免了由于主设备与从设备的命令冲突导致的数据传输错误,而 且,存储备份命令号的寄存器位宽较小,可以很好的减少寄存器的数量,降 低逻辑复杂度。
实施例二
本实施例提供一种串行硬盘接口协议中命令冲突的解决方法,适用于 SATA协议以及AHCI协议中,Host直接和Devcie对接、Host外挂PM后和 Devcie互连情况下出现的命令冲突,包括
备份命令号的步骤1: Host对其发送的命令FIS对应的命令号进行备份;
发送命令的步骤2: Host发送该命令FIS;
重新发送命令的步骤3:出现NCQ冲突后,Host停止发送命令FIS并将通 道让给Device,等待Device传输完数据后,Host根据备份的命令号重新发送 NCQ冲突之时的命令FIS。
9具体而言,如图4所示,串行硬盘接口协议中命令冲突的解决方法, 备份命令号的步骤1包括
确认出本次命令号的步骤11: Host从标准寄存器PxCI[31: 0中确认出需 要发送的命令FIS对应的命令号;
备份本次命令号的步骤12: Host备份该命令号到寄存器内,可以知道, 由于NCQ最多只有32个命令,那么用5个比特区分表示对应的32个命令号0-31,使得存储备份命令号的寄存器位宽较小,只需要5个单位比特寄存器。
发送命令的步骤2包括
取出本次命令号对应的命令的步骤21: Host从其预置的或由软件构造的 命令列表中取出与该命令号对应的命令FIS,命令列表用于表明Host创建的命 令以及对应的命令号;
发送本次命令号对应的命令的步骤22: Host发送与该命令号对应的命令
FIS。
重新发送命令的步骤3包括
取出备份命令号对应的命令的步骤31: Host根据备份命令号从命令列表 中取出对应的命令;
发送备份命令号对应的命令的步骤32: Host重新发送与该备份命令号对 应的命令FIS,继续传输NCQ冲突之时的命令FIS以解决NCQ冲突。
对于发送命令的步骤2而言,可以如上文所述Host在发送命令之前就对发 送的命令对应的命令号进行备份,Host也可以对发送的命令对应的命令号进 行备份的同时发送所述命令,在此不做赘述。
下面结合图5来进一步说明本实施例命令冲突的解决方法是如何处理NCQ 冲突
空闲状态Host当发现标准寄存器PxCI[31: 0不等于0的时候(由于 NCQ只有32个命令号0-31 ),进入命令选择或者表明有命令等待发送进入命令发送;
命令选择Host从标准寄存器PxCI[31: O]开始向上搜索,直到搜索到第 一个等于1的位,即为本次需要传输命令对应的命令号,进入下面的取命令;
取命令Host根据上述命令号从命令列表中取出命令,可以设置一个标 志位表明命令取完,在这里,取命令后需要回到空闲状态之后才进入命令发
送;
命令发送命令发送之前仍然要先实现Host和Device握手,然后发送命 令FIS;
命令发送成功Host收到Device发来的R—OKp表明接收方表明本次接收 正常,没有出现错误, 一拍后回到空闲状态;
命令发送失败Host收到Device发来的X—RDYp表明Device希望开始传 输Host前面发送命令所请求的数据,或者Host收到PM发来的R—ERRp表明本 次接收不正常,出现错误, 一拍后回到空闲状态。
对于Host直接和Devcie对接情况下,命令选择、取命令以及命令发送 中,如果出现Host收到Device发来的X—RDYp表明Device希望开始传输数 据,则Host跳回到空闲状态,即实现了NCQ冲突时的状态回退,当Device传 输完数据后,Host根据之前备份的命令号准确无误的重新发送该命令。
对于Host外挂PM后和Devcie互连情况下,命令发送状态中,如果出现 Host收到PM发来的R—ERRp表明本次接收不正常出现错误,则Host进入命令 发送失败状态, 一拍后回到空闲状态,即实现了NCQ冲突时的状态回退,当 Device传输完数据后,Host根据之前备份的命令号准确无误的重新发送该命 令。
由上述实施例提供的技术方案可以看出,主设备对发送命令的命令号进 主设备可以根据备份命令号重新发送与备份命令号对应的命令,这样,不仅避免了由于主设备与从设备的命令冲突导致的数据传输错误,而且,存储备 份命令号的寄存器位宽较小,可以很好的减少寄存器的数量,降低逻辑复杂 度。
实施例三
如图6所示, 一种串行硬盘接口协议中的主设备,适用于SATA协议以及 AHCI协议中,Host直接和Devcie对接、Host外挂PM后和Devcie互连情况下
出现的命令冲突,包括号。
标准寄存器11',用于存储所述各个命令对应的命令号,标准寄存器11'
是协议中的标准寄存器PxCI[31: O], Host从标准寄存器11'中确认出需要
发送的命令对应的命令号;
备份寄存器12',用于备份Host发送的命令对应的命令号。
可以知道,由于NCQ最多只有32个命令号0-31,那么用5个比特区分表
示对应的32个命令号0-31 ,使得存储备份命令号的备份寄存器位宽较小为相
应的5位宽。
主设备还包括预置或通过软件构造的与命令号对应的命令列表,在NCQ
突之后,主设备根据备份的命令号从命令列表中取出并重新发送与该命令号 对应的命令。
下面具体说明串行硬盘接口协议中的主设备是如何解决命令沖突的 在Host直接和Devcie对接的情况下以及Host外挂PM后和Devcie互连情况 下,Host从标准寄存器PxCI[31: 0] 1V中确认出需要发送的命令FIS对应的 命令号并从其软件构造的命令列表中取出与该命令号对应的命令FIS,重要 的是,Host要备份该命令号到备份寄存器12'内;
12Host发送与该命令号对应的命令FIS;
当Host与Devcie出现NCQ冲突,Host需要将通道让给Device,等待 Device传输完数据后,Host根据备份寄存器12'存储的备份命令号从Host的 命令列表中取出命令,继续NCQ冲突之时的命令FIS传输。
可以知道,Host可以在发送命令之前就对发送的命令对应的命令号进行
令,在此不做赘述。
由上述实施例提供的技术方案可以看出,主设备对发送命令的命令号进
主设备可以根据备份命令号重新发送与备份命令号对应的命令,这样,不仅 避免了由于主设备与从设备的命令冲突导致的数据传输错误,而且,存储备 份命令号的备份寄存器位宽较小,可以很好的减少寄存器的数量,降低逻辑 复杂度。
以上所述,仅为本发明较佳的具体实施方式
,但本发明的保护范围并不 局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可 轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明 的保护范围应该以权利要求的保护范围为准。
权利要求
1、一种串行硬盘接口协议中命令冲突的解决方法,其特征在于,包括对发送的命令对应的命令号进行备份;当主设备与从设备产生命令冲突时,根据所述备份的命令号来解决所述冲突。
2、 根据权利要求1所述的命令沖突的解决方法,其特征在于,所述对发 送的命令对应的命令号进行备份的步骤包括所述主设备从标准寄存器中确认出发送的命令对应的命令号; 所述主设备将该命令号备份到寄存器内。
3、 根据权利要求1所述的命令冲突的解决方法,其特征在于,该方法还该发送过程包括所述主设备从命令列表中取出与所述命令号对应的命令; 所述主设备发送与该命令号对应的命令。
4、 根据权利要求1所述的命令沖突的解决方法,其特征在于,在所述主 设备对发送的命令对应的命令号进行备份的同时发送所述命令,且该发送过 程包括所述主设备发送与该命令号对应的命令。
5、 根据权利要求3或4所述的命令冲突的解决方法,其特征在于,所述主 设备根据所述备份的命令号来解决所述沖突的步骤包括该命令号对应的命令。
6、 根据权利要求5所述的命令沖突的解决方法,其特征在于,所述主设备在完成取命令之后跳转到空闲状态,等待命令发送,其中,相应的取命令 是指所述主设备从所述命令列表中取出与该命令号对应的命令的过程;所述 空闲状态是指所述主设备等待命令选择或等待命令发送的状态。
7、 根据权利要求6所述的命令冲突的解决方法,其特征在于,所述主设备在命令选择、命令发送、命令发送成功以及命令发送失败之后跳转到所述空闲状态,等待命令选择,其中所述命令选择是指所述主设备从所述标准寄存器中确认出发送的命令对 应的命令号;所述命令发送是指所述主设备发送该命令;所述命令发送成功是指所述主设备完成发送该命令;所述命令发送失败是指所述主设备未完成发送该命令。
8、 一种串行硬盘接口协议中的主设备,其特征在于,包括标准寄存器,用于存储所述命令号;备份寄存器,用于发送命令时备份所述命令对应的命令号。
9、 根据权利要求8所述的主设备,其特征在于,还包括与所述命令号对应的命令。
10、 根据权利要求8所述的主设备,其特征在于,所述存储备份命令号的 备份寄存器为5位宽。
全文摘要
本发明实施例提供了一种串行硬盘接口协议中命令冲突的解决方法,包括对发送的命令对应的命令号进行备份,当主设备与从设备产生命令冲突时,主设备根据备份的命令号来解决所述冲突。本发明实施例还提供了一种主设备,包括命令号生成模块,用于根据各个命令生成区别各个命令的命令号;标准寄存器,用于存储所述命令号;备份寄存器,用于发送命令时备份发送命令对应的命令号。主设备对发送命令的命令号进行备份,当主设备与从设备产生命令冲突而导致主设备的命令发送失败时,主设备根据备份的命令号重新发送命令,不仅避免由于命令冲突导致的数据传输错误,而且存储所述备份命令号的备份寄存器的位宽较小,降低了逻辑复杂度。
文档编号G06F3/06GK101488076SQ20081024735
公开日2009年7月22日 申请日期2008年12月30日 优先权日2008年12月30日
发明者宁佐林, 程松波, 苏海亮 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1