CN112306783A - 存储器控制器及其操作方法 - Google Patents
存储器控制器及其操作方法 Download PDFInfo
- Publication number
- CN112306783A CN112306783A CN201911291637.XA CN201911291637A CN112306783A CN 112306783 A CN112306783 A CN 112306783A CN 201911291637 A CN201911291637 A CN 201911291637A CN 112306783 A CN112306783 A CN 112306783A
- Authority
- CN
- China
- Prior art keywords
- code
- controller
- initialization
- memory
- runner
- 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.)
- Withdrawn
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
- G06F11/1658—Data re-synchronization of a redundant component, or initial sync of replacement, additional or spare unit
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/22—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
- G06F11/25—Testing of logic operation, e.g. by logic analysers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1012—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
- G06F11/1016—Error in accessing a memory location, i.e. addressing error
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/28—Error detection; Error correction; Monitoring by checking the correct order of processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/3037—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a memory, e.g. virtual memory, cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3648—Software debugging using additional hardware
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3648—Software debugging using additional hardware
- G06F11/3656—Software debugging using additional hardware using a specific debug interface
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0658—Controller construction arrangements
-
- 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/4418—Suspend and resume; Hibernate and awake
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Computer Security & Cryptography (AREA)
- Human Computer Interaction (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请涉及一种控制存储器装置的存储器控制器。该存储器控制器能够在只读存储器(ROM)中存储的代码之中检测具有错误的代码。该存储器控制器包括:代码存储器,用于存储用于执行操作的代码;代码运行器,用于运行代码存储器中存储的代码以执行操作;调试控制器,用于设置暂停代码地址,该暂停代码地址用于暂停用于执行操作的代码的运行;初始化控制器,用于控制调试控制器和代码运行器中的至少一个的初始化操作;以及接口组件,用于接收与设置暂停代码地址的操作相对应的暂停代码设置请求,并且将所接收的暂停代码设置请求提供至调试控制器。
Description
相关申请的交叉引用
本申请要求于2019年7月30日提交的申请号为10-2019-0092325的韩国专利申请的优先权,该韩国专利申请通过引用整体并入本文。
技术领域
本公开总体涉及一种电子装置,并且更特别地,涉及一种存储器控制器以及该存储器控制器的操作方法。
背景技术
存储装置在诸如计算机、智能电话或智能平板的主机装置的控制下存储数据。这种存储装置可以是将数据存储在诸如硬盘驱动器(HDD)的磁盘上的类型,或者是将数据存储在诸如固态驱动器(SSD)或存储卡的半导体存储器、即非易失性存储器上的类型。
存储装置可以包括被配置为存储数据的存储器装置以及被配置为控制存储器装置的存储器控制器。这种存储器装置可以是易失性存储器装置或非易失性存储器装置。非易失性存储器装置的示例包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、闪速存储器、相变RAM(PRAM)、磁性RAM(MRAM)、电阻式RAM(RRAM)以及铁电RAM(FRAM)。
发明内容
实施例提供一种能够在只读存储器(ROM)中存储的代码之中检测具有错误的代码的存储器控制器,以及该存储器控制器的操作方法。
根据本公开的一方面,提供一种存储器控制器,包括:代码存储器,被配置成存储用于执行操作的代码;代码运行器,被配置成运行在代码存储器中存储的代码以执行操作;调试控制器,被配置成设置暂停(suspend)代码地址,该暂停代码地址用于暂停用于执行操作的代码的运行;初始化控制器,被配置成控制调试控制器和代码运行器中的至少一个的初始化操作;以及接口组件,被配置成接收与设置暂停代码地址的操作相对应的暂停代码设置请求,并且将所接收的暂停代码设置请求提供至调试控制器。
根据本公开的另一方面,提供一种用于操作存储器控制器的方法,该存储器控制器用于控制存储器装置,该方法包括:执行调试控制器的初始化操作,调试控制器用于设置用于执行操作的代码之中的暂停代码的暂停代码地址,代码被存储在代码存储器中;设置暂停代码地址;以及执行代码运行器的初始化操作,代码运行器用于运行代码存储器中存储的代码。
根据本公开的另一方面,提供一种控制器的操作方法,该方法包括:当控制器通电时,将初始化器初始化成调试模式;由初始化器初始化选择器;由选择器选择多个顺序代码中的一个;在选择之后,由初始化器初始化运行器;以及由运行器运行顺序代码中的被选择代码之前的一个或多个代码,其中该运行导致控制器控制存储器装置执行操作,并且其中该控制导致调试该一个或多个代码。
附图说明
以下参照附图更全面地描述各个实施例;然而,本发明可以以不同的形式实现,因此不应该被解释为限于本文阐述的实施例。而是,提供这些实施例使得本公开是彻底的且完整的,并且向本领域技术人员充分传达实施例的范围。
在附图中,为了清楚说明,可能夸大尺寸。将理解的是,当元件被称为在两个元件“之间”时,两个元件之间可以仅有一个元件,或也可存在一个或多个中间元件。相同的附图标记始终表示相同的元件。
图1是示出存储装置的框图。
图2是示出诸如图1中所示的存储器控制器的存储器控制器的实施例的框图。
图3是示出诸如图2中所示的处理器的处理器中包括的调试控制器的初始化操作的示图。
图4是示出用于设置初始化位的方法的示图,该初始化位用于控制诸如图3中所示的调试控制器的调试控制器的初始化操作。
图5是示出诸如图3中所示的调试控制器的调试控制器设置暂停代码的方法的示图。
图6是示出在诸如图2中所示的只读存储器(ROM)的ROM中存储的代码以及代码中的每一个的代码地址的示图。
图7是示出在设置暂停代码之后诸如图3所示的代码运行器的代码运行器的初始化操作以及代码运行器的代码运行的示图。
图8是示出用于设置初始化位的方法的示图,该初始化位用于控制诸如图3中所示的代码运行器的代码运行器的初始化操作。
图9是示出根据本公开的实施例的存储器控制器的操作的示图。
图10是示出根据本公开的实施例的存储器控制器的操作的示图。
图11是示出根据本公开的实施例的存储器控制器的操作的示图。
图12是示出根据本公开的实施例的存储器控制器的操作的示图。
图13是示出存储器控制器的另一实施例的示图。
图14是示出根据本公开的实施例的应用了存储装置的存储卡系统的框图。
图15是示出根据本公开的实施例的应用了存储装置的固态驱动器(SSD)系统的框图。
图16是示出根据本公开的实施例的应用了存储装置的用户系统的框图。
具体实施方式
本文中的具体结构和功能描述针对本发明的实施例。然而,本发明可以以各种其它形式实施,并且因此不限于本文阐述的实施例。
下面参照附图详细描述本公开的各个实施例,以使本领域技术人员能够容易地实施和实践本发明。在整个说明书中,对“实施例”、“另一实施例”等的参考不一定仅针对一个实施例,并且对任意这种短语的不同参考不一定针对相同的实施例。而且,与元件或操作的列表(例如,A和B)结合使用的短语“至少一个”表示仅A、仅B或A和B两者。
图1是示出存储装置的框图。
参照图1,存储装置50可以包括存储器装置100和存储器控制器200。
存储装置50可以在诸如下列的主机300的控制下存储数据:移动电话、智能电话、MP3播放器、膝上型计算机、台式计算机、游戏机、TV、平板PC或车载信息娱乐系统。
根据作为与主机300的通信方案的主机接口,存储装置50可以被配置为各种类型的存储装置中的任意一种。例如,存储装置50可以利用下列来实施:固态驱动器(SSD)、多媒体卡(MMC)、嵌入式MMC(eMMC)、尺寸减小的MMC(RS-MMC)、微型MMC(micro-MMC)、安全数字(SD)卡、迷你SD卡、微型SD卡、通用串行总线(USB)存储装置、通用闪存(UFS)装置、紧凑型闪存(CF)卡、智能媒体卡(SMC)和/或记忆棒。
存储装置50可以被制造为各种封装类型中的任意一种。例如,存储装置50可以被制造为堆叠式封装(POP)、系统级封装(SIP)、片上系统(SOC)、多芯片封装(MCP)、板上芯片(COB)、晶圆级制造封装(WFP)和/或晶圆级堆叠封装(WSP)。
存储器控制器200可以控制存储装置50的全部操作。
当电力被供应至存储装置50时,存储器控制器200可以运行固件(FW)。当存储器装置100是闪速存储器装置时,存储器控制器200可以运行诸如闪存转换层(FTL)的FW以控制主机300和存储器装置100之间的通信。
存储器控制器200可以包括初始化控制器210。初始化控制器210可以是初始化器。在电力被施加到存储器控制器200之前,存储器控制器200的操作模式可以通过施加到外部引脚的信号而被设置为调试模式。随后,当电力被施加到存储器控制器200时,可以设置用于允许将外部装置通过接口组件220连接到初始化控制器210的连接位。当用于允许将外部装置通过接口组件220连接到初始化控制器210的连接位被设置时,外部装置可以设置初始化控制器210以开始初始化操作。
在初始化控制器210开始初始化操作之后,初始化控制器210可以控制存储器控制器200中包括的其它组件的初始化。也就是说,初始化控制器210可以首先执行初始化操作。当初始化控制器210开始初始化操作时,存储器控制器200中包括的诸如处理器230、通用异步接收器/发送器(UART)和计时器的其它组件中的每一个可以推迟初始化操作。
在初始化控制器210完成初始化操作之后,初始化控制器210可以控制存储器控制器200中包括的组件中的至少一个的初始化。在初始化控制器210的初始化操作完成之后,初始化控制器210可以同时或顺序地初始化存储器控制器200中的其它组件。
存储器控制器200可以包括接口组件220。接口组件220可以将存储器控制器200和外部装置彼此连接。而且,接口组件220可以将存储器控制器200的组件彼此连接。当外部装置连接到接口组件220时,接口组件220可以指示设置用于初始化存储器控制器200的组件的初始化位。
具体地,接口组件220可以向初始化控制器210提供用于设置初始化控制器210的初始化位的初始化位设置请求IBITSET_REQ。初始化控制器210可以基于初始化位设置请求IBITSET_REQ设置初始化位。初始化控制器210可以基于初始化位控制存储器控制器200的每个组件的待开始的初始化操作。也就是说,可以针对作为存储器控制器200的组件的处理器230和其它组件单独设置初始化位。此外,在本公开中,初始化控制器210可以单独设置与处理器230中包括的调试控制器和代码运行器相对应的初始化位。
存储器控制器200可以包括处理器230。当存储器控制器200的电源接通时,处理器230可以运行只读存储器(ROM)240中存储的代码。ROM 240可以是存储用于执行操作的代码的代码存储器。
具体地,处理器230可以包括调试控制器和代码运行器。处理器230可以驱动固件,并且调试控制器和代码运行器可以被实施为由处理器230驱动的固件。
调试控制器可以设置用于暂停在ROM 240中存储的代码之中的代码的运行的暂停代码地址。因此,在ROM 240中存储的代码之中的对应于暂停代码地址的代码被设置为暂停代码。因此,调试控制器可以通过设置暂停代码地址来将ROM 240中存储的代码中的任意一个设置为暂停代码。
代码运行器可以运行ROM 240中存储的代码。具体地,代码运行器可以从ROM 240中存储的代码之中的起始代码起顺序地运行ROM 240中存储的代码。当在调试控制器中未设置暂停代码时,代码运行器可以运行ROM 240中存储的代码,直到ROM 240中存储的最后代码。然而,当在调试控制器中设置暂停代码时,代码运行器可以在代码运行器接收到暂停代码时暂停代码的运行。
存储器控制器200可以包括ROM 240。在存储器控制器200的电源接通之后,ROM240可以包括待运行的代码,以使存储器装置100执行操作。也就是说,用于执行后台操作的代码可以存储在ROM 240中。当运行ROM 240中存储的一些或全部代码时,存储器装置100可以执行操作。
在本公开中,描述了用于执行操作的代码存储在ROM 240中的情况。然而,用于执行操作的代码可以存储在代替ROM 240或除了ROM 240之外的各种其它存储器中。
当电力被施加到存储器控制器200时,ROM 240中存储的代码可以处于该代码被传送到代码运行器以运行的状态。然而,ROM 240中存储的代码可能不被提供至处理器230直到处理器230完全准备好运行代码。
由于当存储器控制器200的电源接通时,ROM 240中存储的代码将被执行,因此即使当存储器控制器200的电源关闭时,代码仍存储在ROM 240中。也就是说,ROM 240可以被配置为非易失性存储器。
存储器控制器200可以包括随机存取存储器(RAM)250。RAM 250可以接收并存储在存储器装置100中存储的代码。由于RAM 250被配置为易失性存储器,因此当存储器控制器200的电源关闭时,在RAM 250中存储的代码可能会消失。因此,在存储器控制器200的电源接通之后,存储器装置100中存储的代码可以存储在RAM 250中,使得存储器控制器200运行代码。
存储器装置100可以存储数据。存储器装置100在存储器控制器200的控制下进行操作。存储器装置100可以包括存储器单元阵列,该存储器单元阵列包括用于存储数据的多个存储器单元。存储器单元阵列可以包括多个存储块。每个存储块可以包括多个存储器单元。一个存储块可以包括多个页面。在实施例中,页面可以是将数据存储在存储器装置100中或读取存储器装置100中存储的数据的单位。存储块可以是擦除数据的单位。
在实施例中,存储器装置100可以是双倍数据速率同步动态随机存取存储器(DDRSDRAM)、低功率双倍数据速率4(LPDDR4)SDRAM、图形双倍数据速率(GDDR)SRAM、低功率DDR(LPDDR)、Rambus动态随机存取存储器(RDRAM)、NAND闪速存储器、垂直NAND闪速存储器、NOR闪速存储器、电阻随机存取存储器(RRAM)、相变随机存取存储器(PRAM)、磁阻随机存取存储器(MRAM)、铁电随机存取存储器(FRAM)、自旋转移力矩随机存取存储器(STT-RAM)等。在本说明书中,通过示例的方式假设并描述存储器装置100是NAND闪速存储器的情况。
在实施例中,存储器装置100可以以三维阵列结构来实施。本公开不仅可以应用于利用浮栅(FG)配置电荷存储层的闪速存储器装置,而且可以应用于利用绝缘层配置电荷存储层的电荷撷取闪存(CTF)。
在实施例中,存储器装置100中包括的存储器单元中的每一个可以被配置为存储一个数据位的单层单元(SLC)。可选地,存储器装置100中包括的存储器单元中的每一个可以被配置为存储两个数据位的多层单元(MLC)、存储三个数据位的三层单元(TLC)或存储四个数据位的四层单元(QLC)。
存储器装置100被配置成从存储器控制器200接收命令和地址并且访问存储器单元阵列中由地址选择的区域。也就是说,存储器装置100可以对由地址选择的区域执行对应于命令的操作。例如,存储器装置100可以执行写入(编程)操作、读取操作以及擦除操作。在编程操作中,存储器装置100可以将数据编程在由地址选择的区域中。在读取操作中,存储器装置100可以从由地址选择的区域读取数据。在擦除操作中,存储器装置100可以擦除存储在由地址选择的区域中的数据。
存储器装置100可以在存储器控制器200的控制下通过使用设置操作电压执行编程操作或擦除操作。
在实施例中,存储器控制器200可以从主机300接收数据和逻辑块地址(LBA),并且将LBA转换为物理块地址(PBA),该物理块地址表示存储器装置100中的将存储数据的存储器单元的地址。而且,存储器控制器200可以将建立LBA和PBA之间的映射关系的映射信息存储在缓冲存储器中。
存储器控制器200可以响应于来自主机300的请求控制存储器装置100执行编程操作、读取操作、擦除操作等。在编程操作中,存储器控制器200可以将编程命令、PBA和数据提供至存储器装置100。在读取操作中,存储器控制器200可以将读取命令和PBA提供至存储器装置100。在擦除操作中,存储器控制器200可以将擦除命令和PBA提供至存储器装置100。
在实施例中,存储器控制器200可以在没有来自主机300的任何请求的情况下自主地生成编程命令、地址和数据,并且将编程命令、地址和数据传送至存储器装置100。例如,存储器控制器200可以将命令、地址和数据提供至存储器装置100,以执行诸如损耗均衡或垃圾收集的后台操作。
在实施例中,存储器控制器200可以控制至少两个存储器装置100。存储器控制器200可以根据交织方案控制存储器装置,以便提高操作性能。
主机300可以使用诸如下列的各种通信协议中的至少一种与存储装置50通信:通用串行总线(USB)、串行AT附件(SATA)、高速芯片间(HSIC)、小型计算机系统接口(SCSI)、火线、外围组件互连(PCI)、高速PCI(PCIe)、高速非易失性存储器(NVMe)、通用闪存(UFS)、安全数字(SD)、多媒体卡(MMC)、嵌入式MMC(eMMC)、双列直插式存储器模块(DIMM)、寄存式DIMM(RDIMM)和/或低负载DIMM(LRDIMM)。
图2是示出图1中所示的存储器控制器的实施例的框图。
参照图2,图2中所示的存储器控制器200可以包括初始化控制器210、接口组件220、处理器230、只读存储器(ROM)240和随机存取存储器(RAM)250。除了接口组件220之外,存储器控制器200的组件中的每一个可以通过总线260和接口组件220连接到另一组件。此外,除了接口组件220之外,存储器控制器200的组件中的每一个可以通过总线260和接口组件220连接到外部装置。
在实施例中,初始化控制器210可以控制初始化操作。初始化控制器210可以控制处理器230中包括的调试控制器和代码运行器中的至少一个的初始化操作。当在存储器控制器200的电源关闭之后存储器控制器200的电源接通时,存储器控制器200的组件中的任意一个的初始化操作可以包括将组件的状态从组件不能执行任何操作的状态(非操作状态)改变为组件能够执行操作的状态(操作状态)。
具体地,当在存储器控制器200的电源关闭之后存储器控制器200的电源接通时,初始化控制器210可以首先执行初始化操作。也就是说,当在存储器控制器200的电源关闭之后存储器控制器200的电源接通时,初始化控制器210的状态可以变成初始化控制器能够首先执行操作的状态。也就是说,存储器控制器200的组件之中的初始化控制器210可以首先执行操作。
在初始化控制器210执行初始化操作之后,初始化控制器210可以控制处理器230中包括的调试控制器和代码运行器中的至少一个的初始化操作。也就是说,初始化控制器210可以控制处理器230中包括的调试控制器和/或代码运行器以执行操作。初始化控制器210可以通过总线260执行这种控制。
在实施例中,接口组件220可以将外部装置和存储器控制器200彼此连接。而且,接口组件220可以将存储器控制器200的组件彼此连接。除了物理(有线)连接之外,术语“连接”及其变型还涵盖非物理(无线)连接。
具体地,接口组件220可以连接到外部装置。因此,当外部装置连接到接口组件时,从外部装置接收的请求和数据可以通过接口组件200被提供至存储器控制器200的组件。
在实施例中,接口组件220可以从外部装置接收请求和数据,并且将所接收的请求和所接收的数据提供至处理器230或初始化控制器210。但是,在本公开的实施例中,为了检测错误的代码,接口组件220可以将从外部装置接收的请求和数据通过总线260提供至处理器230、初始化控制器210或RAM 250。
因此,接口组件220可以将存储器控制器200的组件彼此连接。也就是说,存储器控制器200的组件可以通过总线260彼此连接,或者通过接口组件220彼此连接。
在实施例中,处理器230可以运行ROM 240中存储的代码。具体地,处理器230可以从ROM 240中存储的代码之中的起始代码到最后代码运行ROM 240中存储的代码。处理器230可以顺序地运行ROM 240中存储的代码。
在本公开中,描述了用于执行操作的代码存储在ROM 240中的情况。然而,用于执行操作的代码可以存储在代替ROM 240或除了ROM 240之外的各种其它存储器中。
在初始化控制器210执行初始化操作之后,初始化控制器210可以控制处理器230的初始化操作。也就是说,在初始化控制器210执行初始化操作之后,初始化控制器210可以将处理器230的状态改变成处理器能够执行操作的状态。当处理器230执行初始化操作时,处理器230可以设置与ROM 240中存储的代码之中的暂停代码相对应的暂停代码地址。也就是说,与暂停代码地址相对应的代码可以被设置为暂停代码。暂停代码可以使处理器230暂停代码运行。
当在处理器230设置暂停代码地址之后,从ROM 240接收的代码的地址和暂停代码地址相同时,处理器230可以暂停代码的运行。也就是说,处理器230可以不运行对应于暂停代码地址的暂停代码。当处理器230未设置暂停代码地址时,处理器230不暂停代码的运行,而是可以顺序地运行代码直到最后代码。
在实施例中,ROM 240可以存储用于允许存储器装置100执行操作的代码。当存储器控制器200的电源接通时,可以运行ROM 240中存储的代码。当ROM 240中存储的代码被运行时,存储器控制器200和存储器装置100可以执行操作。也就是说,在后台操作中,可以运行ROM 240中存储的代码。
具体地,当电力被施加到存储器控制器200时,ROM 240中存储的代码可以处于该代码被传送到代码运行器以运行的状态。然而,在处理器230中包括的调试控制器和代码运行器都将要执行初始化操作之前,ROM 240中存储的代码才可以被提供至处理器230。也就是说,ROM 240中存储的代码可能不被提供至处理器230直到处理器230完全准备好运行代码。
在另一实施例中,即使在存储器控制器200和存储器装置100执行操作之后,也可以运行ROM 240中存储的代码。
由于每当存储器控制器200的电源接通时,ROM 240中存储的代码将被运行,因此即使当存储器控制器200的电源关闭时,ROM 240中存储的代码也不会消失。因此,ROM 240可以被配置为非易失性存储器。在代码被存储在ROM 240中之后,ROM 240中存储的代码可能被改变。因此,ROM 240中存储的代码仅是可读的。
在实施例中,当设置暂停代码时,可以执行ROM 240中存储的在暂停代码之前的代码。
在实施例中,RAM 250可以存储代码。RAM 250可以被配置为易失性存储器。也就是说,当存储器控制器200的电源关闭时,RAM 250中存储的代码可能消失。
具体地,RAM 250是可读且可写的。因此,RAM 250可以接收并存储在存储器装置100中存储的数据。也就是说,存储器控制器200可以接收存储器装置100中存储的代码,将存储的代码存储在RAM 250中,并且运行RAM 250中存储的代码。
在实施例中,RAM 250可以接收未存储在ROM 240中的代码。也就是说,RAM 250可以从存储器装置100接收处理器230将执行的代码之中、未存储在ROM 240中的代码。
RAM 250可以推迟初始化操作,直到处理器230执行初始化操作。也就是说,在处理器230完全准备好运行代码之前,RAM 250可以不从存储器装置100接收数据。当处理器230完全准备好运行代码时,RAM 250可以从存储器装置100接收数据。
图3是示出图2中所示的处理器中包括的调试控制器的初始化操作的示图。
参照图3,图3中示出的存储器控制器200可以包括初始化控制器210、接口组件220和处理器230。处理器230可以包括调试控制器231和代码运行器233。调试控制器231和代码运行器233可以分别是选择器和运行器。在图3中,为了清楚起见,未示出ROM 240和RAM250。然而,如图2中所示,这些组件可以是的存储器控制器200的一部分。
在实施例中,当处理器230运行ROM 240中存储的代码之中的错误代码时,可以暂停存储器控制器200和存储器装置100的操作。当存储器控制器200的操作被暂停时,可以中断存储器控制器200的组件通过其彼此连接的总线260。
因此,可以执行用于检测错误代码的操作。为了检测错误代码,外部装置可以连接到接口组件220。外部装置可以包括调试器。
当存储器控制器200和存储器装置100的操作由于运行错误代码被暂停时,存储器控制器200的操作模式可以在存储器控制器200的电源关闭之后被设置为调试模式。可以通过包括存储器控制器200和存储器装置100的存储装置50的外部引脚来设置调试模式。也就是说,可以根据被施加到与存储装置50连接的外部引脚的高信号和低信号的组合,将存储器控制器200的操作模式设置为调试模式。
在存储器控制器200的操作模式被设置为调试模式之后,存储器控制器200的电源可以接通。当存储器控制器200的电源接通并且外部装置连接到接口组件220时,可以执行用于检测错误代码的操作。
然而,当在外部装置连接到接口组件220之前,存储器控制器200和存储器装置100的操作被暂停时,外部装置不会连接到接口组件200。当外部装置不连接到接口组件220时,不能检测到错误代码。因此,当外部装置不能连接到接口组件220时,可以执行用于允许外部装置连接到接口组件220的操作。
图3至图7示出用于将外部装置连接到接口组件220的操作。
在图3中,可以将存储器控制器200的操作模式设置为调试模式。调试模式可以是存储器控制器200的、通过将外部装置连接到接口组件220来检测错误代码的操作模式。当存储器控制器200的操作模式被设置为调试模式时,存储器控制器200可以执行用于检测ROM 240中存储的错误代码的操作。
在实施例中,在电力被施加到存储器控制器200之前,可以将存储器控制器200的操作模式设置为调试模式。可以通过与包括存储器控制器200和存储器装置100的存储装置50连接的外部引脚来设置调试模式。
可以在电力被施加到存储器控制器200之前设置调试模式。当将存储器控制器200的操作模式设置为调试模式时,即使在电力被施加到存储器控制器200时,存储器控制器200的组件也可以推迟初始化操作。可以设置初始化控制器210中包括的初始化位,使得存储器控制器200的组件中的每一个推迟初始化操作。也就是说,在电力被施加到存储器控制器200之后,存储器控制器200的组件中的每一个可以不执行初始化操作。
在实施例中,当存储器控制器200的操作模式被设置为调试模式时,电力可以被施加到存储器控制器200。当电力被施加到存储器控制器200时,可以执行用于检测错误代码的操作。
当电力被施加到存储器控制器200时,外部装置可以选择接口组件220中包括的连接位中的任意一个。接口组件220的连接位可以对应于存储器控制器200的、连接到接口组件220的组件。也就是说,可以例如预先地设置连接位,使得每个位对应于存储器控制器200中的组件中的一个不同的组件,并且外部装置可以选择连接位之中的、与待连接到接口组件220的组件相对应的位。
在实施例中,当外部装置将相关联组件的连接位设置为“0”时,接口组件220可以连接到初始化控制器210。当外部装置将连接位设置为“1”时,接口组件220可以连接到处理器230。
在另一实施例中,各个组件可以根据由外部装置设置的连接位被连接到接口组件220。
当存储器控制器200的操作模式通过外部引脚被设置为调试模式时,电力可以被施加到存储器控制器200。当由于在电力可以被施加到存储器控制器200之后外部装置将连接位设置为“0”,接口组件220和初始化控制器210彼此连接时,初始化控制器210可以执行初始化操作。当在存储器控制器200的电源关闭之后存储器控制器200的电源接通时,针对给定组件的初始化操作可以将该组件的状态从非操作状态改变为可操作状态。在初始化控制器210执行初始化操作之后,初始化控制器可以执行用于检测错误代码的操作。
在实施例中,初始化控制器210可以包括初始化位IBIT。初始化位IBIT可以包括与存储器控制器200的组件中的每一个相对应的位。IBIT的位可以分别用于初始化存储器控制器200的组件。在电力被施加到存储器控制器200之前,可以将IBIT的所有位设置为默认值。默认值可以是“0”或“1”。在本公开中,假设初始化位IBIT的默认值为“0”的情况。
参照图4和图8更详细地描述初始化位。
当初始化控制器210开始初始化操作时,可以设置初始化位IBIT,使得调试控制器231和代码运行器233推迟初始化操作。
在初始化控制器210执行初始化操作之后,初始化控制器210可以从接口组件220接收初始化位设置请求IBITSET_REQ。初始化位设置请求IBITSET_REQ可以是用于初始化调试控制器231的请求。
因此,在存储器控制器200的电源接通之后,初始化控制器210可以首先执行初始化操作。当初始化控制器210执行初始化操作时,初始化控制器210可以从接口组件220接收初始化位设置请求IBITSET_REQ。
在实施例中,初始化控制器210可以基于初始化位设置请求IBITSET_REQ设置初始化位IBIT。因此,接口组件220可以将初始化位设置请求IBITSET_REQ提供至初始化控制器210,以顺序地并且分别地初始化存储器控制器200的组件。
初始化控制器210可以基于所接收的初始化位设置请求IBITSET_REQ设置初始化位IBIT。在存储器控制器200的电源接通之后最初接收的初始化位设置请求IBITSET_REQ可以是用于改变对应于调试控制器231的位的请求。
因此,初始化控制器210可以基于在存储器控制器200的电源接通之后最初接收的初始化位设置请求IBITSET_REQ,设置与初始化位IBIT中对应于调试控制器231的位。初始化控制器210可以设置用于开始调试控制器231的初始化操作的初始化位IBIT。
初始化控制器210可以设置初始化位IBIT,使得代码运行器233推迟初始化操作。具体地,可以设置初始化位IBIT,使得代码运行器233推迟初始化操作,直到在调试控制器231开始初始化操作之后设置暂停代码地址。
因此,初始化控制器210可以控制调试控制器231改变初始化位IBIT以开始初始化操作,并基于改变的初始化位IBIT来执行初始化操作。
当在初始化位IBIT中的位之中对应于调试控制器231的位被设置时,初始化控制器210可以将初始化操作请求INIOP_REQ输出到调试控制器231。调试控制器231可以基于初始化操作请求INIOP_REQ执行初始化操作。也就是说,当调试控制器231接收到初始化操作请求INIOP_REQ时,调试控制器231的状态可以被改变为操作状态,即调试控制器231能够执行操作的状态。由调试控制器231执行的操作可以包括设置ROM 240中存储的代码之中的暂停代码。
在实施例中,当调试控制器231正在执行初始化操作时,代码运行器233可以不执行任何初始化操作。也就是说,当调试控制器231正在执行初始化操作时,可以推迟代码运行器233的初始化。当代码运行器233的初始化被推迟时,处理器230的操作可以不被暂停。
在实施例中,当代码运行器233正在推迟初始化操作时,外部装置可以通过接口组件220和初始化控制器210连接到调试控制器231。参照图5更详细地描述将暂停代码设置请求通过接口组件220和初始化控制器210提供至调试控制器231的进程。
图4是示出用于设置初始化位的方法的示图,该初始化位用于控制图3中所示的调试控制器的初始化操作。
参照图4,图4中所示的第一列表示存储器控制器200的组件,图4中所示的第二列表示初始化位IBIT,每个初始化位与其相应的组件匹配。图4中所示的初始化位IBIT可以存储在初始化控制器210中。图4中所示的初始化位IBIT可以分别对应于存储器控制器200的组件。当初始化位IBIT中的位被改变时,初始化控制器210可以响应于该改变控制相应组件的初始化操作。
图4将调试控制器231、代码运行器233、通用异步接收器/发送器(UART)和计时器识别为存储器控制器200的组件。然而,附加或其它组件可以包括在图4中。不管存储器控制器200中包括多少个组件,与每个组件相对应的初始化位可以被存储在初始化控制器210中。用于检测错误代码的一个或多个组件可以包括在存储器控制器200中,因此包括在图4中的列表中。
在图4中,IBIT的每个位的默认值为“0”。也就是说,在从接口组件220接收到初始化位设置请求IBITSET_REQ之前,初始化位IBIT的位可以全部为“0”。当初始化控制器210接收初始化位设置请求IBITSET_REQ时,初始化位IBIT的位可以从对应于调试控制器231的位开始顺序地被改变为“1”。
当IBIT的位全部为“0”时,初始化控制器210可以不执行用于初始化任何组件的任何操作。当IBIT的位被从“0”改变为“1”时,初始化控制器210可以执行用于初始化相应组件的操作。
图4示出在存储器控制器的电源接通之后,当初始化控制器210从接口组件220最初接收初始化位设置请求IBITSET_REQ时,设置初始化位IBIT。
在实施例中,初始化控制器210可以基于初始化位设置请求IBITSET_REQ,改变对应于调试控制器231的位。具体地,初始化控制器210可以将对应于调试控制器231的位从“0”改变为“1”。当对应于调试控制器231的位被改变时,初始化控制器210可以将初始化操作请求INIOP_REQ输出到调试控制器231。调试控制器231可以基于初始化操作请求INIOP_REQ处于调试控制器231能够执行操作的状态。
当调试控制器231正在执行初始化操作时,其它组件可以不执行任何初始化操作。也就是说,由于与诸如代码运行器233、UART和计时器的组件相对应的位是“0”,所以相应的组件可以不执行任何初始化操作。
具体地,初始化控制器210可以设置初始化位IBIT,使得在调试控制器231正在执行初始化操作时,代码运行器233推迟其它组件中的每一个的初始化操作。可以设置初始化位IBIT,使得代码运行器233推迟初始化操作,直到在调试控制器231开始初始化操作之后设置暂停代码地址。
当IBIT的位未改变时,可以推迟与未改变的位相对应的组件中的每一个的初始化操作。因此,可以在不同的时间分别初始化存储器控制器200中的组件中的每一个。特别地,可以单独地初始化处理器230中包括的调试控制器231和代码运行器233中的每一个。也就是说,在调试控制器231执行初始化操作之后,代码运行器233可以执行初始化操作。
常规地,当在存储器控制器的电源关闭之后存储器控制器的电源接通时,处理器230中包括的调试控制器231和代码运行器233被同时初始化。然而,由于调试控制器231和代码运行器233被同时初始化,当代码运行器233执行错误的代码时,存储器控制器200和存储器装置100的操作被暂停,因此无法检测到错误的代码。
因此,为了设置用于允许代码运行器233暂停代码的运行的暂停代码地址,调试控制器231和代码运行器233中的每一个可以单独地执行初始化操作。也就是说,在本公开的实施例中,提供一种用于在调试控制器231和代码运行器233中的每一个单独执行初始化操作时检测错误代码的方法。
在实施例中,为了检测错误代码,可以将存储器控制器200中的除了图4中所示的组件之外的某些其它组件的初始化位改变为“1”。也就是说,用于检测错误代码的组件中的每一个可以执行初始化操作。因此,可以不将每一个不需要初始化操作来检测错误代码的组件的初始化位改变为“1”。
图5是示出图3中所示的调试控制器设置暂停代码的方法的示图。
图5示出连接到接口组件220的外部装置,以及存储器控制器200的组件之中的初始化控制器210、接口组件220和处理器230。外部装置可以包括调试器400。调试器400可以执行检测ROM 240中存储的代码之中的错误代码的操作。处理器230可以包括调试控制器231和代码运行器233。
在图5中,虽然存储器控制器200仍可以包括ROM 240和RAM 250,但是为了清楚起见,省略这些组件。
图5示出在将存储器控制器200的操作模式设置为调试模式之后存储器控制器200的电源被接通,并且调试控制器231执行初始化操作之后的操作。
图5示出在将存储器控制器200的操作模式设置为调试模式之后存储器控制器200的电源再次接通,并且调试控制器231执行初始化操作的情况。
在图5中,外部装置可以将连接位设置为“0”。当外部装置将连接位设置为“0”时,接口组件220可以连接到初始化控制器210。当接口组件220连接到初始化控制器210时,初始化控制器210可以执行初始化操作。在初始化控制器210执行初始化操作之后,调试控制器231可以通过初始化控制器210和接口组件220连接到外部装置。
虽然不执行代码运行器233的初始化操作,但是调试控制器231可以连接到接口组件220。也就是说,由于调试控制器231和代码运行器233中的每一个单独地执行初始化操作,因此仅调试控制器231可以执行初始化操作,并且经初始化的调试控制器231可以通过初始化控制器210连接到接口组件220。当经初始化的调试控制器231和接口组件220彼此连接时,调试控制器231可以执行操作。
在实施例中,当接口组件220、初始化控制器210和调试控制器231彼此连接时,接口组件220可以从调试器400接收暂停代码设置请求BCSET_REQ。接口组件220可以从调试器400接收暂停代码设置请求BCSET_REQ,并且将所接收的暂停代码设置请求BCSET_REQ提供至初始化控制器210。初始化控制器210可以通过总线将暂停代码设置请求BCSET_REQ提供至调试控制器231。
暂停代码设置请求BCSET_REQ可以是用于设置暂停代码的暂停代码地址的请求。暂停代码可以是ROM 240中存储的代码中的任意一个。也就是说,对应于暂停代码地址的代码可以被设置为暂停代码。暂停代码可以存储在对应于暂停代码地址的位置。当代码运行器233从ROM 240接收的暂停代码地址和设置的暂停代码地址相同时,代码运行器233可以暂停代码的运行。
因此,接口组件220可以从调试器400接收暂停代码设置请求BCSET_REQ,并且通过初始化控制器210将所接收的请求输出至调试控制器231。调试控制器231可以基于所接收的请求设置暂停代码地址。也就是说,可以将用于允许代码运行被暂停的暂停代码地址存储在调试控制器231中。控制器231可以将暂停代码地址提供至代码运行器233。
当暂停代码地址由调试控制器231设置时,初始化控制器210可以改变初始化位IBIT,使得代码运行器233开始初始化操作。
在实施例中,控制器200的操作模式可以基于输入到外部引脚的信号从正常模式改变为调试模式,并且外部装置可以在存储器控制器200的电源接通的状态下将连接位设置为“0”。当外部装置将连接位设置为“0”时,接口组件220可以从外部装置接收新暂停代码设置请求。
在接口组件220接收到新暂停代码设置请求之后,接口组件220可以通过初始化控制器210将新暂停代码设置请求提供至调试控制器231。然后,调试控制器231可以基于新暂停代码设置请求设置新暂停代码地址。
图6是示出在图2中所示的ROM中存储的代码以及代码中的每一个的代码地址的示图。
参照图2和图6,图6中所示的第一列表示ROM 240中存储的一些代码中的每一个的代码地址CODE_ADDR,以及图6中所示的第二列表示与相应代码地址CODE_ADDR相对应的代码,即每一行示出了在相应代码地址CODE_ADDR中存储的代码CODE。图6中所示的代码可以存储在ROM 240中。ROM 240中存储的这些代码可以用于存储器装置100来执行操作。
在本公开中,描述了用于执行操作的代码存储在ROM 240中。然而,这些代码可以存储在代替ROM 240或除了ROM 240之外的各种其它存储器中。
图6示出作为ROM 240中存储的一些代码的六个代码CODE1至CODE6。然而,在另一实施例中,ROM 240可以包括大量代码。
在实施例中,第一代码CODE1可以对应于代码地址CODE_ADDR“0x0”。也就是说,CODE1可以被存储在CODE_ADDR“0x0”。第二代码CODE2对应于代码地址CODE_ADDR“0x4”,并且可以被存储在CODE_ADDR“0x4”。第三代码CODE3对应于代码地址CODE_ADDR“0x8”,并且可以被存储在CODE_ADDR“0x8”。第四代码CODE4对应于代码地址CODE_ADDR“0x12”,并且可以被存储在CODE_ADDR“0x12”。第五代码CODE5对应于代码地址CODE_ADDR“0x16”,并且可以被存储在CODE_ADDR“0x16”。第六代码CODE6对应于代码地址CODE_ADDR“0x20”,并且可以被存储在CODE_ADDR“0x20”。
在实施例中,代码运行器233可以从对应于起始地址的代码起顺序地接收并运行代码。也就是说,在该示例中,由于与第一代码CODE1相对应的地址是起始地址,因此代码运行器233可以顺序地接收并运行从第一代码CODE1至第六代码CODE6的代码。
在实施例中,当调试控制器231设置暂停代码地址时,代码运行器233可以基于从ROM 240接收的代码和代码地址CODE_ADDR暂停代码的运行。暂停代码地址可以被设置为第一至第六代码CODE1至CODE6中的任意一个的地址。
具体地,当代码运行器233从起始代码起顺序地接收并运行ROM240中存储的代码之中的代码时,代码运行器233可以接收与暂停代码地址相同的地址。
例如,当暂停代码被设置为第五代码CODE5时,代码运行器233可以从第一代码CODE1起顺序地接收并运行代码。随后,当代码运行器233接收第五代码CODE5和第五代码CODE5的地址“0x16”时,代码运行器233可以暂停代码运行。在代码运行器233的操作被暂停之后,可以逐个地运行第五代码CODE5之后的代码,可以通过调试器监控代码的操作,并且可以基于监控结果来检测错误代码。也就是说,调试器可以检测由在暂停代码之后运行的代码引起的存储器控制器200的操作错误。
在另一实施例中,在代码运行器233接收第五代码CODE5和第五代码CODE5的地址“0x16”之前,可以暂停存储器控制器200的操作。当存储器控制器200的操作被暂停时,可以重置暂停代码地址。也就是说,可以将第五代码CODE5的地址“0x16”之前的第三代码CODE3的地址“0x8”或第四代码CODE4的地址“0x12”设置为暂停代码地址。
在实施例中,当调试控制器231未设置暂停代码地址时,代码运行器233可以运行代码直到最后代码而没有任何暂停。
图7是示出在设置暂停代码之后图3中所示的代码运行器的初始化操作以及代码运行器的代码运行的示图。
参照图7,图7中示出的存储器控制器200可以包括初始化控制器210、接口组件220、处理器230和ROM 240。在图7中,假设省略图2中所示的存储器控制器200的组件之中的RAM 250的情况。图7中所示的处理器230可以包括调试控制器231和代码运行器233。
图7示出在调试控制器231中设置暂停代码地址之后的操作。
在实施例中,在调试控制器231中设置暂停代码地址之后,初始化控制器210可以控制代码运行器233的初始化操作。
当接口组件220和初始化控制器210彼此连接时,接口组件220可以将初始化位设置请求IBITSET_REQ提供至初始化控制器210。初始化位设置请求IBITSET_REQ可以是针对代码运行器233的初始化操作的请求。也就是说,在调试控制器231执行初始化操作之后,代码运行器233可以执行初始化操作。
初始化控制器210可以基于初始化位设置请求IBITSET_REQ设置初始化位IBIT的位。具体地,初始化控制器210可以设置初始化位IBIT的位之中对应于代码运行器233的位。也就是说,初始化控制器210可以设置用于开始代码运行器233的初始化操作的初始化位IBIT。初始化位IBIT中的位之中对应于代码运行器233的位可以从作为默认值的“0”被改变为“1”。初始化控制器210可以基于改变的初始化位IBIT控制代码运行器233以开始初始化操作。
具体地,初始化控制器210可以将初始化操作请求INIOP_REQ提供至代码运行器233。当代码运行器233接收初始化操作请求INIOP_REQ时,代码运行器233的状态可以从代码运行器233不能执行任何操作的状态被改变为代码运行器233能够执行操作的状态。也就是说,可以基于初始化操作请求INIOP_REQ将代码运行器233的状态改变为代码可运行状态。
在代码运行器233执行初始化操作之后,代码运行器233可以从起始代码起顺序地接收ROM 240中存储的代码。也就是说,ROM 240可以从存储器控制器200的电源接通时开始处于ROM 240能够将代码传送到代码运行器233的状态。当代码运行器233执行初始化操作时,ROM 240中存储的代码可以被传送到代码运行器233。
当代码运行器233接收ROM 240中存储的代码时,代码运行器233还可以接收对应于相应代码的代码地址CODE_ADDR。
在实施例中,在代码运行器233从ROM 240接收代码和代码地址CODE_ADDR之后,代码运行器233可以从调试控制器231接收暂停代码地址BC_ADDR。可以基于暂停代码设置请求BCSET_REQ设置暂停代码地址BC_ADDR。每当代码运行器233从ROM 240接收代码时,代码运行器233可以从调试控制器231接收暂停代码地址BC_ADDR。
代码运行器233可以确定在起始代码之后接收的代码的地址和暂停代码地址是否相同。当在起始代码之后接收的代码的地址和暂停代码地址相同时,代码运行器233可以暂停运行所接收的代码的操作。当在起始代码之后接收的代码的地址和暂停代码地址不相同时,代码运行器233可以运行所接收的代码。
当所接收的代码的运行完成时,代码运行器233可以从ROM 240接收下一代码和下一代码的地址。在代码运行器233接收下一代码和下一代码的地址之后,代码运行器233可以从调试控制器231再次接收暂停代码地址。代码运行器233可以基于下一代码的地址和暂停代码地址是否相同,来确定是否将运行所接收的代码。
当因为在起始代码之后接收的代码的地址与暂停代码地址相同,代码运行器233暂停运行所接收的代码的操作时,外部装置可以将连接位设置为“1”。当外部装置将连接位设置为“1”时,外部装置可以通过接口组件220连接到处理器230。当接口组件220和处理器230彼此连接时,代码运行器233可以从对应于暂停代码地址的暂停代码起顺序地逐个运行代码。外部装置可以通过监控代码运行器233的代码运行来检测错误代码。
图8是示出用于设置初始化位的方法的示图,该初始化位用于控制图3中所示的代码运行器的初始化操作。
参照图4和图8,图8中所示的第一列表示存储器控制器200的组件,图8中所示的第二列表示初始化位IBIT。图8中所示的初始化位IBIT可以存储在初始化控制器210中。图8中所示的初始化位IBIT可以分别对应于存储器控制器200的组件。当IBIT的位被改变时,初始化控制器210可以控制与改变的位相对应的组件的初始化操作。
图8示出在调试控制器231的初始化操作之后为代码运行器233执行初始化操作而改变的初始化位IBIT。在调试控制器231的初始化操作之后从接口组件220接收到初始化位设置请求IBITSET_REQ之前,仅对应于调试控制器231的位可以是“1”。也就是说,对应于调试控制器231的位可以是“1”,使得调试控制器231设置暂停代码地址。
当初始化控制器210接收初始化位设置请求IBITSET_REQ时,对应于代码运行器的位可以从作为默认值的“0”被改变为“1”。更一般地,可以将对应于特定组件的位改变为“1”,使得相应的组件执行初始化操作。当对应于代码运行器233的位被改变为“1”时,代码运行器233可以执行初始化操作。
具体地,当对应于代码运行器233的位被改变时,初始化控制器210可以将初始化操作请求INIOP_REQ输出到代码运行器233。代码运行器233可以基于初始化操作请求INIOP_REQ处于代码运行器233能够执行操作的状态。
当代码运行器233正在执行初始化操作时,其它组件可以不执行任何初始化操作。也就是说,由于与UART和计时器中的每一个相对应的位是“0”,所以UART和计时器可以不执行任何初始化操作。
当初始化位IBIT中的位未被改变时,可以推迟相应组件的初始化操作。因此,可以单独地初始化存储器控制器200中包括的组件中的每一个。特别地,可以单独地初始化处理器230中包括的调试控制器231和代码运行器233中的每一个。由于可以单独地初始化调试控制器231和代码运行器233中的每一个,因此代码运行器233可以在调试控制器231的初始化操作之后执行初始化操作。
在实施例中,为了检测错误代码,可以将存储器控制器中除了图4中所示的组件之外的某些其它组件的初始化位改变为“1”。也就是说,用于检测错误代码的组件中的每一个可以执行初始化操作。因此,可以不将每一个不需要初始化操作来检测错误代码的组件的初始化位改变为“1”。
图9是示出根据本公开的实施例的存储器控制器的操作的示图。
参照图9,在步骤S901中,可以执行调试控制器的初始化操作。调试控制器可以设置ROM中存储的用于存储器装置来执行操作的代码之中的暂停代码的暂停代码地址。
具体地,调试控制器可以被包括在存储器控制器的组件之中的处理器中。调试控制器的初始化操作可以包括将调试控制器的状态从调试控制器不能执行任何操作的状态(非操作状态)改变为调试控制器能够执行操作的状态(操作状态)。当调试控制器正在执行初始化操作时,存储器控制器中的其它组件无法执行任何初始化操作。因此,除调试控制器之外没有其它组件能够执行任何操作。
在步骤S903中,调试控制器可以设置暂停代码地址。暂停代码地址可以是对应于暂停代码的地址。暂停代码地址可以是用于暂停代码运行器的操作的地址。当代码运行器接收暂停代码地址时,代码运行器可以暂停所接收代码的运行。
在步骤S905中,可以执行代码运行器的初始化操作。代码运行器的初始化操作可以在调试控制器中设置暂停代码地址之后执行。也就是说,在执行调试控制器的初始化操作之后,可以执行代码运行器的初始化操作。当执行代码运行器的初始化操作时,可以将代码运行器的状态改变为操作状态。在存储器控制器的组件之中的、用于检测错误代码的一些组件中的每一个也可以执行初始化操作。
在步骤S907中,代码运行器可以基于暂停代码地址运行ROM中存储的代码。具体地,当代码运行器执行初始化操作时,可以将ROM中存储的代码和存储该代码的代码地址提供至代码运行器。代码运行器可以运行从ROM接收的代码。
在实施例中,代码运行器可以接收暂停代码地址。当代码运行器接收暂停代码地址时,代码运行器可以暂停代码的运行。在代码运行器暂停操作之后,代码运行器可以从暂停代码起顺序地运行代码,并且外部装置可以通过由代码运行器运行的代码来检测错误代码。当外部装置检测到错误代码时,可以校正错误代码,并且经校正的代码可以被存储在存储装置的ROM中。
图10是示出根据本公开的实施例的存储器控制器的操作的示图。
参照图9和图10,步骤S1001和S1003更详细地描述步骤S901。步骤S1005和S1007更详细地描述步骤S903。也就是说,步骤S1001和S1003详细示出调试控制器的初始化操作,而步骤S1005和S1007详细示出设置暂停代码地址的步骤。
在步骤S1001中,初始化控制器可以设置初始化位。初始化位可以控制存储器控制器的组件中的每一个以执行初始化操作。初始化控制器可以基于从接口组件接收的初始化位设置请求设置初始化位。
在实施例中,施加到存储器控制器的电源可以被关闭,然后被接通。在存储器控制器的电源接通之前,可以将存储器控制器设置为调试模式。随后,当存储器控制器的电源接通时,存储器控制器的组件中的每一个可以从初始化控制器开始执行初始化操作。当由于初始化控制器执行初始化操作,初始化控制器处于初始化控制器能够执行操作的状态时,可以设置用于控制将执行调试控制器的初始化操作的初始化位。也就是说,可以设置初始化位以便控制调试控制器的初始化操作。具体地,可以将初始化位中的位之中对应于调试控制器的位从作为默认值的“0”改变为“1”。
在步骤S1003中,可以初始化调试控制器。在实施例中,当对应于调试控制器的位被改变为“1”时,初始化控制器可以将初始化设置请求提供至调试控制器。调试控制器可以基于初始化设置请求执行初始化操作。当调试控制器被初始化时,调试控制器的状态可以从非操作状态被改变为操作状态。因此,在调试控制器执行初始化操作之后,调试控制器可以处于调试控制器能够设置暂停代码地址的状态。
在步骤S1005中,调试控制器可以通过接口组件和初始化控制器接收暂停代码设置请求。暂停代码设置请求可以用于设置暂停代码地址。
当在存储器控制器被设置为调试模式之后存储器控制器的电源接通时,接口组件可以根据由外部装置设置的连接位通过初始化控制器连接到调试控制器。当接口组件和调试控制器彼此连接时,接口组件可以从外部装置接收暂停代码设置请求,并且将所接收的暂停代码设置请求提供至调试控制器。
在步骤S1007中,调试控制器可以存储暂停代码地址。在实施例中,调试控制器可以设置暂停代码地址。暂停代码地址可以是存储暂停代码的地址。暂停代码可以是用于允许代码运行器的操作被暂停的代码。
在实施例中,当暂停代码地址被存储在调试控制器中时,每当代码运行器从ROM接收代码和代码的地址时,调试控制器就可以将暂停代码地址提供至代码运行器。代码运行器可以基于暂停代码地址来运行代码。
图11是示出根据本公开的实施例的存储器控制器的操作的示图。
参照图9和图11,步骤S1101和S1103是步骤S905的子步骤。步骤S1105至S1111是步骤S907的子步骤。也就是说,步骤S1101和S1103详细示出代码运行器的初始化操作,而步骤S1105至S1111详细示出代码运行器运行代码的步骤。
在步骤S1101中,初始化控制器可以设置初始化位。初始化控制器可以基于从接口组件接收的初始化位设置请求来设置初始化位。在接收到初始化位设置请求之前,初始化位中的位之中与调试控制器相对应的位可以是“1”,并且与其它组件中的每一个相对应的位可以是作为默认值的“0”。也就是说,当设置暂停代码地址时,可以设置初始化位,使得执行代码运行器的初始化操作。
在步骤S1103中,可以初始化代码运行器。具体地,当对应于代码运行器的位被设置为“1”时,初始化控制器可以将初始化操作请求提供至代码运行器。代码运行器可以基于初始化操作请求执行初始化操作。当代码运行器执行初始化操作时,代码运行器可以处于代码运行器能够执行操作的状态。
也就是说,ROM可以处于ROM能够将所存储的代码提供至代码运行器的状态。代码运行器可以处于代码运行器能够从ROM接收并运行代码的状态。
在步骤S1105中,代码运行器可以接收代码和代码地址。由代码运行器接收的代码可以是ROM中存储的代码中的任意一个。由代码运行器接收的代码地址可以是对应于所接收代码的地址。也就是说,在代码运行器正在接收ROM中存储的代码时,代码运行器还可以接收存储相应代码的代码地址。
在实施例中,在代码运行器接收ROM中存储的代码和对应于相应代码的代码地址之后,代码运行器可以接收调试控制器中存储的暂停代码地址。代码运行器可以基于暂停代码地址来运行ROM中存储的代码。
在步骤S1107中,代码运行器可以确定从ROM接收的代码的地址是否与暂停代码地址相同。当从ROM接收的代码的地址与暂停代码地址相同时,操作进行到步骤S1111。当从ROM接收的代码的地址与暂停代码地址不相同时,操作进行到步骤S1109。
在步骤S1109中,代码运行器可以运行所接收的代码。也就是说,由于未接收到用于暂停代码运行器的操作的代码,因此代码运行器可以运行所接收的代码。当代码运行器完全运行所接收的代码时,代码运行器可以从ROM接收下一代码和下一代码的地址。
在步骤S1111中,可以暂停代码运行器的操作。也就是说,由于用于暂停代码运行器的操作的暂停代码地址和所接收的代码的地址相同,因此代码运行器可以暂停代码的运行。在代码运行器暂停代码的运行之后,代码运行器可以从暂停代码起逐个地运行代码,并且可以通过外部装置监控通过运行代码而获得的结果。因此,从暂停代码起运行代码,并且可以基于运行代码的结果来检测错误代码。当外部装置检测到错误代码时,可以校正错误代码,并且经校正的代码可以被存储在稍后将产生的存储装置的ROM中。
图12是示出根据本公开的实施例的存储器控制器的操作的示图。
参照图11和图12,可以在步骤S1111之后另外执行图12中所示的步骤。也就是说,图12示出在代码运行器的操作被暂停之后可以另外执行的步骤。
在步骤S1201中,可以改变暂停代码。这种改变可以指调试控制器中存储的暂停代码地址的改变。在步骤S1111之后,当即使代码运行器运行代码也未检测到任何错误的代码时,调试控制器可以改变暂停代码地址。调试控制器可以通过从外部装置接收暂停代码设置请求来改变暂停代码地址,或者在经过一定时间后改变暂停代码地址。
在步骤S1203中,代码运行器可以接收代码和该代码的地址。由代码运行器接收的代码可以是ROM中存储的代码中的任意一个。由代码运行器接收的代码地址可以是与所接收的代码相对应的地址。也就是说,在代码运行器正在接收ROM中存储的代码时,代码运行器还可以接收存储相应代码的代码地址。
在步骤S1205中,代码运行器可以确定从ROM接收的代码的地址是否与暂停代码地址相同。当从ROM接收的代码的地址与暂停代码地址相同时,操作进行到步骤S1209。当从ROM接收的代码的地址与暂停代码地址不相同时,操作进行到步骤S1207。
在步骤S1207中,代码运行器可以运行所接收的代码。也就是说,由于未接收到用于暂停代码运行器的操作的代码,因此代码运行器可以运行所接收的代码。当代码运行器完全运行所接收的代码时,代码运行器可以从ROM接收下一代码和下一代码的地址。
在步骤S1209中,可以暂停代码运行器的操作。也就是说,由于用于暂停代码运行器的操作的暂停代码地址和所接收的代码的地址相同,因此代码运行器可以暂停代码的运行。在代码运行器暂停代码的运行之后,代码运行器可以从暂停代码起逐个地运行代码,并且可以通过外部装置监控通过运行代码而获得的结果。因此,从暂停代码起运行代码,并且可以基于运行代码的结果来检测错误代码。当外部装置检测到错误代码时,可以校正错误代码,并且经校正的代码可以被存储在稍后将产生的存储装置的ROM中。
图13是示出图1中所示的存储器控制器的另一实施例的示图。
参照图13,存储器控制器1000连接到主机和存储器装置。存储器控制器1000被配置为响应于从主机接收的请求来访问存储器装置。例如,存储器控制器1000被配置为控制存储器装置的读取操作、编程操作、擦除操作和后台操作。存储器控制器1000被配置为提供存储器装置和主机之间的接口。存储器控制器1000被配置为驱动用于控制存储器装置的固件。
存储器控制器1000可以包括处理器1010、存储器缓冲器1020、错误校正码(ECC)电路1030、主机接口1040、缓冲器控制电路1050、存储器接口1060和总线1070。
总线1070可以被配置为在存储器控制器1000的组件之间提供通道。
处理器1010可以控制存储器控制器1000的全部操作,并且执行逻辑操作。处理器1010可以通过主机接口1040与外部主机通信,并且通过存储器接口1060与存储器装置通信。而且,处理器1010可以通过缓冲器控制电路1050与存储器缓冲器1020通信。处理器1010可以使用存储器缓冲器1020作为工作存储器、高速缓存存储器或缓冲存储器,控制存储装置的操作。
处理器1010可以执行闪存转换层(FTL)的功能。处理器1010可以通过FTL将由主机提供的逻辑块地址(LBA)转换为物理块地址(PBA)。FTL可以使用映射表接收待被转换为PBA的LBA。根据映射单元,存在FTL的几种地址映射方法。代表性地址映射方法包括页面映射方法、块映射方法以及混合映射方法。
处理器1010被配置为将从主机接收的数据随机化。例如,处理器1010可以使用随机化种子将从主机接收的数据随机化。提供被随机化的数据作为待存储至存储器装置以被编程在存储器单元阵列中的数据。
在读取操作中,处理器1010被配置为将从存储器装置接收的数据去随机化。例如,处理器1010可以使用去随机化种子将从存储器装置接收的数据去随机化。被去随机化的数据可以被输出至主机。
在实施例中,处理器1010可以通过驱动软件或固件来执行随机化和去随机化。
存储器缓冲器1020可以用作处理器1010的工作存储器、高速缓存存储器或缓冲存储器。存储器缓冲器1020可以存储由处理器1010运行的代码和命令。存储器缓冲器1020可以包括静态RAM(SRAM)或动态RAM(DRAM)。
ECC电路1030可以执行ECC操作。ECC电路1030可以对待通过存储器接口1060被写入存储器装置中的数据执行ECC编码。经ECC编码的数据可以通过存储器接口1060被传输至存储器装置。ECC电路1030可以对通过存储器接口1060从存储器装置接收的数据执行ECC解码。在示例中,ECC电路1030可以作为存储器接口1060的组件被包括在存储器接口1060中。
主机接口1040可以在处理器1010的控制下与外部主机通信。主机接口1040可以使用诸如下列的各种通信协议中的至少一种与主机通信:通用串行总线(USB)、串行AT附件(SATA)、高速芯片间(HSIC)、小型计算机系统接口(SCSI)、火线、外围组件互连(PCI)、高速PCI(PCIe)、高速非易失性存储器(NVMe)、通用闪存(UFS)、安全数字(SD)、多媒体卡(MMC)、嵌入式MMC(eMMC)、双列直插式存储器模块(DIMM)、寄存式DIMM(RDIMM)和/或低负载DIMM(LRDIMM)。
缓冲器控制电路1050被配置为在处理器1010的控制下控制存储器缓冲器1020。
存储器接口1060被配置为在处理器1010的控制下与存储器装置通信。存储器接口1060可以通过通道与存储器装置通信命令、地址和数据。
在示例中,存储器控制器1000可以不包括存储器缓冲器1020和缓冲器控制电路1050。
在示例中,处理器1010可以通过使用代码来控制存储器控制器1000的操作。处理器1010可以从存储器控制器1000中设置的非易失性存储器装置(例如,只读存储器(ROM))加载代码。在另一示例中,处理器1010可以通过存储器接口1060从存储器装置加载代码。
在示例中,存储器控制器1000的总线1070可以被划分成控制总线和数据总线。数据总线可以被配置为在存储器控制器1000中传输数据,并且控制总线可以被配置为在存储器控制器1000中传输诸如命令和地址的控制信息。数据总线和控制总线彼此分离,并且因此可以既不彼此不干扰也不彼此影响。数据总线可以连接到主机接口1040、缓冲器控制电路1050、ECC电路1030和存储器接口1060。控制总线可以连接到主机接口1040、处理器1010、缓冲器控制电路1050、存储器缓冲器1020和存储器接口1060。
图14是示出根据本公开的实施例的应用了存储装置的存储卡系统的框图。
参照图14,存储卡系统2000包括存储器控制器2100、存储器装置2200和连接器2300。
存储器控制器2100连接到存储器装置2200。存储器控制器2100被配置为访问存储器装置2200。例如,存储器控制器2100被配置为控制存储器装置2200的读取操作、写入操作、擦除操作和后台操作。存储器控制器2100被配置为提供存储器装置2200和主机之间的接口。存储器控制器2100被配置为驱动用于控制存储器装置2200的固件。存储器装置2200可以与参照图1描述的存储器装置100相同地实施。
在示例中,存储器控制器2100可以包括诸如随机存取存储器(RAM)、处理器、主机接口、存储器接口和错误校正器的组件。
存储器控制器2100可以通过连接器2300与外部装置通信。存储器控制器2100可以根据特定通信协议与外部装置(例如,主机)通信。在示例中,存储器控制器2100可以通过诸如下列的各种通信协议中的至少一种与外部装置通信:通用串行总线(USB)、多媒体卡(MMC)、嵌入式MMC(eMMC)、外围组件互连(PCI)、高速PCI(PCIe)、高级技术附件(ATA)、串行ATA(SATA)、并行ATA(PATA)、小型计算机系统接口(SCSI)、增强型小磁盘接口(ESDI)、电子集成驱动器(IDE)、火线、通用闪存(UFS)、Wi-Fi、蓝牙和/或NVMe。
在示例中,存储器装置2200可以利用诸如下列的各种非易失性存储器装置中的任意一种来实施:电可擦除可编程ROM(EEPROM)、NAND闪速存储器、NOR闪速存储器、相变RAM(PRAM)、电阻式RAM(ReRAM)、铁电RAM(FRAM)和/或自旋转移力矩磁性RAM(STT-MRAM)。
存储器控制器2100和存储器装置2200可以被集成到单个半导体装置中以构成诸如下列的存储卡:PC卡(个人计算机存储卡国际协会(PCMCIA)),紧凑型闪存(CF)卡,智能媒体卡(SM和SMC),记忆棒,多媒体卡(MMC、RS-MMC、微型MMC和eMMC),SD卡(SD、迷你SD、微型SD和SDHC)和/或通用闪存(UFS)。
图15是示出根据本公开的实施例的应用了存储装置的固态驱动器(SSD)系统的框图。
参照图15,SSD系统3000包括主机3100和SSD 3200。SSD 3200通过信号连接器3001与主机3100交换信号SIG,并且通过电源连接器3002接收电力PWR。SSD 3200包括SSD控制器3210、多个闪速存储器3221至322n、辅助电源3230和缓冲存储器3240。
在实施例中,SSD控制器3210可以用作参照图1描述的存储器控制器200。
SSD控制器3210可以响应于从主机3100接收的信号SIG来控制多个闪速存储器3221至322n。在示例中,信号SIG可以是基于主机3100与SSD 3200之间的接口的信号。例如,信号SIG可以由诸如下列的各种接口中的至少一个定义:通用串行总线(USB)、多媒体卡(MMC)、嵌入式MMC(eMMC)、外围组件互连(PCI)、高速PCI(PCIe)、高级技术附件(ATA)、串行ATA(SATA)、并行ATA(PATA)、小型计算机系统接口(SCSI)、增强型小磁盘接口(ESDI)、电子集成驱动器(IDE)、火线、通用闪存(UFS)、WI-FI、蓝牙和/或NVMe。
辅助电源3230通过电源连接器3002连接至主机3100。当来自主机3100的电力供应不平稳时,辅助电源3230可以提供SSD 3200的电力。在示例中,辅助电源3230可以位于SSD3200中,或者位于SSD 3200的外部。例如,辅助电源3230可以位于主板上,并向SSD 3200提供辅助电力。
缓冲存储器3240作为SSD 3200的缓冲存储器而操作。例如,缓冲存储器3240可以临时存储从主机3100接收的数据或从多个闪速存储器3221至322n接收的数据,或者临时存储闪速存储器3221至322n的元数据(例如,映射表)。缓冲存储器3240可以包括诸如DRAM、SDRAM、DDR SDRAM、LPDDR SDRAM和GRAM的易失性存储器,或诸如FRAM、ReRAM、STT-MRAM和PRAM的非易失性存储器。
图16是示出根据本公开的实施例的应用了存储装置的用户系统的框图。
参照图16,用户系统4000包括应用处理器4100、存储器模块4200、网络模块4300、存储模块4400和用户接口4500。
应用处理器4100可以驱动用户系统4000中包括的组件、操作系统(OS)、用户程序等。在示例中,应用处理器4100可以包括用于控制用户系统4000中包括的组件的控制器、接口、图形引擎等。应用处理器4100可以被设置为片上系统(SoC)。
存储器模块4200可以操作为用户系统4000的主存储器、工作存储器、缓冲存储器或高速缓存存储器。存储器模块4200可以包括诸如DRAM、SDRAM、DDR SDRAM、DDR2SDRAM、DDR3SDRAM、LPDDR SDRAM、LPDDR2SDRAM和LPDDR3SDRAM的易失性随机存取存储器,或诸如PRAM、ReRAM、MRAM和FRAM的非易失性随机存取存储器。在示例中,应用处理器4100和存储器模块4200可以通过基于堆叠式封装(PoP)进行封装而被设置为一个半导体封装。
网络模块4300可以与外部装置通信。在示例中,网络模块4300可以支持诸如下列的无线通信:码分多址(CDMA)、全球移动通信系统(GSM)、宽带CDMA(WCDMA)、CDMA-2000、时分多址(TDMA)、长期演进(LTE)、Wimax、WLAN、UWB、蓝牙和Wi-Fi。在示例中,网络模块4300可以被包括在应用处理器4100中。
存储模块4400可以存储数据。例如,存储模块4400可以存储从应用处理器4100接收的数据。可选地,存储模块4400可以将所存储的数据传送至应用处理器4100。在示例中,存储模块4400可以利用诸如下列的非易失性半导体存储器装置来实施:相变RAM(PRAM)、磁性RAM(MRAM)、电阻式RAM(RRAM)、NAND闪存、NOR闪存或具有三维结构的NAND闪存。在示例中,存储模块4400可以被设置为诸如用户系统4000的存储卡或外部驱动器的可移动驱动器。
在示例中,存储模块4400可以包括多个非易失性存储器装置。存储模块4400可以与参照图1中描述的存储装置50相同或基本相同地操作。
用户接口4500可以包括用于将数据或命令输入至应用处理器4100或将数据输出到外部装置的接口。在示例中,用户接口4500可以包括诸如键盘、小键盘、按钮、触摸面板、触摸屏、触摸板、触摸球、摄像机、麦克风、陀螺仪传感器、振动传感器和压电元件的用户输入接口。用户接口4500可以包括诸如液晶显示器(LCD)、有机发光二极管(OLED)显示装置、有源矩阵OLED(AMOLED)显示装置、LED、扬声器和监控器的用户输出接口。
根据本公开的实施例,提供一种能够检测ROM中存储的代码之中具有错误的代码的存储器控制器以及该存储器控制器的操作方法。
虽然已经参照本发明的各个实施例示出并描述了本发明,但是本领域技术人员将理解的是,在不脱离如所附权利要求及其等同方案所限定的本发明的精神和范围的情况下,可以在形式和细节上进行各种改变。因此,本公开的范围不应限于上述实施例,而是应当由包括其等同方案的所附权利要求的范围来确定。
在上述实施例中,不一定必须执行所有步骤。可以组合步骤。而且,步骤不一定按照所描述的顺序执行,并且可以重新排列。本说明书和附图中公开的实施例仅是为了便于理解本发明的示例,而不是限制本发明。也就是说,对于本领域技术人员应当显而易见的是,可以基于本公开的技术范围进行各种修改。
虽然在本文中使用了特定术语,但这些术语仅用于解释本发明的实施例,而不是限制本发明。如本领域技术人员根据本公开将理解的,只要在权利要求的范围内的各种修改都是可以的,并且本发明涵盖除了所公开的实施例之外的所有这些修改。
Claims (21)
1.一种存储器控制器,包括:
代码存储器,存储用于执行操作的代码;
代码运行器,运行所述代码存储器中存储的所述代码以执行所述操作;
调试控制器,设置暂停代码地址,所述暂停代码地址用于暂停用于执行所述操作的所述代码的运行;
初始化控制器,控制所述调试控制器和所述代码运行器中的至少一个的初始化操作;以及
接口组件,接收与设置所述暂停代码地址的操作相对应的暂停代码设置请求,并且将所接收的暂停代码设置请求提供至所述调试控制器。
2.根据权利要求1所述的存储器控制器,其中包括所述调试控制器和所述代码运行器的处理器以及所述初始化控制器通过所述接口组件选择性地联接到调试器,所述调试器用于检测由在所述暂停代码之后被执行的代码引起的所述存储器控制器的操作错误,
其中所述处理器或所述初始化控制器基于所述代码运行器是否已经接收所述暂停代码地址,通过所述接口组件联接到所述调试器。
3.根据权利要求1所述的存储器控制器,其中所述调试控制器和所述代码运行器被实施为由所述处理器驱动的固件。
4.根据权利要求1所述的存储器控制器,其中所述初始化控制器设置初始化位,以控制所述调试控制器和所述代码运行器中的至少一个的初始化的开始。
5.根据权利要求4所述的存储器控制器,其中在所述调试控制器和所述代码运行器的每一个中设置所述初始化位。
6.根据权利要求5所述的存储器控制器,其中设置所述初始化位,使得在所述初始化控制器开始初始化操作之后,所述调试控制器和所述代码运行器中的每一个推迟初始化操作。
7.根据权利要求6所述的存储器控制器,其中所述初始化控制器改变所述调试控制器的初始化位,使得所述调试控制器开始所述初始化操作。
8.根据权利要求7所述的存储器控制器,其中设置所述初始化位,使得所述代码运行器推迟所述初始化操作,直到在所述调试控制器开始所述初始化操作之后设置所述暂停代码地址。
9.根据权利要求7所述的存储器控制器,其中,当所述调试控制器开始所述初始化操作时,所述调试控制器基于所述暂停代码设置请求,设置用于暂停所述代码运行器的操作的所述暂停代码地址。
10.根据权利要求9所述的存储器控制器,其中,当所述暂停代码地址由所述调试控制器设置时,所述初始化控制器改变所述初始化位,使得所述代码运行器开始所述初始化操作。
11.根据权利要求10所述的存储器控制器,其中所述代码运行器从起始代码起顺序地接收所述代码存储器中存储的代码,并且确定在所述起始代码之后接收的代码的地址和所述暂停代码地址是否相同。
12.根据权利要求11所述的存储器控制器,其中,当在所述起始代码之后接收的代码的地址和所述暂停代码地址相同时,所述代码运行器暂停运行所接收的代码的操作。
13.根据权利要求11所述的存储器控制器,其中,当在所述起始代码之后接收的代码的地址和所述暂停代码地址不相同时,所述代码运行器运行所接收的代码。
14.一种用于操作存储器控制器的方法,所述存储器控制器用于控制存储器装置,所述方法包括:
执行调试控制器的初始化操作,所述调试控制器设置用于执行操作的代码之中的暂停代码的暂停代码地址,所述代码被存储在代码存储器中,
设置所述暂停代码地址;以及
执行代码运行器的初始化操作,所述代码运行器用于运行所述代码存储器中存储的所述代码。
15.根据权利要求14所述的方法,其中执行所述调试控制器的初始化操作包括设置初始化位中对应于所述调试控制器的初始化位,以控制所述调试控制器的初始化操作的开始。
16.根据权利要求15所述的方法,其中执行所述代码运行器的初始化操作包括当设置所述暂停代码地址时,改变初始化位中对应于所述代码运行器的初始化位,使得所述代码运行器开始所述初始化操作。
17.根据权利要求14所述的方法,进一步包括基于所述暂停代码地址,运行所述代码存储器中存储的所述代码。
18.根据权利要求17所述的方法,其中运行所述代码包括:
从起始代码起顺序地接收所述代码存储器中存储的代码,以及
确定在所述起始代码之后接收的代码的地址和所述暂停代码地址是否相同。
19.根据权利要求18所述的方法,其中运行所述代码进一步包括当在所述起始代码之后接收的代码的地址和所述暂停代码地址相同时,暂停运行在所述起始代码之后接收的代码。
20.根据权利要求18所述的方法,其中运行所述代码进一步包括当在所述起始代码之后接收的代码的地址和所述暂停代码地址不相同时,运行在所述起始代码之后接收的代码。
21.一种控制器的操作方法,所述方法包括:
当所述控制器通电时,将初始化器初始化成调试模式;
由所述初始化器初始化选择器;
由所述选择器选择多个顺序代码中的一个;
在所述选择之后,由所述初始化器初始化运行器;以及
由所述运行器运行所述顺序代码中的被选择代码之前的一个或多个代码,
其中运行导致所述控制器控制存储器装置执行操作,并且
其中所述控制导致调试所述一个或多个代码。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020190092325A KR20210014365A (ko) | 2019-07-30 | 2019-07-30 | 컨트롤러 및 그 동작 방법 |
KR10-2019-0092325 | 2019-07-30 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112306783A true CN112306783A (zh) | 2021-02-02 |
Family
ID=74260172
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911291637.XA Withdrawn CN112306783A (zh) | 2019-07-30 | 2019-12-16 | 存储器控制器及其操作方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11294780B2 (zh) |
KR (1) | KR20210014365A (zh) |
CN (1) | CN112306783A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI811038B (zh) * | 2022-07-25 | 2023-08-01 | 慧榮科技股份有限公司 | 記憶體控制器與偵錯訊息輸出控制方法 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102546741B1 (ko) * | 2020-11-25 | 2023-06-23 | 성균관대학교산학협력단 | 파일 시스템 기반의 블록 할당 장치 및 방법 |
WO2023197169A1 (en) * | 2022-04-12 | 2023-10-19 | Intel Corporation | Processing unit, software module, methods and program codes |
Family Cites Families (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5892294A (en) * | 1994-07-08 | 1999-04-06 | Reid; Dennis | Modular automotive racing simulation apparatus |
US7266725B2 (en) * | 2001-09-03 | 2007-09-04 | Pact Xpp Technologies Ag | Method for debugging reconfigurable architectures |
DE19804970A1 (de) * | 1998-02-07 | 1999-08-12 | Aventis Res & Tech Gmbh & Co | Katalysatorsystem |
US6564339B1 (en) * | 1999-02-19 | 2003-05-13 | Texas Instruments Incorporated | Emulation suspension mode handling multiple stops and starts |
US6553513B1 (en) * | 1999-02-19 | 2003-04-22 | Texas Instruments Incorporated | Emulation suspend mode with differing response to differing classes of interrupts |
US6836757B1 (en) * | 1999-02-19 | 2004-12-28 | Texas Instruments Incorporated | Emulation system employing serial test port and alternative data transfer protocol |
US7191373B2 (en) * | 2001-03-01 | 2007-03-13 | Syntest Technologies, Inc. | Method and apparatus for diagnosing failures in an integrated circuit using design-for-debug (DFD) techniques |
US7823131B2 (en) * | 2001-06-29 | 2010-10-26 | Mentor Graphics Corporation | Debugger for a hardware-implemented operating system |
US7020820B2 (en) * | 2002-12-20 | 2006-03-28 | Sun Microsystems, Inc. | Instruction-based built-in self-test (BIST) of external memory |
US7096393B2 (en) * | 2002-12-20 | 2006-08-22 | Sun Microsystems, Inc. | Built-in self-test (BIST) of memory interconnect |
KR20050101839A (ko) | 2004-04-20 | 2005-10-25 | 매그나칩 반도체 유한회사 | 내장 에뮬레이터 |
JP2006012064A (ja) * | 2004-06-29 | 2006-01-12 | Toshiba Corp | トレース装置 |
US20060048011A1 (en) * | 2004-08-26 | 2006-03-02 | International Business Machines Corporation | Performance profiling of microprocessor systems using debug hardware and performance monitor |
JP2009193165A (ja) * | 2008-02-12 | 2009-08-27 | Toshiba Corp | デバッグ装置およびデバッグ方法 |
US9064049B2 (en) * | 2010-12-14 | 2015-06-23 | Microsoft Technology Licensing, Llc | Remote debugging of server side code without blocking or high-level privileges |
US9720703B2 (en) * | 2012-11-26 | 2017-08-01 | International Business Machines Corporation | Data driven hardware chips initialization via hardware procedure framework |
US9424165B2 (en) * | 2013-03-14 | 2016-08-23 | Applied Micro Circuits Corporation | Debugging processor hang situations using an external pin |
US10102050B2 (en) | 2015-02-05 | 2018-10-16 | Microchip Technology Incorporated | System and method for generating cross-core breakpoints in a multi-core microcontroller |
GB2541223B (en) * | 2015-08-12 | 2021-08-11 | Siemens Ind Software Inc | Profiling transactions on an integrated circuit chip |
US10671547B2 (en) * | 2016-12-19 | 2020-06-02 | Intel Corporation | Lightweight trusted tasks |
US10235272B2 (en) * | 2017-03-06 | 2019-03-19 | Xilinx, Inc. | Debugging system and method |
US10503620B1 (en) * | 2018-05-21 | 2019-12-10 | Microsoft Technology Licensing, Llc | Parity log with delta bitmap |
-
2019
- 2019-07-30 KR KR1020190092325A patent/KR20210014365A/ko active Search and Examination
- 2019-12-06 US US16/706,261 patent/US11294780B2/en active Active
- 2019-12-16 CN CN201911291637.XA patent/CN112306783A/zh not_active Withdrawn
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI811038B (zh) * | 2022-07-25 | 2023-08-01 | 慧榮科技股份有限公司 | 記憶體控制器與偵錯訊息輸出控制方法 |
Also Published As
Publication number | Publication date |
---|---|
KR20210014365A (ko) | 2021-02-09 |
US11294780B2 (en) | 2022-04-05 |
US20210034478A1 (en) | 2021-02-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11861359B2 (en) | Storage device and method of operating the same | |
CN113721835A (zh) | 数据存储装置及其操作方法 | |
US11294780B2 (en) | Memory controller and operating method thereof | |
KR20210077451A (ko) | 저장 장치 및 그 동작 방법 | |
KR20220046299A (ko) | 스토리지 장치 및 그 동작 방법 | |
CN112582011A (zh) | 存储器设备及其操作方法 | |
KR20230007881A (ko) | 저장 장치 및 그 동작 방법 | |
KR102648790B1 (ko) | 데이터 저장 장치 및 그 동작 방법 | |
CN111309246A (zh) | 存储装置及其操作方法 | |
CN115708042A (zh) | 储存装置、存储器装置及其操作方法 | |
KR20230037240A (ko) | 호스트 장치, 메모리 컨트롤러 및 이를 포함하는 컴퓨팅 시스템 | |
CN110750208B (zh) | 存储装置及操作该存储装置的方法 | |
CN111143255B (zh) | 存储装置及其操作方法 | |
US20220391133A1 (en) | Memory controller and memory system including the same | |
US20240004578A1 (en) | Memory system and method of operating memory controller included in the memory system | |
KR20230021455A (ko) | 메모리 장치 및 그 동작 방법 | |
KR20230050012A (ko) | 스토리지 장치 및 그 동작 방법 | |
KR20220157155A (ko) | 스토리지 장치 및 그 동작 방법 | |
KR20230013558A (ko) | 메모리 컨트롤러, 이의 동작 방법 및 이를 포함하는 컴퓨팅 시스템 | |
TW202316273A (zh) | 記憶體控制器及其操作方法 | |
KR20230011214A (ko) | 스토리지 장치 및 이의 동작 방법 | |
KR20230168908A (ko) | 컴퓨팅 시스템 및 그 동작 방법 | |
KR20240019429A (ko) | 스토리지 장치 및 이를 포함하는 전자 장치와 그 동작 방법 | |
KR20220077689A (ko) | 메모리 컨트롤러 및 그 동작 방법 | |
KR20220169397A (ko) | 컴퓨팅 시스템 및 그 동작 방법 |
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 | ||
WW01 | Invention patent application withdrawn after publication | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20210202 |