相关申请的交叉引用
本申请要求于2018年11月30日提交的韩国专利申请号10-2018-0152881的优先权,其全部内容通过引用并入本文。
本公开的各种实施例一般地涉及控制器、具有该控制器的存储器控制器、具有该存储器控制器的存储设备、以及操作该控制器的方法,并且更具体地涉及管理在协议层中发生错误的控制器、具有该控制器的存储器控制器、具有该存储器控制器的存储器设备、以及操作该控制器的方法。
背景技术:
存储系统可以包括主机和存储设备。存储设备可以在主机的控制下存储数据或输出所存储的数据。存储设备可以包括例如非易失性存储器。存储设备可以通过诸如通用闪存(ufs)、串行ata(sata)、小型计算机系统接口(scsi)、串行连接scsi(sas)和嵌入式mmc(emmc)的各种标准接口中的任一种来耦合到主机。
技术实现要素:
本公开的各种实施例涉及管理在协议层中发生的错误的控制器、具有该控制器的存储器控制器、具有该存储器控制器的存储设备、以及操作该控制器的方法。
本公开的实施例可以提供一种控制器。该控制器可以包括:错误信息生成器,其被配置为接收关于当命令在协议层处被处理时发生的错误的错误信息,基于所接收的错误信息生成与该命令相对应的命令错误信息,并且将所生成的命令错误信息存储在第一存储区域中;以及错误信息管理器,其被配置为响应于外部请求而将存储在第一存储区域中的命令错误信息存储在第二存储区域中。
本公开的实施例可以提供一种存储器控制器。该存储器控制器可以包括:设备接口,其被配置为处理从主机接收的命令,并且记录关于当命令被处理时发生的错误的错误信息;错误信息生成器,其被配置为从设备接口接收错误信息,基于所接收的错误信息生成与命令相对应的命令错误信息,并且将所生成的命令错误信息存储在第一存储区域中;以及错误信息管理器,其被配置为响应于外部请求而将存储在第一存储区域中的命令错误信息存储在第二存储区域中。
本公开的实施例可以提供一种存储设备。该存储设备可以包括:存储器控制器,其包括第一存储区域;以及存储器设备,其包括第二存储区域,其中存储器控制器被配置为:当在命令在协议层处被处理时发生错误时,生成与命令相对应的命令错误信息,将所生成的命令错误信息存储在第一存储区域中,并且当发生设定事件时,将存储在第一存储区域中的命令错误信息存储在第二存储区域中。
本公开的实施例可以提供一种用于控制器的操作方法,该控制器响应于从通过具有多个层的通用闪存(ufs)协议层与控制器通信的主机提供的ufs命令而控制存储器设备。该操作方法可以包括:在执行ufs命令时检测多个层之中的错误,标识多个层之中发生错误的层,以及当控制器变为完全不活动时,控制存储器设备将关于ufs命令、所标识的层和错误的ufs信息与关于在ufs命令之前执行的一个或多个最近的scsi命令的小型计算机系统接口(scsi)信息一起存储在存储器设备中,其中所存储的ufs信息和scsi信息被提供用于分析错误。
附图说明
图1是示出存储系统的示例图。
图2是示出图1的存储系统的多层分层结构的示例图。
图3是详细示出图2的ufs系统的分层结构的示例图。
图4是示出图1的存储设备的示例图。
图5是描述uic命令的类型和错误类型的示例图。
图6是示出在处理uic命令时发生错误的情况的示例图。
图7是示出传输命令错误信息的示例的图。
图8是示出存储scsi命令的示例的图。
图9是示出根据本公开的实施例的操作存储设备的方法的示例图。
图10是示出根据本公开的实施例的操作存储设备的方法的示例图。
具体实施方式
将参考稍后在说明书中与附图一起描述的实施例来描述本公开的优点和特征以及用于实现其的方法。本公开不限于以下实施例,而是可以以其他形式实现。相反,提供这些实施例是为了使得本公开将彻底和完整,并且将本公开的技术精神完全传达给本领域技术人员。
应当注意,在本说明书中,“连接/耦合”是指一个部件不仅直接耦合另一部件而且还通过中间部件间接耦合另一部件。在说明书中,当元件被称为“包括”或“包含”部件时,它不排除另一部件,但是还可以包括其他部件,除非上下文另有明确说明。在说明书中,“a或b中的至少一个”应当理解为表示“仅a”、“仅b”或“a和b两者”。
在下文中,将参考附图描述本公开的实施例。
图1是示出存储系统的示例图。
参考图1,存储系统100可以包括主机1000和存储设备2000。
主机1000可以执行为了操作存储系统100所需要的各种操作。例如,主机1000可以运行存储系统100中使用的操作系统(os),并且在os上执行各种应用程序。主机1000可以将数据写入存储设备2000,或者可以读取写入存储设备2000的数据。
主机1000可以包括应用1100、设备驱动1200、主机控制器1300、主机缓冲存储器1400和主机接口(主机i/f)1500。
应用1100可以是在主机1000上执行的操作系统或应用程序,或者是管理在主机1000上执行的应用程序的固件或软件。应用1100可以传输对于数据到存储设备2000的传输或数据从存储设备2000到设备驱动1200的接收的输入/输出请求。输入/输出请求可以是但不限于读取请求、写入请求或擦除请求中的至少一项。
设备驱动1200可以将由应用1100生成的输入/输出请求转换为在协议规范中定义的请求,并且可以将转换后的请求传输到主机控制器1300。设备驱动1200可以通过固件或软件实现。
主机控制器1300可以控制主机1000中的整体操作。例如,当从设备驱动1200接收到写入请求时,主机控制器1300可以通过主机接口1500将存储在主机缓冲存储器1400中的数据提供给存储设备2000。例如,当从设备驱动1200接收到读取请求时,主机控制器1300可以通过主机接口1500从存储设备2000接收数据。
主机缓冲存储器1400可以用作主机1000的主存储器或高速缓存存储器。主机缓冲存储器1400可以临时存储要提供给存储设备2000的数据。主机缓冲存储器1400也可以被用作用于执行应用1100或设备驱动1200的驱动存储器。
主机接口1500可以通过用于发送/接收数据的数据线din和dout、用于传输硬件复位信号的复位线rst、用于传输参考时钟信号的时钟线clk等而耦合到设备接口(设备i/f)2500。数据线din和dout可以被实现为多个成对,其中一个数据输入线din和一个数据输出线dout的成对可以被称为“通道”。主机接口1500可以使用诸如外围部件快速互连(pci-e或pcie)、高级技术附件(ata)、串行ata(sata)、并行ata(pata)、通用串行总线(usb)、多媒体卡(mmc)、增强型小磁盘接口(esdi)、集成驱动电子设备(ide)、移动行业处理器接口(mipi)、通用闪存(ufs)、小型计算机系统接口(scsi)或串行连接scsi(sas)等接口协议中的至少一个来与设备接口2500通信,但是本公开的实施例不限于此。
存储设备2000可以在主机1000的控制下写入数据或向主机1000提供写入的数据。存储设备2000可以被实现为固态驱动器(ssd)、多媒体卡(mmc)、嵌入式mmc(emmc)、安全数字(sd)卡或通用闪存(ufs),但是本公开的实施例不限于此。
存储设备2000可以包括存储器控制器2100和非易失性存储器(nvm)3100。
存储器控制器2100可以控制存储设备2000的整体操作。
存储器控制器2100可以包括内部存储器2200、控制器2300、设备缓冲存储器2400和设备接口(设备i/f)2500。
内部存储器2200可以存储当存储器控制器2100或控制器2300操作时生成的各种类型的信息。
控制器2300可以控制非易失性存储器3100的写入操作、读取操作或擦除操作。控制器2300可以通过地址总线或数据总线与非易失性存储器3100或设备缓冲存储器2400交换数据。
设备缓冲存储器2400可以临时存储要存储在非易失性存储器3100中的数据或者从非易失性存储器3100读取的数据。设备缓冲存储器2400可以被实现为易失性存储器或非易失性存储器。
设备接口2500可以使用诸如外围部件快速互连(pcie)、高级技术附件(ata)、串行ata(sata)、并行ata(pata)、通用串行总线(usb)、多媒体卡(mmc)、增强型小磁盘接口(esdi)、集成驱动电子设备(ide)、移动行业处理器接口(mipi)、通用闪存(ufs)、小型计算机系统接口(scsi)或串行连接scsi(sas)等接口协议中的至少一个来与主机接口1500通信,但是本公开的实施例不限于此。
非易失性存储器3100可以在控制器2300的控制下执行数据写入操作、数据读取操作或数据擦除操作。尽管未在图中示出,但是存储器控制器2100和非易失性存储器3100可以包括能够彼此进行通信的相应接口。
图2是示出图1的存储系统的多层分层结构的示例图。
在图2中,示出了通用闪存(ufs)系统的分层结构作为示例。在下文中,在本公开的实施例的描述中,将ufs系统作为示例描述,但是本公开的实施例不限于此,并且可以应用于具有多层分层结构的各种存储系统。图2所示的各个层可以被实现为硬件、固件或软件。
参考图2,ufs系统200可以包括主机1000和ufs2000。
主机1000可以包括ufs应用层1010、设备管理实体(dme)1020、ufs互连(uic)层1030和移动行业处理器接口(mipi)物理(m-phy或mphy)层1040。
类似地,ufs2000可以包括ufs应用层1010、设备管理实体(dme)1020、ufs互连(uic)层1030和mipim-phy层1040。
在下文中,为了便于描述,将描述ufs2000的各个层,并且主机1000的各层可以执行与ufs2000的相应层的操作相同或相似的操作。
ufs应用层1010可以运行为了操作ufs2000所需要的各种类型的固件。例如,ufs应用层1010可以包括ufs命令集(ucs)层,并且ucs层可以管理由ufs2000使用以读取、写入或擦除数据的命令。
设备管理实体(dme)1020可以控制ufs互连(uic)层1030。
ufs互连层1030可以针对作为上层的ufs应用层1010提供服务。例如,ufs互连层1030可以生成ufs协议信息单元(upiu),upiu是用于发送/接收数据或请求的数据分组,或者ufs互连层1030可以释放所接收的upiu。ufs互连层1030可以对应于由mipi联盟提出的接口协议之中的统一协议(unipro)。
mipim-phy层1040可以将从作为上层的ufs互连层1030接收的信息与预定义协议相符地转换,并且可以将转换后的信息传输到主机1000。此外,mipim-phy层1040可以将从主机1000接收的信息与预定义协议相符地转换,并且可以将转换后的信息传输到作为上层的ufs互连层1030。
在一个实施例中,ufs应用层1010和ufs互连层1030均可以以固件的形式实现,并且可以由控制器2300执行,如上面参考图1所述。
图3是详细示出图2的ufs系统的分层结构的示例图。
在图3中,示出了ufs互连层1030由四层构成的情况作为示例。参考图3,ufs互连(mipiunipro)层1030可以包括phy适配器层l1.5、数据链路层l2、网络层l3和传输层l4。
phy适配器层l1.5将m-phy层l1耦合到数据链路层l2。m-phy层l1可以对应于开放系统互连(osi)参考模型的层l1,并且数据链路层l2可以对应于osi参考模型的层l2。因此,phy适配器层l1.5可以被称为“层l1.5”。phy适配器层l1.5可以在m-phy层l1与数据链路层l2之间执行带宽控制、功率管理等。
数据链路层l2可以执行主机与ufs之间的数据传输的流控制。也就是说,数据链路层l2可以监视数据传输或者控制数据传输速率。此外,数据链路层l2可以执行基于循环冗余校验(crc)的错误控制。数据链路层l2可以使用从网络层l3接收的分组来生成帧,或者可以使用从phy适配器层l1.5接收的帧来生成分组。
网络层l3可以执行路由功能以用于针对从传输层l4接收的分组选择传输路径。网络层l3可以对应于osi参考模型的层l3。
传输层l4可以使用从ufs应用层1010接收的命令来配置适合于协议的分组并且将分组传输到网络层l3,或者可以从从网络层l3接收的分组中提取命令并且将命令传输到ufs应用层1010。传输层l4可以使用基于序列的错误控制方案,以便保证数据传输的有效性。传输层l4可以对应于osi参考模型的层l4。
图4是示出图1的存储设备的示例图。
参考图4描述的实施例将针对作为ufs2000的存储设备来进行。然而,本公开的实施例不限于ufs2000,而是可以应用于具有多层分层结构的各种存储系统。
参考图4,ufs2000可以包括存储器控制器2100和非易失性存储器(nvm)3100。
存储器控制器2100可以控制ufs2000的整体操作。
存储器控制器2100可以包括内部存储器2200、控制器2300、设备缓冲存储器2400和设备接口(设备i/f)2500。
内部存储器2200可以存储当存储器控制器2100或控制器2300操作时生成的各种类型的信息。
控制器2300可以控制ufs2000的整体操作。例如,控制器2300可以控制非易失性存储器3100的写入操作、读取操作或擦除操作。控制器2300可以通过地址总线或数据总线与非易失性存储器3100或设备缓冲存储器2400交换数据。
当命令在设备接口2500中被处理时发生错误时,控制器2300可以管理关于发生的错误的信息。例如,该命令可以包括ufs互连(uic)命令或小型计算机系统接口(scsi)命令中的至少一种。
控制器2300可以包括日志监视器2300a、错误信息生成器2300b、错误信息管理器2300c、事件检测器2300d和命令管理器2300e。
日志监视器2300a可以监视在设备接口2500中发生的错误。例如,在设备接口2500的日志区域2500a中,作为关于在命令被处理时发生的错误的信息的错误信息可以被记录。因此,日志监视器2300a可以通过监视日志区域2500a来确定在设备接口2500中处理命令时是否已经发生错误。当在设备接口2500中处理命令时发生错误时,即,当错误信息被记录在日志区域2500a中时,日志监视器2300a可以从设备接口2500接收错误信息。也就是说,日志监视器2300a可以监视日志区域2500a,并且当新的错误信息被记录在日志区域2500a中时,可以从设备接口2500接收新的错误信息。
根据一个实施例,可以省略日志监视器2300a,并且在这种情况下,每当新的错误信息被记录在日志区域2500a中时,设备接口2500可以向错误信息生成器2300b提供新的错误信息。
错误信息可以包括已经发生错误的命令的类型。错误信息可以包括当命令在各种协议层中被处理时发生的错误的类型。例如,错误信息可以包括当在属于ufs互连(uic)层的多个层中的至少一个层处理每个命令时发生的错误的类型。
错误信息生成器2300b可以从日志监视器2300a或设备接口2500接收多条错误信息。错误信息生成器2300b可以通过收集所接收的错误信息来生成与已经发生错误的命令相对应的命令错误信息,并且可以将所生成的命令错误信息存储在内部存储器2200中。命令错误信息可以包括已经发生错误的命令的类型以及针对相应命令发生的错误的类型。例如,命令错误信息可以包括当在属于ufs互连层的多个层中的至少一个层处理每个命令时发生的错误的类型。
可以以比特序列的格式生成命令错误信息。例如,命令错误信息的一些比特可以指示已经发生错误的命令的类型,并且命令错误信息的一些其他比特可以指示当对应命令被处理时发生的错误的类型。也就是说,比特序列格式命令错误信息中包括的相应比特可以指示已经发生错误的命令的类型、或者当处理每个命令时发生的错误的类型。例如,当针对特定命令发生错误时,能够指示命令类型的比特之中与发生错误的命令相对应的比特可以被设置为“1”,并且能够指示命令类型的比特之中的剩余比特可以被设置为“0”。类似地,当针对特定命令发生错误时,能够指示错误类型的比特之中与发生的错误的类型相对应的比特可以被设置为“1”,并且能够指示错误类型的比特之中的剩余比特可以设置为“0”。因此,共享由比特序列格式命令错误信息中包括的相应比特指示的项的发送/接收要素可以基于比特序列格式命令错误信息来确定已经发生错误的命令的类型以及在处理对应命令时发生的错误的类型。
当发生设定事件时,错误信息管理器2300c可以将存储在内部存储器2200中的命令错误信息存储在非易失性存储器3100中。例如,当从事件检测器2300d接收到已经发生设定事件的通知时,错误信息管理器2300c可以将存储在内部存储器2200中的命令错误信息存储在非易失性存储器3100中。在一个实施例中,当命令错误信息存储在非易失性存储器3100中时,错误信息管理器2300c可以将存储在内部存储器2200中的scsi命令历史与命令错误信息一起存储在非易失性存储器3100中。scsi命令历史可以包括关于最近接收或发送的设定数目的scsi命令的信息。在一个实施例中,错误信息管理器2300c可以将关于在已经发生错误的命令被处理之前接收或发送的scsi命令的信息与命令错误信息一起存储。scsi命令信息可以包括scsi命令的类型。
事件检测器2300d可以检测是否已经发生设定事件,并且可以在检测到设定事件时向错误信息管理器2300c通知设定事件的发生。例如,当确定执行进入休眠模式、固件重新加载或系统重置中的至少一项时,事件检测器2300d可以向错误信息管理器2300c通知已经发生了设定事件。
在一个实施例中,事件检测器2300d可以检测是否已经接收到用于指示进入休眠模式的命令,并且可以在接收到用于指示进入休眠模式的命令时向错误信息管理器2300c通知已经发生了设定事件。可以通过监视从设备接口2500发送并且由控制器2300接收的命令来检查是否已经接收到用于指示进入休眠模式的命令。
在一个实施例中,固件或配置固件所需要的数据可以存储在非易失性存储器3100中。控制器2300可以通过将存储在非易失性存储器3100中的固件或配置固件所需要的数据加载到内部存储器2200中并且在内部存储器2200上运行固件来控制ufs2000的整体操作。当内部存储器2200的可用空间由于进入休眠模式而不足时,控制器2300可以确定重新加载固件。当确定重新加载固件时,控制器2300可以卸载在内部存储器2200上运行的固件,并且可以在退出休眠模式时从非易失性存储器3100重新加载固件或配置固件所需要的数据。当控制器2300确定重新加载固件时,事件检测器2300d可以向错误信息管理器2300c通知已经确定了固件的重新加载。
在一个实施例中,当确定在ufs2000的操作中已经发生问题时,主机(例如,图1的1000)可以向ufs2000传输用于指示系统重置的命令。事件检测器2300d可以监视从设备接口2500发送并且由控制器2300接收的命令,并且可以在接收到系统重置命令时向错误信息管理器2300c通知接收到用于指示系统重置的命令。
命令管理器2300e可以在内部存储器2200中存储(或排队)关于从主机接收的scsi命令的信息或关于要传输到主机的scsi命令的信息。命令管理器2300e可以在内部存储器2200中存储最近接收或发送的设定数目的scsi命令。
设备缓冲存储器2400可以临时存储要存储在非易失性存储器3100中的数据或从非易失性存储器3100读取的数据。设备缓冲存储器2400可以被实现为易失性存储器或非易失性存储器。
设备接口2500可以处理每个命令,并且可以在处理命令时发生错误时将错误信息记录在日志区域2500a中。错误信息可以以位图格式存储。
当接收到来自日志监视器2300a的请求时,设备接口2500可以将记录在日志区域2500a中的错误信息提供给日志监视器2300a或错误信息生成器2300b。
根据一个实施例,每当在命令处理期间发生新错误时,设备接口2500可以向错误信息生成器2300b提供关于发生的错误的错误信息。
设备接口2500可以使用诸如外围部件快速互连(pcie)、高级技术附件(ata)、串行ata(sata)、并行ata(pata)、通用串行总线(usb)、多媒体卡(mmc)、增强型小磁盘接口(esdi)、集成驱动电子设备(ide)、移动行业处理器接口(mipi)、通用闪存(ufs)、小型计算机系统接口(scsi)或串行连接scsi(sas)等接口协议中的至少一个来与主机接口1500通信,但是本公开的实施例不限于此。
非易失性存储器3100可以在控制器2300的控制下执行数据写入操作、数据读取操作或数据擦除操作。尽管图中未示出,但是存储器控制器2100和非易失性存储器3100可以包括能够彼此进行通信的相应接口。
图5是描述uic命令的类型和错误类型的示例图。
在图5中,作为示例示出了以位图格式管理uic命令的类型和错误类型的示例。图5所示的位图格式错误信息可以存储在设备接口的日志区域中。图5所示的位图格式错误信息可以同样地反映在内部存储器中。
在图5中,作为示例示出了uic命令的类型被管理为48位,phy适配器层处的错误类型被管理为5位,数据链路层处的错误类型被管理为16位,网络层处的错误类型被管理为3位,并且传输层处的错误类型被管理为7位。
uic命令寄存器映射的比特5002a可以指示针对与相应比特相对应的uic命令5002b是否已经发生错误。例如,与dme_get命令相对应的比特被设置为“1”的情况可以指示在处理dme_get命令时发生了错误。
phy适配器层处的uic错误代码映射(即,uic错误代码映射@phy适配器层)的比特5004a可以指示与相应比特相对应的错误类型5004b。例如,与“通道0上的phy错误”相对应的比特被设置为“1”的情况可以指示在处理uic命令时在通道0中发生了错误。
数据链路层处的uic错误代码映射(uic错误代码映射@数据链路层)的比特5006a可以指示与相应比特相对应的错误类型5006b。例如,与nack_received相对应的比特被设置为“1”的情况可以指示在处理uic命令时已经接收到否定确认(nack)。
网络层处的uic错误代码映射(uic错误代码映射@网络层)的比特5008a可以指示与相应比特相对应的错误类型5008b。例如,与bad_deviceid_enc相对应的比特被设置为“1”的情况可以指示设备标识符中存在错误。
传输层处的uic错误代码映射(uic错误代码映射@传输层)的比特5010a可以指示与相应比特相对应的错误类型5010b。例如,与unsupported_header_type相对应的比特被设置为“1”的情况可以指示分组的报头中存在错误。
在设备接口的日志区域或内部存储器中,仅比特5002a、5004a、5006a、5008a和5010a可以被存储,并且区域5002b、5004b、5006b、5008b和5010b可以不被存储。对于该操作,设备接口或设备控制器可以包含表示由相应比特指示的含义的位图信息。
图6是示出在处理uic命令时发生错误的情况的示例图。
为了便于描述,图6中仅示出了与uic层相对应的四个层(即,phy适配器层l1.5、数据链路层l2、网络层l3和传输层l4)。
箭头组6002表示传输从主机接收的uic命令的流程。例如,当从主机接收到用于指示进入休眠模式的uic命令dme_hibernate_enter时,可以将uic命令顺序地传输到phy适配器层l1.5、数据链路层l2、网络层l3和传输层l4。
箭头组6004表示每个层向其下层传输指示已经正常接收到uic命令的确认(ack)信号的流程。例如,数据链路层l2可以被配置为当从作为其下层的phy适配器层l1.5接收到uic命令时向phy适配器层l1.5传输指示已经正常接收到对应uic命令的ack信号。
箭头组6006表示每个层向其下层传输与处理uic命令的结果相对应的响应的流程。例如,传输层l4可以处理从作为其下层的网络层l3接收的uic命令,并且可以向网络层l3传输与处理uic命令的结果相对应的响应。
箭头组6008表示每个层向其上层传输指示已经正常接收到与处理uic命令的结果相对应的响应的ack信号的流程。例如,数据链路层l2可以被配置为当从作为其上层的网络层l3接收到与处理uic命令的结果相对应的响应时向网络层l3传输指示已经正常接收到对应响应的ack信号。
当从相邻层(例如,上层或下层)报告错误时,当没有接收到与处理uic命令的结果相对应的响应时,或者当未收到ack信号时,属于uic层的每个层可以在日志区域中记录错误信息。
例如,当phy适配器层l1.5从作为其下层的mipim-phy层(参见图2的1040)接收到在通道1中已经发生错误的报告时(6002a的情况),phy适配器层l1.5可以在日志区域中记录指示在通道1中已经发生错误的错误信息。如上所述,可以以位图格式管理错误信息,并且可以更新位图以便指示在通道1中已经发生错误。当“0”指示没有发生错误的情况并且“1”指示已经发生错误的情况时,可以在图6中看出,指示在通道1中已经发生错误的信息被记录在与phy适配器层相对应的uic错误代码映射中。
例如,当数据链路层l2已经将与处理uic命令的结果相对应的响应传输到作为下层的phy适配器层l1.5,并且此后没有接收到指示已经正常接收到对应响应的ack信号时(6008a的情况),数据链路层l2可以在日志区域中记录指示用于ack接收的定时器已经到期的错误信息afcx_request_timer_expired。也就是说,在将uic命令传输到相邻层或者将与处理uic命令的结果相对应的响应传输到相邻层之后,每层可以执行用于ack接收的定时器,并且当在对应定时器到期之前没有接收到ack信号时,可以在日志区域中记录错误信息。
同时,当在处理uic命令时在属于uic层的至少一个层发生错误时,设备接口2500可以针对对应uic命令设置标志。参考图6的uic命令寄存器映射,可以看出,在处理用于指示进入休眠模式的uic命令dme_hibernate_enter时发生了错误。
图7是示出传输命令错误信息的示例的图。
在图7中,示出了如下示例:其中48比特被分配给uic命令信息,5比特被分配给phy适配器层的错误类型,16比特被分配给数据链路层的错误类型,3比特被分配给网络层的错误类型,并且7比特被分配给传输层的错误类型。
如图7所示,设备控制器可以以比特序列的格式生成命令错误信息,将比特序列格式命令错误信息存储在内部存储器中,并且将所存储的比特序列格式命令错误信息转储到非易失性存储器中。
图8是示出存储scsi命令的示例的图。
在图8中,作为示例示出了将在处理uic命令之前发送或接收的一些scsi命令存储为scsi命令历史的示例。
参考图8,示出了如下示例:其中ufs2000响应于来自主机1000的写入请求write而将准备传送(rtt)信号传输到主机1000,并且其中ufs2000根据从主机1000接收的数据输入datain来写入数据,并且然后将响应信号res传输到主机1000。
此外,示出了如下示例:其中ufs2000响应于来自主机1000的读取请求read而将数据dataout输出到主机1000。
此后,示出了如下情况:在已经从主机1000接收到用于指示进入休眠模式的uic命令dme_hibernate_enter的ufs2000正在处理uic命令时,发生错误。
ufs2000可以存储(或排队)从主机1000接收的设定数目的scsi命令或要传输到主机1000的scsi命令。此外,当在处理uic命令时发生错误时,ufs2000可以将关于在处理对应uic命令之前发送和/或接收的scsi命令之中的设定数目的scsi命令的信息与相应uic命令的多条错误信息一起存储在非易失性存储器区域中。当随后执行错误分析时,所存储的信息可以用于再现错误状况。
图9是示出根据本公开的实施例的操作存储设备的方法的示例图。
在步骤901,存储设备可以处理命令。该命令可以是uic命令。例如,属于uic层的多个层中的每个层可以处理从主机接收的命令或要提供给主机的命令。
在步骤903,存储设备可以确定在处理命令时是否已经发生错误。例如,当从相邻层报告错误时或者当从相邻层没有接收到响应或ack时,属于uic层的多个层中的每个层可以确定已经发生错误。当确定在处理命令时没有发生错误时(在“否”的情况下),可以再次执行处理从主机接收的命令或要传输到主机的命令的步骤901。当确定在处理命令时已经发生错误时(在“是”的情况下),可以执行步骤905。
在步骤905,存储设备可以生成命令错误信息,并且可以将命令错误信息存储在第一存储区域中。命令错误信息可以以比特序列的格式存储。第一存储区域可以是易失性存储区域。
在步骤907,存储设备可以检测是否已经发生设定事件。例如,存储设备可以检测是否已经确定进入休眠模式、固件重新加载或系统重置中的至少一项的执行。当没有发生设定事件时(在“否”的情况下),可以再次执行处理从主机接收的命令或要传输到主机的命令的步骤901。当已经发生设定事件时(在“是”的情况下),可以执行步骤909。
在步骤909,ufs可以将存储在第一存储区域中的命令错误信息存储在第二存储区域中。第二存储区域可以是非易失性存储区域。
图10是示出根据本公开的实施例的操作存储设备的方法的示例图。
在步骤1001,存储设备可以将scsi命令历史存储在第一存储区域中。例如,存储设备可以处理从主机接收的scsi命令或要传输到主机的scsi命令。存储设备可以在第一存储区域中存储(或排队)所处理的设定数目的scsi命令。
在步骤1003,存储设备可以处理uic命令。例如,属于uic层的多个层中的每个层可以处理从主机接收的uic命令或要提供给主机的uic命令。
在步骤1005,存储设备可以确定在处理uic命令时是否已经发生错误。例如,当从相邻层报告错误时或者当从相邻层没有接收到响应或ack时,属于uic层的多个层中的每个层可以确定已经发生错误。当确定在处理uic命令时没有发生错误时(在“否”的情况下),存储设备可以再次执行将scsi命令历史存储在第一存储区域中的步骤1001。当确定在处理uic命令时已经发生错误(在“是”的情况下),可以执行步骤1007。
在步骤1007,存储设备可以生成命令错误信息,并且可以将命令错误信息存储在第一存储区域中。命令错误信息可以以比特序列的格式存储。第一存储区域可以是易失性存储区域。
在步骤1009,存储设备可以检测是否已经发生设定事件。例如,存储设备可以检测是否已经确定进入休眠模式、固件重新加载或系统重置中的至少一项的执行。当没有发生设定事件时(在“否”的情况下),存储设备可以再次执行将scsi命令历史存储在第一存储区域中的步骤1001。当已经发生设定事件时(在“是”的情况下),可以执行步骤1011。
在步骤1011,存储设备可以将存储在第一存储区域中的scsi命令历史和命令错误信息存储在第二存储区域中。存储设备可以将关于在已经发生错误的uic命令被处理之前接收或发送的scsi命令的信息与命令错误信息一起存储在第二存储区域中。第二存储区域可以是非易失性存储区域。
根据本公开,可以有效地管理在存储设备中发生的错误信息,并且可以基于所管理的错误信息来迅速调查错误的原因。
尽管出于说明性目的公开了本公开的示例性实施例,但是本领域技术人员将理解,各种修改、添加和替换是可能的。因此,本公开的范围必须由所附权利要求和权利要求的等同物限定,而不是由前面的描述限定。
1.一种控制器,包括:
错误信息生成器,被配置为接收关于当命令在协议层处被处理时发生的错误的错误信息,基于所接收的错误信息生成与所述命令相对应的命令错误信息,并且将所生成的命令错误信息存储在第一存储区域中;以及
错误信息管理器,被配置为响应于外部请求而将存储在所述第一存储区域中的所述命令错误信息存储在第二存储区域中。
2.根据权利要求1所述的控制器,进一步包括日志监视器,所述日志监视器被配置为监视所述协议层并且当所述错误信息被记录在所述协议层中时请求所述错误信息的传输。
3.根据权利要求1所述的控制器,其中所述错误信息生成器被配置为以比特序列格式生成所述命令错误信息。
4.根据权利要求1所述的控制器,其中所述协议层是通用闪存互连uic层。
5.根据权利要求4所述的控制器,其中所述错误信息或所述命令错误信息中的至少一项包括以下中的至少一项:已经发生所述错误的命令的类型、或者当所述命令在所述uic层中的多个层中的至少一个层处被处理时发生的错误的类型。
6.根据权利要求4所述的控制器,其中所述uic层包括物理适配器层、数据链路层、网络层或传输层中的至少一种。
7.根据权利要求1所述的控制器,进一步包括事件检测器,所述事件检测器被配置为当进入休眠模式、固件重新加载或系统重置中的至少一项的执行被确定时向所述错误信息管理器提供所述外部请求。
8.根据权利要求1所述的控制器,进一步包括命令管理器,所述命令管理器被配置为在所述第一存储区域中存储关于小型计算机系统接口scsi命令的信息。
9.根据权利要求8所述的控制器,其中所述错误信息管理器被配置为将关于在已经发生所述错误的所述命令被处理之前发送或接收的scsi命令的信息与所述命令错误信息一起存储在所述第二存储区域中。
10.根据权利要求1所述的控制器,其中:
所述第一存储区域是易失性存储区域,以及
所述第二存储区域是非易失性存储区域。
11.一种存储器控制器,包括:
设备接口,被配置为处理从主机接收的命令,并且记录关于当所述命令被处理时发生的错误的错误信息;
错误信息生成器,被配置为从所述设备接口接收所述错误信息,基于所接收的错误信息生成与所述命令相对应的命令错误信息,并且将所生成的命令错误信息存储在第一存储区域中;以及
错误信息管理器,被配置为响应于外部请求而将存储在所述第一存储区域中的所述命令错误信息存储在第二存储区域中。
12.根据权利要求11所述的存储器控制器,其中所述设备接口包括记录有所述错误信息的日志区域。
13.根据权利要求12所述的存储器控制器,进一步包括日志监视器,所述日志监视器被配置为监视所述日志区域,并且被配置为当所述错误信息被记录在所述日志区域中时请求所述错误信息的传输。
14.根据权利要求13所述的存储器控制器,其中所述设备接口被配置为:当接收到来自所述日志监视器的请求时,向所述错误信息生成器传输所述错误信息。
15.根据权利要求11所述的存储器控制器,其中所述错误信息生成器被配置为以比特序列格式生成所述命令错误信息。
16.根据权利要求11所述的存储器控制器,其中所述设备接口被配置为记录关于当通用闪存互连uic命令被处理时发生的错误的错误信息。
17.根据权利要求16所述的存储器控制器,其中所述错误信息或所述命令错误信息中的至少一项包括以下中的至少一项:已经发生所述错误的命令的类型、或者当所述命令在通用闪存互连uic层中的多个层中的至少一个层处被处理时发生的错误的类型。
18.根据权利要求17所述的存储器控制器,其中所述uic层包括物理适配器层、数据链路层、网络层或传输层中的至少一种。
19.根据权利要求11所述的存储器控制器,进一步包括事件检测器,所述事件检测器被配置为当进入休眠模式、固件重新加载或系统重置中的至少一项的执行被确定时向所述错误信息管理器提供所述外部请求。
20.根据权利要求11所述的存储器控制器,进一步包括命令管理器,所述命令管理器被配置为在所述第一存储区域中存储关于小型计算机系统接口scsi命令的信息。
21.根据权利要求20所述的存储器控制器,其中所述错误信息管理器被配置为将关于在已经发生所述错误的所述命令被处理之前发送或接收的scsi命令的信息与所述命令错误信息一起存储在所述第二存储区域中。
22.根据权利要求11所述的存储器控制器,其中:
所述第一存储区域是易失性存储区域,以及
所述第二存储区域是非易失性存储区域。
23.一种存储设备,包括:
存储器控制器,包括第一存储区域;以及
存储器设备,包括第二存储区域,
其中所述存储器控制器被配置为当在命令在协议层处被处理时发生错误时:
生成与所述命令相对应的命令错误信息;
将所生成的命令错误信息存储在所述第一存储区域中;以及
当发生设定事件时,将存储在所述第一存储区域中的所述命令错误信息存储在所述第二存储区域中。
24.根据权利要求23所述的存储设备,其中所述存储器控制器被配置为以比特序列格式生成所述命令错误信息。
25.根据权利要求23所述的存储设备,其中所述协议层是通用闪存互连uic层。
26.根据权利要求25所述的存储设备,其中所述命令错误信息包括以下中的至少一项:已经发生所述错误的命令的类型、或者当所述命令在所述uic层中的多个层中的至少一个层处被处理时发生的错误的类型。
27.根据权利要求25所述的存储设备,其中所述uic层包括物理适配器层、数据链路层、网络层或传输层中的至少一种。
28.根据权利要求23所述的存储设备,其中所述设定事件对应于进入休眠模式、固件重新加载或系统重置中的至少一项。
29.根据权利要求23所述的存储设备,其中所述存储器控制器被配置为在所述第一存储区域中存储关于小型计算机系统接口scsi命令的信息。
30.根据权利要求29所述的存储设备,其中所述存储器控制器被配置为将关于在已经发生所述错误的所述命令被处理之前发送或接收的scsi命令的信息与所述命令错误信息一起存储在所述第二存储区域中。
31.根据权利要求23所述的存储设备,其中:
所述第一存储区域是易失性存储区域,以及
所述第二存储区域是非易失性存储区域。
32.一种用于控制器的操作方法,所述控制器响应于从通过具有多个层的通用闪存ufs协议层与所述控制器通信的主机提供的通用闪存ufs命令来控制存储器设备,所述操作方法包括:
在执行所述ufs命令时,检测所述多个层之中的错误;
标识所述多个层之中发生所述错误的层;以及
当所述控制器变为完全不活动时,控制所述存储器设备将关于所述ufs命令、所标识的层和所述错误的通用闪存ufs信息与关于在所述ufs命令之前执行的一个或多个最近的小型计算机系统接口scsi命令的小型计算机系统接口scsi信息一起存储在所述存储器设备中,
其中所存储的ufs信息和scsi信息被提供用于分析所述错误。
技术总结