本發明有關于一種數據儲存裝置,特別是有關于一種能檢測編程(program)操作的數據儲存裝置。
背景技術:
快閃存儲器(Flash Memory)為一種普遍的非揮發性數據儲存裝置,是以電性方式抹除與程序化。以非及閘型的快閃存儲器(即NAND FLASH)為例,常用作記憶卡(memory card)、通用串行總線閃存裝置(USB flash device)、固態硬碟(SSD)、嵌入式快閃存儲器模組(eMMC)…等使用。近年來,由于快閃存儲器具有數據非揮發性、省電、體積小以及無機械結構等的特性,因此適合使用在各種電子裝置上,尤其是可攜式電子產品。
快閃存儲器包括多個區塊(block),每一區塊包括多個頁(page)以供數據儲存。當快閃存儲器自控制器接收編程(寫入)命令時,便依控制器的指示以及編程地址將數據儲存至該等區塊的某些頁。當快閃存儲器自控制器收到讀取命令時,便依控制器的指示及讀取地址自該等區塊的某些頁讀出數據而回傳數據至控制器。然而,當數據在儲存至快閃存儲器的時候若有意外狀況發生,則可能造成編程操作失敗。假如控制器無法即時地得知編程操作為失敗,則可能導致后續所讀取到的數據為錯誤的。
因此,需要一種檢測方法,能判斷快閃存儲器的編程操作是否正常。
技術實現要素:
本發明提供一種數據儲存裝置。上述數據儲存裝置包括一快閃存儲器以及一控制器。上述快閃存儲器包括一存儲器陣列。上述控制器對上述快閃記憶進行一編程操作。當上述控制器發送上述編程操作的一編程命令至上述快閃存儲器之后,上述控制器在達到上述快閃存儲器的一頁面編程時間之前發送一第一讀取狀態命令至上述快閃存儲器,并根據上述快閃存儲器所回報的一第一存儲器狀態來判斷上述快閃存儲器是否執行上述編程操作。
再者,本發明提供一種檢測方法,用以檢測一快閃存儲器的一編程操作。藉由一控制器,發送上述編程操作的一編程命令至上述快閃存儲器。在達到上述快閃存儲器的一頁面編程時間之前,藉由上述控制器,發送一第一讀取狀態命令至上述快閃存儲器。根據上述快閃存儲器所回報的對應于上述第一讀取狀態命令的一第一存儲器狀態,判斷上述快閃存儲器是否執行上述編程操作。
附圖說明
圖1顯示了根據本發明一實施例所述的之數據儲存裝置;
圖2顯示了根據本發明一實施例所述的一示范波形圖,用以說明圖1中控制器與快閃存儲器之間所傳送的信號;以及
圖3顯示了根據本發明一實施例所述的檢測方法,用以檢測快閃存儲器的編程操作。
符號說明
100~數據儲存裝置;
110~控制器;
120~快閃存儲器;
130~數據暫存器;
140~存儲器陣列;
ALE、I、I/O、O~信號;以及
S310-S390~步驟。
具體實施方式
為讓本發明的上述和其他目的、特征和優點能更明顯易懂,下文特舉出較佳實施例,并配合附附圖,作詳細說明如下:
圖1顯示了根據本發明一實施例所述的數據儲存裝置100。數據儲存裝置100包括控制器110以及快閃存儲器120,其中快閃存儲器120包括數據暫存器130以及由多個記憶單元所形成的存儲器陣列140。在一實施例中,數據暫存器130可以是快取暫存器。數據儲存裝置100可設置在不同電子裝置中,以便電子裝置內的不同元件能對數據儲存裝置100進行存取,以執行特定功能。相應于來自電子裝置內其他元件(例如主要(master)元件)的命令,控制器110可以對快閃存儲器120的存儲器陣列140進行數據存取。舉例來說,當主要元件欲將數據寫入至數據儲存裝置100時,控制 器110會相應于來自主要元件的寫入命令而執行編程操作(program operation),以便將來自主要元件的的數據儲存至存儲器陣列140中。若編程操作失敗,則數據儲存裝置100會通知主要元件,于是主要元件能重新將數據寫入至數據儲存裝置100或是進行后續操作。控制器110檢測快閃存儲器120的編程操作將詳細說明于后。
傳統上,控制器是透過快閃存儲器來得到快閃存儲器的狀態(status),以判斷快閃存儲器的編程操作是否成功。舉例來說,若快閃存儲器的狀態為E0h,則編程操作為成功,其中E0h是表示快閃存儲器為閑置,即快閃存儲器已完成編程操作并進入閑置(idle)模式。反之,若快閃存儲器的狀態為E1h,則編程操作為失敗。然而,在編程操作中,若發生無法預期的狀態,則會使快閃存儲器仍停留在閑置模式而沒有進入到忙碌(busy)模式。于是,控制器會得到快閃存儲器的狀態為E0h,進而誤判編程操作為成功。相較于傳統的控制器,圖1中的控制器110可以在編程操作中,檢測快閃存儲器是否進入至忙碌模式,以避免誤判的情況發生。
圖2是顯示根據本發明一實施例所述的一示范波形圖,用以說明圖1中控制器110與快閃存儲器120之間所傳送的信號。在此實施例中,ALE信號表示地址閂鎖致能(address latch enable)信號。I/O信號表示在輸入/輸出總線上所傳送的信號。為了方便說明,將I/O信號劃分為I信號與O信號,其中I信號表示在輸入/輸出總線上由控制器110傳送至快閃存儲器120的信號,而O信號表示在輸入/輸出總線上由快閃存儲器120傳送至控制器110的信號。在此實施例中,當執行編程操作時,控制器110會透過輸入/輸出總線而依序發送“80h”、“Addr”、“DIN”以及“10h”至快閃存儲器120。在此實施例中,“80h”表示序列數據輸入命令(serial data input command)、“Addr”表示編程地址、“DIN”表示編程數據、以及“10h”表示編程命令(program command)。此外,當控制器110發送編程地址Addr至快閃存儲器120時,控制器110亦會將ALE信號致能。在發送編程命令“10h”至快閃存儲器之后,控制器110會立即發送“70h”至快閃存儲器120,其中“70h”表示讀取狀態命令(read status command)。相應于讀取狀態命令,快閃存儲器120會提供目前的狀態S1至控制器110,即快閃存儲器120會回報狀態給控制器110。于是,控制器110便可判斷快閃存儲器120是否有執行編程操作,即檢測快閃存儲器120是否有進入忙碌模式。若快閃存儲器120沒有進入忙碌模式,則控制器110可判斷出編程操作為失敗(例如狀態S1為“E0h”),并進行后續處理。值得注意的是,控制器110在達到快閃存儲器120的頁面編程時間(page program time)tPROG之前,發送讀取狀態命令至快閃存儲器120并從快閃存儲器120接收到狀態S1。在快閃存儲器120中,頁面編程時間tPROG是表示數據暫存器130根據編程地址Addr而將編程數據DIN儲存至存儲器陣列140中所需要的最少時間。在一實施例中, 控制器110在發送編程命令之后使用計時器(timer)來計數時間,以便在頁面編程時間tPROG的期間內接收到狀態S1。反之,若快閃存儲器120進入忙碌模式(例如狀態S1為“80h”),則在達到頁面編程時間tPROG之后,控制器110會再次發送讀取狀態命令“70h”至快閃存儲器120。相應于讀取狀態命令,快閃存儲器120會提供目前的狀態S2至控制器110,即快閃存儲器120會回報狀態給控制器110。于是,控制器110便可檢測快閃存儲器120的編程操作是否成功,即檢測快閃存儲器120是否進入閑置模式。若快閃存儲器120沒有進入閑置模式(例如狀態S2為“E1h”),則控制器110可判斷出編程操作為失敗,并進行后續處理。反之,若快閃存儲器120已進入閑置模式(例如狀態S2為“E0h”),則控制器110可判斷出編程操作為成功。
圖顯示了根據本發明一實施例所述的檢測方法,用以檢測快閃存儲器的編程操作。在此實施例中,檢測方法由快閃存儲器的控制器所執行。首先,在步驟S310,控制器會依序發送數據輸入命令(例如“80h”)、編程地址、編程數據以及編程命令(例如“10h”)至快閃存儲器,以便控制快閃存儲器來執行編程操作。接著,在達到快閃存儲器的頁面編程時間tPROG之前,控制器會發送第一讀取狀態命令(例如“70h”)至快閃存儲器(步驟S320),以便從快閃存儲器得到所回報的快閃存儲器的狀態S1(步驟S330)。接著,在步驟S340,控制器會根據狀態S1來判斷快閃存儲器是否進入忙碌模式,即狀態S1是否為“80h”。若快閃存儲器沒有進入忙碌模式,則控制器會判定編程操作為失敗(步驟S380)。反之,若快閃存儲器進入忙碌模式,則在達到頁面編程時間tPROG之后,控制器110會發送第二讀取狀態命令(例如“70h”)至快閃存儲器(步驟S350),以便從快閃存儲器得到所回報的快閃存儲器的狀態S2(步驟S360)。接著,在步驟S370,控制器會根據狀態S2來判斷快閃存儲器是否進入閑置模式,即狀態S2是否為“E0h”。若快閃存儲器沒有進入閑置模式(例如狀態S2為“E1h”),則控制器會判定編程操作為失敗(步驟S380)。反之,若快閃存儲器進入閑置模式,則控制器會判定編程操作為成功(步驟S390)。
根據本發明的實施例,控制器可在頁面編程時間tPROG的期間內,得到快閃存儲器的狀態。于是,在編程操作中,當快閃存儲器發生不可預期的狀態時,控制器可在頁面編程時間tPROG的期間內正確地檢測到快閃存儲器是否有執行編程操作,并進一步判斷編程操作是否成功。
雖然本發明已以較佳實施例揭示如上,然其并非用以限定本發明,任何所屬技術領域中包括通常知識者,在不脫離本發明的精神和范圍內,當可作些許的更動與潤飾,因此本發明的保護范圍以權利要求書界定為準。