(58)【調査した分野】(Int.Cl.,DB名)
それぞれがデータ消去単位となり、ホスト装置が出力する出力データが書き込まれる複数の消去単位領域を含む記憶領域を有するメモリコアと、当該複数の消去単位領域にそれぞれ割り当てられた複数の物理アドレスの一部の各物理アドレスと論理アドレスとの対応関係を示すテーブルとを備え、当該ホスト装置によって制御されるメモリ装置を制御するための制御プログラムであって、
前記メモリ装置に、
(a)第1モードで動作する工程と、
(b)第2モードで動作する工程と、
(c)第3モードで動作する工程と
を実行させ、
前記工程(a)において、
(a−1)前記ホスト装置が出力する、データ消去を指示する消去コマンドと、当該消去コマンドとともに前記ホスト装置が出力する前記論理アドレスである第1論理アドレスとを受け取る工程と、
(a−2)前記工程(a−1)の後に、前記テーブルにおいて前記第1論理アドレスに対応付けられている前記物理アドレスである第1物理アドレスが割り当てられた前記消去単位領域のデータを消去せずに、当該消去単位領域をデータの消去待ち領域に設定する工程と、
(a−3)前記工程(a−1)の後に、前記テーブルにおいて、前記第1物理アドレスを、データ消去済みの前記消去単位領域である消去済み領域に割り当てられた前記物理アドレスに置き換え、当該消去済み領域を、前記ホスト装置がデータを書き込むことが可能なアクセス領域に設定する工程と、
(a−4)前記ホスト装置が出力する、データ書き込みを指示する書き込みコマンドと、当該書き込みコマンドとともに前記ホスト装置が出力する前記論理アドレスである第2論理アドレスとを受け取ると、前記テーブルにおいて当該第2論理アドレスに対応付けられている前記物理アドレスが割り当てられた前記アクセス領域に、前記ホスト装置が出力する前記出力データを書き込む工程と
を実行させ、
前記工程(b)において、(b−1)前記消去待ち領域のデータを消去して、当該消去待ち領域を前記消去済み領域に設定する工程を実行させ、
(d)前記第2モードで動作する場合、前記消去待ち領域のデータを消去している最中に前記第2モードの解除を指示する解除コマンドを前記ホスト装置から受け取ると、前記動作モードを前記第2モードから前記第3モードに変更する工程と、
(e)前記第3モードで動作する場合、前記消去待ち領域の未消去のデータを消去して当該消去待ち領域を前記消去済み領域に設定し、前記動作モードを前記第3モードから前記第1モードに変更する工程と
を実行させるための制御プログラム。
それぞれがデータ消去単位となり、ホスト装置が出力する出力データが書き込まれる複数の消去単位領域を含む記憶領域を有するメモリコアと、当該複数の消去単位領域にそれぞれ割り当てられた複数の物理アドレスの一部の各物理アドレスと論理アドレスとの対応関係を示すテーブルとを備え、当該ホスト装置によって制御されるメモリ装置を制御するための制御プログラムであって、
前記メモリ装置に、
(a)前記ホスト装置が出力する、データ消去を指示する消去コマンドと、当該消去コマンドとともに前記ホスト装置が出力する前記論理アドレスである第1論理アドレスとを受け取る工程と、
(b)前記工程(a)の後に、前記テーブルにおいて前記第1論理アドレスに対応付けられている前記物理アドレスである第1物理アドレスが割り当てられた前記消去単位領域のデータを消去せずに、当該消去単位領域をデータの消去待ち領域に設定する工程と、
(c)前記工程(a)の後に、前記テーブルにおいて、前記第1物理アドレスを、データ消去済みの前記消去単位領域である消去済み領域に割り当てられた前記物理アドレスに置き換え、当該消去済み領域を、前記ホスト装置がデータを書き込むことが可能なアクセス領域に設定する工程と、
(d)前記ホスト装置が出力する、データ書き込みを指示する書き込みコマンドと、当該書き込みコマンドとともに前記ホスト装置が出力する前記論理アドレスである第2論理アドレスとを受け取ると、前記第1テーブルにおいて当該第2論理アドレスに対応付けられている前記物理アドレスが割り当てられた前記アクセス領域に、前記ホスト装置が出力する前記出力データを書き込む工程と、
(e)前記消去待ち領域のデータを消去して、当該消去待ち領域を前記消去済み領域に設定する工程と
を実行させ、
前記複数の消去単位領域のそれぞれは、前記出力データが書き込まれるホストデータ領域と、当該消去単位領域の状態を管理するための管理領域とを有し、
前記管理領域は、
当該管理領域を含む前記消去単位領域が、前記アクセス領域であるのか、前記消去済み領域であるのか、前記消去待ち領域であるのかを示すステータス情報を記憶する第1管理領域と、
前記ステータス情報の更新状況を示す第2管理領域と
を有し、
前記第2管理領域は、前記消去済み領域、前記アクセス領域及び前記消去待ち領域にそれぞれ対応する第1乃至第3更新管理領域を含み、
(f)前記ステータス情報を、前記消去単位領域が前記消去済み領域であることを示す第1ステータス情報に書き換える際には、第1所定情報を前記第1更新管理領域に書き込む工程と、
(g)前記ステータス情報を、前記消去単位領域が前記アクセス領域であることを示す第2ステータス情報に書き換える際には、第2所定情報を前記第2更新管理領域に書き込む工程と、
(h)前記ステータス情報を、前記消去単位領域が前記消去待ち領域であることを示す第3ステータス情報に書き換える際には、第3所定情報を前記第3更新管理領域に書き込む工程と、
(i)前記ステータス情報が正しいか否かを、前記第1乃至第3更新管理領域内の情報に基づいて判定する正否判定を行う工程と
を実行させるための制御プログラム。
それぞれがデータ消去単位となり、ホスト装置が出力する出力データが書き込まれる複数の消去単位領域を含む記憶領域を有するメモリコアと、当該複数の消去単位領域にそれぞれ割り当てられた複数の物理アドレスの一部の各物理アドレスと論理アドレスとの対応関係を示すテーブルとを備え、当該ホスト装置によって制御されるメモリ装置の動作方法であって、
(a)第1モードで動作する工程と、
(b)第2モードで動作する工程と、
(c)第3モードで動作する工程と
を備え、
前記工程(a)は、
(a−1)前記ホスト装置が出力する、データ消去を指示する消去コマンドと、当該消去コマンドとともに前記ホスト装置が出力する前記論理アドレスである第1論理アドレスとを受け取る工程と、
(a−2)前記工程(a−1)の後に、前記テーブルにおいて前記第1論理アドレスに対応付けられている前記物理アドレスである第1物理アドレスが割り当てられた前記消去単位領域のデータを消去せずに、当該消去単位領域をデータの消去待ち領域に設定する工程と、
(a−3)前記工程(a−1)の後に、前記テーブルにおいて、前記第1物理アドレスを、データ消去済みの前記消去単位領域である消去済み領域に割り当てられた前記物理アドレスに置き換え、当該消去済み領域を、前記ホスト装置がデータを書き込むことが可能なアクセス領域に設定する工程と、
(a−4)前記ホスト装置が出力する、データ書き込みを指示する書き込みコマンドと、当該書き込みコマンドとともに前記ホスト装置が出力する前記論理アドレスである第2論理アドレスとを受け取ると、前記テーブルにおいて当該第2論理アドレスに対応付けられている前記物理アドレスが割り当てられた前記アクセス領域に、前記ホスト装置が出力する出力データを書き込む工程と
を有し、
前記工程(b)は、(b−1)前記消去待ち領域のデータを消去して、当該消去待ち領域を前記消去済み領域に設定する工程を有し、
(d)前記第2モードで動作する場合、前記消去待ち領域のデータを消去している最中に前記第2モードの解除を指示する解除コマンドを前記ホスト装置から受け取ると、前記動作モードを前記第2モードから前記第3モードに変更する工程と、
(e)前記第3モードで動作する場合、前記消去待ち領域の未消去のデータを消去して当該消去待ち領域を前記消去済み領域に設定し、前記動作モードを前記第3モードから前記第1モードに変更する工程と
をさらに備える、メモリ装置の動作方法。
それぞれがデータ消去単位となり、ホスト装置が出力する出力データが書き込まれる複数の消去単位領域を含む記憶領域を有するメモリコアと、当該複数の消去単位領域にそれぞれ割り当てられた複数の物理アドレスの一部の各物理アドレスと論理アドレスとの対応関係を示すテーブルとを備え、当該ホスト装置によって制御されるメモリ装置の動作方法であって、
(a)前記ホスト装置が出力する、データ消去を指示する消去コマンドと、当該消去コマンドとともに前記ホスト装置が出力する前記論理アドレスである第1論理アドレスとを受け取る工程と、
(b)前記工程(a)の後に、前記テーブルにおいて前記第1論理アドレスに対応付けられている前記物理アドレスである第1物理アドレスが割り当てられた前記消去単位領域のデータを消去せずに、当該消去単位領域をデータの消去待ち領域に設定する工程と、
(c)前記工程(a)の後に、前記テーブルにおいて、前記第1物理アドレスを、データ消去済みの前記消去単位領域である消去済み領域に割り当てられた前記物理アドレスに置き換え、当該消去済み領域を、前記ホスト装置がデータを書き込むことが可能なアクセス領域に設定する工程と、
(d)前記ホスト装置が出力する、データ書き込みを指示する書き込みコマンドと、当該書き込みコマンドとともに前記ホスト装置が出力する前記論理アドレスである第2論理アドレスとを受け取ると、前記第1テーブルにおいて当該第2論理アドレスに対応付けられている前記物理アドレスが割り当てられた前記アクセス領域に、前記ホスト装置が出力する前記出力データを書き込む工程と、
(e)前記消去待ち領域のデータを消去して、当該消去待ち領域を前記消去済み領域に設定する工程と
を備え、
前記複数の消去単位領域のそれぞれは、前記出力データが書き込まれるホストデータ領域と、当該消去単位領域の状態を管理するための管理領域とを有し、
前記管理領域は、
当該管理領域を含む前記消去単位領域が、前記アクセス領域であるのか、前記消去済み領域であるのか、前記消去待ち領域であるのかを示すステータス情報を記憶する第1管理領域と、
前記ステータス情報の更新状況を示す第2管理領域と
を有し、
前記第2管理領域は、前記消去済み領域、前記アクセス領域及び前記消去待ち領域にそれぞれ対応する第1乃至第3更新管理領域を含み、
(f)前記ステータス情報を、前記消去単位領域が前記消去済み領域であることを示す第1ステータス情報に書き換える際には、第1所定情報を前記第1更新管理領域に書き込む工程と、
(g)前記ステータス情報を、前記消去単位領域が前記アクセス領域であることを示す第2ステータス情報に書き換える際には、第2所定情報を前記第2更新管理領域に書き込む工程と、
(h)前記ステータス情報を、前記消去単位領域が前記消去待ち領域であることを示す第3ステータス情報に書き換える際には、第3所定情報を前記第3更新管理領域に書き込む工程と、
(i)前記ステータス情報が正しいか否かを、前記第1乃至第3更新管理領域内の情報に基づいて判定する正否判定を行う工程と
をさらに備える、メモリ装置の動作方法。
【発明を実施するための形態】
【0022】
<データ処理システムの全体構成>
図1はデータ処理システム1の構成の一例を示す図である。データ処理システム1は、ホスト装置2と、メモリ装置3とを備えている。ホスト装置2は、メモリ装置3を制御する上位装置である。メモリ装置3は、例えば不揮発性メモリ装置である。メモリ装置3は、例えば、SPI(Serial Peripheral Interface)フラッシュメモリである。メモリ装置3はメモリコア4を有する。メモリ装置3は、例えば1つの半導体チップで構成されている。なおメモリ装置3は、複数の半導体チップで構成されてもよい。メモリ装置3は半導体メモリ装置であると言える。
【0023】
ホスト装置2は、データ処理システム1全体の動作を統括的に管理する。ホスト装置2は、データ処理システム1の本体装置であると言える。ホスト装置2は、メモリ装置3からデータを読み出したり、メモリ装置3にデータを書き込んだりすることが可能である。例えば、ホスト装置2がメモリ装置3に対してデータの読み出しを指示すると、メモリ装置3は、メモリコア4内のデータを読み出してホスト装置2に出力する。また、ホスト装置2がデータの書き込みを指示すると、メモリ装置3は、ホスト装置2からのデータをメモリコア4内に書き込む。
【0024】
メモリコア4は、ホスト装置2が出力するデータ210(以後、「ホスト出力データ210」あるいは「出力データ210」と呼ぶ)を記憶する。データ処理システム1が例えばスマートフォン、タブレット等の携帯型電子機器である場合、ホスト出力データ210は、例えば、任意のアプリケーションプログラムの進行中に生成されるセーブデータである。この場合、アプリケーションプログラムは、例えば、メモリ装置3とは別に設けられた、メモリカード等のメモリ装置に記憶される。携帯型電子機器本体として機能するホスト装置2が、メモリカード等から読み出したアプリケーションプログラムを実行することによって、データ処理システム1ではアプリケーションプログラムが進行する。なお、データ処理システム1は携帯型電子機器以外であってもよいし、ホスト出力データ210はセーブデータ以外のデータであってもよい。
【0025】
<ホスト装置の構成>
ホスト装置2は、一種のコンピュータ装置であって、コントローラ20、記憶部22及びI/F回路23を備える。コントローラ20は、例えば、マイクロプロセッサ21等を備えており、ホスト装置2の動作を統括的に管理する。記憶部22は、ROM(Read Only Memory)及びRAM(Random Access Memory)等の、マイクロプロセッサ21が読み取り可能な非一時的な記録媒体で構成されている。記憶部22には、ホスト装置2の動作を制御するための制御プログラム200等が記憶されている。ホスト装置2の各種機能は、マイクロプロセッサ21が記憶部22内の制御プログラム200を実行することによって実現される。I/F回路23は、ホスト装置2とメモリ装置3と接続するための回路であって、メモリ装置3からの信号をコントローラ20に入力したり、コントローラ20からの信号をメモリ装置3に出力したりする。
【0026】
コントローラ20は、メモリ装置3に対して指示を行うための各種コマンドを生成して出力する。コントローラ20が出力するコマンドは、I/F回路23からメモリ装置3に入力される。またコントローラ20は、I/F回路23が出力する、メモリ装置3から読み出されたデータに対して各種処理を行う。
【0027】
なお、コントローラ20の全ての機能あるいはコントローラ20の一部の機能は、その機能の実現にソフトウェアが不要なハードウェア回路によって実現されてもよい。また、記憶部22は、ROM及びRAM以外の、コンピュータが読み取り可能な非一時的な記録媒体を備えてもよい。記憶部22は、例えば、小型のハードディスクドライブ及びSSD(Solid State Drive)等を備えてもよい。
【0028】
<メモリ装置の構成>
メモリ装置3は、コントローラ30、揮発性メモリ32、I/F回路33及びメモリコア4を備えている。コントローラ30は、例えば、マイクロプロセッサ31等を備えており、メモリ装置3の動作を統括的に管理する。I/F回路33は、メモリ装置3とホスト装置2とを接続するための回路であって、ホスト装置2からの信号をコントローラ30に入力したり、コントローラ30からの信号をホスト装置2に出力したりする。コントローラ30は、I/F回路33から出力される、ホスト装置2からのコマンドに応じた処理を行う。
【0029】
揮発性メモリ32は、例えばSRAM(Static RAM)であって、コントローラ30がデータ処理する際のワークメモリ等として機能する。なお、揮発性メモリ32は、DRAM(Dynamic RAM)であってもよい。
【0030】
メモリコア4の記憶領域5には、ホスト出力データ210以外にも、メモリ装置3の動作を制御するための制御プログラム300が記憶されている。メモリ装置3の各種機能は、マイクロプロセッサ31が記憶領域5内の制御プログラム300を実行することによって実現される。メモリコア4は、マイクロプロセッサ31が読み取り可能な非一時的な記録媒体であると言える。
【0031】
なお、コントローラ30の全ての機能あるいはコントローラ30の一部の機能は、その機能の実現にソフトウェアが不要なハードウェア回路によって実現されてもよい。
【0032】
<メモリコアの記憶領域の構成>
図2はメモリコア4の記憶領域5の構成の一例を示す図である。
図2に示されるように、記憶領域5は、N個(N≧2)のセクタ50で構成されている。本例では、N=512であるが、Nは512以外の値であってもよい。データ処理システム1では、記憶領域5内のデータはセクタ50単位で消去される。したがって、各セクタ50は、データ消去単位である消去単位領域であると言える。
【0033】
記憶領域5がN個のセクタ50に対しては、N個の物理アドレス(「物理ADD」と表されることがある)がそれぞれ割り当てられている。本例では、512個のセクタ50に対して、000h〜1FFh(hは16進数を示す)の物理アドレスがそれぞれ割り当てられている。
【0034】
ホスト装置2は、物理アドレス000h〜1EFhの496個のセクタ50で構成される第1部分記憶領域5Aに対してアクセスすることが可能である。一方で、ホスト装置2は、物理アドレス1F0h〜1FFhの16個のセクタ50で構成される第2部分記憶領域5Bに対してアクセスすることができない。第2部分記憶領域5Bには、制御プログラム300がファームウェアとして記憶される。
【0035】
各セクタ50は、ユーザデータ領域50Aと、冗長領域50Bとを備えている。コントローラ30は、第1部分記憶領域5Aの各セクタ50のユーザデータ領域50Aに対して、ホスト装置2からの出力データ210を書き込むことが可能である。
【0036】
図3は各セクタ50の構成の一例を示す図である。
図3に示されるように、各セクタ50はM個(M≧2)のページPGで構成されている。本例では、M=8であるが、Mは8以外の値であってもよい。データ処理システム1では、記憶領域5に対するデータ書き込み及びデータ読み出しは、ページPG単位で行うことが可能である。またデータ処理システム1では、ユーザデータ領域50A及び冗長領域50Bのそれぞれに対して、独立して、データ書き込み及びデータ読み出しを行うことができる。本例では、セクタ50を構成する8個のページPGに対して、0番から7番までの番号が割り当てられている。以後、m番(0≦m≦7)のページPGを「ページm」と呼ぶことがある。
【0037】
本例では、メモリ装置3はフラッシュメモリであるため、コントローラ30は、セクタ50にデータを書き込む場合には、当該セクタ50のデータを消去した上で当該セクタ50にデータを書き込む必要がある。データ書き込みは「プログラム」と呼ばれることがある。
【0038】
本例では、第1部分記憶領域5Aを構成する496個のセクタ50のうち、256個のセクタ50が、R/Wアクセスセクタ50として使用される。一方で、当該496個のセクタ50のうち、240個のセクタ50のそれぞれが、消去済みセクタ50あるいは消去待ちセクタ50として使用される。
【0039】
ここで、R/Wアクセスセクタ50とは、ホスト装置2がコントローラ30を通じてデータ書き込み及びデータ読み出しを行うことが可能なセクタ50である。R/Wアクセスセクタ50は、ホスト装置2がコントローラ30を通じてデータ書き込み及びデータ読み出しを行うことが可能な消去単位領域であるホストアクセス領域と言える。
【0040】
消去済みセクタ50はデータ消去済みのセクタ50である。ホスト装置2は消去済みセクタ50にアクセスできない。消去済みセクタ50は、データ消去済みの消去単位領域である消去済み領域と言える。
【0041】
消去待ちセクタ50はデータ消去待ちのセクタ50である。ホスト装置2は消去待ちセクタ50にアクセスできない。消去待ちセクタ50は、データ消去待ちの消去単位領域である消去待ち領域と言える。
【0042】
後述のように、データ処理システム1が動作しているときには、第1部分記憶領域5Aのセクタ50は、R/Wアクセスセクタ50から消去待ちセクタ50に変化することがある。また、第1部分記憶領域5Aのセクタ50は、消去待ちセクタ50から消去済みセクタ50に変化することがある。そして、第1部分記憶領域5Aのセクタ50は、消去済みセクタ50からR/Wアクセスセクタ50に変化することがある。データ処理システム1が動作しているときには、第1部分記憶領域5Aのセクタ50は、R/Wアクセスセクタ50、消去待ちセクタ50及び消去済みセクタ50の順に繰り返し変化することがある。以後、単にセクタ50と言えば、第1部分記憶領域5Aのセクタ50を意味する。
【0043】
<メモリ装置の動作モードについて>
図4はコントローラ30の動作モードの一例を示す図である。コントローラ30の動作モードには、スタンバイモード、アイドルイレースモード(以後、「IEモード」と呼ぶ)及びリリースアイドルイレースモード(以後、「RIEモード」と呼ぶ)が含まれる。スタンバイモード、IEモード及びRIEモードは、メモリ装置3の動作モードとして見ることができる。なお、コントローラ30の動作モードには、他のモードが含まれてもよい。
【0044】
スタンバイモードのコントローラ30は、ホスト装置2からの書き込みコマンド、読み出しコマンド及び消去コマンドを受け付けることが可能である。書き込みコマンドは、セクタ50に対するデータ書き込みを指示するコマンドである。ホスト装置2は、書き込みコマンドを使用して、ページPG単位でメモリコア4に対してデータを書き込むことができる。書き込みコマンドはページプログラムコマンド(PPコマンド)と呼ばれることがある。読み出しコマンドは、セクタ50からのデータ読み出しを指示するコマンドである。ホスト装置2は、読み出しコマンドを使用して、ページPG単位でメモリコア4からデータを読み出すことができる。消去コマンドは、セクタ50のデータの消去を指示するコマンドであって、セクタイレースコマンド(SEコマンド)と呼ばれることがある。
【0045】
コントローラ30は、書き込みコマンドを受け取ると、ホスト装置2が指定するセクタ50のページPGに、ホスト装置2が出力するデータを書き込む。またコントローラ30は、読み出しコマンドを受け取ると、ホスト装置2が指定するセクタ50のページPGからデータを読み出し、読み出したデータをI/F回路33を通じてホスト装置2に出力する。
【0046】
また、スタンバイモードのコントローラ30は、ホスト装置2が出力する、IEモードで動作することを指示する指示コマンドであるIEコマンドを受け付けることができる。コントローラ30は、IEコマンドを受け付けると、動作モードを、スタンバイモードからIEモードに変更する。
【0047】
IEモードのコントローラ30は、消去待ちセクタ50のデータを消去する。そして、IEモードのコントローラ30は、データを消去した消去待ちセクタ50を消去済みセクタ50に設定する。
【0048】
また、IEモードのコントローラ30は、ホスト装置2が出力する、IEモードの解除を指示する解除コマンドであるRIEコマンドを受け付けることが可能である。コントローラ30は、RIEコマンドを受け付けると、動作モードを、IEモードからRIEモードに変更した後、スタンバイモードに変更する。
【0049】
RIEモードのコントローラ30は、IEモードにおいてデータが途中まで消去された消去待ちセクタ50が存在する場合には、当該消去待ちセクタ50の未消去のデータを消去する。そして、コントローラ30は、未消去のデータを消去した消去待ちセクタ50を消去済みセクタ50に設定する。その後、コントローラ30は、動作モードをスタンバイモードに変更する。また、コントローラ30は、データが途中まで消去された消去待ちセクタ50が存在しない場合には、特に処理を行わずに、動作モードをスタンバイモードに変更する。
【0050】
本例では、スタンバイモードのコントローラ30は、ホスト装置2から消去コマンドを受け取ると、ホスト装置2から指定されたセクタ50のデータを消去する替りに、消去済みセクタ50をR/Wアクセスセクタ50に変更する。これにより、ホスト装置2から見れば、指定したセクタ50のデータが消去されたように見える。そして、コントローラ30は、データを消去しなかったセクタ50を消去待ちセクタ50とし、IEモードにおいて当該消去待ちセクタ50のデータを消去する。
【0051】
なお、スタンバイモード、IEモード及びRIEモードのコントローラ30の動作については後で詳細に説明する。
【0052】
<メモリ装置が使用するテーブルについて>
コントローラ30は、2種類のテーブルを使用して、ホスト装置2からのコマンドに応じてメモリコア4にアクセスする。具体的には、コントローラ30は、R/Wアクセスセクタ50の物理アドレスと論理アドレス(「論理ADD」と表されることがある)との対応関係を示す論物変換テーブル(以後、「L2Pテーブル」と呼ぶ)60と、消去済みセクタ50及び消去待ちセクタ50の物理アドレスを管理するための管理テーブル70とを使用する。管理テーブル70には、消去済みセクタ50及び消去待ちセクタ50の物理アドレスが登録されている。コントローラ30は、メモリ装置3の起動時に、つまりメモリ装置3の電源がオフからオンになったときに、L2Pテーブル60及び管理テーブル70を生成して揮発性メモリ32に記憶する。
【0053】
図5はL2Pテーブル60の一例を示す図である。
図6は管理テーブル70の一例を示す図である。L2Pテーブル60では、256個のR/Wアクセスセクタ50の物理アドレスと、256個の論理アドレスとがそれぞれ対応付けられている。
図5の例では、256個のR/Wアクセスセクタ50の物理アドレスと、00h〜FFhの256個の論理アドレスとがそれぞれ対応付けられている。L2Pテーブル60では、論理アドレスは変化しない。一方で、R/Wアクセスセクタ50に設定されるセクタ50が変化することから、L2Pテーブル60では、論理アドレスに対応付けられる物理アドレスは変化する。ホスト装置2では論理アドレスが管理されており、ホスト装置2は、論理アドレスを指定することによって、データ書き込み及びデータ読み出しを行うR/Wアクセスセクタ50を指定する。以後、R/Wアクセスセクタ50の物理アドレスを「R/Wアクセスアドレス」と呼ぶことがある。
【0054】
管理テーブル70では、消去済みセクタ50及び消去待ちセクタ50についての240個の物理アドレスが登録されている。そして、管理テーブル70では、240個の物理アドレスに対して240個の番号が割当番号としてそれぞれ割り当てられている。
図6の例では、00h〜EFhまでの240個の通し番号が割当番号として240個の物理アドレスにそれぞれ割り当てられている。管理テーブル70では、登録されている割当番号は変化しない。一方で、消去済みセクタ50に設定されるセクタ50が変化し、消去待ちセクタ50に設定されるセクタ50が変化することから、管理テーブル70では、割当番号に対応付けられる物理アドレスは変化する。コントローラ30は、消去済みセクタ50をR/Wアクセスセクタ50に変更すると、それに応じて管理テーブル70を更新する。
【0055】
またコントローラ30は、管理テーブル70に登録されている複数の物理アドレスの一つを指し示す消去済みポインタSPと、当該複数の物理アドレスの一つを指し示す消去待ちポインタEPとを使用して、消去済みセクタ50及び消去待ちセクタ50の物理アドレスを管理する。
【0056】
管理テーブル70の複数の物理アドレスには所定の順番が割り当てられている。具体的には、各物理アドレスには割当番号が所定の順番として割り当てられている。コントローラ30は、消去済みポインタSP及び消去待ちポインタEPのそれぞれを、割当番号(00h〜EFhまでの通し番号)の順に循環して移動する。
【0057】
管理テーブル70に登録されている240個の物理アドレスを割当番号の順で循環して見る場合において、消去済みポインタSPが指し示す物理アドレスから、消去待ちポインタEPが指し示す物理アドレスよりも一つ前の物理アドレスまでが、消去済みセクタ50の物理アドレスとなっている。また、管理テーブル70に登録されている240個の物理アドレスを割当番号の順で循環して見る場合において、消去待ちポインタEPが指し示す物理アドレスから、消去済みポインタSPが指し示す物理アドレスよりも一つ前の物理アドレスまでが、消去待ちセクタ50の物理アドレスとなっている。
【0058】
図6の例では、管理テーブル70に登録されている240の物理アドレスを割当番号の順で循環して見る場合において、消去待ちポインタEPが指し示す000hから、消去済みポインタSPが指し示す1EEhよりも一つ前の1EDhまでの238個の物理アドレスが、消去待ちセクタ50の物理アドレスとなっている。また、管理テーブル70に登録されている240の物理アドレスを割当番号の順で循環して見る場合において、消去済みポインタSPが指し示す1EEhから、消去待ちポインタEPが指し示す000hよりも一つ前の1EFhまでの2個の物理アドレスが、消去済みセクタ50の物理アドレスとなっている。
【0059】
本例では、消去待ちポインタEP及び消去済みポインタSPは、ハードウェア回路によってコントローラ30に実装されているが、ソフトウェアで実現されてもよい。つまり、制御プログラム300を実行するマイクロプロセッサ31が消去待ちポインタEP及び消去済みポインタSPを生成してもよい。
【0060】
以後、消去待ちセクタ50の物理アドレスを「消去待ちアドレス」と呼び、消去済みセクタ50の物理アドレスを「消去済みアドレス」と呼ぶことがある。
【0061】
スタンバイモードのコントローラ30は、ホスト装置2から消去コマンドを受け取ると、L2Pテーブル60において、ホスト装置2から指定される論理アドレスに対応するR/Wアクセスアドレスを、消去済みポインタSPが指し示す、消去済みセクタ50の消去済みアドレスに置き換える。これにより、消去済みセクタ50からR/Wアクセスセクタ50に変更されるセクタ50の物理アドレスがL2Pテーブル60に登録される。また、スタンバイモードのコントローラ30は、管理テーブル70において、消去済みポインタSPが指し示す、消去済みセクタ50の消去済みアドレスを、ホスト装置2から指定される論理アドレスに対応するR/Wアクセスアドレスに置き換え、次の物理アドレスを指し示すように消去済みポインタSPを移動する。これにより、R/Wアクセスセクタ50から消去待ちセクタ50に変更されるセクタ50の物理アドレスが、管理テーブル70に登録される。
【0062】
図7には、L2Pテーブル60において、ホスト装置2から指定される論理アドレスに対応するR/Wアクセスアドレスが、消去済みポインタSPが指し示す消去済みアドレスに置き換えられる様子の一例が示される。また
図7には、管理テーブル70において、消去済みポインタSPが指し示す消去済みアドレスが、ホスト装置2から指定される論理アドレスに対応するR/Wアクセスアドレスに置き換えられ、次の物理アドレスを指し示すように消去済みポインタSPが移動する様子の一例が示されている。
図7の例では、L2Pテーブル60において、ホスト装置2から指定される論理アドレス00hに対応するR/Wアクセスアドレス100hが、消去済みポインタSPが指し示す消去済みアドレス1EEhに置き換えられている。また
図7の例では、管理テーブル70において、消去済みポインタSPが指し示す消去済みアドレス1EEhが、ホスト装置2から指定される論理アドレスに対応するR/Wアクセスアドレス100hに置き換えられている。
【0063】
IEモードのコントローラ30は、管理テーブル70において、消去待ちポインタEPが指し示す物理アドレスの消去待ちセクタ50のデータを消去して当該消去待ちセクタ50を消去済みセクタ50に変更し、次の物理アドレスを指し示すように消去待ちポインタEPを移動する。これにより、データが消去されたセクタ50の物理アドレスが、消去済みアドレスとして管理テーブル70に登録される。
【0064】
図8には、次の物理アドレスを指し示すように消去待ちポインタEPが移動する様子の一例が示されている。
図8では、消去済みアドレスにハッチングが示されている。
図8の例では、消去待ちポインタEPが指し示す物理アドレス000hの消去待ちセクタ50のデータが消去され、消去待ちポインタEPが1つ次に移動している。
図8の例では、データが消去されたセクタ50の物理アドレス000hが消去済みアドレスに変化している。
【0065】
なお、消去済みポインタSP及び消去待ちポインタEPが同じ物理アドレスを指し示す場合には、管理テーブル70に登録されているすべての物理アドレスは、消去済みアドレスあるいは消去待ちアドレスとなる。消去済みポインタSPが次に移動して、消去済みポインタSP及び消去待ちポインタEPが指し示す物理アドレスが一致した場合には、管理テーブル70に登録されているすべての物理アドレスは、すべて消去待ちポインタEPとなる。一方で、消去待ちポインタEPが次に移動して、消去済みポインタSP及び消去待ちポインタEPが指し示す物理アドレスが一致した場合には、管理テーブル70に登録されているすべての物理アドレスは、すべて消去済みポインタSPとなる。
【0066】
このように、コントローラ30は、消去済みポインタSP及び消去待ちポインタEPを使用することによって、消去済みアドレス及び消去待ちアドレスを1つの管理テーブル70で管理することから、消去済みアドレス及び消去待ちアドレスを管理するために必要なテーブルを記憶するために必要な記憶容量を低減することができる。
【0067】
なお、コントローラ30は、消去済みアドレスが登録された消去済みテーブルと、消去待ちアドレスが登録された消去待ちテーブルとを使用してもよい。240個の物理アドレスのすべてが消去済みアドレスとなったり、240個の物理アドレスのすべてが消去待ちアドレスとなったりすることから、消去済みテーブル及び消去待ちテーブルのそれぞれは、240個分の物理アドレスを登録できる必要がある。つまり、消去済みテーブルと消去待ちテーブルとを合わせて、480個分の物理アドレスを記憶するための記憶容量が必要となる。これに対して、本例のように、240個の物理アドレスを登録できる1つの管理テーブル70を使用する場合には、240個分の物理アドレスを記憶するための記憶容量があればよい。
【0068】
<冗長領域に書き込まれる管理情報について>
図9は第1部分記憶領域5Aのセクタ50に書き込まれる情報の一例を示す図である。上述のように、コントローラ30は、第1部分記憶領域5Aのセクタ50のユーザデータ領域50Aにホスト装置2からの出力データ210を書き込むことが可能である。一方で、コントローラ30は、第1部分記憶領域5Aのセクタ50の冗長領域50Bを、当該セクタ50の状態を管理するために使用する。以後、第1部分記憶領域5Aのセクタ50のユーザデータ領域50Aを特に「ホストデータ領域50A」と呼ぶことがある。また、第1部分記憶領域5Aのセクタ50の冗長領域50Bを特に「管理領域50B」と呼ぶことがある。
【0069】
本例では、セクタ50の管理領域50Bのページ0が、ステータス情報が記憶される第1管理領域501として使用される。ステータス情報は、それを記憶するセクタ50が、R/Wアクセスセクタ50であるのか、消去済みセクタ50であるのか、消去待ちセクタ50であるのかを示す情報である。また、第1管理領域501には、L2Pテーブル60において、当該第1管理領域501を有するセクタ50の物理アドレスと対応付けられる論理アドレスが記憶される。
【0070】
本例では、冗長領域50Bの各ページPGの記憶容量は、例えば4バイトである。また、ユーザデータ領域50Aの各ページPGの記憶容量は、例えば512バイトである。第1管理領域501に記憶することが可能な32ビットのデータのうち、例えば、下位から25ビット目から32ビット目の1バイトのデータがステータス情報を示す。また、当該32ビットのデータのうち、例えば、下位から17ビット目から24ビット目の1バイトのデータが論理アドレスを示す。本例では、当該32ビットデータのうち、1ビット目から16ビット目までの2バイトのデータは使用されない。
【0071】
ステータス情報は、それを記憶するセクタ50が消去済みセクタ50である場合には、例えばFFhを示す。またステータス情報は、それを記憶するセクタ50がR/Wアクセスセクタ50である場合には、例えばAAhを示す。そして、ステータス情報は、それを記憶するセクタ50が消去待ちセクタ50である場合には、例えば88hを示す。
【0072】
図9に示される、物理アドレス000hのセクタ50及び物理アドレス0FFhのセクタ50はR/Wアクセスセクタ50である。また
図9に示される物理アドレス100hのセクタ50は消去済みセクタ50である。そして、
図9に示される物理アドレス1EFhのセクタ50は消去待ちセクタ50である。
【0073】
以後、消去済みセクタ50内のステータス情報を「消去済みステータス情報」と呼ぶことがある。またR/Wアクセスセクタ50内のステータス情報を「R/Wアクセスステータス情報」と呼ぶことがある。そして消去待ちセクタ50内のステータス情報を「消去待ちステータス情報」と呼ぶことがある。
【0074】
なお、
図9のホストデータ領域50Aに示される「Data」及び「Data_old」は、それぞれ、ホスト装置2が読み出すことができるホスト出力データ210及び消去待ちの出力データ210を意味している。また、
図9のホストデータ領域50Aに示される「Erase」は、当該ホストデータ領域50A内にデータが記憶されていないことを意味する。以降の図に示される「Data」、「Data_old」及び「Erase」の意味も同様である。
【0075】
ここで、本例では、セクタ50のデータが消去されると、当該セクタ50の各ビットの値は“1”を示す。コントローラ30は、セクタ50のデータ消去済みのビットに“0”を書き込むことによって、当該ビットの値を“1”から“0”に書き換えることができる。コントローラ30は、セクタ50のデータを消去しない限り、セクタ50のビットの値を“1”から“0”に書き換えることができない。
【0076】
上述のように、本例では、消去済みステータス情報はFFhを示す。FFhは、2進数表記で1111_1111b(bは2進数を意味する)となることから、消去済みステータス情報を構成する各ビットの値はデータ消去済みのビットの値であると言える。セクタ50のデータが消去されて、当該セクタ50が消去済みセクタ50になると、当該消去済みセクタ50内のステータス情報は自動的にFFhを示す。
【0077】
また、R/Wアクセスステータス情報はAAhを示す。AAhは、2進数表記で1010_1010b(bは2進数を意味する)となる。したがって、R/Wアクセスステータス情報は、消去済みステータス情報の上位から2ビット目、4ビット目、6ビット目、8ビット目の値を“0”に変更したものと一致する。コントローラ30は、消去済みステータス情報を記憶する第1管理領域501の一部のビットにデータ“0”を書き込むことによって、当該第1管理領域501内のステータス情報を消去済みステータス情報からR/Wアクセスステータス情報に変更することができる。具体的には、コントローラ30は、第1管理領域501における、消去済みステータス情報を記憶する8ビットの領域のうち、上位から2ビット目、4ビット目、6ビット目及び8ビット目のビットにデータ“0”を書き込むことによって、ステータス情報をR/Wアクセスステータス情報に変更することができる。
【0078】
また、消去待ちステータス情報は88hを示す。88hは、2進数表記で1000_1000b(bは2進数を意味する)となる。したがって、消去待ちステータス情報は、R/Wアクセスステータス情報の上位から3ビット目及び7ビット目の値を“0”に変更したものと一致する。コントローラ30は、R/Wアクセスステータス情報を記憶する第1管理領域501の一部のビットにデータ“0”を書き込むことによって、当該第1管理領域501内のステータス情報をR/Wアクセスステータス情報から消去待ちステータス情報に変更することができる。具体的には、コントローラ30は、第1管理領域501における、R/Wアクセスステータス情報を記憶する8ビットの領域のうち、上位から3ビット目及び7ビット目のビットにデータ“0”を書き込むことによって、ステータス情報を消去待ちステータス情報に変更することができる。
【0079】
また本例では、セクタ50の管理領域50Bのページ1〜3が、ステータス情報の更新状況を示す第2管理領域502として使用される。第2管理領域502のページ1〜ページ3は、消去済みセクタ50、R/Wアクセスセクタ50及び消去待ちセクタ50にそれぞれ対応している。
【0080】
コントローラ30は、セクタ50を消去済みセクタ50に変更する場合には、当該セクタ50の第2管理領域502のページ1に第1所定情報を書き込む。言い換えれば、コントローラ30は、セクタ50の第1管理領域501内のステータス情報をFFhに書き換える場合には、当該セクタ50の第2管理領域502のページ1に第1所定情報を書き込む。第2管理領域502のページ1を第1更新管理領域と呼ぶと、コントローラ30は第1更新管理領域に第1所定情報を書き込む。第1所定情報は、例えば0000_0000hである。以後、ある領域に0000_0000hを書き込むことを「オール0を書き込む」と呼ぶことがある。本例では、第1更新管理領域にオール0が書き込まれる。
【0081】
コントローラ30は、セクタ50をR/Wアクセスセクタ50に変更する場合には、当該セクタ50の第2管理領域502のページ2に第2所定情報を書き込む。言い換えれば、コントローラ30は、セクタ50の第1管理領域501内のステータス情報をAAhに書き換える場合には、当該セクタ50の第2管理領域502のページ2に第2所定情報を書き込む。第2管理領域502のページ2を第2更新管理領域と呼ぶと、コントローラ30は第2更新管理領域に第2所定情報を書き込む。第2所定情報は、例えば0000_0000hである。
【0082】
コントローラ30は、セクタ50を消去待ちセクタ50に設定する場合には、当該セクタ50の第2管理領域502のページ3に第3所定情報を書き込む。言い換えれば、コントローラ30は、セクタ50の第1管理領域501内のステータス情報を88hに書き換える場合には、当該セクタ50の第2管理領域502のページ3に第3所定情報を書き込む。第2管理領域502のページ3を第3更新管理領域と呼ぶと、コントローラ30は第3更新管理領域に第3所定情報を書き込む。第3所定情報は、例えば0000_0000hである。
【0083】
以後、第1〜第3所定情報を第1〜第3ステータス更新情報とそれぞれ呼ぶことがある。また、第1〜第3ステータス更新情報を互いに区別する必要がないときには、それぞれを単にステータス更新情報と呼ぶことがある。
【0084】
上述の説明から理解できるように、セクタ50は、消去済みセクタ50からR/Wアクセスセクタ50に変化し、R/Wアクセスセクタ50から消去待ちセクタ50に変化する。したがって、消去済みセクタ50(
図9の物理アドレス100hのセクタ50)の第2管理領域502では、ページ1だけにデータが書き込まれ、R/Wアクセスセクタ50(
図9の物理アドレス000h及び0FFhのセクタ50)の第2管理領域502では、ページ1及びページ2だけにデータが書き込まれ、消去待ちセクタ50(
図9の物理アドレス1EFhのセクタ50)の第2管理領域502では、ページ1、ページ2及びページ3のすべてにデータが書き込まれる。
【0085】
<セクタの初期出荷状態>
図10は、製造されたメモリ装置3が出荷される際のセクタ50の状態の一例を示す図である。
図10に示されるように、初期出荷状態のメモリ装置3では、物理アドレス000h〜0FFhまでのセクタ50がR/Wアクセスセクタ50に設定されている。そして、物理アドレス000h〜0FFhまでのセクタ50の第1管理領域501には、それぞれ論理アドレス00h〜FFhが記憶される。したがって、初期出荷状態のメモリ装置3の起動時には、
図10に示されるように、000h〜0FFhの物理アドレスと、00h〜FFhの論理アドレスとがそれぞれ対応付けられたL2Pテーブル60が生成される。
【0086】
また、初期出荷状態のメモリ装置3では、物理アドレス100h〜1EFhまでのセクタ50が消去済みセクタ50に設定されている。初期出荷状態のメモリ装置3の記憶領域5には消去待ちセクタ50が含まれない。初期出荷状態のメモリ装置3の起動時には、
図10に示されるように、例えば、割当番号00h〜EFhに対して、それぞれ、100h〜1EFhの物理アドレスが対応付けられた管理テーブル70が生成される。
【0087】
初期出荷状態のメモリ装置3の起動時に、コントローラ30は、各セクタ50の第1管理領域501内のステータス情報及び論理アドレスに基づいて、L2Pテーブル60及び管理テーブル70を生成して揮発性メモリ32に記憶する。
【0088】
なお、
図10及び後述の図に記載される「消去済みセクタ=Full」及び「消去待ちセクタ=Empty」は、管理テーブル70内のすべての物理アドレスが消去済みアドレスであることと、管理テーブル70には消去待ちアドレスが登録されていないことをそれぞれ意味する。また、後述の図に記載される「消去済みセクタ=Empty」及び「消去待ちセクタ=Full」は、管理テーブル70には消去済みアドレスが登録されていないことと、管理テーブル70内のすべての物理アドレスが消去待ちアドレスであることをそれぞれ意味する。
【0089】
<各動作モードの詳細>
次に、スタンバイモード、IEモード及びRIEモードについて詳細に説明する。
【0090】
<スタンバイモードの詳細>
<書き込みコマンドを受け取った際のコントローラの動作>
ホスト装置2は、書き込みコマンドとともに論理アドレスを出力する。またホスト装置2は、メモリ装置3に対して書き込み先のページPGを指定するとともに、当該ページPGに書き込むデータを出力する。書き込みコマンドの種類としては、ホストデータ領域50Aにデータを書き込むことを指示する第1書き込みコマンドと、管理領域50Bにデータを書き込むことを指示する第2書き込みコマンドとがある。
【0091】
メモリ装置3では、コントローラ30は、書き込みコマンドを受け取ると、L2Pテーブル60において、当該書き込みコマンドとともにホスト装置2が出力する論理アドレスに対応付けられている物理アドレス(R/Wアクセスアドレス)を特定する。そして、コントローラ30は、特定した物理アドレスのセクタ50(R/Wアクセスセクタ50)のホストデータ領域50A及び管理領域50Bのうち、書き込みコマンドの種類に応じた領域における、ホスト装置2が指定するページPGに対して、ホスト装置2が出力するデータを書き込む。このとき、コントローラ30は、メモリコア4に対して書き込みコマンドを出力し、当該書込みコマンドを受け取ったメモリコア4はセクタ50にデータを書きこむ。コントローラ30は、セクタ50にデータを書き込む際には管理テーブル70を使用しない。その後、コントローラ30は、ホスト装置2からの書き込みコマンドに応じた処理が完了したことを、I/F回路33を通じてホスト装置2に通知する。
【0092】
図11は、ホスト装置2からのデータがセクタ50のホストデータ領域50Aに対して書き込まれる様子の一例を示す図である。
図11には、ホスト装置2が第1書き込みコマンド及び論理アドレス00hを出力し、かつ書き込み先のページPGとしてページ0を指定する場合の例が示されている。
図11の例では、L2Pテーブル60では、論理アドレス00hに物理アドレス000hが対応付けられていることから、物理アドレス000hが割り当てられたR/Wアクセスセクタ50のホストデータ領域50Aのページ0に対して、ホスト装置2が出力するデータが書き込まれる。
【0093】
<読み出しコマンドを受け取った際のコントローラの動作>
ホスト装置2は、読み出しコマンドとともに論理アドレスを出力する。またホスト装置2は、メモリ装置3に対して読み出し対象のページPGを指定する。読み出しコマンドの種類としては、ホストデータ領域50Aからデータを読み出すことを指示する第1読み出しコマンドと、管理領域50Bからデータを読み出すことを指示する第2読み出しコマンドとがある。
【0094】
メモリ装置3では、コントローラ30は、読み出しコマンドを受け取ると、L2Pテーブル60において、当該読み出しコマンドとともにホスト装置2が出力する論理アドレスに対応付けられている物理アドレス(R/Wアクセスアドレス)を特定する。そして、コントローラ30は、特定した物理アドレスのセクタ50(R/Wアクセスセクタ50)のホストデータ領域50A及び管理領域50Bのうち、読み出しコマンドの種類に応じた領域における、ホスト装置2が指定するページPGからデータを読み出す。このとき、コントローラ30は、メモリコア4に対して読み出しコマンドを出力し、当該読み出しコマンドを受け取ったメモリコア4はセクタ50からデータを読み出してコントローラ30に出力する。コントローラ30は、読み出したデータをI/F回路33を通じてホスト装置2に出力する。コントローラ30は、セクタ50からデータを読み出す際には管理テーブル70を使用しない。
【0095】
<消去コマンドを受け取った際のコントローラの動作>
図12は、メモリコア4に消去待ちセクタ50が含まれる場合において、消去コマンドを受け取るコントローラ30の動作の一例を示すフローチャートである。ホスト装置2は、読み出しコマンドとともに論理アドレスを出力する。以後、ホスト装置2が出力する論理アドレスを「指定論理アドレス」と呼ぶことがある。
【0096】
図12に示されるように、ステップs1において、コントローラ30は、ホスト装置2からの消去コマンド及び指定論理アドレスを受け取ると、ステップs2において、消去済みポインタSPが指し示す消去済みアドレスを特定する。この特定された消去済みアドレスを「特定消去済みアドレス」と呼ぶ。そしてステップs3において、コントローラ30は、消去済みポインタSPを次に移動する。
【0097】
次にステップs4において、コントローラ30は、特定消去済みアドレスが割り当てられた消去済みセクタ50をR/Wアクセスセクタ50に変更する。具体的には、コントローラ30は、特定消去済みアドレスのセクタ50の第1管理領域501内のステータス情報をFFhからAAhに変更し、当該第1管理領域501内の論理アドレスを指定論理アドレスに変更する。コントローラ30は、消去済みセクタ50の第1管理領域501における、消去済みステータス情報(FFh)を記憶する8ビットの領域のうち、上位から2ビット目、4ビット目、6ビット目及び8ビット目のビットにデータ“0”を書き込むことによって、ステータス情報を、消去済みステータス情報(FFh)からR/Wアクセスステータス情報(AAh)に変更する。コントローラ30は、消去済みセクタ50のデータを消去することなく、ステータス情報を、消去済みステータス情報(FFh)からR/Wアクセスステータス情報(AAh)に変更することができることから、簡単にステータス情報を変更することができる。
【0098】
ここで、コントローラ30は、セクタ50のページPGにデータを書き込むと、当該ページPGからデータを読み出し、読み出したデータと、書き込んだデータとが一致するか否かを判定して、正しくデータが書き込まれていることを確認するベリファイ処理を行う。ステップs4において、コントローラ30は、特定消去済みアドレスのセクタ50の第1管理領域501(ページ0)にデータを書き込んでステータス情報及び論理アドレスを変更すると、ベリファイ処理を行う。以後、特に説明しなくても、コントローラ30はセクタ50にデータを書き込んだ後にベリファイ処理を行うものとする。
【0099】
次にステップs5において、コントローラ30は、特定消去済みアドレスのセクタ50の第2管理領域502のページ2にオール0を書き込む。
【0100】
次にステップs6において、コントローラ30は、L2Pテーブル60において、指定論理アドレスに対応するR/Wアクセスアドレスを特定する。この特定されたR/Wアクセスアドレスを「特定R/Wアクセスアドレス」と呼ぶ。
【0101】
次にステップs7において、コントローラ30は、特定R/Wアクセスアドレスが割り当てられたR/Wアクセスセクタ50を消去待ちセクタ50に変更する。具体的には、コントローラ30は、特定R/Wアクセスアドレスのセクタ50の第1管理領域501内のステータス情報をAAhから88hに変更する。コントローラ30は、R/Wアクセスセクタ50の第1管理領域501における、R/Wアクセスステータス情報(AAh)を記憶する8ビットの領域のうち、上位から3ビット目及び7ビット目のビットにデータ“0”を書き込むことによって、ステータス情報を、R/Wアクセスステータス情報(AAh)から消去待ちステータス情報(88h)に変更する。コントローラ30は、R/Wアクセスセクタ50のデータを消去することなく、ステータス情報を、R/Wアクセスステータス情報(AAh)から消去待ちステータス情報(88h)に変更することができることから、簡単にステータス情報を変更することができる。
【0102】
次にステップs8において、コントローラ30は、特定R/Wアクセスアドレスが割り当てられたセクタ50の第2管理領域502のページ3にオール0を書き込む。
【0103】
次にステップs9において、コントローラ30は、L2Pテーブル60において、特定R/Wアクセスアドレスを特定消去済みアドレスに置き換える。そしてステップs10にて、コントローラ30は、管理テーブル70において、特定消去済みアドレスを特定R/Wアクセスアドレスに置き換える。ステップs10の実行後、コントローラ30は、ホスト装置2からの消去コマンドに応じた処理が完了したことを、I/F回路33を通じてホスト装置2に通知する。
【0104】
以上のようにしてメモリ装置3が動作することによって、ホスト装置2が消去コマンド及び指定論理アドレスを出力する場合には、メモリ装置3では、指定論理アドレスに対応するセクタ50のデータが疑似的に消去される。
【0105】
図13〜19は、セクタ50、L2Pテーブル60及び管理テーブル70の状態が
図11に示される状態の場合に、消去コマンド及び指定論理アドレス00hを受け取ったコントローラ30の一連の動作の一例を説明するための図である。
【0106】
コントローラ30は、消去コマンド及び指定論理アドレス00hを受け取ると(ステップs1)、消去済みポインタSPが指し示す消去済みアドレス100hを特定する(
図13参照)。そして、
図13に示されるように、コントローラ30は、消去済みポインタSPを次に移動する。これにより、管理テーブル70上では、消去済みセクタ50の数が239個となり、消去待ちセクタ50の数が1個となる。
図13での「消去済みセクタ=239」は、消去済みセクタ50の数が239個であることを意味し、「消去待ちセクタ=1」は、消去待ちセクタ50の数が1個であることを意味している。
【0107】
次に
図14に示されるように、コントローラ30は、特定消去済みアドレス100hのセクタ50の第1管理領域501内のステータス情報をFFhからAAhに変更する(ステップs4)。また
図15に示されるように、コントローラ30は、特定消去済みアドレス100hのセクタ50の第1管理領域501内の論理アドレスFFhを、ホスト装置2からの指定論理アドレス00hに変更する(ステップs4)。これにより、特定消去済みアドレス100hが割り当てられた消去済みセクタ50がR/Wアクセスセクタ50に変更される。
【0108】
次に
図16に示されるように、コントローラ30は、特定消去済みアドレス100hのセクタ50の第2管理領域502のページ2にオール0を書き込む(ステップs5)。
【0109】
次にコントローラ30は、L2Pテーブル60において、指定論理アドレスに対応するR/Wアクセスアドレス000hを特定する(ステップs6)。そして、
図17に示されるように、コントローラ30は、特定R/Wアクセスアドレス000hが割り当てられたR/Wアクセスセクタ50の第1管理領域501内のステータス情報をAAhから88hに変更する(ステップs7)。これにより、特定R/Wアクセスアドレス000hが割り当てられたR/Wアクセスセクタ50が消去待ちセクタ50に変更される。
【0110】
次に
図18に示されるように、コントローラ30は、特定R/Wアクセスアドレス000hが割り当てられたセクタ50の第2管理領域502のページ3にオール0を書き込む。
【0111】
次に
図19に示されるように、コントローラ30は、L2Pテーブル60において、特定R/Wアクセスアドレス000hを特定消去済みアドレス100hに置き換える(ステップs9)。そして、コントローラ30は、管理テーブル70において、特定消去済みアドレス100hを特定R/Wアクセスアドレス000hに置き換える(ステップs10)。その後、コントローラ30は、ホスト装置2からの消去コマンドに応じた処理が完了したことを、I/F回路33を通じてホスト装置2に通知する。
【0112】
以上のように、本例では、コントローラ30は、消去コマンド及び指定論理アドレスを受け取った場合、指定論理アドレスに対応するセクタ50のデータを消去せずに、当該セクタ50の代りに、消去済みセクタ50を当該指定論理アドレスに対応付けることによって、指定論理アドレスに対応するセクタ50のデータを疑似的に消去している。セクタ50のデータを消去するために必要な時間は非常に大きいことから、このようにセクタ50のデータが疑似的に消去されることにより、コントローラ30の処理時間を大幅に低減することができる。よって、メモリ装置3の性能が向上する。またホスト装置2は、セクタ50のデータが実際に消去される場合と比較して、消去コマンドの出力から書き込みコマンドの出力までの時間を短くすることができる。よって、ホスト装置2は、セクタ50のデータが実際に消去される場合と比較して、セーブデータ等のデータを短時間でメモリ装置3に保存することができる。
【0113】
次に、メモリコア4に消去済みセクタ50が含まれない場合において、消去コマンドを受け取るコントローラ30の動作について説明する。
図20は当該動作の一例を示すフローチャートである。メモリコア4に消去済みセクタ50が含まれない場合において、コントローラ30は、消去コマンドを受け取ると、消去待ちセクタ50のデータを消去して消去済みセクタ50を生成した後に、上記のステップs2〜10を実行する。
【0114】
図20に示されるように、ステップs21において、コントローラ30は、ホスト装置2からの消去コマンド及び指定論理アドレスを受け取ると、ステップs22において、消去待ちポインタEPが指し示す消去待ちアドレスを特定する。この特定された消去待ちアドレスを「特定消去待ちアドレス」と呼ぶ。そしてステップs23において、コントローラ30は、消去待ちポインタEPを次に移動する。
【0115】
次にステップs24において、コントローラ30は、特定消去待ちアドレスが割り当てられた消去待ちセクタ50の管理領域50Bのページ0,4,5,6,7に対してオール0を書き込む。
【0116】
次にステップs25において、コントローラ30は、特定消去待ちアドレスが割り当てられた消去待ちセクタ50のデータを消去するために、メモリコア4に対して消去コマンドを出力する。消去コマンドを受け取ったメモリコア4は、特定消去待ちアドレスが割り当てられた消去待ちセクタ50のデータを消去する。これにより、特定消去待ちアドレスが割り当てられた消去待ちセクタ50が消去済みセクタ50に変更される。その後、メモリコア4は、データ消去が完了したことを通知する消去完了通知をコントローラ30に出力する。
【0117】
ステップs26において、コントローラ30は、消去完了通知を受け取ると、ステップs27において、特定消去待ちアドレスが割り当てられた消去待ちセクタ50の第2管理領域502のページ1にオール0を書き込む。その後、コントローラ30は上記のステップs2〜s10を実行する。ステップs10の実行後、コントローラ30は、ホスト装置2からの消去コマンドに応じた処理が完了したことを、I/F回路33を通じてホスト装置2に通知する。
【0118】
図21は、メモリコア4に消去済みセクタ50が含まれない場合のセクタ50、L2Pテーブル60及び管理テーブル70の状態の一例を示す図である。
図21に示される、物理アドレス000h及び0FFhのセクタ50はR/Wアクセスセクタ50である。また
図21に示される、物理アドレス100h及び1EFhのセクタ50は消去待ちセクタ50である。
【0119】
図22〜29は、セクタ50、L2Pテーブル60及び管理テーブル70の状態が
図21に示される状態の場合に、消去コマンド及び指定論理アドレス00hを受け取ったコントローラ30の一連の動作の一例を説明するための図である。
【0120】
コントローラ30は、消去コマンド及び指定論理アドレス00hを受け取ると(ステップs21)、消去待ちポインタEPが指し示す消去待ちアドレス100hを特定する(ステップs22)。そして
図22に示されるように、コントローラ30は、消去待ちポインタEPを次に移動する(ステップs23)。
【0121】
次に、
図22に示されるように、コントローラ30は、特定消去待ちアドレス100hが割り当てられた消去待ちセクタ50の管理領域50Bのページ0,4,5,6,7に対してオール0を書き込む(ステップs24)。
【0122】
次にコントローラ30は、メモリコア4に対して消去コマンドを出力する(ステップs25)。これにより、
図23に示されるように、特定消去待ちアドレス100hが割り当てられた消去待ちセクタ50のデータが消去される。
【0123】
その後、コントローラ30は、メモリコア4から消去完了通知を受け取ると(ステップs26)、
図24に示されるように、特定消去待ちアドレス100hが割り当てられた消去待ちセクタ50の第2管理領域502のページ1にオール0を書き込む(ステップs27)。
【0124】
次にコントローラ30は、消去済みポインタSPが指し示す消去済みアドレス100hを特定する(ステップs2)。そして、
図25に示されるように、コントローラ30は、消去済みポインタSPを次に移動する(ステップs3)。
【0125】
次に
図25に示されるように、コントローラ30は、特定消去済みアドレス100hのセクタ50の第1管理領域501内のステータス情報をFFhからAAhに変更する(ステップs4)。また
図26に示されるように、コントローラ30は、特定消去済みアドレス100hのセクタ50の第1管理領域501内の論理アドレスFFhを、ホスト装置2からの指定論理アドレス00hに変更する(ステップs4)。
【0126】
次に
図27に示されるように、コントローラ30は、特定消去済みアドレス100hのセクタ50の第2管理領域502のページ2にオール0を書き込む(ステップs5)。
【0127】
次にコントローラ30は、L2Pテーブル60において、指定論理アドレスに対応するR/Wアクセスアドレス000hを特定する(ステップs6)。そして、
図28に示されるように、コントローラ30は、特定R/Wアクセスアドレス000hが割り当てられたR/Wアクセスセクタ50の第1管理領域501内のステータス情報をAAhから88hに変更する(ステップs7)。
【0128】
次に
図29に示されるように、コントローラ30は、特定R/Wアクセスアドレス000hが割り当てられたセクタ50の第2管理領域502のページ3にオール0を書き込む。
【0129】
次に
図30に示されるように、コントローラ30は、L2Pテーブル60において、特定R/Wアクセスアドレス000hを特定消去済みアドレス100hに置き換える(ステップs9)。そして、コントローラ30は、管理テーブル70において、特定消去済みアドレス100hを特定R/Wアクセスアドレス000hに置き換える(ステップs10)。その後、コントローラ30は、ホスト装置2からの消去コマンドに応じた処理が完了したことを、I/F回路33を通じてホスト装置2に通知する。
【0130】
なお、コントローラ30が消去コマンドを受け取ったときに行う複数の処理の順番は上記の例に限られない。例えば、ステップs3はステップs1よりも後であればいつでも実行されてよい。また、ステップs6〜s8はステップs2〜s5の前に実行されてもよい。また、ステップs10はステップs9の前に実行されてもよい。また、ステップs9,s10は、ステップs2,s6の後であればいつでも実行されてよい。また、ステップs5はステップs4の前に実行されてもよい。また、ステップs8はステップs7の前に実行されてもよい。
【0131】
<IEモードの詳細>
図31は、ホスト装置2からのIEコマンドを受け取ったコントローラ30の動作の一例を示すフローチャートである。
図31に示されるように、スタンバイモードのコントローラ30は、ステップs31において、ホスト装置2からのIEコマンドを受け取ると、ステップs32において、動作モードをスタンバイモードからIEモードに変更する。
【0132】
次にステップs33において、IEモードのコントローラ30は、IEコマンドを受け取ってから所定時間が経過する前にIREコマンドを受け取ったか否かを判定する。所定時間は例えば数百msに設定される。コントローラ30は、IEコマンドを受け取ってから所定時間が経過する前にIREコマンドを受け取った場合には(ステップs33でYES)、ステップs34において、消去待ちセクタ50のデータを消去せずに、動作モードをIEモードからRIEモードに変更する。したがって、ホスト装置2が、IEコマンドを出力してから所定時間が経過する前にIREコマンドを出力する場合には、メモリ装置3ではセクタ50のデータの消去が行われない。一方で、コントローラ30は、IEコマンドを受け取ってから、IREコマンドを受け取らずに所定時間が経過すると(ステップs33でNO)、消去待ちセクタ50のデータの消去を開始する。
【0133】
コントローラ30は、消去待ちセクタ50のデータを消去する際には、まずステップs35において、消去待ちポインタEPが指し示す消去待ちアドレスを特定する。次にステップs36において、消去待ちポインタEPを次に移動する。
【0134】
次にステップs37において、コントローラ30は、ステップs35で特定した特定消去待ちアドレスが割り当てられた消去待ちセクタ50の管理領域50Bのページ0,4,5,6,7に対してオール0を書き込む。
【0135】
次にステップs38において、コントローラ30は、特定消去待ちアドレスが割り当てられた消去待ちセクタ50のデータを消去するために、メモリコア4に対して消去コマンドを出力する。消去コマンドを受け取ったメモリコア4は、特定消去待ちアドレスが割り当てられた消去待ちセクタ50のデータを消去する。これにより、特定消去待ちアドレスが割り当てられた消去待ちセクタ50が消去済みセクタ50に変更される。その後、メモリコア4は消去完了通知をコントローラ30に出力する。
【0136】
ステップs39において、コントローラ30は消去完了通知を受け取ると、ステップs40において、特定消去待ちアドレスが割り当てられたセクタ50の第2管理領域502のページ1にオール0を書き込む。
【0137】
次にステップs41において、コントローラ30は、メモリコア4において消去待ちセクタ50が無くなったか否かを判定する。コントローラ30は、メモリコア4において消去待ちセクタ50が無くなった場合には(ステップs41でのYES)、ステップs42において、動作モードをIEモードに維持する。一方で、コントローラ30は、メモリコア4において消去待ちセクタ50が存在する場合には(ステップs41でのNO)、再度ステップs35を実行して、消去待ちポインタEPが指し示す消去待ちアドレスを特定する。以後、コントローラ30は同様に動作する。
【0138】
なお、コントローラ30は、ステップs33において、IEコマンドを受け取ってから、IREコマンドを受け取らずに所定時間が経過したと判定した場合であって、メモリコア4に消去待ちセクタ50が存在しない場合には、ステップs35〜ステップs41を実行せずにステップs42を実行する。
【0139】
IEモードのコントローラ30は、ステップs35〜s42の間でホスト装置2からRIEコマンドを受け取ると、すぐに動作モードをIEモードからRIEモードに変更する。したがって、消去待ちセクタ50のデータが消去されている最中に、動作モードがIEモードからRIEモードに変化することがある。コントローラ30は、IEモードで動作する場合、IREコマンドを受け取ると、消去待ちセクタ50のデータを消去している最中であるか否かにかかわらず動作モードをIEモードからRIEモードに変更する。また、IEモードのコントローラ30は、メモリコア4の記憶領域5に複数の消去待ちセクタ50が含まれる場合には、RIEコマンドを受け取るまで、当該複数の消去待ちセクタ50のデータ消去を継続して行う。
【0140】
図32は、セクタ50、L2Pテーブル60及び管理テーブル70の状態の一例を示す図である。
図33〜35は、セクタ50、L2Pテーブル60及び管理テーブル70の状態が
図32に示される状態の場合に、IEコマンドを受け取ったコントローラ30が消去待ちセクタ50のデータを消去する際の一連の動作の一例を説明するための図である。
図32に示される、物理アドレス000h及び0FFhのセクタ50はR/Wアクセスセクタ50である。
図32に示される、物理アドレス100hのセクタ50は消去待ちセクタ50である。
図32に示される、物理アドレス1EFhのセクタ50は消去済みセクタ50である。
【0141】
コントローラ30は、上述のステップs31〜s33を実行し、ステップs33において、IEコマンドを受け取ってから、IREコマンドを受け取らずに所定時間が経過したと判定すると、消去待ちポインタEPが指し示す消去待ちアドレス100hを特定する(ステップs35)。次に
図33に示されるように、コントローラ30は、消去待ちポインタEPを次に移動する(ステップs36)。
【0142】
次に
図33に示されるように、コントローラ30は、特定消去待ちアドレス100hが割り当てられた消去待ちセクタ50の管理領域50Bのページ0,4,5,6,7に対してオール0を書き込む(ステップs37)。
【0143】
次にコントローラ30は、メモリコア4に対して消去コマンドを出力する(ステップs38)。これにより、
図34に示されるように、特定消去待ちアドレス100hが割り当てられた消去待ちセクタ50のデータが消去され、当該消去待ちセクタ50が消去済みセクタ50に変化する。
【0144】
その後、コントローラ30は、消去完了通知を受け取ると(ステップs39)、
図35に示されるように、特定消去待ちアドレス100hがセクタ50の第2管理領域502のページ1にオール0を書き込む(ステップs40)。
【0145】
次にコントローラ30は、メモリコア4において消去待ちセクタ50が無くなったか否かを判定する(ステップs41)。ここでは、メモリコア4に消去待ちセクタ50が存在することから、コントローラ30は、消去待ちポインタEPが現在指し示す消去待ちアドレス101hを特定する(ステップs35)。以後、コントローラ30は同様に動作する。
【0146】
以上のように、IEモードのコントローラ30は、メモリコア4の記憶領域5に複数の消去待ちセクタ50が含まれる場合には、RIEコマンドを受け取るまで、当該複数の消去待ちセクタ50のデータ消去を継続して行う。したがって、ホスト装置2は、消去待ちセクタ50のデータが消去されるたびにコマンドを出力する必要がなくなる。よって、コントローラ30は、消去待ちセクタ50のデータを消去するたびにホスト装置2からのコマンドを処理する必要はなく、メモリ装置3が複数の消去待ちセクタ50のデータを消去する処理を簡素化することができる。よって、メモリ装置3の性能が向上する。また、ホスト装置2の処理も簡素化される。
【0147】
なお、コントローラ30は、IEモードで動作している場合に、消去待ちセクタ50が無くなった場合には(ステップs41でのYES)、RIEモードを経由せずに、動作モードをIEモードから直接スタンバイモードに変更してもよい。
【0148】
<IEモードでのメモリ装置の消費電流>
図36は、IEモードのコントローラ30が、消去待ちセクタ50のデータを消去する際のメモリ装置3の消費電流波形の一例を示す図である。以後、単に消費電流と言えば、メモリ装置3の消費電流を意味する。
【0149】
図36に示されるように、IEモードのコントローラ30が、消去待ちセクタ50のデータを消去する際には、動作期間600,610,620,630が順に現れる。動作期間600は、特定消去待ちアドレスが割り当てられたセクタ50の管理領域50Bのページ0,4,5,6,7に対しオール0が書き込まれて、その後、当該ページ0,4,5,6,7に対するベリファイ処理が行われる期間(ステップs37)である。動作期間610は、消去コマンドを受け取ったメモリコア4が、特定消去待ちアドレスが割り当てられたセクタ50のデータを消去する期間(ステップs38,s39)である。動作期間620は、データ消去されたセクタ50のホストデータ領域50A及び管理領域50Bに対してベリファイ処理が行われる期間である。動作期間630は、データ消去されたセクタ50の第2管理領域502のページ1にオール0が書き込まれて、その後、当該ページ1に対するベリファイ処理が行われる期間(ステップs40)である。
【0150】
本例では、
図36に示されるように、動作期間610での消費電流は、動作期間600での当該消費電流よりも大きくなっている。また、動作期間620での消費電流は、動作期間610での消費電流よりも小さくなっている。そして、動作期間630での消費電流は、動作期間620での消費電流よりも大きくなり、動作期間610よりも小さくなっている。これらのことから、セクタ50のデータが消去されているときの消費電流は、セクタ50に対してデータ書き込みを行うときの消費電流よりも大きく、セクタ50に対してデータ読み出しを行うときの消費電流よりも大きくなると言える。
【0151】
なお、スタンバイモードのコントローラ30は、消去コマンドを受け取った場合、メモリコア4に消去済みセクタ50が含まれないときには、上述のように、消去待ちセクタ50のデータを消去して消去済みセクタ50を生成した後に、ステップs2〜10を実行する。スタンバイモードのコントローラ30が消去待ちセクタ50のデータを消去する際の当該コントローラ30の動作は、IEモードのコントローラ30が消去待ちセクタ50のデータを消去する際の当該コントローラ30の動作と同様であることから、スタンバイモードのコントローラ30が消去待ちセクタ50のデータを消去する場合にも、
図36に示される動作期間600,610,620,630が順に現れる。
【0152】
<RIEモードの詳細>
図37は、ホスト装置2からのRIEコマンドを受け取ったコントローラ30の動作の一例を示すフローチャートである。
図37に示されるように、IEモードのコントローラ30は、ステップs51において、ホスト装置2からのRIEコマンドを受け取ると、ステップs52において、動作モードをIEモードからRIEモードに変更する。
【0153】
次にステップs53において、RIEモードのコントローラ30は、データが途中まで消去された消去待ちセクタ50がメモリコア4に存在するか否かを判定する。コントローラ30は、データが途中まで消去された消去待ちセクタ50がメモリコア4に存在する場合には、ステップs54において、当該消去待ちセクタ50の未消去のデータを消去して、当該消去待ちセクタ50を消去済みセクタ50に変更する。そしてステップs55において、コントローラ30は、動作モードをRIEモードからスタンバイモードに変更する。コントローラ30が、IEモードで動作する場合に、消去待ちセクタ50のデータを消去している最中にRIEコマンドを受け取ると、データが途中まで消去された消去待ちセクタ50が発生することになる。一方で、コントローラ30は、データが途中まで消去された消去待ちセクタ50がメモリコア4に存在しない場合には、ステップs55を実行して、動作モードをRIEモードからスタンバイモードに変更する。
【0154】
このように、本例では、コントローラは、IEモードにおいて消去待ちセクタ50のデータを消去している最中にRIEコマンドを受け取ると、動作モードをすぐにスタンバイモードに変更するのではなく、動作モードをいったんRIEモードに変更している。そして、コントローラ30は、RIEモードにおいて、データが途中まで消去された消去待ちセクタ50の未消去のデータを消去した後に、動作モードをスタンバイモードに変更している。したがって、動作モードがスタンバイモードに設定されたときには、IEモードにおいて途中までしかデータが消去されなかったセクタ50のデータはすべて消去されていることになる。よって、コントローラ30は当該セクタ50に対してデータをすぐに書き込むことができる。その結果、メモリ装置3の性能が向上する。
【0155】
なお、ある消去待ちセクタ50のデータの消去中に、コントローラ30の動作モードがIEモードからRIEモードに変化してステップs54が実行される場合であっても、コントローラ30が当該ある消去待ちセクタ50のデータを消去することには変わりがないことから、上述の
図36に示される動作期間600,610,620,630が順に現れる。つまり、コントローラ30の動作モードにかかわらず、コントローラ30が消去待ちセクタ50のデータを消去する場合には、
図36に示される動作期間600,610,620,630が順に現れる。
【0156】
<ホスト装置のコマンド発行動作>
図38は、ホスト装置2がセクタ50に対してデータを書き込む際に出力するコマンドの順番を示す図である。本例では、コントローラ30の動作モードは、基本的にはIEモードに設定されている。ホスト装置2がセクタ50にデータを書き込む際には、
図38に示されるように、ホスト装置2のコントローラ20は、まずRIEコマンドを出力して、メモリ装置3のコントローラ30の動作モードをスタンバイモードに変更する。そして、コントローラ20は、消去コマンドを出力し、その後書き込みコマンドを出力する。セクタ50は8個のページPGで構成されていることから、ホスト装置2は、セクタ50の全ページPGにデータを書き込む場合には、8回書き込みコマンドを出力する。
【0157】
その後、ホスト装置2は、読み出しコマンドを、データを書き込んだページPGの数だけ出力して、データを書き込んだ各ページPGからデータを読み出す。ホスト装置2は、ページPGから読み出したデータと、当該ページPGに書き込んだデータとを比較して、当該ページPGに対して正しくデータが書き込まれていることを確認するベリファイ処理を行う。その後、コントローラ20はIEコマンドを出力し、コントローラ30の動作モードをIEモードに戻す。
【0158】
コントローラ20は、データを書き込むべき他のセクタ50が存在する場合には、IEコマンドを出力した後、RIEコマンド、消去コマンド、書き込みコマンド、読み出しコマンド及びIEコマンドを再度順に出力して、当該他のセクタ50にデータを書き込む。コントローラ20は、複数のセクタ50に対して連続的にデータを書き込む場合には、RIEコマンド、消去コマンド、書き込みコマンド、読み出しコマンド及びIEコマンドを順に出力する処理を繰り返し行う。
【0159】
ここで、上述のように、コントローラ30は、IEコマンドを受け取ってから所定時間が経過するまでにRIEコマンドを受け取ると、消去待ちセクタ50のデータを消去せずに、動作モードをIEモードからRIEモードに変更する。ホスト装置2のコントローラ20は、複数のセクタ50に対して連続的にデータを書き込む場合には、IEコマンドを出力してから所定時間が経過するまでにRIEコマンドを出力する。これにより、複数のセクタ50に対して連続的にデータが書き込まれる場合に、消去待ちセクタ50のデータが消去されることを防止できる。よって、メモリ装置3が複数のセクタ50に対してデータを書き込むために必要な時間が短縮化される。その結果、メモリ装置3の性能が向上する。
【0160】
また本例では、ホスト装置2は、コマンドを出力する順番を変更することなく、RIEコマンドを出力するタイミングを変更するだけで、メモリ装置3が消去待ちセクタ50のデータ消去を実行するか否かを制御することができる。よって、メモリ装置3が消去待ちセクタ50のデータ消去を実行するか否かをホスト装置2が制御する際の処理を簡素化できる。上述のように、ホスト装置2は、複数のセクタ50に対して連続的にデータを書き込む場合には、IEコマンドを出力してから所定時間が経過するまでにRIEコマンドを出力する。一方で、ホスト装置2は、メモリ装置3に消去待ちセクタ50のデータを消去させたい場合には、IEコマンドを出力してから所定時間が経過するまでにRIEコマンドを出力することは行わない。ホスト装置2は、コントローラ30の動作モードをスタンバイモードに設定したいときにRIEコマンドを出力する。ホスト装置2は、例えば、メモリ装置3に対してデータ書き込み及びデータ読み出しを行う必要がない期間はRIEコマンドを出力せずに、コントローラ30に消去待ちセクタ50のデータを消去させる。例えば、ホスト装置2は、メモリ装置3とは別に設けられたメモリ装置からアプリケーションプログラムを読み出す期間はRIEコマンドを出力せずに、コントローラ30に消去待ちセクタ50のデータを消去させる。これにより、メモリ装置3は、ホスト装置2からアクセスされないときに、消去待ちセクタ50のデータを消去することができる。よって、消去待ちセクタ50のデータ消去が、データ処理システム1全体での処理に悪影響を与える可能性を低減することができる。
【0161】
<メモリ装置の起動時の動作>
図39はメモリ装置3の起動時の動作の一例を示すフローチャートである。メモリ装置3に対する電源供給が開始すると、
図39に示されるように、ステップs61において、コントローラ30は、各ステータス情報が正しいか否かを、各セクタ50の第2管理領域502のページ1〜3(第1〜第3更新管理領域)内のステータス更新情報に基づいて判定する正否判定を行う。コントローラ30は、正否判定において正しいと判定されたステータス情報を記憶するセクタ50を正常セクタ50とし、正否判定において正しくない判定されたステータス情報を記憶するセクタ50をエラーセクタ50とする。正否判定については後で詳細に説明する。
【0162】
次にステップs62において、コントローラ20は、各正常セクタ50について、当該正常セクタ50の第2管理領域502に、当該正常セクタ50の種類に応じたステータス更新情報を書き込む。
【0163】
具体的には、正常セクタ50が記憶するステータス情報がFFhを示す場合、コントローラ30は、当該正常セクタ50(消去済みセクタ50)の第2管理領域502のページ1に対してオール0(第1ステータス更新情報)を書き込む。
【0164】
また、正常セクタ50が記憶するステータス情報がAAhを示す場合、コントローラ30は、当該正常セクタ50(R/Wアクセスセクタ50)の第2管理領域502のページ2に対してオール0(第2ステータス更新情報)を書き込む。
【0165】
また、正常セクタ50が記憶するステータス情報が88hを示す場合、コントローラ30は、当該正常セクタ50(消去待ちセクタ50)の第2管理領域502のページ3に対してオール0(第3ステータス更新情報)を書き込む。
【0166】
ここで、メモリ装置3が動作している間に、セクタ50のページPGに対するデータ読み出しの回数が多くなると、当該ページPG内の情報に誤りが発生する可能性がある。本例のように、メモリ装置3の動作中に、正常セクタ50の第2管理領域502に対して、当該正常セクタ50の種類に応じたステータス更新情報が再度書き込まれることによって、メモリ装置3の動作中に、第2管理領域502内のステータス更新情報に誤りが発生する可能性を低減することができる。
【0167】
次にステップs63において、コントローラ30は、各エラーセクタ50について、当該エラーセクタ50のデータを消去して、当該エラーセクタ50を消去済みセクタ50に設定する。このとき、消去済みセクタ50に設定されたエラーセクタ50の第2管理領域502のページ1にはオール0が書き込まれる。
【0168】
次にステップs64において、コントローラ30は、各セクタ50に割り当てられた物理アドレスと、各セクタ50に記憶される情報とに基づいて、L2Pテーブル60及び管理テーブル70を生成する。ステップs64において、コントローラ30は、ステータス情報AAhを記憶するR/Wアクセスセクタ50に割り当てられた物理アドレスと、当該R/Wアクセスセクタ50の第1管理領域501内の論理アドレスと互いに対応付けてL2Pテーブルに登録する。またコントローラ30は、ステータス情報FFhを記憶する消去済みセクタ50に割り当てられた物理アドレスを管理テーブル70に登録する。このとき、メモリコア4に複数の消去済みセクタ50が存在する場合には、当該複数の消去済みセクタ50の物理アドレスに対して連続した複数の割当番号が対応付けられる。またコントローラ30は、ステータス情報88hを記憶する消去待ちセクタ50に割り当てられた物理アドレスを管理テーブル70に登録する。このとき、メモリコア4に複数の消去待ちセクタ50が存在する場合には、当該複数の消去待ちセクタ50の物理アドレスに対して連続した複数の割当番号が対応付けられる。
【0169】
なお、メモリコア4にエラーセクタ50が存在する場合には、そのエラーセクタ50が消去済みセクタ50に設定されることから、ステップs64が実行されるときに、メモリコア4に含まれるR/Wアクセスセクタ50の数が256個未満である可能性がある。このような場合には、コントローラ30は、R/Wアクセスセクタ50の数が256個となるように、所定数の消去済みセクタ50をR/Wアクセスセクタ50に変更する。そして、コントローラ30は、論理アドレス00h〜FFhのうち、元からR/Wアクセスセクタ50であった各セクタ50の第1管理領域501に記憶されていない論理アドレスを、R/Wアクセスセクタ50に変更した各セクタ50の第1管理領域501内に記憶する。これにより、ステップs64が実行されるときに、メモリコア4に含まれるR/Wアクセスセクタ50の数が256個未満であったとしても、最終的に生成されるL2Pテーブルでは256個のR/Wアクセスアドレスが登録される。
【0170】
図40は、コントローラ30が、正否判定において、あるセクタ50内のステータス情報が正しいか否かを判定する際の当該コントローラ30の動作の一例を示すフローチャートである。以後、説明対象のセクタ50を「対象セクタ50」と呼ぶことがある。また、対象セクタ50の第1管理領域501内のステータス情報を「対象ステータス情報」と呼ぶことがある。コントローラ30は、正否判定において、各セクタ50について
図40に示される処理を実行する。
【0171】
図40に示されるように、ステップs611において、コントローラ30は、対象ステータス情報が想定される情報を示すか否かを判定する。具体的には、コントローラ30は、対象セクタ50から読み出した対象ステータス情報が、FFh、AAh及び88hのいずれか一つを示すか否かを判定する。コントローラ30は、ステップs611において、対象情報が想定される情報を示す場合、つまり対象ステータス情報がFFh、AAh及び88hのいずれか一つを示す場合、ステップs612を実行する。一方で、コントローラ30は、対象ステータス情報が想定される情報を示さない場合、つまり対象ステータス情報がFFh、AAh及び88h以外の情報を示す場合、ステップs614において、対象ステータス情報は正しくないと判定する。
【0172】
ここで、例えば、FFhであるステータス情報に誤りが発生すると、当該ステータス情報が例えばAAhとなる可能性がある。したがって、ステータス情報が想定される情報を示す場合であっても、当該ステータス情報が正しくない可能性がある。
【0173】
そこで、本例では、対象ステータス情報が想定される情報を示す場合、コントローラ30は、ステータス更新情報を使用して、対象ステータス情報が本当に正しい情報であるのか否かを判定する。
【0174】
ステップs612において、コントローラ30は、対象ステータス情報に対応する、対象セクタ50の第2管理領域502のページPGに、ステータス更新情報が書き込まれているか否かを判定する。以後、当該ページPGを「対応ページPG」と呼ぶ。対象ステータス情報がFFhを示す場合、対象セクタ50の第2管理領域502のページ1が対応ページPGとなる。対象ステータス情報がAAhを示す場合、対象セクタ50の第2管理領域502のページ2が対応ページPGとなる。対象ステータス情報が88hを示す場合、対象セクタ50の第2管理領域502のページ3が対応ページPGとなる。
【0175】
ステップs612において、コントローラ30は、対象ステータス情報がFFhを示す場合、対象セクタ50の第2管理領域502のページ1に、第1ステータス更新情報が書き込まれているか否かを判定する。つまり、コントローラ30は、対象セクタ50の第2管理領域502のページ1に、0000_0000hが書き込まれているか否かを判定する。コントローラ30は、対象セクタ50の第2管理領域502のページ1に、0000_0000hが書き込まれている場合、対応ページPGにステータス更新情報が書き込まれていると判定する。一方で、コントローラ30は、対象セクタ50の第2管理領域502のページ1に、0000_0000hが書き込まれていない場合、対応ページPGにステータス更新情報が書き込まれていないと判定する。
【0176】
またコントローラ30は、対象セクタ50内のステータス情報がAAhを示す場合、対象セクタ50の第2管理領域502のページ2に、第2ステータス更新情報が書き込まれているか否かを判定する。つまり、コントローラ30は、対象セクタ50の第2管理領域502のページ2に、0000_0000hが書き込まれているか否かを判定する。コントローラ30は、対象セクタ50の第2管理領域502のページ2に、0000_0000hが書き込まれている場合、対応ページPG内にステータス更新情報が記憶されていると判定する。一方で、コントローラ30は、対象セクタ50の第2管理領域502のページ2に、0000_0000hが書き込まれていない場合、対応ページPGにステータス更新情報が書き込まれていないと判定する。
【0177】
またコントローラ30は、対象セクタ50内のステータス情報が88hを示す場合、対象セクタ50の第2管理領域502のページ3に、第3ステータス更新情報が書き込まれているか否かを判定する。つまり、コントローラ30は、対象セクタ50の第2管理領域502のページ3に、0000_0000hが書き込まれているか否かを判定する。コントローラ30は、対象セクタ50の第2管理領域502のページ3に、0000_0000hが書き込まれている場合、対応ページPGにステータス更新情報が書き込まれていると判定する。一方で、コントローラ30は、対象セクタ50の第2管理領域502のページ3に、0000_0000hが書き込まれていない場合、対応ページPG内にステータス更新情報が書き込まれていないと判定する。
【0178】
コントローラ30は、ステップs612において、対応ページPGにステータス更新情報が書き込まれていると判定すると、ステップs613において対象ステータス情報が正しいと判定し、ステップs614において対象セクタ50を正常セクタ50とする。一方で、コントローラ30は、対応ページPGにステータス更新情報が書き込まれていないと判定すると、ステップs615において対象ステータス情報が正しくないと判定し、ステップs616において対象セクタ50をエラーセクタ50とする。
【0179】
以上のように、本例では、セクタ50の状態は、消去済みセクタ50からR/Wアクセスセクタ50に変更し、R/Wアクセスセクタ50から消去待ちセクタ50に変更し、消去待ちセクタ50から消去済みセクタに変更する。そして、ステータス情報がFFhに変更されると(セクタ50が消去済みセクタ50に変更されると)、第1ステータス更新情報が第2管理領域502のページ1に書き込まれ、ステータス情報がAAhに変更されると(セクタ50がR/Wアクセスセクタ50に変更されると)、第2ステータス更新情報が第2管理領域502のページ2に書き込まれ、ステータス情報が88hに変更されると(セクタ50が消去待ちセクタ50に変更されると)、第3ステータス更新情報が第2管理領域502のページ3に書き込まれる。したがって、ステータス情報が正しいか否かを、第2管理領域502のページ1〜3内のステータス更新情報に基づいて判定することによって、ステータス情報が正しいか否かをより正確に判定することができる。よって、メモリ装置3の性能が向上する。
【0180】
例えば、本来はFFhであるステータス情報に誤りが発生して当該ステータス情報がAAhとなっている場合、第2管理領域502のページ2には第2ステータス更新情報は記憶されていない。したがって、ステータス情報がAAhを示す場合に、第2管理領域502のページ2に第2ステータス更新情報が記憶されていない場合には、当該ステータス情報が正しくないと正確に判定することができる。また、本来はAAhであるステータス情報に誤りが発生して当該ステータス情報が88hとなっている場合、第2管理領域502のページ3には第3ステータス更新情報は記憶されていない。したがって、ステータス情報が88hを示す場合に、第2管理領域502のページ3に第3ステータス更新情報が記憶されていない場合には、当該ステータス情報が正しくないと正確に判定することができる。
【0181】
また本例では、ステータス更新情報を構成する複数ビットの値は“0”となっており、データ消去後のセクタ50の各ビットが示す値である“1”とは異なる値となっている。そのため、コントローラ30は、ステータス更新情報を、第2管理領域502のそれに対応するページPGに書き込む場合には、当該ページPGを構成する複数のビットのそれぞれの値を“1”から“0”に書き換える必要がある。したがって、上述のステップs612においては、対応ページPGの各ビットの値がすべて“1”から“0”に書き換えられているとき、対応ページPGにステータス更新情報が記憶されていると判定される。よって、ステップs61において、対応ページPGに対してステータス更新情報が記憶されていると誤って判定される可能性を低減することができる。その結果、正否判定において、ステータス情報が正しいと誤って判定される可能性を低減することができる。
【0182】
なお上記の例では、第1〜第3ステータス更新情報のすべてを0000_0000hとしたが、第1〜第3ステータス更新情報の少なくとも一つの情報を0000_0000hとしてもよい。また、ステータス更新情報は0000_0000h以外であってもよい。
【0183】
また上記の例では、メモリ装置3の起動時にステップs61〜s63が実行されているが、メモリ装置3の起動時以外においてステップs61〜s63が実行されてもよい。
【0184】
<各種変形例>
以下にメモリ装置3の各種変形例について説明する。
【0185】
<第1変形例>
例えば、本来はAAhであるステータス情報に誤りが発生して当該ステータス情報がFFhとなっている場合、FFhに対応する第2管理領域502のページ1には、第1ステータス更新情報が記憶されている。したがって、この場合には、
図40の正否判定では、ステップs612でYESと判定され、ステータス情報が誤って正しいと判定されてしまう。
【0186】
そこで、本変形例では、
図41に示されるように、コントローラ30はステップs612の後にステップs618を実行する。ステップs618では、コントローラ30は、対象セクタ50の第2管理領域502における、対応ページPGの次の番号のページPG(以後、単に「次のページPG」と呼ぶ)にステータス更新情報が書き込まれているか否かを判定する。つまり、コントローラ30は次のページPGに0000_0000hが書き込まれているか否かを判定する。コントローラ30は、対応ページPGが、第2管理領域502のページ1であれば、次のページPGである第2管理領域502のページ2に0000_0000hが書き込まれているか否かを判定する。コントローラ30は、対応ページPGが、第2管理領域502のページ2であれば、次のページPGである第2管理領域502のページ3に0000_0000hが書き込まれているか否かを判定する。コントローラ30は、対応ページPGが、第2管理領域502のページ3であれば、次のページPGである第2管理領域502のページ4に0000_0000hが書き込まれているか否かを判定する。
【0187】
コントローラ30は、次のページPGに0000_0000hが書き込まれていない場合には、ステップs613において対象ステータス情報が正しいと判定してステップs614を実行する。一方で、コントローラ30は、次のページPGに0000_0000hが書き込まれている場合には、ステップs615において対象ステータス情報が正しくないと判定してステップs616を実行する。
【0188】
このように、本変形例では、コントローラ30は、対象ステータス情報が想定される情報を示し、かつ対応ページPGにステータス更新情報が書き込まれている場合には、すぐに対象ステータス情報が正しいと判定するのではなく、次のページにステータス更新情報が書き込まれているか否かの判定結果に基づいて、対象ステータス情報が正しいか否かを判定している。したがって、ステータス情報が正しいか否かをより正確に判定することができる。
【0189】
なお、第2管理領域502のページ4は未使用であることから、コントローラ30は、ステップs618において、対応ページPGが、第2管理領域502のページ3であれば、第2管理領域502のページ4に0000_0000hが書き込まれているか否かを判定せずに、ステップs615を実行してもよい。
【0190】
<第2変形例>
本変形例では、コントローラ30は、ステータス情報をFFhに変更した場合、その変更の後の第1管理領域501に記憶される全データを誤り訂正符号化して得られる第1誤り訂正符号を第1ステータス更新情報として、第2管理領域502のページ1に書き込む。例えば、上述の
図20のステップs27及び
図31のステップs40において、コントローラ30は、特定消去待ちアドレスのセクタ50の第1管理領域501に記憶されるデータを誤り訂正符号化して得られる第1誤り訂正符号を、当該セクタ50の第2管理領域502のページ1に書き込む。
【0191】
またコントローラ30は、ステータス情報をAAhに変更した場合、その変更の後の第1管理領域501に記憶される全データを誤り訂正符号化して得られる第2誤り訂正符号を第2ステータス更新情報として、第2管理領域502のページ2に書き込む。例えば、上述の
図12のステップs5において、コントローラ30は、特定消去済みアドレスのセクタ50の第1管理領域501に記憶されるデータを誤り訂正符号化して得られる第2誤り訂正符号を、当該セクタ50の第2管理領域502のページ2に書き込む。
【0192】
またコントローラ30は、ステータス情報を88hに変更した場合、その変更の後の第1管理領域501に記憶される全データを誤り訂正符号化して得られる第3誤り訂正符号を第3ステータス更新情報として、第2管理領域502のページ3に書き込む。例えば、上述の
図12のステップs8において、コントローラ30は、特定R/Wアクセスアドレスのセクタ50の第1管理領域501に記憶されるデータを誤り訂正符号化して得られる第3誤り訂正符号を、当該セクタ50の第2管理領域502のページ3に書き込む。
【0193】
コントローラ30は、第1管理領域501に記憶されるデータを、例えば、BCC(Block Check Character)、BCH符号あるいはリード・ソロモン符号などのECC(Error Correction Code)を用いて誤り訂正符号化してよい。本変形例では、コントローラ30は、第1管理領域501に記憶されるすべてのデータを誤り訂正符号化しているが、第1管理領域501に記憶される必要なデータのみ、つまりステータス情報及び論理アドレスだけを誤り訂正符号化してもよい。また、コントローラ30は、ステータス情報だけを誤り訂正符号化してもよい。以後、第1〜第3誤り訂正符号を互いに区別する必要がないときには、それぞれを「誤り訂正符号」と呼ぶ。
【0194】
図42は、ステップs61で実行される本変形例に係る正否判定の一例を示すフローチャートである。正否判定において、コントローラ30は、各セクタ50について
図42に示される処理を実行する。
【0195】
図42に示されるように、ステップs101において、コントローラ30は、上述のステップs611と同様に、対象ステータス情報が想定される情報を示すか否かを判定する。コントローラ30は、対象ステータス情報が想定される情報を示さない場合、ステップs108において、対象ステータス情報は正しくないと判定する。そして、ステップs109において、コントローラ30は対象セクタ50をエラーセクタ50とする。一方で、コントローラ30は、対象ステータス情報が想定される情報を示す場合、ステップs102において、対応ページPG内の全データを誤り訂正復号化する。以後、誤り訂正復号化を単に「復号化」と呼ぶことがある。
【0196】
ステップs102の後、ステップs103において、コントローラ30は、ステップs102において正しく復号化できたか否かを判定する。正しく復号化できた場合には、誤り訂正符号化した元のデータが復元される。コントローラ30は、正しく復号化できた場合にはステップs104を実行する。一方で、コントローラ30は、正しく復号化できなかった場合には、ステップs112を実行する。対応ページPG内に誤り訂正符号が記憶されていない場合には、コントローラ30は正しく復号化できない。また、誤り訂正能力を超えるビット数の誤りが対応ページPG内の誤り訂正符号に発生している場合には、コントローラ30は、対応ページPG内のデータに含まれるすべての誤りを訂正できず、正しく復号化ができない。以後、正しく復号化されることによって得られるデータを「復号化データ」と呼ぶ。
【0197】
ステップs104では、コントローラ30は、対象ステータス情報と、復号化データ(復元された元のデータ)に含まれるステータス情報とが一致するか否かを判定する。コントローラ30は、対象ステータス情報と、復号化データに含まれるステータス情報とが一致する場合には、ステップs105を実行する。一方で、コントローラ30は、対象ステータス情報と、復号化データに含まれるステータス情報とが一致しない場合には、ステップs110において、次のページPGにデータが書き込まれているか否かを判定する。コントローラ30は、次のページPGの各ビットの値が“1”であれば、次のページPGにデータが書き込まれていないと判定する。一方で、コントローラ30は、次のページPGのいずれかのビットの値が“0”であれば、次のページPGにデータが書き込まれていると判定する。コントローラ30は、次のページPGにデータが書き込まれていると判定すると、ステップs111を実行する。一方で、コントローラ30は、次のページPGにデータが書き込まれていないと判定すると、ステップs108において対象ステータス情報が正しくないと判定する。そして、コントローラ30はステップs109を実行する。
【0198】
ステップs105において、コントローラ30は、上述のステップs110と同様に、次のページPGにデータが書き込まれているか否かを判定する。コントローラ30は、次のページPGにデータが書き込まれていると判定する場合、ステップs111を実行する。一方で、コントローラ30は、次のページPGにデータが書き込まれていないと判定する場合、ステップs106において、対象ステータス情報は正しいと判定する。そして、ステップs107において、コントローラ30は対象セクタ50を正常セクタ50とする。
【0199】
ステップs103でNOと判定されたときに実行されるステップs112において、コントローラ30は、ステップs110と同様に、次のページPGにデータが書き込まれているか否かを判定する。コントローラ30は、次のページPGにデータが書き込まれていると判定すると、ステップs111を実行する。一方で、コントローラ30は、次のページPGにデータが書き込まれていないと判定すると、ステップs113において、対象ステータス情報の正否は不明であると判断する。そしてステップs109において、コントローラ30は、正否が不明である対象ステータス情報を記憶する対象セクタ50をエラーセクタ50とする。
【0200】
ステップs111では、コントローラ30は、次のページPG内のデータを復号化する。そしてステップs114において、コントローラ30は、ステップs111において正しく復号化できたか否かを判定する。コントローラ30は、正しく復号化できたと判定すると、ステップs108において対象ステータス情報は正しくないと判定する。そして、コントローラ30はステップs109を実行する。次のページPG内のデータを正しく復号化できたということは、次のページPGに誤り訂正符号が記憶されていることを意味する。一方で、対象ステータス情報が正しい場合には、次のページPGに誤り訂正符号が記憶されない。したがって、ステップs114において正しく復号化できたと判定される場合には、対象ステータス情報は正しくないと言える。
【0201】
一方で、ステップs114において、コントローラ30は、正しく復号化できなかったと判定すると、ステップs113において、対象ステータス情報の正否は不明であると判定する。そして、コントローラ30はステップs109を実行する。
【0202】
以上のように、ステータス更新情報として誤り訂正符号が採用されることによって、ステータス更新情報に含まれる誤りを訂正することができる。よって、ステータス情報が正しいか否かをより正確に判定することができる。
【0203】
なお、第1〜第3ステータス更新情報のすべてを誤り訂正符号としたが、第1〜第3ステータス更新情報の少なくとも一つの情報を誤り訂正符号としてもよい。
【0204】
<第3変形例>
本変形例に係るメモリ装置3は、上述の第2変形例に係るメモリ装置3での正否判定を変更したものである。本変形例では、コントローラ30は、ステップs61での正否判定において、ステータス情報が正しいか否かを判定するだけではなく、ステータス情報に含まれる誤りの原因の推定と、その誤りの修復を行う。
図43〜46は、本変形例に係る正否判定の一例を示すフローチャートである。正否判定において、コントローラ30は、各セクタ50について
図43〜46に示される処理を実行する。以下では、本変形例に係るメモリ装置3と第2変形例に係るメモリ装置3との相違点を主に説明する。
【0205】
図43に示されるように、コントローラ30は、上述のステップs101を実行する。ステップs101において、コントローラ30は、対象ステータス情報が想定される情報を示さないと判定すると、ステップs125において、対象ステータス情報は正しくないと判定する。そして、コントローラ30は、
図44に示されるステップs131を実行する。一方で、コントローラ30は、対象ステータス情報が想定される情報を示すと判定すると、上述のステップs102,s103を実行する。
【0206】
ステップs103において、コントローラ30は、正しく復号化できなかったと判定すると、上述のステップs112を実行する。ステップs112において、コントローラ30は、次のページにデータが書き込まれていると判定すると、
図45に示されるステップs151を実行する。一方で、コントローラ30は、次のページにデータが書き込まれていないと判定すると、上述のステップs113を実行して、対象ステータス情報の正否は不明であると判断する。そして、コントローラ30は、上述のステップs109を実行して、対象セクタ50をエラーセクタ50とする。
【0207】
ステップs103において、コントローラ30は、正しく復号化できたと判定すると、ステップs121において、対象セクタ50の第1管理領域501の全データと、復号化データ(復元された元のデータ)とが一致するか否かを判定する。コントローラ30は、対象セクタ50の第1管理領域501の全データと復号化データとが一致すると判定すると、ステップs122において、次のページPGにデータが書き込まれているか否かを判定する。コントローラ30は、次のページPGにデータが書き込まれていないと判定すると、ステップs123において、第1管理領域の全データが正しいと判定する。これにより、対象ステータス情報が正しいと判定される。そして、ステップs124において、対象セクタ50を正常セクタ50とする。一方で、コントローラ30は、ステップs122において、次のページPGにデータが書き込まれていると判定すると、
図45に示されるステップs151を実行する。以後、第1管理領域501のデータを「第1管理データ」と呼ぶことがある。本変形例では、第1管理データには、ステータス情報及び論理アドレスが含まれる。
【0208】
ステップs121において、コントローラ30は、対象セクタ50の第1管理領域501のデータと復号化データとが異なっていると判定すると、ステップs126において、次のページPGにデータが書き込まれているか否かを判定する。コントローラ30は、次のページPGにデータが書き込まれていると判定すると、
図45に示されるステップs151を実行する。一方で、コントローラ30は、次のページPGにデータが書き込まれていないと判定すると、ステップs127において、対象ステータス情報は正しくないと判定する。そして、コントローラ30は、
図46に示されるステップs171を実行する。
【0209】
図44に示されるステップs131では、コントローラ30は、対象セクタ50の第2管理領域502への書き込みが最新のデータを復号化する。以後、対象セクタ50の第2管理領域502への書き込みが最新のデータを単に「最新のデータ」と呼ぶ。
【0210】
ステップs131において、コントローラ30は、まず、対象セクタ50の第2管理領域502のページ3にデータが書き込まれているか否かを判定する。コントローラ30は、対象セクタ50の第2管理領域502のページ3にデータが書き込まれている場合には、当該データを、最新のデータとして復号化する。コントローラ30は、対象セクタ50の第2管理領域502のページ3にデータが書き込まれていない場合には、対象セクタ50の第2管理領域502のページ2にデータが書き込まれているか否かを判定する。コントローラ30は、対象セクタ50の第2管理領域502のページ2にデータが書き込まれている場合には、当該データを、最新のデータとして復号化する。コントローラ30は、対象セクタ50の第2管理領域502のページ2にデータが書き込まれていない場合には、対象セクタ50の第2管理領域502のページ1に書き込まれているデータを、最新の誤り訂正符号として復号化する。
【0211】
ステップs131の後、ステップs132において、コントローラ30は、ステップs31において正しく復号化できたか否かを判定する。コントローラ30は、正しく復号化できないと判定すると、ステップs133において、対象セクタ50をエラーセクタ50とする。
【0212】
ステップs132において、コントローラ30は、正しく復号化できたと判定すると、ステップs134において、ステップs131で得られた復号化データに基づいて、対象セクタ50の第1管理データの各ビットについてビット化け方向確認を行う。ここで、ビット化け方向確認とは、ビットの値が、“1”から“0”に誤っているのか(化けているのか)、“0”から“1”に誤っているのか(化けているのか)いるかを推定することを意味する。
【0213】
ここで、復号化データは、第1管理データの正しい値を示していると考えることができる。言い換えれば、復号化データは、誤りを含まない第1管理データを示していると考えることができる。したがって、第1管理データのあるビットの値が、復号化データにおける、当該あるビットと同じビット位置のビットの値と異なっている場合には、当該あるビットの値は誤っていると推定できる。以後、第1管理データにおける、誤っていると推定されるビットの値を「誤りビット値」と呼ぶ。また、誤りビット値が“1”を示す場合、当該誤りビット値は“0”から“1”に誤っていると言える。一方で、誤りビット値が“0”を示す場合、当該誤りビット値は“1”から“0”に誤っていると言える。“1”を示す誤りビット値を「誤りビット値(0→1)」と呼び、“0”を示す誤りビット値を「誤りビット値(1→0)」と呼ぶ。
【0214】
ビット化け方向確認において、コントローラ30は、第1管理データを構成する32ビットの値と、復号化データを構成する32ビットのビットの値とを、同じビット位置同士で比較することによって、第1管理データに含まれる誤りビット値を特定する。コントローラ30は、特定した誤りビット値がすべて誤りビット値(0→1)である場合には、ステップs139において、第1管理データに含まれる誤りの原因は、リテンションであると推定する。リテンションとは、時間の経過によってメモリセルに格納された電子が抜けて、記憶領域5内のデータのビットの値が“0”から“1”に変化する現象である。特定した誤りビット値がすべて誤りビット値(0→1)であって、対象ステータス情報に誤りビット値が含まれる場合には、対象ステータス情報に含まれる誤りの原因がリテンションであると推定できる。
【0215】
またコントローラ30は、特定した誤りビット値がすべて誤りビット値(1→0)である場合には、ステップs137において、第1管理データに含まれる誤りの原因は、リードディスターブであると推定する。リードディスターブとは、記憶領域5に対するデータ読み出しによって生じる、記憶領域5内のデータのビットの値が“1”から“0”に変化する現象である。特定した誤りビット値がすべて誤りビット値(1→0)であって、対象ステータス情報に誤りビット値が含まれる場合には、対象ステータス情報に含まれる誤りの原因がリードディスターブであると推定できる。
【0216】
そして、コントローラ30は、特定した誤りビット値に誤りビット値(1→0)及び誤りビット値(0→1)の両方が含まれる場合には、ステップs135おいて、第1管理データに含まれる誤りの原因は、第1管理領域501にデータを書き込んでいる最中あるいはセクタ50のデータ消去中にメモリ装置3に対する電源供給が停止したことであると推定する。特定した誤りビット値に誤りビット値(1→0)及び誤りビット値(0→1)の両方が含まれ、対象ステータス情報に誤りビット値が含まれる場合には、対象ステータス情報に含まれる誤りの原因は、第1管理領域501にステータス情報を書き込んでいる最中あるいはセクタ50のデータ消去中にメモリ装置3に対する電源供給が停止したことであると推定できる。
【0217】
コントローラ30は、ステップs139の後、ステップs140において、第1管理データに含まれる誤りを修復する。コントローラ30は、メモリコア4に対して書き込みコマンドを出力することによって、ページPG単位でセクタ50のビットに“0”を書き込むことができる。コントローラ30は、第1管理データに含まれる各誤りビット値(0→1)について、当該誤りビット値(0→1)を有するビットに“0”を書き込む。これにより、第1管理データに含まれる誤りが修復され、正しい第1管理データを得ることができる。
【0218】
コントローラ30は、ステップs137の後、ステップs138において、第1管理データに含まれる誤りを修復する。コントローラ30は、メモリコア4に対して書き込みコマンドを出力することによって、ページPG単位でセクタ50のビットに“1”を書き込むことはできない。コントローラ30は、対象セクタ50のデータを一度消去した上で、対象セクタ50の第1管理領域501に、正しいデータ、つまりステップs131で得られた復号化データを書き込む。これにより、第1管理データの誤りが修復される。このとき、対象セクタ50の第2管理領域502には、対象セクタ50のデータの消去前に第2管理領域502記憶されていたデータが書き込まれる。
【0219】
コントローラ30は、ステップs135の後、ステップs136において、第1管理データに含まれる誤りを、ステップs138と同様にして修復する。コントローラ30は、対象セクタ50のデータを消去した後、対象セクタ50の第1管理領域501に、正しいデータ、つまりステップs131で得られた復号化データを書き込む。これにより、第1管理データの誤りが修復される。このとき、対象セクタ50の第2管理領域502には、対象セクタ50のデータの消去前に第2管理領域502記憶されていたデータが書き込まれる。
【0220】
ステップs140の後、コントローラ30は、ステップs141において対象セクタ50を正常セクタ50にする。コントローラ30は、ステップs138の後、ステップs141を実行して、対象セクタ50を正常セクタ50にする。コントローラ30は、ステップs136の後、ステップs141を実行して、対象セクタ50を正常セクタ50にする。
【0221】
図47は、ステップs135において、第1管理データに含まれる誤りの原因が、第1管理領域501にデータを書き込んでいる最中にメモリ装置3に対する電源供給が停止したことであると推定される場合の対象セクタ50の管理領域50B内のデータの一例を示す図である。
図48は、ステップs137において、第1管理データに含まれる誤りの原因がリードディスターブであると推定される場合の対象セクタ50の管理領域50B内のデータの一例を示す図である。
図49は、ステップs139において、第1管理データに含まれる誤りの原因がリテンションであると推定される場合の対象セクタ50の管理領域50B内のデータの一例を示す図である。
図47〜49では、左側にページ0〜7の本来の正しいデータが示されており、右側に対象セクタ50の管理領域50Bのページ0〜7の誤りを含むデータが示されている。後述の図についても同様である。
図47〜49では、右側に示されるデータでは、誤りが発生している部分に下線が示されている。後述の図についても同様である。
図47〜49では、ページPG内の正しく復号化できる誤り訂正符号が「XXXX_XXXX」で示されている。後述の図についても同様である。
図48,49の例では、対象ステータス情報に誤りが発生している。
【0222】
図45に示されるステップs151では、コントローラ30は、次のページPG内のデータを復号化する。そして、ステップs152において、コントローラ30は、ステップs151において正しく復号化できたか否かを判定する。コントローラ30は、正しく復号化できないと判定すると、ステップs153において、対象ステータス情報の正否は不明であると判定する。そしてステップs154において、コントローラ30は対象セクタ50をエラーセクタ50とする。
【0223】
ステップs152において、コントローラ30は、正しく復号化できたと判定すると、ステップs155において、対象ステータス情報は正しくないと判定する。次のページPG内のデータを正しく復号化できたということは、次のページPG内には誤り訂正符号が書き込まれていることになる。対象ステータス情報が正しい場合には、次のページPGには誤り訂正符号は書き込まれていない。したがって、ステップs152において正しく復号化できたと判定されたときには、言い換えれば、次のページPGに誤り訂正符号が記憶されているときには、対象ステータス情報が正しくないと言える。
【0224】
ステップs155の後、ステップs156において、コントローラ30は、上述のステップs134と同様にして、ステップs151で得られた復号化データに基づいて、対象セクタ50の第1管理データの各ビットについてビット化け方向確認を行う。
【0225】
コントローラ30は、特定した誤りビット値がすべて誤りビット値(0→1)である場合には、ステップs161において、第1管理データに含まれる誤りの原因はリテンションであると推定する。またコントローラ30は、ビット化け方向確認において特定した誤りビット値がすべて誤りビット値(1→0)である場合には、ステップs159において、第1管理データに含まれる誤りの原因はリードディスターブであると推定する。そして、コントローラ30は、特定した誤りビット値に誤りビット値(1→0)及び誤りビット値(0→1)の両方が含まれる場合には、ステップs157おいて、第1管理データに含まれる誤りの原因は、第1管理領域501にデータを書き込んでいる最中あるいはセクタ50のデータ消去中にメモリ装置3に対する電源供給が停止したことであると推定する。
【0226】
コントローラ30は、ステップs161の後、ステップs162において、第1管理データに含まれる誤りを、上述のステップs140と同様にして修復する。そして、コントローラ30は、ステップs163において、対象セクタ50を正常セクタ50とする。
【0227】
コントローラ30は、ステップs159の後、ステップs160において、第1管理データに含まれる誤りを、上述のステップs138と同様にして修復する。そして、コントローラ30は、ステップs163を実行する。
【0228】
コントローラ30は、ステップs157の後、ステップs158において、第1管理データに含まれる誤りを、上述のステップs136と同様にして修復する。そして、コントローラ30は、ステップs163を実行する。
【0229】
図50は、ステップs126においてYESと判定された場合に実行されるステップs157において、第1管理データに含まれる誤りの原因が、第1管理領域501にデータを書き込んでいる最中にメモリ装置3に対する電源供給が停止したことであると推定される場合の対象セクタ50の管理領域50B内のデータの一例を示す図である。
図51は、ステップs126においてYESと判定された場合に実行されるステップs161において、第1管理データに含まれる誤りの原因がリテンションであると推定される場合の対象セクタ50の管理領域50B内のデータの一例を示す図である。
図51の例では、対象ステータス情報に誤りが発生している。
【0230】
図52は、ステップs122においてYESと判定された場合に実行されるステップs152において、正しく復号化できなかったと判定される場合の対象セクタ50の管理領域50B内のデータの一例を示す図である。
図52では、正しく復号化できなかった次のページPG内のデータが太字の「YYYY_YYYY」で示されている。
図52の例では、第1管理データに誤りが含まれていない。
図53,54は、ステップs122においてYESと判定された場合に実行されるステップs161において、第1管理データに含まれる誤りの原因がリテンションであると推定される場合の対象セクタ50の管理領域50B内のデータの一例を示す図である。
図53,54の例では、対象ステータス情報に誤りが発生している。
【0231】
図46に示されるステップs171では、コントローラ30は、上述のステップs134と同様にして、ステップs102で得られた復号化データに基づいて、対象セクタ50の第1管理データの各ビットについてビット化け方向確認を行う。
【0232】
コントローラ30は、ビット化け方向確認において特定した誤りビット値がすべて誤りビット値(0→1)である場合には、ステップs176において、第1管理データに含まれる誤りの原因はリテンションであると推定する。またコントローラ30は、特定した誤りビット値がすべて誤りビット値(1→0)である場合には、ステップs174において、第1管理データに含まれる誤りの原因はリードディスターブであると推定する。そして、コントローラ30は、特定した誤りビット値に誤りビット値(1→0)及び誤りビット値(0→1)の両方が含まれる場合には、ステップs172おいて、第1管理データに含まれる誤りの原因は、第1管理領域501にデータを書き込んでいる最中あるいはセクタ50のデータ消去中にメモリ装置3に対する電源供給が停止したことであると推定する。
【0233】
コントローラ30は、ステップs176の後、ステップs177において、第1管理データに含まれる誤りを、上述のステップs140と同様にして修復する。そして、コントローラ30は、ステップs178において、対象セクタ50を正常セクタ50とする。
【0234】
コントローラ30は、ステップs174の後、ステップs175において、第1管理データに含まれる誤りを、上述のステップs138と同様にして修復する。そして、コントローラ30は、ステップs178を実行する。
【0235】
コントローラ30は、ステップs172の後、ステップs173において、第1管理データに含まれる誤りを、上述のステップs136と同様にして修復する。そして、コントローラ30は、ステップs178を実行する。
【0236】
図55は、ステップs174において、第1管理データに含まれる誤りの原因がリードディスターブであると推定される場合の対象セクタ50の管理領域50B内のデータの一例を示す図である。
図56は、ステップs176において、第1管理データに含まれる誤りの原因がリテンションであると推定される場合の対象セクタ50の管理領域50B内のデータの一例を示す図である。
【0237】
図57は、ステップs103において正しく復号化できなかったと判定され、ステップs112において次のページPGにデータが書き込まれていないと判定される場合の対象セクタ50の管理領域50B内のデータの一例を示す図である。
図57では、正しく復号化できなかった対応ページPG内のデータが太字の「YYYY_YYYY」で示されている。
【0238】
以上のようにして、コントローラ30は、対象セクタ50が記憶する第1管理データの誤りの原因を推定すると、推定した誤りの原因を、対象セクタ50の管理領域50Bの未使用のページPG(例えばページ7)に記憶する。このとき、コントローラ30は、推定した誤りの原因を、その誤りの原因を推定した日時とともに管理領域50Bに記憶してもよい。これにより、メモリ装置3のユーザは、どのセクタ50でどのような誤りが発生したのかを特定することができる。ユーザは、特定した内容に基づいて、メモリ装置3の使用状態等を推定し、その推定結果を設計変更等に役立てることができる。
【0239】
<第4変形例>
本変形例では、コントローラ30は、セクタ50のホストデータ領域50Aに記憶される出力データ210を誤り訂正符号化して得られる第4誤り訂正符号を、当該セクタ50の管理領域50Bにおける、第1管理領域501及び第2管理領域502以外の領域に書き込む。本変形例では、コントローラ30は、例えば管理領域50Bのページ4に第4誤り訂正符号を書き込む。
【0240】
図58は本変形例に係るメモリ装置3が対象セクタ50に出力データ210を書き込む場合の動作例を説明するための図である。
図58の上側には、新しい出力データ210が書き込まれる前の対象セクタ50、つまり、古い出力データ210を記憶する対象セクタ50が示されている。コントローラ30は、新しい出力データ210を対象セクタ50に書き込む際には、上述のように、対象セクタ50のデータを消去した後に、新しい出力データ210を対象セクタ50のホストデータ領域50Aに書き込む。
図58の中央部には、新しい出力データ210が書き込まれた直後の対象セクタ50が示されている。
【0241】
コントローラ30は、対象セクタ50に新しい出力データ210を書き込むと、ホストデータ領域50Aに対してベリファイ処理を行う。コントローラ30は、対象セクタ50のホストデータ領域50Aの最後のページPGに対するベリファイ処理を完了すると、ホストデータ領域50Aに書き込んだ出力データ210全体を誤り訂正符号化して第4誤り訂正符号を生成する。そして、コントローラ30は、生成した第4誤り訂正符号を、対象セクタ50の管理領域50Bのページ4に書き込む。
図58の下側には、第4誤り訂正符号が管理領域50Bのページ4に書き込まれた対象セクタ50が示されている。
【0242】
コントローラ30は、複数のセクタ50に対して連続的に出力データ210を書き込む際には、上記の処理を繰り返し行う。
【0243】
またコントローラ30は、対象セクタ50のホストデータ領域50Aの一部にだけしか出力データ210を書き込まない場合には、ホストデータ領域50A全体のデータではなく、ホストデータ領域50Aに書き込んだ出力データ210だけを誤り訂正符号化し、それによって得られた第4誤り訂正符号を管理領域50Bのページ4に書き込む。
図59の上側には、ホストデータ領域50Aの一部にだけ出力データ210が書き込まれた対象セクタ50が示されており、
図59の下側には、その対象セクタ50に対して第4誤り訂正符号が書き込まれた様子が示されている。
【0244】
このように、ホストデータ領域50Aに記憶される出力データ210を誤り訂正符号化して得られる第4誤り訂正符号が、管理領域50Bに書き込まれることによって、第4誤り訂正符号から、ホストデータ領域50Aに記憶される正しい出力データ210を得ることができる。よって、メモリ装置3の性能が向上する。
【0245】
以上のように、データ処理システム1は詳細に説明されたが、上記した説明は、全ての局面において例示であって、この発明がそれに限定されるものではない。また、上述した各種変形例は、相互に矛盾しない限り組み合わせて適用可能である。そして、例示されていない無数の変形例が、この発明の範囲から外れることなく想定され得るものと解される。