与主机接合的储存装置以及操作主机和储存装置的方法与流程

文档序号:16845440发布日期:2019-02-12 22:09阅读:320来源:国知局
与主机接合的储存装置以及操作主机和储存装置的方法与流程

本申请要求于2017年7月31日在韩国知识产权局所提交的韩国专利申请号为no.10-2017-0097133的优先权,其公开内容通过引用整体并入本文中。

本公开涉及操作主机和储存装置的方法,并且更特别地,涉及用于与主机接合的储存装置以及操作该主机和储存装置的方法。



背景技术:

非易失性存储器装置即使当电力切断时也可以保留储存在其中的数据。近期,包含基于闪存的非易失性存储器的储存装置(诸如嵌入式多媒体卡(emmc)、通用快闪储存体(ufs)、固态驱动器(ssd)和存储器卡)已经被广泛地使用。储存装置可用于储存或移动大量数据。

包含储存装置的数据处理系统可以被称为储存系统。储存系统可以包含主机和储存装置。主机和储存装置可以通过各种接口标准进行连接,并且在接合期间,需要通过减少数据处理操作(诸如读取操作和写入操作)的开销来在数据处理性能方面进行改善。



技术实现要素:

本公开提供了操作主机和储存装置的方法,以通过减少主机和储存装置之间的数据处理的开销来增加数据处理性能。

根据公开的方面,提供了操作储存装置的方法。该方法包含从主机接收第一分组,该分组包含缓冲器地址,该缓冲器地址指示从主机中的多个数据缓冲器之间所选择的数据缓冲器的位置。缓冲器地址从第一分组进行解析。响应于第一分组,将包含缓冲器地址的第二分组发送到主机。

根据本公开的另一个方面,提供具有存储器核心和储存控制器的储存装置。存储器核心配置为以非易失性的方式储存数据。储存控制器配置为与外侧的主机接口,配置为管理用于包括在主机中的多个数据缓冲器的缓冲器地址,配置为包含指示分组中的至少一个数据缓冲器的位置的缓冲器地址,并且配置为当分组是用于请求对至少一个数据缓冲器的存取时将分组发送到主机。

根据公开的另一个方面,提供了操作主机的方法。该方法包含从储存装置接收第一分组,该第一分组含有第一缓冲器地址,该第一缓冲器地址指示从主机中的多个数据缓冲器之间所选择的数据缓冲器的位置。第一缓冲器地址从第一分组进行解析。并且在由已经被解析的第一缓冲器地址所指示的位置处存取数据缓冲器中的数据。

根据本公开的另一个方面,提供了由主机执行的用于与非易失性存储器装置进行通信的方法。该方法包含从非易失性存储器装置接收第一分组,该第一分组包括用于识别数据缓冲器内的第一地址的第一信息。响应于接收第一分组,使用第一信息来存取第一地址。

附图说明

结合附图,从以下的详细描述中将更清楚地理解本公开的实施例,其中:

图1是根据本公开的实施例的数据处理系统的框图;

图2是图1中示出的根据本公开的实施例的主机的框图;

图3是图1中示出的根据本公开的实施例的储存控制器的框图;

图4是根据本公开的实施例的使用通用快闪储存(universalflashstorage,ufs)接口的储存系统的框图;

图5和6是根据本公开的实施例的操作主机的方法的流程图;

图7是根据本公开的实施例的操作储存装置的方法的流程图;

图8以及图9a和9b是根据本公开的实施例的储存在主机存储器和寄存器中的各种信息的框图,该寄存器包含在主机控制器中;

图10以及图11a和11b是根据本公开的实施例的在ufs接口中涉及的数据读取操作和分组的图;

图12和13是根据本公开的实施例的在ufs接口中涉及的数据写入操作和分组的图;

图14是示例的图,其中本公开的实施例应用于限定在ufs接口中的各种类型的分组。

图15是根据本公开的实施例的管理缓冲器地址的储存控制器的框图;

图16是图15中示出的根据本公开的实施例的操作储存控制器的方法的流程图;

图17a到17c是当响应于单个命令ufs协议信息单元(upiu)来发送多个准备传输的(ready-to-transfer,rtt)upiu时的储存系统的操作的框图;

图18(a)和18(b)是根据本公开的一些实施例的分组的结构的图;以及

图19到25是根据本公开的一些实施例产生的分组的各种结构的图。

具体实施方式

图1是根据本公开的实施例的数据处理系统的框图。

数据处理系统10可以包含主机100和储存装置200。储存装置200可以包含储存控制器210和存储器核心220。当储存装置200以非易失性的方式储存数据时,存储器核心220可以包含非易失性存储器(nvm)核心。主机100可以包含主机控制器110和主机存储器120。主机存储器120可以包含缓冲器区域121。

数据处理系统(或储存系统)10可以实现为个人计算机(pc)、数据服务器、网络附连储存(network-attachedstorage,nas)、物联网(internetofthing,iot)、或者便携式电子装置。便携式电子装置可以是笔记本计算机、蜂窝电话、智能电话、平板pc、个人数字助理(pda)、企业数字助理(eda)、数字照相机、数字摄像机、音频装置、便携式多媒体播放器(pmp)、个人导航装置(pnd)、mp3播放器、手持式游戏机、电子书或可穿戴装置。

储存装置200可以包含储存介质,其根据来自主机100的请求储存数据。例如,储存装置200可以包含至少一个固态驱动器(ssd)。当储存装置200包含ssd时,储存装置200可以包含以非易失性的方式储存数据的多个闪存芯片(例如,nand存储器芯片)。

替代地,储存装置200可以是包含至少一个闪存芯片的闪存装置。在一些实施例中,储存装置200可以是储存系统10中的嵌入式存储器。例如,储存装置200可以是嵌入式多媒体卡(emmc)或者嵌入式通用快闪储存(ufs)存储器装置。在其他实施例中,储存装置200可以是可附连到储存系统10或者从储存系统10可拆卸的外部存储器。例如,储存装置200可以是ufs存储器卡、紧凑型闪速(cf)卡、安全数字(sd)卡、微型sd卡、迷你sd卡、极限数字(extremedigital,xd)卡或记忆棒(memorystick)。

当储存装置200包含闪存时,闪存可以包含二维(2d)nand存储器阵列或三维(3d)(或垂直的nand(vnand))存储器阵列。3d存储器阵列可以单片地形成在存储器单元阵列或者电路的至少一个物理级别处,该存储器单元阵列具有设置在硅基板上的有效区,该电路在存储器单元的操作中被涉及并且形成在基板上或者形成在基板中。术语“单片”意味着阵列的每个级别的层直接沉积在阵列的每个下卧的级别的层上。在一些实施例中,3d存储器阵列包含在垂直方向上布置的垂直的nand串,使得至少一个存储器单元放置在另一个存储器单元上。至少一个存储器单元可以包含电荷陷阱层。

3d存储器阵列的结构(其中3d存储器阵列包含多个级别以及由级别共享的字线和/或位线)在公开号为7,679,133的美国专利、公开号为8,553,466的美国专利、公开号为8,654,587的美国专利、公开号为8,559,235的美国专利和申请号为2011/0233648的美国专利申请中公开,这些公开通过引用并入本文中。

在另一个示例中,储存装置200可以包含不同类型的非易失性存储器。储存装置200可以使用磁性随机存取存储器(mram)、自旋转移力矩mram、导电桥接ram(cbram)、铁电ram(feram)、相位ram(pram)、电阻式ram以及其他不同类型的存储器。

主机100可以使用各种类型的接口与储存装置200进行通信。例如,主机100可以使用标准接口与储存装置200进行连接,该标准接口诸如通用快闪储存(ufs)、串行高级技术附件(sata)、小型计算机小型接口(scsi)、串行附连scsi(sas)或emmc。主机100和储存装置200可以根据当前使用的接口的协议来产生和发送分组。图1示出了在主机100中产生并发送到储存装置200的第一分组packet_h和在储存装置200中产生并发送到主机100的第二分组packet_s。

主机控制器110可以包含主机控制器接口(未示出)。主机控制器接口可以管理存储器核心220中的缓冲器区域121的储存数据(例如,写入数据)或者缓冲器区域121中的存储器核心220的储存数据(例如,读取数据)的操作。储存控制器210可以包含用于与主机控制器110接合的装置控制器接口(未示出)。

主机控制器110和主机存储器120可以分别实现为分离的半导体芯片。替代地,主机控制器110和主机存储器120可以集成到一个半导体芯片中。主机控制器110可以是包含在应用处理器中的多个模块中的一个。应用处理器可以实现为片上系统(soc)。主机存储器120可以是放置在应用处理器或存储器装置内侧的嵌入式存储器,或者可以是放置在应用处理器外侧的模块。

主机100还可以包含涉及储存装置200的驱动的各种装置。例如,诸如主机应用或装置驱动器的软件模块(未示出)可以包含在主机100中。软件模块可以被加载到主机存储器120,并且由处理器(未示出)执行。

主机存储器120的缓冲器区域121可以包含多个数据缓冲器。数据缓冲器可以由缓冲器地址add_buf存取。例如,基于主机控制器110的控制,写入的数据可以储存在数据缓冲器中,并且可以从数据缓冲器发送到储存装置200。此外,基于主机控制器110的控制,从储存装置200读取的数据可以储存在数据缓冲器中。

主机控制器110可以包含在第一分组packet_h中的缓冲器地址add_buf,其响应于请求而指示了从多个数据缓冲器之中所选择的数据缓冲器的位置。例如,当产生请求数据写入的第一分组packet_h时,主机控制器110可以产生含有缓冲器地址add_buf的第一分组packet_h,并且可以将第一分组packet_h发送到储存装置200,该缓冲器地址add_buf指示了在其中已经储存了写入的数据的数据缓冲器的位置。当产生请求数据读取的第一分组packet_h时,主机控制器110可以产生含有缓冲器地址add_buf的第一分组packet_h,该缓冲器地址add_buf指示了在其中将储存读取的数据的数据缓冲器的位置。

储存控制器210可以储存并管理从第一分组packet_h解析的缓冲器地址add_buf和命令。此外,当响应于第一分组packet_h而产生第二分组packet_s时,储存控制器210可以包含在第二分组packet_s中的缓冲器地址add_buf,其已经在储存装置200中储存并管理。

主机100可以从储存控制器210接收含有缓冲器地址add_buf的第二分组packet_s,并且可以使用从第二分组packet_s解析的缓冲器地址add_buf来存取缓冲器区域121。换言之,主机100不需要存取其他区域来检查相关信息以便确定数据缓冲器的位置,而是可以仅存取与从第二分组packet_s解析的缓冲器地址add_buf相对应的数据缓冲器。

根据如上所述的实施例,主机存储器120的附加存取操作对于确定数据缓冲器的位置是不必须的,并且因此可以减少主机控制器110存取主机存储器120的频率。例如,常规地,缓冲器地址分开地储存在主机存储器120内的一个区域中并且分开存取,即需要进行读取缓冲器地址的操作以便确定数据缓冲器的位置,在该数据缓冲器中已经储存了写入的数据或者将储存读取的数据。然而,根据本公开的实施例,可以在没有分开的存取操作的情况下直接存取数据缓冲器。因此,减少数据处理操作的开销,使得数据处理性能增加。

图2是图1中示出的根据本公开的实施例的主机100的框图。图2示出了包含主机控制器的应用处理器(ap)。

参考图2,主机100可以包含ap和主机存储器120。ap可以包含如知识产权(intellectualproperty)的至少一个模块。例如,ap可以包含主机控制器110、处理器130、调制解调器(modem)140、照相机接口(i/f)150、显示器i/f160、存储器控制单元171和嵌入式存储器172。

尽管如图2所示,主机存储器120是ap的外部存储器,但是本公开不限于此。例如,ap的嵌入式存储器172可以用作主机存储器。图2中示出的元件仅仅是示例,并且ap还可以包含除了在图2中示出的元件之外的其他元件,或者图2中示出的元件中的一些可能不包含在ap中。

处理器130可以控制ap的全部操作。例如,用于管理储存装置200上的数据写入/读取操作的软件(例如,ap和装置驱动器)可以加载到主机存储器120或者嵌入式存储器172,并且处理器130可以通过执行软件来管理数据写入/读取操作。主机存储器120可以实现为易失性存储器或者非易失性存储器。在一些实施例中,主机存储器120可以包含易失性存储器,诸如动态ram(dram)和/或静态ram(sram)。

ap可以进行照相机控制操作、显示器控制操作和调制解调器操作。如果在ap中包含调制解调器140,则ap可以称为modap。

主机控制器110可以将含有缓冲器地址add_buf的分组发送到储存装置200或者从储存装置200接收含有缓冲器地址add_buf的分组,如上所述。主机控制器110可以包含储存至少一个传输请求的寄存器111。基于处理器130的控制,涉及储存装置200上的写入操作和/或读取操作的传输请求可以储存在寄存器111中。基于处理器130的控制,用于对应于传输请求来产生分组的各种种类的信息可以储存在主机存储器120中。例如,包含关于分组的类型的信息和缓冲器地址的表格信息可以储存在主机存储器120中。在数据写入请求的情况下,写入的数据可以基于处理器130的控制储存在主机存储器120中的多个数据缓冲器中。主机控制器110可以检查储存在寄存器111中的传输请求,并且基于传输请求来与储存装置200接口。

如上所述,主机控制器110可以从储存装置200接收含有缓冲器地址add_buf的分组,可以从分组解析缓冲器地址add_buf,并且可以根据缓冲器地址add_buf来确定数据缓冲器的位置。例如,主机控制器110比ap中的其他模块对于主机存储器120可以具有更低的存取优先级。在这种情况下,主机控制器110用于存取主机存储器120所耗费的等待时间可能很高。然而,根据本公开的实施例,主机控制器110存取主机存储器120的频率可以减少,并且可以防止在数据处理操作的开销上的增加。

图3是图1中示出的根据本公开的实施例的储存控制器210的框图。

参考图1-3,储存控制器210可以包含作为处理器的中央处理单元(cpu)211、主机i/f212和存储器i/f213。储存控制器210还可以包含闪存转换层(ftl)214、分组管理器215和缓冲器管理器216。储存控制器210还可以包含加载ftl214的工作存储器(未示出),并且随着cpu211执行ftl214,可以控制存储器核心220上的数据写入和读取操作。

主机i/f212可以将分组发送到主机100或者从主机100接收分组。如上所述,由主机i/f212发送或者接收的分组可以含有指示主机100内的缓冲器区域121中的数据缓冲器的位置的缓冲器地址add_buf。存储器i/f213可以通过与存储器核心220接口来进行写入或者读取数据的操作。

分组管理器215可以产生遵从分组管理器215和主机100之间的接口的协议的分组,并且可以从分组解析各种种类的信息。缓冲器管理器216可以管理储存从缓冲器230中的分组所解析的各种种类的信息的操作。例如,缓冲器管理器216可以管理储存已经从分组所解析的命令cmd和缓冲器地址add_buf的操作。缓冲器管理器216还可以管理储存从缓冲器230中的分组所解析的写入的数据的操作以及储存从缓冲器230中的存储器核心220所读取的数据的操作。缓冲器230可以包含在储存控制器210中,或者可以放置在储存控制器210的外侧。尽管在图3中示出的实施例中,缓冲器地址add_buf和数据被储存在一个缓冲器中,但是缓冲器地址add_buf和数据可以分别储存在分离的储存电路中。

如上所述,当储存装置200产生要发送到主机100的分组时,储存装置200可以从缓冲器230读取缓冲器地址add_buf,并且可以包含要发送到主机100的分组中的缓冲器地址add_buf。

例如,在数据写入操作中,写入命令和其对应的第一缓冲器地址可以由从主机100所接收的分组中解析,并且第一缓冲器地址可以储存在储存装置200的缓冲器230中。储存装置200可以响应于写入命令来产生分组,该分组请求以预定大小的单位传输写入的数据。此时,与写入命令相对应的第一缓冲器地址可以包含在分组中,并且主机100可以参考分组中所含有的第一缓冲器地址并且将储存在由第一缓冲器地址所指示的位置处的数据缓冲器中的写入的数据发送到储存装置200。

相似地,在数据读取操作中,读取命令和其对应的第二缓冲器地址可以由从主机100所接收的分组中解析,并且第二缓冲器地址可以储存在储存装置200的缓冲器230中。储存装置200可以响应于读取命令来产生包含读取的数据的分组。对应于读取命令的第二缓冲器地址可以包含在分组中。主机100可以参考在分组中含有的第二缓冲器地址,并且在由第二缓冲器地址所指示的位置处的数据缓冲器中储存读取的数据。

图4是根据本公开的实施例的使用ufs接口的储存系统的框图。

参考图4,ufs主机和ufs储存装置可以根据储存系统300中的ufs接口进行通信。ufs主机可以包含软件模块310和硬件模块,该硬件模块包含ufs主机控制器320和主机存储器330。软件模块310可以包含应用软件和ufs主机控制器驱动器。应用软件可以是在ufs主机中执行的各种应用程序。ufs主机控制器驱动器用于管理连接到ufs主机的外围装置的驱动。诸如储存装置上的数据写入和读取操作的数据管理操作可以通过执行ufs主机控制器驱动器来进行。应用软件和ufs主机控制器驱动器可以加载到图4中示出的主机存储器330或者加载到ufs主机中的另一个操作存储器,并且可以由处理器执行。

ufs主机控制器320可以包含ufs主机控制器接口、ufs传输协议(utp)引擎和ufs互连层。ufs主机控制器接口可以接收使用ufs主机控制器驱动器所产生的请求,并且将请求发送到utp引擎。ufs主机控制器接口还可以将来自utp引擎的数据存取结果发送到ufs主机控制器驱动器。utp引擎可以为上层(或应用层)提供服务。utp引擎可以产生分组或者释放分组,并且在其中解析信息。

ufs互连层可以与ufs储存装置340进行通信。ufs互连层可以包含链路层以及物理(phy)层。链路层可以是移动工业处理器接口(mipi)unipro,phy层可以是mipim-phy。ufs主机可以根据ufs接口为ufs储存装置340提供参考时钟refclock和重设信号reset。

ufs储存装置340可以包含储存控制器和存储器核心。在图4中所示的实施例中,储存控制器可以包含ufs互连层、utp引擎以及ufs储存装置接口。存储器核心可以是包含非易失性存储器的核心,即nvm核心。

在ufs主机控制器320与ufs储存装置340进行通信的结构中,可以通过ufs主机控制器接口进行根据来自ufs主机控制器驱动器的请求的发送或接收数据。例如,在数据写入操作中,软件模块310可以在主机存储器330的数据缓冲器中储存写入的数据,ufs主机控制器接口可以存取主机存储器330的数据缓冲器,并且可以将所存取的写入的数据发送到ufs储存装置340。

根据本公开的实施例,指示主机存储器330中的数据缓冲器的位置的缓冲器地址可以包含在从ufs主机发送到ufs储存装置340的第一分组packet_h和/或从ufs储存装置340发送到ufs主机的第二分组packet_s中。缓冲器地址可以对应于指示数据缓冲器的位置的物理地址。包含缓冲器地址的表格信息(例如,物理区域描述表格(prdt))可以储存在主机存储器330中的某一区域中。ufs主机的utp引擎可以基于prdt来确定缓冲器地址,并且产生含有缓冲器地址的第一分组packet_h。ufs储存装置340的utp引擎可以产生含有缓冲器地址的第二分组packet_s,该缓冲器地址已经在ufs储存装置340中进行储存和管理。

ufs主机控制器320可以通过端口-映射输入/输出(i/o)与ufs储存装置340进行连接。写入和读取操作可以以多任务模式处理。相应地,ufs储存装置340可以储存和管理从多个分组所解析的多个命令以及对应于命令的缓冲器地址。

如果使用ufs接口,则可以限定各种类型的分组并且本公开的实施例可以应用于这些分组中的至少一些。例如,遵从ufs接口的分组可以限定为ufs协议信息单元(upiu)。各种类型的分组可以包含用于请求写入或读取的命令upiu、响应upiu、包含读取的数据的data_inupiu、包含写入的数据的data_outupiu、任务管理(tm)请求upiu、以及传输就绪(rtt)upiu。根据本公开的实施例,上述缓冲器地址可以包含在ufs接口中限定的各种类型的分组之中的至少一些类型的分组中。例如,缓冲器地址可以包含在请求存取主机存储器330的数据缓冲器的分组中。

以下,将详细描述根据本公开的一些实施例的主机和储存装置之间的接口的操作。尽管主机和储存装置在这些实施例中使用ufs接口,但是实施例还可以应用除了ufs接口之外的其他类型的接口。

图5和图6是根据本公开的实施例的操作主机的方法的流程图。图5示出了主机发送分组的示例。图6示出了主机接收分组的示例。

参考图5,主机可以包含主机控制器,并且使用主机中的软件模块所产生的各种种类的信息可以储存在主机存储器中。例如,至少一个传输请求可以储存在主机控制器内的寄存器中,并且对应于传输请求的传输请求描述信息可以储存在主机存储器内的某一区域(例如,描述信息区域)中。传输请求描述信息可以用于产生响应upiu和与prdt信息一起使用的命令upiu。诸如命令upiu或者响应upiu和prdt信息的分组相关的信息可以储存在主机存储器内的另一区域中。prdt信息可以包含指示数据缓冲器的位置的缓冲器地址,在该数据缓冲器中已经储存了写入的数据或者将储存读取的数据。储存在主机存储器中的分组相关信息将称为命令upiu信息或者响应upiu信息。

当为数据发送/接收启动主机控制器接口操作时,在操作s11中,主机控制器可以在主机存储器中检查传输请求描述信息,其对应于储存在寄存器中的传输请求。在操作s12中,主机控制器可以检查用于数据写入请求的命令upiu信息和使用传输请求描述信息的prdt信息。在操作s13中,主机控制器可以使用prdt信息来产生含有缓冲器地址的分组(例如,物理地址),其指示了数据缓冲器的位置,在该数据缓冲器中已经储存了写入的数据,并且在操作s14中,主机控制器可以将分组发送到储存装置。

参考图6,在操作s21中,主机可以从储存装置接收分组。分组可以提供给主机内的主机控制器。主机控制器可以解析来自分组的各种种类的信息。如上所述,储存装置可以储存和管理命令和对应于命令的缓冲器地址,该命令和对应于命令的缓冲器地址已经从主机发送,并且缓冲器地址可以包含在从储存装置发送的各种类型的分组中的至少一些中。

在操作s22中,主机控制器可以从分组解析缓冲器地址。在操作s23中,主机控制器还可以使用缓冲器地址来存取主机存储器内的数据缓冲器。当分组对应于请求传输写入的数据的rttupiu时,主机控制器可以向储存装置发送储存在与缓冲器地址相对应的位置处的数据缓冲器中的写入的数据,而不分开检查储存在主机存储器中的prdt信息。当分组对应于包含读取的数据的data_inupiu时,主机控制器可以储存包含在与缓冲器地址相对应的位置处的数据缓冲器中的分组中的读取的数据,而不分开检查储存在主机存储器中的prdt信息。

图7是根据本公开的实施例的操作储存装置的方法的流程图。

在操作d31中,储存装置可以从主机接收第一分组。第一分组可以对应于命令upiu。命令upiu可以包含用于数据存取的命令,诸如数据写入或者数据读取。如上所述,第一分组可以含有指示数据缓冲器的位置的缓冲器地址,在该数据缓冲器中已经储存了写入的数据或者将储存读取的数据。在操作s32中,储存装置可以从第一分组解析缓冲器地址,并且在操作s33中,可以管理含有在第一分组中的命令和在内部储存装置中的缓冲器地址(例如,命令队列和地址队列)。

储存装置响应于第一分组可以产生第二分组,并且将第二分组发送到主机。在操作s34中,从第一分组所解析的缓冲器地址可以包含在响应于第一分组而产生的第二分组中。例如,在数据写入操作期间,储存装置可以产生指示其准备要接收写入的数据的rttupiu作为第二分组,并且缓冲器地址可以包含在rttupiu中。在数据读取操作期间,储存装置可以产生包含读取的数据的data_inupiu作为第二分组,并且缓冲器地址可以包含在data_inupiu中。在操作s35中,储存装置可以向主机发送含有缓冲器地址的第二分组。

图8以及图9a和图9b是根据本公开的实施例的储存在主机存储器和寄存器中的各种信息的框图,该寄存器包含在主机控制器中。

参考图8,主机400可以包含主机存储器410和寄存器420。可以在主机控制器内侧提供寄存器420,并且主机存储器410可以设置在主机控制器的外侧。在联合电子器件工程委员会(jedec)ufs标准中限定的各种种类的命令和参数可以储存在主机存储器410和管理关于储存装置的数据的寄存器420中。utp传输请求描述信息可以储存在主机存储器410的描述信息区域中,并且upiu信息以及对应的prdt信息可以储存在主机存储器410的另一个区域中。基于储存在寄存器420中的utp传输请求,utp传输请求描述信息可以在主机存储器410中储存和检查。

写入的数据和读取的数据可以储存在包含在主机存储器410的缓冲器区域中的多个数据缓冲器中。prdt信息可以含有缓冲器地址,作为数据缓冲器的物理地址。对于一些命令upiu,可以不储存prdt信息。例如,对于与对数据缓冲器的存取不相关的命令upiu,可以不储存prdt信息。

jedecufs标准中限定的其他各种种类的信息在图8中示出。例如,utp任务管理请求列表还可以储存在主机存储器410的一个区域中。例如,任务管理请求upiu和任务管理响应upiu可以储存在主机存储器410的一个区域中。基于储存在寄存器420中的utp任务管理请求,任务管理请求列表可以储存在主机存储器410中。此外,在jedecufs标准中限定的其他分量在图8中示出。例如,主机控制器能力、中断和主机状态、ufs互连(uic)命令、以及供应商专用可以储存在寄存器420中。

本公开的实施例不限于图8中所示的配置。在实施例中,储存在图8中的主机存储器410中的至少一些信息可以储存在寄存器420中。在实施例中,utp传输请求描述信息、upiu信息、prdt信息和utp任务管理请求列表中的至少一个可以被储存在寄存器420中。此外,在另一实施例中,主机存储器410可以仅包括数据缓冲器,并且剩余的信息可以被储存在寄存器420中。

图9a和9b是将对主机存储器的存取频率在典型情形和本公开的实施例之间进行比较的框图。图9a和图9b示出了主机根据从储存装置所接收的分组进行操作的示例。

图9a示出了处理遵从典型格式的分组的示例。参考图9a,至少一个utp传输请求可以储存在主机控制器内的寄存器420中。例如,第一传输请求“传输请求0”可以对应于数据写入请求,并且第三传输请求“传输请求2”可以对应于数据读取请求。响应于第一传输请求“传输请求0”,主机控制器可以从储存装置接收rttupiu。响应于第三传输请求“传输请求2”,主机控制器还可以从储存装置接收data_inupiu。

储存标头(header)信息的标头区域可以包含在从储存装置发送的分组中。rttupiu的标头信息可以包含关于为数据写入操作而传输的数据的大小和偏移的信息。主机控制器可以使用rttupiu的标头信息中的至少一些信息值来进行处理操作。例如,主机控制器参照逻辑单元数量(lun)和rttupiu的标头信息内的标签(即标识符)信息,并且存取主机存储器410以检查对应的utp传输请求描述信息。主机控制器还存取从主机存储器410中的utp传输请求描述信息所检测的位置,以检查prdt信息。主机控制器还可以基于prdt信息(例如,缓冲器地址)来存取数据缓冲器,并且向储存装置发送储存在数据缓冲器中的数据。

当接收到data_inupiu时,主机控制器可以存取主机存储器410,以检查对应于data_inupiu的标头信息的utp传输请求描述信息①。主机控制器还可以存取主机存储器410,以检查对应的prdt信息②。包含在data_inupiu中的读取的数据可以储存在对应于prdt信息的数据缓冲器中③。

根据上述方法,主机存储器410相对频繁地被数据处理操作进行存取。例如,主机控制器两次存取主机存储器410,以检查传输请求描述信息和prdt信息,并且主机控制器一次存取主机存储器410,以读取写入的数据来处理rttupiu。总共需要对主机存储器410的三次存取。此时,由于主机控制器比主机的其他元件(例如,显示器i/f、照相机i/f和调制解调器)对主机存储器410具有更低的存取优先级,所以数据处理的开销增加。

根据本公开的实施例,如图9b中所示,主机可以向储存装置发送第一传输请求“传输请求0”,并且接收回应于第一传输请求“传输请求0”的rrtupiu①。主机可以从rttupiu解析缓冲器地址,并且可以向储存装置发送储存在由缓冲器地址所指示的数据缓冲器中的数据②。换言之,可以消除由主机控制器所进行的为在接收rttupiu时检查prdt信息的对主机存储器410的存取。

相似地,当主机接收data_inupiu时,主机控制器不需要为了检查主机存储器410中的prdt信息以确定数据缓冲器(在其中将储存读取的数据)的位置而进行存取操作。例如,主机控制器可以基于data_inupiu的标头信息通过检查utp传输请求描述信息来确定请求的种类①,并且可以将读取的数据储存在由从data_inupiu解析的缓冲器地址所指示的数据缓冲器中②。

根据上述实施例,对主机存储器410的存取频率减少,并且因此数据吞吐量增加。例如,在数据写入操作中,多个rttupiu可以根据储存装置中的数据写入单元,响应于单一命令upiu而顺序地发送到主机。此时,可以在没有存取主机存储器410以响应于每个rttupiu而分开地检查prdt信息的情况下,进行数据处理。

图10以及图11a和图11b是根据本公开的实施例的在ufs接口中涉及的数据读取操作和分组的图。

参考图10,用于数据读取请求的命令(cmd)upiu可以从主机发送到储存装置。缓冲器地址(或者数据缓冲器的物理地址(pa))可以包含在用于数据读取请求的cmdupip中。储存装置可以响应于用于数据读取请求的cmdupiu而从存储器核心读取数据,并且可以向主机发送data_inupiu。此时,data_inupiu包含从cmdupiu解析的pa和读取的数据。此外,储存装置可以向主机发送响应upiu,其指示了对应于cmdupiu的操作的完成。如上所述,主机可以将读取的数据储存在由从data_inupiu解析的pa所指示的位置处的数据缓冲器中。

cmdupiu的分组结构可以如图11a中所示出地实现,data_inupiu的分组结构可以如图11b中所示出地实现。图11a和11b示出了缓冲器地址被包含在现存的标头区域中的示例。图11a示出了cmdupiu的结构,以及图11b示出了data_inupiu的结构。

参考图11a,cmdupiu的标头区域h可以包含保留区域和缓冲器地址,并且相关信息可以包含在保留区域的部分中。例如,主机存储器缓冲器地址可以包含在保留区域中。指示了缓冲器地址包含在cmdupiu中的信息cwa和指示了储存缓冲器地址的区域的大小(或者储存缓冲器地址和相关信息的区域的大小)的信息cwa_length还可以包含在保留区域中。

参考图11b,data_inupiu可以包含标头区域h和包含数据的有效载荷区域data。标头区域h可以包含保留区域。主机存储器缓冲器地址和相关信息可以包含在保留区域的至少部分中。包含在图11b中示出的保留区域中的信息相同于或相似于图11a中示出的保留区域中的信息。因此,将省略对其的详细描述。

图12和图13是根据本公开的实施例的在ufs接口中涉及的数据写入操作和分组的图。

参考图12,用于数据写入请求的cmdupiu可以从主机发送到储存装置。指示了主机中的已经储存了写入的数据的数据缓冲器的位置的pa可以包含在cmdupiu中。储存装置可以响应于用于数据写入请求的cmdupiu,向主机发送至少一个rttupiu,其指示了储存装置已经准备好接收写入的数据。根据写入的数据的大小和储存装置的数据写入单元,多个rttupiu可以发送到主机。

例如,第一rttupiu(即rttupiu_1)可以从储存装置发送到主机。指示了已经储存了要首先传输的写入单元数据的数据缓冲器的位置的第一papa_1可以包含在rttupiu_1中。主机可以使用从rttupiu_1所解析的第一papa_1来确定在其内的数据缓冲器的位置,并且可以将储存在数据缓冲器中的数据发送到储存装置作为写入的数据。主机可以向储存装置发送包含写入的数据的data_outupiu。

此外,储存装置可以向主机发送第二rttupiu,即rttupiu_2。指示了已经储存了要其次传输的写入单元数据的数据缓冲器的位置的第二papa_2可以包含在rttupiu_2中。主机可以从rttupiu_2解析第二papa_2,并且可以向储存装置发送数据,该数据已经储存在由第二papa_2所指示的位置处的数据缓冲器中。随着重复这样的操作,可以将请求被写入的数据的全部都发送到储存装置。当完成数据写入时,储存装置可以向主机发送响应upiu,其指示了对应于cmdupiu的操作的完成。

图13示出了上述rttupiu的分组结构的示例。在该示例中,缓冲器地址被包含在现存的标头区域中。图13示出了在响应于单个cmdupiu而发送的多个rttupiu之中的rttupiu_1。其他rttupiu的结构可以相同于或相似于图13中示出的结构。

参考图13,rttupiu_1的标头区域h可以包含保留区域。指示了已经储存了写入单元数据的数据缓冲器的位置的缓冲器地址可以包含在保留区域的至少部分中。指示了包含缓冲器地址的信息cwa和指示了区域(其中储存了缓冲器地址)的大小的信息cwa_length还可以包含在保留区域中。在完成rttupiu_1的发送后,可以向主机发送下个rttupiu(例如,rttupiu_2)。此时,数据缓冲器的值(指示了已经储存了写入的数据的数据缓冲器的位置)可以改变。

图14是示例的图,其中本公开的实施例应用于限定在ufs接口中的各种类型的分组。

主机可以向储存装置顺序地发送多个upiu。在图14中示出的示例中,传输用于写入请求的cmdupiu(即cmdupiu1)、用于读取请求的cmdupiu(即cmdupiu2、cmdupiu4、cmdupiu5和cmdupiu6)、以及用于任务管理请求的upiu(即tmf_requpiu3)。如上所述,在ufs接口中,在储存装置上的数据写入和读取操作期间,需要对主机中的数据缓冲器进行存取。相应地,缓冲器地址(即pa)可以包含在cmdupiu中的每一个(即cmdupiu1、cmdupiu2、cmdupiu4、cmdupiu5和cmdupiu6)中。储存装置可以从cmdupiu中的每一个(即cmdupiu1、cmdupiu2、cmdupiu4、cmdupiu5和cmdupiu6)解析缓冲器地址(即pa),并且可以储存和管理pa。

储存装置还可以响应于从主机所接收的请求来产生upiu,并且向主机发送upiu。一个或多个rttupiu(即rttupiu(1)_0和rttupiu(1)_1)和包含读取的数据的data_inupiu(即data_inupiu(2))在图14中示出。由于在响应于rttupiu或data_inupiu的操作期间,在主机中需要对数据缓冲器进行存取,所以pa可以包含在rttupiu和data_inupiu中的每一个中。

主机可以响应于rttupiu来向储存装置发送包含写入的数据的upiu,即data_outupiu(1)_0。主机还可以向储存装置发送任务管理请求upiu,即tmf_requpiu3。储存装置可以响应于tmf_requpiu3,在储存于该储存装置中的命令上进行管理操作。储存装置还可以响应于tmf_requpiu3,向主机发送指示命令管理操作的完成的任务管理响应upip(即tmf_respupiu(3))。

如上所述,来自主机的data_outupiu和tmf_requpiu和来自储存装置的tmf_respupiu与存取主机内的数据缓冲器的操作是不相关的。如上所述的这样的缓冲器地址可以不包含在这些upiu中。相应地,对于通过ufs接口传输的各种类型的分组,一些类型的分组的排除有效载荷之外的大小可以不同于其他类型的分组的排除有效载荷之外的大小。

图15是根据本公开的实施例的管理缓冲器地址的储存控制器的框图。

参考图15,储存控制器500可以包含控制电路510、主机i/f520、存储器i/f530、cmd队列541、地址(add)队列542和数据缓冲器550。在描述图15中示出的储存控制器500的操作中,将省略对与参考图3所描述的操作相同或相似的操作的描述。数据缓冲器550可以临时地储存写入的数据data_w和读取的数据data_r。

控制电路510可以包含用于根据ufs接口协议控制存储器核心上的数据写入和读取操作的各种元件。控制单元510可以包含主机控制器511。主机控制器511可以包含分组确定器(determiner)511_1。主机控制器511还可以包含用于utp处理的utp引擎(未示出)。主机控制器511可以产生分组或者从接收的分组解析各种种类的信息,如上所述。

可以基于控制电路510的控制,在cmd队列541和add队列542中储存和管理所解析的命令和缓冲器地址cmd/add_buf。缓冲器地址add_buf可以从add队列542读取且被提供给主机控制器511,并且可以产生含有缓冲器地址add_buf的分组。分组确定器511_1可以确定要发送到主机的分组是否属于需要存取主机存储器的数据缓冲器的类型。根据确定结果,可以选择性地存取add队列542。

图16是图15中示出的根据本公开的实施例的操作储存控制器500的方法的流程图。

参考图16,如上所述,储存装置从由主机所发送的分组解析缓冲器地址,并且在操作s41中储存和管理缓冲器地址。

此后,储存装置进行与从主机所发送的多个请求相对应的过程,并且向主机发送由该过程造成的分组。当根据处理结果产生分组时,在操作s42中,储存装置检测要产生的分组的类型,并且在操作s43中,基于该检测结果来确定要产生的分组是否需要对主机中的数据缓冲器进行存取。

当确定了分组不需要对主机中的数据缓冲器进行存取时,可以在不存取储存装置内的地址队列中的信息的情况下产生分组。然而,当确定了分组需要对主机中的数据缓冲器进行存取时,在操作s44中,可以从储存装置内的地址队列读取缓冲器地址,并且在操作s45中,可以产生含有缓冲器地址的分组并且将其发送到主机。

图17a到图17c是当响应于单个命令upiu而发送多个rttupiu时的储存系统的操作的框图。图17a到图17c示出了当响应于单个命令upiu而发送四个rttupiu时的示例。

参考图17a,储存系统600a可以包含主机610a和储存装置620a。主机610a可以包含主机控制器611a。主机控制器611a可以包含地址计算器611a_1。储存装置620a可以包含储存控制器621a和存储器核心622a。

指示了已经储存了写入的数据的数据缓冲器的位置的缓冲器地址add_buf1可以包含在cmdupiu中。储存系统600a可以包含四个rttupiu(即rttupiu_1到rttupiu_4)中的每一个中的缓冲器地址add_buf1。相应的数据缓冲器(在其中已经储存了分别对应于四个rttupiu(即rttupiu_1到rttupiu_4)的写入的数据)的位置可以彼此不同,并且地址计算器611a_1可以从缓冲器地址add_buf1计算缓冲器地址add_buf1_1到add_buf1_4,其分别指示了对应于四个rttupiu(即rttupiu_1到rttupiu_4)的数据缓冲器。可以使用以上已描述的标头信息与包含在rttupiu中的缓冲器地址add_buf1一起进行该计算。

图17b示出了在储存装置中进行上述地址计算的示例。参考图17b,储存系统600b可以包含主机610b和储存装置620b。主机610b可以包含主机控制器611b。储存装置620b可以包含储存控制器621b和存储器核心622b。储存控制器621b可以包含地址计算器621b_1。

储存控制器621b可以接收含有缓冲器地址add_buf1的cmdupiu,并且考虑到写入单元,可以向主机610b顺序地发送四个rttupiu(即rttupiu_1到rttupiu_4)。储存控制器621b中的地址计算器621b_1可以使用写入单元和已经被解析的缓冲器地址add_buf1的大小来计算缓冲器地址add_buf1_1到add_buf1_4。第一缓冲器地址add_buf1_1可以包含在第一rttupiu(即rttupiu_1)中,并且第四缓冲器地址add_buf1_4可以包含在第四rttupiu(即rttupiu_4)中。

图17c示出了主机向储存装置发送多个缓冲器地址的示例,在该示例中考虑了写入单元的大小。参考图17c,储存系统600c可以包含主机610c和储存装置620c。主机610c可以包含主机控制器611c。储存装置620c可以包含储存控制器621c和存储器核心622c。

考虑到储存装置620c的写入单元的大小,主机610c可以包含单个cmdupiu中的多个缓冲器地址(即add_buf1_1到add_buf1_4)。储存装置620c可以储存和管理已经接收的多个缓冲器地址add_buf1_1到add_buf1_4。

储存装置620c还可以向主机610c顺序地发送四个rttupiu(即rttupiu_1到rttupiu_4),并且可以在rttupiu中的每一个中包含不同缓冲器地址。例如,第一缓冲器地址add_buf1_1可以包含在第一rttupiu(即rttupiu_1)中,并且第四缓冲器地址add_buf1_4可以包含在第四rttupiu(即rttupiu_4)中。

图18(a)和图18(b)是根据本公开的一些实施例的分组的结构的图。图18(a)和图18(b)示出了含有缓冲器地址的第一类型分组以及不含有缓冲器地址的第二类型分组。在此,缓冲器地址包含在额外的标头段ehs中。

参考图18(a),第一类型分组可以包含头h、额外的标头段ehs和有效载荷。各种种类的标头信息可以包含在头h中。与主机存储器中的缓冲器地址的pa相对应的缓冲器地址可以包含在额外的标头段ehs中。除了缓冲器地址之外,用于在储存装置中的数据管理的其他各种种类的信息还可以包含在额外的标头段ehs中。

在ufs接口的情况下,分组的头h可以具有预定的大小。例如,头h可以具有32字节的大小。头h可以包含各种种类的信息的字段,诸如lun、标签、旗标和命令设定类型。额外的标头段ehs的大小可以变化,并且关于额外的标头段ehs的大小的信息可以包含在头h中的字段中的一个中。在图18(a)中示出的示例中,额外的标头段ehs具有(多个)字节的大小。

额外的标头段ehs不包含在图18(b)中示出的第二类型分组中。相应地,第二类型分组的排除有效载荷之外的大小可以固定为32字节。然而,第一类型分组的排除有效载荷之外的大小可以大于32字节并且可以变化。因此,在本公开的一些实施例中,分组的排除有效载荷之外的大小可以随着分组的类型而变化。

图19到图25是根据本公开的一些实施例产生的分组的各种结构的图。假设缓冲器地址包含在分组的额外的标头段ehs中。统称为ehs字段的各种字段可以包含在额外的标头段ehs中。ehs字段可以包含ehs头字段和ehs数据字段。

图19示出了在本公开的实施例中用于数据写入操作的cmdupiu。如图19所示,cmdupiu可以包含标头区域h和额外的标头段ehs。标头区域h可以包含关于总ehs长度的信息,并且还可以包含关于期望的数据传输长度的信息。

额外的标头段ehs可以包含ehs类型信息ehs_type和ehs长度信息ehs_length。ehs类型信息ehs_type可以设定为变化的值。当ehs类型信息ehs_type设定为特定值(例如,2h)时,其可以指示缓冲器地址已经被包含在额外的标头段ehs中。在图19中示出的实施例中,与数据缓冲器(在其中已经储存了写入的数据)的pa相对应的缓冲器地址是"0x40c0_0000”。

图20a和图20b示出了与在图19中所示出的cmdupiu相对应的rttupiu的示例。图20a示出了第一rttupiu,即rttupiu_1,并且图20b示出了第二rttupiu,即rttupiu_2。尽管未示出,但是可以根据写入单元的大小,从储存装置发送更多的rttupiu到主机。

参考图20a和图20b,第一和第二rttupiu(即rttupiu_1和rttupiu_2)中的每一个可以包含标头区域h和额外的标头段ehs。标头区域h可以包含数据缓冲器偏移和数据缓冲器计数器信息。相应的第一和第二rttupiu(即rttupiu_1和rttupiu_2)的额外的标头段ehs可以包含相同的值,例如用于缓冲器地址的“0x40c0_0000”。

主机可以使用包含在第一和第二rttupiu(即rttupiu_1和rttupiu_2)中的每一个中的标头区域h和额外的标头段ehs中的信息,来确定储存写入的数据的数据缓冲器的位置。例如,主机可以使用数据缓冲器偏移、数据缓冲器计数器信息和缓冲器地址来确定数据缓冲器的位置,并且可以向储存装置发送对应的写入的数据。

图21a和图21b示出了与在图19中所示出的cmdupiu相对应的rttupiu的其他示例。图21a示出了第一rttupiu,即rttupiu_1,并且图21b示出了第二rttupiu,即rttupiu_2。与以上参考图20a和20b所解释的描述相同的冗余描述将被省略。

参考图19以及图21a和图21b,储存装置可以使用在cmdupiu中含有的缓冲器地址(例如,0x40c0_0000)来计算多个缓冲器地址,并且可以在多个rttupiu中分别包含缓冲器地址。具有不同值的缓冲器地址可以包含在多个rttupiu中。例如,对应于0x40c0_0000的缓冲器地址可以包含在第一rttupiu(即rttupiu_1)中,并且对应于0x40c0_8000的缓冲器地址可以包含在第二rttupiu(即rttupiu_2)中。根据图21a和图21b示出的实施例,主机可以直接存取在由rttupiu中含有的缓冲器地址所指示的位置处的数据缓冲器,而不在rttupiu中含有的缓冲器地址上进行计算操作。

图22到图25示出了主机包含单个cmdupiu中的多个缓冲器地址的示例。当请求被写入的多个数据的写入单元连续地或不连续地位于缓冲器区域中时,可以应用图22到图25中示出的实施例。将实施例应用到数据的写入单元连续地或不连续地位于缓冲器区域中的情况将是更有效的。在参考图22到图25所描述的实施例中使用的标头区域的结构和信息相同于或相似于如上所述的结构和信息,并且因此其将不在图22到图25中进行说明。

参考图22,包含在cmdupiu中的ehs字段可以包含ehs头和ehs数据。ehs头可以包含类型信息ehs_type和长度信息ehs_length,如上所述。当响应于单个cmdupiu而将与写入单元的大小相对应的数据从主机四次发送到储存装置时,缓冲器地址(即bufferaddress1_1到bufferaddress1_4,具有写入单元的大小的四个数据分别位于该缓冲器地址处)可以包含在ehs字段中。储存装置可以储存和管理缓冲器地址,即bufferaddress1_1到bufferaddress1_4。

图23a和图23b示出了由储存装置所发送的rttupiu。图23a示出了第一rttupiu,即rttupiu_1,并且图23b示出了第四rttupiu,即rttupiu_4。参考图23a,第一rttupiu(即rttupiu_1)的ehs字段可以含有第一缓冲器地址(即bufferaddress1_1)。主机可以从第一rttupiu(即rttupiu_1)解析第一缓冲器地址(即bufferaddress1_1),并且可以向储存装置发送数据,该数据具有写入单元的大小并且对应于第一缓冲器地址(即bufferaddress1_1)。参考图23b,第四rttupiu(即rttupiu_4)的ehs字段可以含有第四缓冲器地址(即bufferaddress1_4),该第四缓冲器地址具有与第一缓冲器地址(即bufferaddress1_1)不同的值。主机可以向储存装置发送对应于第四缓冲器地址(即bufferaddress1_4)的数据。

图24示出了可更改的实施例,其中rttupiu含有第一到第四缓冲器地址,即bufferaddress1_1到bufferaddress1_4。第一到第四缓冲器地址(即bufferaddress1_1到bufferaddress1_4)的全部可以包含在第一到第四rttupiu(即rttupiu_1到rttupiu_4)中的每一个中。主机可以使用缓冲器地址中的一个,根据头中的信息来选择性地存取数据。

图25示出了data_inupiu的示例。假设图22中示出的cmdupiu请求读取操作。

储存装置可以储存和管理在与读取请求相对应的cmdupiu中含有的多个缓冲器地址,即bufferaddress1_1到bufferaddress1_4。当发送响应于cmdupiu的data_inupiu时,储存装置可以包含data_inupiu中的缓冲器地址,即bufferaddress1_1到bufferaddress1_4。主机可以使用在data_inupiu中含有的缓冲器地址(即bufferaddress1_1到bufferaddress1_4),在主机存储器中的数据缓冲器的对应位置处储存读取的数据。

根据本公开的实施例,指示主机中的数据缓冲器的位置的缓冲器地址在主机和储存装置之间传输,并且因此,可以消除为确定需要被存取的数据缓冲器的位置而由主机存储器所进行的读取操作。因此,主机和储存装置之间的数据处理的开销减少,并且数据处理性能增加。

与本领域的传统相同,实施例以实行所描述的功能或多个功能的块的形式进行描述和示出。这些块(其在本文中可以称为单元或者模块等)通过模拟和/或数字电路(诸如逻辑门、集成电路、微处理器、微控制器、存储器电路、无源电子组件、有源电子组件、光学组件、硬件电路等)进行物理实现,并且可选地由固件和/或软件进行驱动。例如,电路可以实施为一个或多个半导体芯片,或者可以实施在基板支撑物(诸如印刷电路板等)上。构成块的电路可以由专用硬件构成,或者由处理器(例如,一个或多个可编程微处理器和相关电路)构成,或者由进行块的一些功能的专用硬件和进行块的其他功能的处理器的组合构成。在不脱离本公开的范围的情况下,实施例的每个块可以物理分离为两个或更多个相互作用且离散的块。同样地,在不脱离本公开的范围的情况下,实施例的块可以物理组合成更多的复杂的块。

虽然已经参考其实施例具体示出和描述了本公开,但是应该理解,在不脱离所附权利要求的精神和范围的情况下,可以在其中做出形式和细节上的各种改变。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1