(57)【要約】      （修正有）【課題】ホスト装置と不揮発性記憶装置から構成される記憶システムにおいて、ホスト装置のリード・モディファイ・ライト処理を高速化し、かつ、不揮発性メモリの信頼性を向上する。【解決手段】不揮発性記憶装置１は、ホスト装置２からリード・モディファイ・ライトコマンドを受信すると、リードコマンドで読み出したデータをバッファ１１３に保持し、ライトコマンドとライトデータをホスト装置２から受信すると、受信したデータでバッファに保持したデータを更新した後、当該データを不揮発性メモリ１２へ書き込む。【選択図】図１
2011159226.tif 000002
【特許請求の範囲】
【請求項１】
ホスト装置と不揮発性記憶装置との間でコマンド、応答を用いて不揮発性メモリに対してデータの読み出しおよび／または書き込みを行う記憶システムに用いられる不揮発性記憶装置であって、
不揮発性メモリと、
コントローラ部と、
を備え、
前記コントローラ部は、バッファを備え、
（１）前記ホスト装置から受信したコマンドに対して応答を返す処理と、
（２）前記ホスト装置からのコマンドに基づいて、前記バッファを介して、前記１以上の不揮発性メモリに対して、データの読み出しおよび／または書き込みを行う処理と、
（３）前記ホスト装置からリード・モディファイ・ライトコマンドＭ１を受信し、当該リード・モディファイ・ライトコマンドＭ１に続いて送信されるコマンドとしてリードコマンドＲ１を受信した場合、受信した当該リードコマンドＲ１に付加されたアドレスの示す不揮発性メモリの領域からデータを読み出し、当該読み出したデータを、前記バッファに保持するとともに、ホスト装置へ前記データを送信し、
前記リードコマンドＲ１に続いて送信されるコマンドとしてライトコマンドＷ１を受信した場合、前記バッファに保持したデータを、前記ホスト装置から前記ライトコマンドＷ１に続いて受信したライトデータで更新した後、前記不揮発性メモリへ書き込む処理と、
を行う、
不揮発性記憶装置。
【請求項２】
ホスト装置と不揮発性メモリを備える不揮発性記憶装置との間でコマンド、応答を用いて、前記不揮発性メモリに対してデータの読み出しおよび／または書き込みを行う記憶システムに用いられるホスト装置であって、
記憶装置制御部を備え、
前記記憶装置制御部は、
（１）前記不揮発性記憶装置に対してコマンドを送信する処理と、前記不揮発性記憶装置から応答を受信する処理と、前記不揮発性記憶装置からリードデータを受信する処理と、前記不揮発性記憶装置へライトデータを送信する処理と、
（２）前記不揮発性メモリのデータに対して、リード・モディファイ・ライト処理を行う場合、前記不揮発性記憶装置に対して、リード・モディファイ・ライトコマンドを送信した後、前記不揮発性記憶装置に対してリードコマンドを送信して、処理対象データを読み出し、当該読み出したデータを更新した後、前記不揮発性記憶装置に対してライトコマンドを送信して更新後のデータをライトデータとして前記不揮発性記憶装置へ送信する、
ホスト装置。
【請求項３】
ホスト装置と不揮発性メモリを備える不揮発性記憶装置との間でコマンド、応答を用いて不揮発性メモリに対してデータの読み出しおよび／または書き込みを行う記憶システムであって、
ホスト装置と、
不揮発性メモリを備える不揮発性記憶装置と、
を備え、
前記ホスト装置は、記憶装置制御部を備え、
前記記憶装置制御部は、
（１）前記不揮発性記憶装置に対してコマンドを送信する処理と、前記不揮発性記憶装置から応答を受信する処理と、前記不揮発性記憶装置からリードデータを受信する処理と、前記不揮発性記憶装置へライトデータを送信する処理と、
（２）前記不揮発性メモリのデータに対して、リード・モディファイ・ライト処理を行う場合、前記不揮発性記憶装置に対して、リード・モディファイ・ライトコマンドを送信した後、前記不揮発性記憶装置に対してリードコマンドを送信して、処理対象データを読み出し、当該読み出したデータを更新した後、前記不揮発性記憶装置に対してライトコマンドを送信して更新後のデータをライトデータとして前記不揮発性記憶装置へ送信し、
前記不揮発性記憶装置は、
不揮発性メモリと、
コントローラ部と、
を備え、
前記コントローラ部は、バッファを備え、
前記コントローラ部は、バッファを備え、
（１）前記ホスト装置から受信したコマンドに対して応答を返す処理と、
（２）前記ホスト装置からのコマンドに基づいて、前記バッファを介して、前記１以上の不揮発性メモリに対して、データの読み出しおよび／または書き込みを行う処理と、
（３）前記ホスト装置からリード・モディファイ・ライトコマンドＭ１を受信し、当該リード・モディファイ・ライトコマンドＭ１に続いて送信されるコマンドとしてリードコマンドＲ１を受信した場合、受信した当該リードコマンドＲ１に付加されたアドレスの示す不揮発性メモリの領域からデータを読み出し、当該読み出したデータを、前記バッファに保持するとともに、ホスト装置へ前記データを送信し、
前記リードコマンドＲ１に続いて送信されるコマンドとしてライトコマンドＷ１を受信した場合、前記バッファに保持したデータを、前記ホスト装置から前記ライトコマンドＷ１に続いて受信したライトデータで更新した後、前記不揮発性メモリへ書き込む処理と、
を行う、
記憶システム。
【請求項４】
ホスト装置と、不揮発性メモリおよびバッファを備える不揮発性記憶装置との間でコマンド、応答を用いて、前記不揮発性メモリに対してデータの読み出しおよび／または書き込みを行うデータ記憶方法であって、
（１）前記ホスト装置が、前記不揮発性記憶装置に対して、リード・モディファイ・ライトコマンドＭ１を送信するステップと、
（２）前記ホスト装置が、前記不揮発性記憶装置に対して、前記リード・モディファイ・ライトコマンドＭ１に続くコマンドとして、リードコマンドＲ１を送信するステップと、
（３）不揮発性記憶装置が前記リードコマンドＲ１を受信した場合、不揮発性記憶装置は、前記リードコマンドＲ１に付加されたアドレスの示す不揮発性メモリの領域からデータを読み出し、当該読み出したデータＤ１を、前記バッファに保持するとともに、ホスト装置へ前記データＤ１を送信するステップと、
（４）前記ホスト装置は、前記不揮発性記憶装置から送信された前記データＤ１をデータＤ２に更新した後、前記不揮発性記憶装置に対してライトコマンドＷ１を送信し、さらに、ライトデータとして、前記データＤ２を送信するステップと、
（５）前記不揮発性記憶装置は、前記ライトコマンドＷ１を受信し、さらに、前記ライトデータとして、前記データＤ２を受信し、前記バッファに保持したデータＤ１を、前記ホスト装置から前記ライトコマンドＷ１に続いて前記ライトデータとして受信した前記データＤ２で更新した後、前記不揮発性メモリへ前記更新データＤ２を含むデータを書き込むステップと、
を備えるデータ記憶方法。
【請求項５】
ホスト装置と、不揮発性メモリおよびバッファを備える不揮発性記憶装置との間でコマンド、応答を用いて、前記不揮発性メモリに対してデータの読み出しおよび／または書き込みを行うデータ記憶方法をコンピュータに実行させるためのプログラムであって、
（１）前記ホスト装置が、前記不揮発性記憶装置に対して、リード・モディファイ・ライトコマンドＭ１を送信するステップと、
（２）前記ホスト装置が、前記不揮発性記憶装置に対して、前記リード・モディファイ・ライトコマンドＭ１に続くコマンドとして、リードコマンドＲ１を送信するステップと、
（３）不揮発性記憶装置が前記リードコマンドＲ１を受信した場合、不揮発性記憶装置は、前記リードコマンドＲ１に付加されたアドレスの示す不揮発性メモリの領域からデータを読み出し、当該読み出したデータＤ１を、前記バッファに保持するとともに、ホスト装置へ前記データＤ１を送信するステップと、
（４）前記ホスト装置は、前記不揮発性記憶装置から送信された前記データＤ１をデータＤ２に更新した後、前記不揮発性記憶装置に対してライトコマンドＷ１を送信し、さらに、ライトデータとして、前記データＤ２を送信するステップと、
（５）前記不揮発性記憶装置は、前記ライトコマンドＷ１を受信し、さらに、前記ライトデータとして、前記データＤ２を受信し、前記バッファに保持したデータＤ１を、前記ホスト装置から前記ライトコマンドＷ１に続いて前記ライトデータとして受信した前記データＤ２で更新した後、前記不揮発性メモリへ前記更新データＤ２を含むデータを書き込むステップと、
を備えるデータ記憶方法をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ホスト装置の命令に応じて不揮発性メモリへのデータの書き込みおよび／または読み出しを行う、不揮発性メモリを備えた不揮発性記憶装置、該不揮発性記憶装置と接続して不揮発性メモリへのデータの書き込みおよび／または読み出しを行うホスト装置、および、該ホスト装置と不揮発性記憶装置とを含んで構成される記憶システムに関する。
【背景技術】
【０００２】
従来から、不揮発性メモリを備えた不揮発性記憶装置は、電源を供給しなくてもデータを保持できることから、ＰＣやデジタルスチルカメラ、携帯電話などの記憶媒体として様々な用途で広く使われている。このような不揮発性記憶装置には、例えば、ホスト装置と脱着可能な半導体メモリカードやホスト装置の基板上に部品として組み込むエンベデッドメモリがある。
不揮発性記憶装置で使用される不揮発性メモリとして、ＮＡＮＤ型のフラッシュメモリが、大容量・低価格というメリットを活かして多く使用されている。ＮＡＮＤ型フラッシュメモリを用いた不揮発性記憶装置には、メモリコントローラが内蔵されていることが多く、このようなメモリコントローラは、ＮＡＮＤ型フラッシュメモリに対して、データの読み出し／書き込み処理を行うために、ホスト装置が不揮発性記憶装置に対してデータの読み書きを指示するときに用いられる論理アドレスをＮＡＮＤ型フラッシュメモリの物理アドレスに変換するアドレス変換処理や、ウェアレベリング処理や、誤り訂正符号の付加処理・復号化処理や、メモリ制御処理等を行う。
【０００３】
図９は、従来の不揮発性記憶装置とホスト装置との間のリード・ライト処理を説明するための図である。
図９に示すように、従来の不揮発性記憶装置９０１は、メモリコントローラ９１１と不揮発性メモリ９１２とを含み、ホスト装置９０２とバス９０３で接続されている。そして、メモリコントローラ９１１は、バッファ９１３を備えている。
図９（ａ）に示すように、ホスト装置９０２が不揮発性記憶装置９０１に対してリードコマンドを発行し、不揮発性メモリ９１２のデータを読み出す場合、不揮発性記憶装置９０１では、以下の動作が行われる。すなわち、
（１）メモリコントローラ９１１は、不揮発性メモリ９１２の記憶領域のうち、ホスト装置２から読み出しを指示されたデータＤ９１を含むページＰ９１をバッファ９１３に読み出す（図９（ａ）の処理（１））。
（２）その後、メモリコントローラ９１１は、バッファ９１３に読み出したデータＤ９１をホスト装置９０２へ送出する（図９（ａ）の処理（２））。
【０００４】
また、図９（ｂ）に示すように、ホスト装置９０２が不揮発性記憶装置９０１にライトコマンドを発行し不揮発性メモリ９１２のデータを書き換える場合、不揮発性記憶装置９０１では、以下の動作が行われる。すなわち、
（１）メモリコントローラ９１１は、ホスト装置９０２から書き換えを指示されたデータＤ９１を含むページＰ９１をバッファ９１３へ読み出す（図９（ｂ）の処理（１））。
（２）メモリコントローラ９１１は、ホスト装置９０２から送られたデータＤ９１Ａでバッファ９１３に読み出したデータＤ９１を更新する（図９（ｂ）の処理（２））。
（３）メモリコントローラ９１１は、不揮発性メモリ９１２のページＰ９２に更新後のデータＤ９１Ａを書き込む（図９（ｂ）の処理（３））。
図９（ｂ）に示した場合において、書き込むデータのサイズが不揮発性メモリ１２の書き込み単位であるページのサイズより小さいため、メモリコントローラ９１１は、一旦、バッファ１１３に元のデータＤ９１（更新前のデータＤ９１）を読み出し、データＤ９１をデータＤ９１Ａに更新した後にページ単位で書き込み処理を行う（図９（ｂ）では、ページＰ９２に更新後のデータＤ９１Ａを含むデータをページ単位で書き込んでいる）。
【０００５】
このような処理を高速化するために、例えば、特許文献１では、ホスト装置の書き込みデータを保持するバッファと不揮発性メモリからデータを読み出すバッファとを別個に設け、ホスト装置のデータの受信処理と不揮発性メモリからのデータの読み出し処理とを並列に行う技術が開示されている。
また、特許文献２では、不揮発性メモリが同一ページに対するパーシャルプログラム（パーシャル・ページ・プログラミング（Ｐａｒｔｉａｌ  Ｐａｇｅ  Ｐｒｏｇｒａｍｍｉｎｇ））をサポートする場合には、バッファにデータを読み出さずにデータを書き込む技術が開示されている。
近年、ＮＡＮＤ型フラッシュメモリでは、半導体プロセスの微細化や多値化が進んでいる。このようなフラッシュメモリにおいて、同一ページに対するパーシャルプログラムによる処理を行なうと、ディスターブ（ライト・ディスターブ（データの書き込む対象となっているセルの周辺のセルに所定の電圧がかかる現象））が発生して非書き込み領域のデータ（書き込み対象としていないセルのデータ）が変化してしまい、フラッシュメモリにおけるデータの信頼性が低下する。このため、パーシャルプログラムによる処理を適切に行うことができないフラッシュメモリが増えている。
【０００６】
さらに、ＮＡＮＤ型フラッシュメモリでは、ビット線を複数のページで共有しているため、ページデータの読み出しを行なうと非読み出しページに対するディスターブ（リード・ディスターブ）が発生し書き込み済みデータの信頼性が低下する。そして、この発生確率も微細化・多値化により高くなっている。
従って、上記のようなＮＡＮＤ型フラッシュメモリに対しては、ページ単位で書き込みを行なうことだけでなく、メモリからの読み出し回数も削減する必要がある。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００４−３１８９３３
【特許文献２】米国特許番号ＵＳ６７６０８０５Ｂ２
【発明の概要】
【発明が解決しようとする課題】
【０００８】
不揮発性記憶装置に対して、ホスト装置がリード・モディファイ・ライト（Ｒｅａｄ・Ｍｏｄｉｆｙ・Ｗｒｉｔｅ）処理を行なうことがある。ここで、「リード・モディファイ・ライト処理」とは、ホスト装置が不揮発性記憶装置からデータを読み出し、読み出したデータのうちの一部を更新した後に、再度、不揮発性記憶装置に書き込みを行なう処理である。
例えば、ホスト装置がデータを５１２バイト単位で管理している場合に、ホスト装置が３２バイトのデータを更新しようとする場合、ホスト装置は、一旦、更新対象の３２バイトデータを含む５１２Ｂのデータを不揮発性記憶装置から読み出し、３２バイトのデータを更新した後、当該更新した３２バイトのデータを含む５１２Ｂのデータを再び不揮発性記憶装置に対して書き込む。
【０００９】
このような、ホスト装置がデータを管理する単位より小さいサイズのデータの更新処理（書き込み処理）は、前述した図９（ａ）の読み出し処理と図９（ｂ）の書き込み処理とが続けて行われることにより実行される。図９から分かるように、同一のページデータＰ９１（データＤ９１を含むページデータＰ９１）が一連のリード・モディファイ・ライト処理シーケンスの中で２度（図９（ａ）の処理（１）と図９（ｂ）の処理（１）の２度）読み出されることになる。最近のＮＡＮＤ型フラッシュメモリでは、書き込み単位であるページサイズが４ＫＢや８ＫＢと大きいため、このような処理が実行される回数が多くなる。その結果、フラッシュメモリからの読み出し回数が多くなり、フラッシュメモリの書き込み済みデータの信頼性が低下することになる。
前述したように、ＮＡＮＤ型フラッシュメモリでは、パーシャルプログラムを行なえないものが増えており、特許文献２で開示された従来技術では、上記のようなフラッシュメモリのデータの信頼性が低下する問題を解決することはできない。また、特許文献１で開示された従来技術では、メモリからの読み出し回数を低減することはできない。
【００１０】
本発明は、上記問題点を解決し、ホスト装置と不揮発性記憶装置とを備える記憶システムにおいて、ホスト装置がリード・モディファイ・ライト処理を行う場合のメモリからの読み出し回数を低減し、結果として、データの信頼性向上およびリード・モディファイ・ライト処理時間を短縮することが可能な、不揮発性記憶装置、ホスト装置、記憶システム、データ記憶方法、および、プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
第１の発明は、ホスト装置と不揮発性記憶装置との間でコマンド、応答を用いて不揮発性メモリに対してデータの読み出しおよび／または書き込みを行う記憶システムに用いられる不揮発性記憶装置であって、不揮発性メモリと、コントローラ部と、を備える。
コントローラ部は、バッファを備え、以下の（１）〜（３）の処理を行う。
（１）ホスト装置から受信したコマンドに対して応答を返す処理。
（２）ホスト装置からのコマンドに基づいて、バッファを介して、１以上の不揮発性メモリに対して、データの読み出しおよび／または書き込みを行う処理。
（３）ホスト装置からリード・モディファイ・ライトコマンドＭ１を受信し、当該リード・モディファイ・ライトコマンドＭ１に続いて送信されるコマンドとしてリードコマンドＲ１を受信した場合、受信した当該リードコマンドＲ１に付加されたアドレスの示す不揮発性メモリの領域からデータを読み出し、当該読み出したデータを、バッファに保持するとともに、ホスト装置へデータを送信し、リードコマンドＲ１に続いて送信されるコマンドとしてライトコマンドＷ１を受信した場合、バッファに保持したデータを、ホスト装置からライトコマンドＷ１に続いて受信したライトデータで更新した後、不揮発性メモリへ書き込む処理。
【００１２】
この不揮発性記憶装置は、ホスト装置からリード・モディファイ・ライト処理を指示されると、ホスト装置へ送信した不揮発性メモリのデータ（例えば、不揮発性メモリの読み出し／書き込み単位サイズのデータ）をバッファに保持し、ホスト装置から受信した更新後のデータでバッファに保持しているデータを更新した後に、不揮発性メモリの新たなページへ更新データを（不揮発性メモリの読み出し／書き込み単位サイズのデータとして）書き込む。
従って、この不揮発性記憶装置を含む記憶システムでは、リード・モディファイ・ライト処理において、２つのコマンド（リードコマンドとライトコマンド）に基づく処理を行う場合でも、この不揮発性記憶装置が、不揮発性メモリの所定の領域（例えば、ページ）からデータを読み出す回数は１回で済むため、不揮発性メモリからの読み出し回数を低減し信頼性を向上させることができるとともに、リード・モディファイ・ライト処理を高速化することができる。
【００１３】
第２の発明は、ホスト装置と不揮発性メモリを備える不揮発性記憶装置との間でコマンド、応答を用いて、不揮発性メモリに対してデータの読み出しおよび／または書き込みを行う記憶システムに用いられるホスト装置であって、記憶装置制御部を備える。
記憶装置制御部は、以下の（１）、（２）の処理を行う。
（１）不揮発性記憶装置に対してコマンドを送信する処理と、不揮発性記憶装置から応答を受信する処理と、不揮発性記憶装置からリードデータを受信する処理と、不揮発性記憶装置へライトデータを送信する処理。
（２）不揮発性メモリのデータに対して、リード・モディファイ・ライト処理を行う場合、不揮発性記憶装置に対して、リード・モディファイ・ライトコマンドを送信した後、不揮発性記憶装置に対してリードコマンドを送信して、処理対象データを読み出し、当該読み出したデータを更新した後、不揮発性記憶装置に対してライトコマンドを送信して更新後のデータをライトデータとして不揮発性記憶装置へ送信する処理。
【００１４】
このホスト装置では、リード・モディファイ・ライト処理を行う場合、リードコマンドと、ライトコマンドを、連続して、不揮発性記憶装置に送信するため、例えば、第１の発明の不揮発性記憶装置とともに、リード・モディファイ・ライト処理を行うことで、リード・モディファイ・ライト処理を高速化することができるとともに、このホスト装置を含む記憶システムの信頼性を向上させることができる。
第３の発明は、ホスト装置と不揮発性メモリを備える不揮発性記憶装置との間でコマンド、応答を用いて不揮発性メモリに対してデータの読み出しおよび／または書き込みを行う記憶システムであって、ホスト装置と、不揮発性メモリを備える不揮発性記憶装置と、を備える。
ホスト装置は、記憶装置制御部を備える。
【００１５】
記憶装置制御部は、以下の（１）、（２）の処理を行う。
（１）不揮発性記憶装置に対してコマンドを送信する処理と、不揮発性記憶装置から応答を受信する処理と、不揮発性記憶装置からリードデータを受信する処理と、不揮発性記憶装置へライトデータを送信する処理。
（２）不揮発性メモリのデータに対して、リード・モディファイ・ライト処理を行う場合、不揮発性記憶装置に対して、リード・モディファイ・ライトコマンドを送信した後、不揮発性記憶装置に対してリードコマンドを送信して、処理対象データを読み出し、当該読み出したデータを更新した後、不揮発性記憶装置に対してライトコマンドを送信して更新後のデータをライトデータとして不揮発性記憶装置へ送信する処理。
不揮発性記憶装置は、不揮発性メモリと、コントローラ部と、を備える。
【００１６】
コントローラ部は、バッファを備え、以下の（１）〜（３）の処理を行う。
（１）ホスト装置から受信したコマンドに対して応答を返す処理。
（２）ホスト装置からのコマンドに基づいて、バッファを介して、１以上の不揮発性メモリに対して、データの読み出しおよび／または書き込みを行う処理。
（３）ホスト装置からリード・モディファイ・ライトコマンドＭ１を受信し、当該リード・モディファイ・ライトコマンドＭ１に続いて送信されるコマンドとしてリードコマンドＲ１を受信した場合、受信した当該リードコマンドＲ１に付加されたアドレスの示す不揮発性メモリの領域からデータを読み出し、当該読み出したデータを、バッファに保持するとともに、ホスト装置へデータを送信し、リードコマンドＲ１に続いて送信されるコマンドとしてライトコマンドＷ１を受信した場合、バッファに保持したデータを、ホスト装置からライトコマンドＷ１に続いて受信したライトデータで更新した後、不揮発性メモリへ書き込む処理。
【００１７】
この記憶システムでは、リード・モディファイ・ライト処理において、不揮発性記憶装置が、ホスト装置からリード・モディファイ・ライト処理を指示されると、ホスト装置へ送信した不揮発性メモリのデータ（例えば、不揮発性メモリの読み出し／書き込み単位サイズのデータ）をバッファに保持し、ホスト装置から受信した更新後のデータでバッファに保持しているデータを更新した後に、不揮発性メモリの新たなページへ更新データを（不揮発性メモリの読み出し／書き込み単位サイズのデータとして）書き込む。
従って、この記憶システムでは、リード・モディファイ・ライト処理において、２つのコマンド（リードコマンドとライトコマンド）に基づく処理を行う場合でも、この不揮発性記憶装置が、不揮発性メモリの所定の領域（例えば、ページ）からデータを読み出す回数は１回で済むため、不揮発性メモリからの読み出し回数を低減し信頼性を向上させることができるとともに、リード・モディファイ・ライト処理を高速化することができる。
【００１８】
第４の発明は、ホスト装置と、不揮発性メモリおよびバッファを備える不揮発性記憶装置との間でコマンド、応答を用いて、前記不揮発性メモリに対してデータの読み出しおよび／または書き込みを行うデータ記憶方法であって、以下の（１）〜（５）のステップを含む。
（１）ホスト装置が、不揮発性記憶装置に対して、リード・モディファイ・ライトコマンドＭ１を送信するステップ。
（２）ホスト装置が、不揮発性記憶装置に対して、リード・モディファイ・ライトコマンドＭ１に続くコマンドとして、リードコマンドＲ１を送信するステップ。
（３）不揮発性記憶装置がリードコマンドＲ１を受信した場合、不揮発性記憶装置は、リードコマンドＲ１に付加されたアドレスの示す不揮発性メモリの領域からデータを読み出し、当該読み出したデータＤ１を、バッファに保持するとともに、ホスト装置へデータＤ１を送信するステップ。
（４）ホスト装置は、不揮発性記憶装置から送信されたデータＤ１をデータＤ２に更新した後、不揮発性記憶装置に対してライトコマンドＷ１を送信し、さらに、ライトデータとして、データＤ２を送信するステップ。
（５）不揮発性記憶装置は、ライトコマンドＷ１を受信し、さらに、ライトデータとして、データＤ２を受信し、バッファに保持したデータＤ１を、ホスト装置からライトコマンドＷ１に続いてライトデータとして受信したデータＤ２で更新した後、不揮発性メモリへ更新データＤ２を含むデータを書き込むステップ。
【００１９】
このデータ記憶方法では、リード・モディファイ・ライト処理において、２つのコマンド（リードコマンドとライトコマンド）に基づく処理を行う場合でも、この不揮発性記憶装置が、不揮発性メモリの所定の領域（例えば、ページ）からデータを読み出す回数は１回で済むため、不揮発性メモリからの読み出し回数を低減し信頼性を向上させることができるとともに、リード・モディファイ・ライト処理を高速化することができる。
なお、「更新データＤ２を含むデータ」とは、例えば、更新データＤ２を含むページデータ（読み出し／書き込み単位サイズのデータ）である。また、バッファに読み出し保持するデータは、例えば、不揮発性メモリのデータ読み出し／書き込み単位サイズのデータである。
第５の発明は、ホスト装置と、不揮発性メモリおよびバッファを備える不揮発性記憶装置との間でコマンド、応答を用いて、前記不揮発性メモリに対してデータの読み出しおよび／または書き込みを行うデータ記憶方法をコンピュータに実行させるためのプログラムであって、以下の（１）〜（５）のステップを含む。
（１）ホスト装置が、不揮発性記憶装置に対して、リード・モディファイ・ライトコマンドＭ１を送信するステップ。
（２）ホスト装置が、不揮発性記憶装置に対して、リード・モディファイ・ライトコマンドＭ１に続くコマンドとして、リードコマンドＲ１を送信するステップ。
（３）不揮発性記憶装置がリードコマンドＲ１を受信した場合、不揮発性記憶装置は、リードコマンドＲ１に付加されたアドレスの示す不揮発性メモリの領域からデータを読み出し、当該読み出したデータＤ１を、バッファに保持するとともに、ホスト装置へデータＤ１を送信するステップ。
（４）ホスト装置は、不揮発性記憶装置から送信されたデータＤ１をデータＤ２に更新した後、不揮発性記憶装置に対してライトコマンドＷ１を送信し、さらに、ライトデータとして、データＤ２を送信するステップ。
（５）不揮発性記憶装置は、ライトコマンドＷ１を受信し、さらに、ライトデータとして、データＤ２を受信し、バッファに保持したデータＤ１を、ホスト装置からライトコマンドＷ１に続いてライトデータとして受信したデータＤ２で更新した後、不揮発性メモリへ更新データＤ２を含むデータを書き込むステップ。
【００２０】
このデータ記憶方法をコンピュータに実行させるためのプログラムでは、リード・モディファイ・ライト処理において、２つのコマンド（リードコマンドとライトコマンド）に基づく処理を行う場合でも、この不揮発性記憶装置が、不揮発性メモリの所定の領域（例えば、ページ）からデータを読み出す回数は１回で済むため、不揮発性メモリからの読み出し回数を低減し信頼性を向上させることができるとともに、リード・モディファイ・ライト処理を高速化することができる。
【発明の効果】
【００２１】
本発明によれば、ホスト装置がリード・モディファイ・ライト処理を行う際の不揮発性メモリからの読み出し回数を低減することができ、データの信頼性を向上し、かつ、処理時間を短縮することができる不揮発性記憶装置、ホスト装置、記憶システム、データ記憶方法、および、プログラムを提供することができる。
【図面の簡単な説明】
【００２２】
【図１】第１実施形態に係る記憶システム１０００の概略構成図。
【図２】ホスト装置と不揮発性記憶装置との間のコマンドシーケンスを説明するための図。
【図３】リード・モディファイ・ライトコマンドのフォーマットを説明するための図。
【図４】不揮発性記憶装置の内部処理を説明するための図。
【図５】リード・モディファイ・ライトコマンドのフォーマットを説明するための図。
【図６】アトミックサイクルの動作を説明するための図。
【図７Ａ】アトミックサイクルの動作を説明するための図。
【図７Ｂ】アトミックサイクルの動作を説明するための図。
【図８】不揮発性メモリの構成を説明するための図。
【図９】従来の不揮発性記憶装置の内部処理を説明するための図。
【発明を実施するための形態】
【００２３】
以下、本発明の実施形態について、図面を参照しながら説明する。
なお、説明中で同じ符号、記号、数字は、特に説明が無い限り、同じ構成要素を示すものとする。
［第１実施形態］
＜１．１：記憶システムの構成＞
図１は、第１実施形態に係る記憶システム１０００の概略構成を示すブロック図である。
図１（ａ）において、第１実施形態に係る記憶システム１０００は、ホスト装置２と不揮発性記憶装置１とを含んで構成される。ホスト装置２と不揮発性記憶装置１とは、コマンドや応答、データを送受信するバス３を介して接続されている。なお、本発明の説明に不要な要素は図示していない。
【００２４】
バス３は、図１（ｂ）に示すように、ホスト装置２の出力するコマンドおよび不揮発性記憶装置１が出力する応答を伝送するコマンドバス３１と、ホスト装置２が不揮発性記憶装置１中の不揮発性メモリからリードする（データ読み出しを行う）リードデータ、および／または、ホスト装置２が不揮発性記憶装置１中の不揮発性メモリにライトする（データ書き込みを行う）ライトデータを伝送するデータバス３２とを含んで構成してもよい。
また、図１（ｃ）に示すように、ホスト装置２の出力するコマンド、ライトデータを伝送するバス３３と、不揮発性記憶装置１が出力する応答、リードデータを伝送するバス３４とを含んで構成してもよい。
なお、記憶システム１０００において、図示していないがコマンド、応答、リードデータ、ライトデータを送受信するためのクロック信号は、バス３とは別の信号線としてもよく、あるいは、バス３の信号線にエンベデッドクロックとして重畳してもよい。また、記憶システム１０００において、信号の伝送方式として、差動シリアル方式やシングルエンド方式を採用することが可能である。また、記憶システム１０００において、データを送る信号線の数は、２本に限定されず、より多くの信号線を用いることでより高速な通信が可能となる。ホスト装置２から不揮発性記憶装置１へ送るデータの信号線の数と、不揮発性記憶装置１からホスト装置２へ送るデータの信号線の数は、同じであっても異なっていてもよい。
【００２５】
（１．１．１：ホスト装置の構成）
ホスト装置２は、図１（ａ）に示すように、全体を制御するＣＰＵ２１と、ＲＯＭ２２と、ＲＡＭ２３と、主記憶部２４と、周辺回路２５と、と記憶装置制御部２６とを含んで構成される。ホスト装置２の機能部は、図１（ａ）に示すように、バスＢ１により接続されるものであってもよいし、ホスト装置２の機能部の全部または一部が、直接接続されるものであってもよい。
また、ホスト装置２の機能部は、同じ半導体ＬＳＩとして実現されるものであってもよいし、その一部または全部が異なる半導体ＬＳＩで実現されるものであってもよいし、さらに、ハードウェアとソフトウェアを組み合わせて実現されるものであってもよい。
記憶装置制御部２６は、不揮発性記憶装置１とバス３を介してコマンド、応答および／またはデータの送受信を行う機能を有し、不揮発性記憶装置１との間でデータのリード処理および／またはライト処理を行なうためのバッファを備えてもよい。
【００２６】
（１．１．２：不揮発性記憶装置の構成）
不揮発性記憶装置１は、図１１（ａ）に示すように、コントローラ部１１と１以上の不揮発性メモリ１２とを含んで構成される。
コントローラ部１１は、ホスト装置ＩＦ部１１１と、メモリ制御部１１２と、バッファ１１３とを含んで構成される。
ホスト装置ＩＦ部１１１は、バス３を介してホスト装置２との間でコマンド、応答、および／または、データの送受信を行ない、ホスト装置２から受信したコマンドおよび／またはコマンドの引数をメモリ制御部１１２へ通知し、ホスト装置ＩＦ部１１１および／またはメモリ制御部１１２で生成した応答をホスト装置２へ転送する。また、ホスト装置ＩＦ部１１１は、ホスト装置２から受信したライトデータをバッファ１１３へ書き込み、またはバッファ１１３のデータを読み出してホスト装置２へ送信する。
【００２７】
メモリ制御部１１２は、ホスト装置２から受信したコマンドおよび／またはコマンドの引数や、それらに付随するデータに基づいて、不揮発性メモリ１２へのデータ書き込みやデータ読み出しの制御を行なう。当該制御には、ホスト装置２から受信したリードコマンドまたはライトコマンドに含まれる論理アドレスを不揮発性メモリ１２の物理アドレスに対応付けるアドレス変換処理が含まれる。コントローラ部１１の機能部は、その全部または一部がバスを介して接続されるものであってもよい。また、コントローラ部１１の機能部は、同じ半導体ＬＳＩとして実現されるものであってもよいし、その一部または全部が異なる半導体ＬＳＩで実現されるものであってもよいし、さらに、ハードウェアとソフトウェアを組み合わせて実現されるものであってもよい。
不揮発性メモリ１２は、図８に示すように、複数の消去単位であるブロック８１により構成される。
【００２８】
ブロック８１は、図８に示すように、複数のページ８２から構成される。ページは、データの書き込みおよび／または読み出し単位である。
ページ８２は、ホスト装置２がリードまたはライトを行なうデータを保持するデータ領域８３と、データ領域のデータに対する誤り訂正符号や、該データの論理アドレスなどを管理する情報を保持する管理領域８４とにより構成される。
メモリ制御部１１２は、不揮発性メモリ１２に対して、データのリードやライトを行う場合は、ページ８２単位で処理を実行し、消去を行う場合は、ブロック８１単位で処理を実行する。
＜１．２：記憶システムの動作＞
以上のように構成された記憶システム１０００の動作について、以下、説明する。
【００２９】
（１．２．１：コマンドシーケンス）
まず、記憶システム１０００におけるコマンドシーケンスについて、説明する。
図２は、第１実施形態に係る記憶システム１０００における、ホスト装置２と不揮発性記憶装置１との間でのコマンドシーケンスを模式的に示す図（ホスト装置２と不揮発性記憶装置１との間のコマンド、応答、データ等の送受信状況を時系列に示した図）である。
図２（ａ）は、ライト処理のコマンドシーケンスを示している。図２（ｂ）は、リード処理のコマンドシーケンスを示している。図２（ｃ）は、リード・モディファイ・ライト処理のコマンドシーケンスを示している。図２（ｄ）は、別のリード・モディファイ・ライト処理のコマンドシーケンスを示している。
なお、図２において、右端に三角形（右向きの三角形）が付されているものは、当該データ（コマンド、応答、リードデータ、ライトデータ、データ等）がホスト装置２から不揮発性記憶装置１に送信されることを意味し、逆に、左端に三角形（左向きの三角形）が付されているものは、当該データ（コマンド、応答、リードデータ、ライトデータ、データ等）が不揮発性記憶装置１からホスト装置２に送信されることを意味している（以下、同様）。
【００３０】
≪ライト処理のコマンドシーケンス≫
図２（ａ）に示すように、ライト処理のコマンドシーケンスでは、ホスト装置２が、不揮発性記憶装置１に対して、書き込みアドレスを含むライトコマンド（”Ｗｒｉｔｅ  ＣＭＤ”）を発行し、不揮発性記憶装置１が、ホスト装置２に対して、応答（”応答”）を返すと、ホスト装置は、不揮発性記憶装置１へデータ（”ライトデータ”）を所定量送信し、不揮発性記憶装置１に対してデータのライト（ライト処理）を行なう。書き込むデータ量は、予め、ホスト装置２から不揮発性記憶装置１へ別のコマンドで通知してもよく、あるいは、該ライトコマンドに書き込むデータ量を付加してもよい。あるいは、所定量のデータのライト処理が完了した時点で、ホスト装置２が、不揮発性記憶装置１に対して、停止コマンドを発行してライト処理を終了させるようにしてもよい。
【００３１】
不揮発性記憶装置１は、ホスト装置２から受信したデータを、バッファ１１３を介して、不揮発性メモリ１２へ書き込む。書き込み中にバッファに空きがない場合や、最後の書き込みデータを受信後、不揮発性メモリ１２へ書き込みが完了するまで、不揮発性記憶装置１は、ホスト装置２へビジー状態を通知してもよく、あるいは、ビジー終了を通知してもよい。
≪リード処理のコマンドシーケンス≫
図２（ｂ）に示すように、リード処理のコマンドシーケンスでは、ホスト装置２が、不揮発性記憶装置１に対して、読み出しアドレスを含むリードコマンド（”Ｒｅａｄ  ＣＭＤ”）を発行すると、不揮発性記憶装置１は、ホスト装置２に対して、応答（”応答”）を返した後、該読み出しアドレスを不揮発性メモリ１２の物理アドレスに変換し、該物理アドレスの示す不揮発性メモリ１２上の領域から読み出したデータ（”リードデータ”）を、バッファ１１３を介してホスト装置２へ読み出す。なお、読み出すデータ量は、予めホスト装置２から不揮発性記憶装置１へ別のコマンドで通知してもよく、あるいは、該リードコマンドに読み出すデータ量を付加してもよい。また、所定量のデータのリードが完了した時点で、ホスト装置２が、不揮発性記憶装置１に対して、停止コマンドを発行してリード処理を終了させてもよい。
【００３２】
≪リード・モディファイ・ライト処理のコマンドシーケンス（その１）≫
図２（ｃ）に示すように、リード・モディファイ・ライト処理のコマンドシーケンスでは、ホスト装置２は、不揮発性記憶装置１に対して、リード・モディファイ・ライトコマンド（”ＲＭＷ  ＣＭＤ”）を発行し、不揮発性記憶装置１が、ホスト装置２へ応答を返した後、ホスト装置２は、図２（ｂ）で説明したリード処理を行った後、読み出したリードデータを更新する。そして、その後、不揮発性記憶装置１は、図２（ａ）で説明したライト処理を行う。このとき、リードコマンドとライトコマンドには、同一のアドレスが付加される。なお、不揮発性記憶装置１がホスト装置２からリード・モディファイ・ライトコマンドを受信した場合、不揮発性記憶装置１は、リードコマンドに付加されたアドレスをライトコマンドの処理にも使用し、ライトコマンドに付加されたアドレスを使わないようにしてもよい。また、リード・モディファイ・ライトコマンドに、リードおよびライト処理を行うアドレスを含むようにして、リードコマンドおよびライトコマンドに付加されたアドレスを使わないようにしてもよい。さらに、リード・モディファイ・ライトコマンドとリードコマンド、ライトコマンドの間に不揮発性記憶装置１のステータスを読み出す等不揮発性メモリへのデータの読み出し・書き込みや消去を伴わないコマンドを発行できるようにしてもよい。
【００３３】
≪リード・モディファイ・ライト処理のコマンドシーケンス（その２）≫
図２（ｄ）に示すように、リード・モディファイ・ライト処理のコマンドシーケンスにおいて、リード・モディファイ・ライトコマンドがリードコマンドを兼ねるようにしてもよい。図２（ｄ）に示すリード・モディファイ・ライト処理のコマンドシーケンスでは、ホスト装置２が、不揮発性記憶装置１に対して、アドレスを付加してリード・モディファイ・ライトコマンド（”ＲＭＷ  ＣＭＤ”）を発行すると、不揮発性記憶装置１は、ホスト装置２へ応答を返した後、リードデータをホスト装置２に出力する。ホスト装置２は、読み出したリードデータ（不揮発性記憶装置１から受信したリードデータ）を更新した後、図２（ａ）で説明したライト処理を行う。このとき、リード・モディファイ・ライトコマンドとライトコマンドには、同一のアドレスが付加される。なお、リード・モディファイ・ライトコマンドを受信した場合、不揮発性記憶装置１は、リード・モディファイ・ライトコマンドに付加されたアドレスをライトコマンドの処理にも使用し、ライトコマンドに付加されたアドレスを使わないようにしてもよい。
【００３４】
本実施形態に係る記憶システム１０００において、不揮発性記憶装置１とホスト装置２とは、図２（ａ）のライトコマンドシーケンスに基づく処理、および、図２（ｂ）のリードコマンドシーケンスに基づく処理を実行することができる。さらに、記憶システム１０００において、不揮発性記憶装置１とホスト装置２とは、図２（ｃ）のリード・モディファイ・ライトコマンドシーケンスに基づく処理、および／または、図２（ｄ）のリード・モディファイ・ライトコマンドシーケンスに基づく処理を実行することができる。
なお、図２（ａ）〜（ｄ）の処理において、不揮発性記憶装置１とホスト装置２とは、データの送受信を行う前にハンドシェーク制御を行ってもよい。
例えば、記憶システム１０００において、図２（ｅ）に示すように、ライト系コマンドの処理（データのライト処理を伴う処理）では、不揮発性記憶装置１がホスト装置２に応答を返した後、データの転送要求（”Ｒｅｑ”）と転送可応答（”Ｒｄｙ”）のハンドシェークを行なってから、ホスト装置２から不揮発性記憶装置１へのデータ転送を行なうようにしてもよい。この場合、転送要求は、データを送信する側であるホスト装置２が発行し、転送可応答は、データを受信する側である不揮発性記憶装置１が発行する。
【００３５】
また、記憶システム１０００において、図２（ｆ）に示すように、リード系コマンドの処理（データのリード処理を伴う処理）では、不揮発性記憶装置１がホスト装置２に応答を返した後、データの転送要求（”Ｒｅｑ”）と転送可応答（”Ｒｄｙ”）のハンドシェークを行なってから、不揮発性記憶装置１からホスト装置２へのデータ転送を行なうようにしてもよい。この場合、転送要求は、データを送信する側である不揮発性記憶装置１が発行し、転送可応答は、データを受信する側であるホスト装置２が発行する。
（１．２．２：コマンドのフォーマット）
次に、記憶システム１０００で用いられるコマンドのフォーマットについて、説明する。
図３は、本実施形態に係る記憶システム１０００における、ホスト装置２と不揮発性記憶装置１がデータのリード処理、ライト処理および／またはリード・モディファイ・ライト処理に用いるコマンドのフォーマットを示している。
【００３６】
図３（ａ）に示すように、コマンドは、コマンドの種別を示す識別子と、処理に必要なアドレスや各種フラグを送るための引数フィールドを含む。また、コマンドによってはデータが付加されることもある。なお、コマンドには、コマンド送信元および宛先の識別子や伝送路での誤りを検出するＣＲＣ、その他コマンドの開始を示すスタートコード／ビットや終了を示すエンドコード／ビットが付加されてもよい。
図３（ｂ）は、リードコマンドのフォーマットを、図３（ｃ）は、ライトコマンドのフォーマットを、図３（ｄ）〜（ｆ）は、リード・モディファイ・ライトコマンドのフォーマットを、それぞれ、示している。
図３（ｂ）のリードコマンドのフォーマットでは、識別子がリード（”Ｒｅａｄ”）を示しており、引数として読み出しアドレスが付加されている。さらに、読み出しデータサイズや各種フラグを付加してもよい（例えば、図３（ｂ）の点線部分）。リードコマンドにフラグを付加する場合、フラグには、例えば、読み出しアドレスや読み出しデータサイズの単位、読み出しデータサイズフィールドの有無など不揮発性記憶装置１が当該リードコマンドを処理するために必要な情報が含まれる。
【００３７】
図３（ｃ）のライトコマンドのフォーマットでは、識別子がライト（”Ｗｒｉｔｅ”）を示しており、引数として書き込みアドレスが付加されている。さらに、書き込みデータサイズや各種フラグを付加してもよい（例えば、図３（ｃ）の点線部分）。ライトコマンドにフラグを付加する場合、フラグには、例えば、書き込みアドレスや書き込みデータサイズの単位、書き込みデータサイズフィールドの有無など不揮発性記憶装置１が当該ライトコマンドを処理するために必要な情報が含まれる。
図３（ｄ）のリード・モディファイ・ライトコマンドのフォーマットでは、識別子がリード・モディファイ・ライト（”ＲＭＷ”）を示しており、引数として各種フラグやリード・モディファイ・ライト処理を行うデータのサイズを付加してもよい（例えば、図３（ｄ）の点線部分）。
【００３８】
図３（ｅ）の管理コマンドのフォーマットでは、識別子が管理コマンド（”ＭＮＧ”）を示しており、引数に当該コマンドがリード・モディファイ・ライトであることを示す情報が含まれる。さらに、各種フラグを付加してもよい（例えば、図３（ｅ）の点線部分）。
図３（ｆ）のリード・モディファイ・ライトコマンドのフォーマットでは、識別子がリード・モディファイ・ライト（”ＲＭＷ”）を示しており、引数にはリード・モディファイ・ライト処理を行うアドレス情報が含まれる。さらに、各種フラグやリード・モディファイ・ライト処理を行うデータのサイズを付加してもよい（例えば、図３（ｆ）の点線部分）。また、アドレス、フラグ、サイズ情報は、図３（ｇ）に示すように、一部または全部を引数とは別のデータとして送ることも可能である（コマンドの引数に含めるのではなく、別のデータとして、送信することも可能である）。
【００３９】
本実施形態に係る記憶システム１０００において、不揮発性記憶装置１とホスト装置２とは、図３（ｂ）のリードコマンド、図３（ｃ）のライトコマンド、図３（ｄ）〜（ｇ）のいずれかのリード・モディファイ・ライトコマンドのフォーマットでコマンドを送信あるいは受信することができる。
（１．２．３：リード・モディファイ・ライト処理）
次に、記憶システム１０００におけるリード・モディファイ・ライト処理について、説明する。
図４は、本実施形態に係る記憶システム１０００において、リード・モディファイ・ライト処理を行う場合のホスト装置２および不揮発性記憶装置１の動作を説明するための図である。
【００４０】
図４（ａ）は、不揮発性記憶装置１がホスト装置２からリード・モディファイ・ライトコマンドを受信したときの処理を模式的に示している。具体的には、図４（ａ）は、不揮発性記憶装置１がホスト装置２から（１）リード・モディファイ・ライトコマンドに続いてリードコマンドを受信した場合（図２（ｃ）の場合）、または、（２）リード・モディファイ・ライトコマンドを受信した場合（図２（ｄ）の場合）に、不揮発性記憶装置１がリードデータをホスト装置２に出力する処理を示す図である。
図４（ｂ）は、図４（ａ）に示した処理の後に実行される処理を説明するための図である。つまり、図４（ｂ）は、不揮発性記憶装置１が、続いて、ホスト装置２からライトコマンドを受信してデータ（ライトデータ）を不揮発性メモリ１２へ書き込む処理を示している。
【００４１】
図４（ａ）では、不揮発性記憶装置１は、ホスト装置２からリードコマンドあるいはリード・モディファイ・ライトコマンドを受信すると、以下の処理を行う。すなわち、
（１）不揮発性記憶装置１は、受信した当該コマンドに付加されたアドレスのデータを含む不揮発性メモリ１２上のページＰｏｒｇのデータをバッファ１１３に読み出す（図４（ａ）の処理（１））。
（２）その後、不揮発性記憶装置１は、当該ページＰｏｒｇの全部または一部のデータをリードデータＤｒｅａｄとしてホスト装置２へ送信する（図４（ａ）の処理（２））。このとき、不揮発性記憶装置１は、不揮発性メモリ１２のページＰｏｒｇから読み出したデータをバッファ１１３に保持する。
次に、図４（ｂ）に示すように、ホスト装置２および不揮発性記憶装置１は、以下の処理を行う。すなわち、
（３）ホスト装置２は、不揮発性記憶装置１に対して、リードデータＤｒｅａｄの全部または一部を更新したライトデータＤｗｒｉｔｅを、ライトコマンドを発行した後に送信する。不揮発性記憶装置１は、ライトコマンドおよびライトデータＤｗｒｉｔｅをホスト装置２から受信すると、バッファ１１３に保持している不揮発性メモリ１２のページＰｏｒｇから読み出したデータの当該箇所をライトデータＤｗｒｉｔｅで上書きして更新する（図４（ｂ）の処理（３））。
（４）そして、その後、不揮発性記憶装置１は、不揮発性メモリ１２の新たな書き込みページＰｎｅｗへ、更新したデータＤｗｒｉｔｅを含むデータ（ページデータ）を書込む（図４（ｂ）の処理（４））。なお、新たな書き込みページＰｎｅｗの選択方法には、従来から様々なアルゴリズム、方法が開示されているが、本発明の本質ではないため、その説明は省略する。
【００４２】
なお、図４（ｂ）の場合において、不揮発性記憶装置１がライトコマンドを受信した際に、不揮発性記憶装置１は、当該ライトコマンドに付加されたアドレス（このアドレスを「Ａ１」とする。）が、データの読み出しを指示したリードコマンドに付加されていたアドレス（このアドレスを「Ｂ１」とする。）、あるいは、リード・モディファイ・ライトコマンドに付加されていたアドレス（このアドレスを「Ｂ２」とする。）と一致するか否かをチェックする。
そして、アドレスＡ１とアドレスＢ１（またはＢ２）とが一致する場合、不揮発性記憶装置１は、上記（３）、（４）で示した処理（図４（ｂ）の処理（３）、（４）に相当する処理）を行う。
一方、アドレスＡ１とアドレスＢ１（またはＢ２）とが一致しない場合、不揮発性記憶装置１は、バッファ１１３に保持しているデータ（図４の場合、データＤｒｅａｄ）を破棄して、新たに、不揮発性記憶装置１が受信したライトコマンドに指定されているアドレスＡ１（論理アドレスＡ１）に相当するアドレス（物理アドレス）のデータを含む不揮発性メモリ１２のページからデータ（ページデータ）を読み出すようにしてもよい。あるいは、アドレスＡ１とアドレスＢ１（またはＢ２）とが一致しない場合には、不揮発性記憶装置１は、ホスト装置２へエラーを返し、受信したライトコマンドおよびバッファ１１３に保持しているデータを破棄するようにしてもよい。
【００４３】
さらに、本実施形態に係る不揮発性記憶装置１は、次のように、動作するものであってもよい。すなわち、
（１）不揮発性記憶装置１が、ホスト装置２から、リード・モディファイ・ライトコマンドを受信した場合、不揮発性記憶装置１は、当該リード・モディファイ・ライトコマンドに続いて受信するリードコマンドおよびライトコマンドに基づく処理が正常終了するまで、あるいは、エラーが検出されるなどしてリード・モディファイ・ライト処理が終了（異常終了）するまで、バッファ１１３を動作状態、すなわち、クロックや電源を供給する「通常動作状態」とするようにしてもよい。
（２）不揮発性記憶装置１が、ホスト装置２から、リード・モディファイ・ライトコマンドを受信せずに、リードコマンドやライトコマンドを受信した場合（リード・モディファイ・ライトコマンドと伴わない、単独のリードコマンドやライトコマンドを受信した場合）、不揮発性記憶装置１は、当該コマンド（受信したリードコマンドやライトコマンド）に基づく処理が終了する度に、バッファ１１３を「スタンバイ状態」、すなわち、バッファ１１３へのクロック供給を停止したり電源供給を停止したりした省電力状態とするようにしてもよい。
【００４４】
すなわち、不揮発性記憶装置１は、リード・モディファイ・ライトコマンドの受信の有無により、バッファ１１３の動作状態（クロック供給や電源供給の状態）を変更する。つまり、不揮発性記憶装置１が、ホスト装置２からリード・モディファイ・ライトコマンドを受信した場合、当該リード・モディファイ・ライトコマンドに続いてリードコマンドやライトコマンドが、ホスト装置２から不揮発性記憶装置１へ送信されてくる可能性が高い。したがって、この場合、不揮発性記憶装置１は、バッファ１１３を、リードコマンドに基づく処理やライトコマンドに基づく処理を即時に処理できる状態（通常動作状態（クロックや電源を供給する状態））にしておく。
一方、不揮発性記憶装置１が、リード・モディファイ・ライトコマンドの受信を確認していない状態で、リードコマンドやライトコマンドをホスト装置２から受信した場合、不揮発性記憶装置１は、当該リードコマンドに基づく処理、あるいは、当該ライトコマンドに基づく処理を実行し、当該処理が終了した後、バッファ１１３を「スタンバイ状態」にする。これにより、バッファ１１３での消費電力を抑えることができる。
【００４５】
不揮発性記憶装置１において、上記のように処理することで、コントローラ部１１を製造する半導体のプロセスが微細化し、バッファ１１３でのリーク電流が問題になるような場合（バッファ１１３が動作していない場合でも電源供給あるいはクロック供給があるため、リーク電流が発生し、それによる消費電力量が問題になるような場合）でも、コマンドに対する良好な応答性を維持しつつ、消費電力を抑えることが可能となる。
以上のように、第１実施形態に係る記憶システム１０００において、不揮発性記憶装置１は、ホスト装置２からリード・モディファイ・ライト処理を指示されると、ホスト装置へ送信した不揮発性メモリ１２のページのデータをバッファ１１３へ保持し、ホスト装置から受信した更新後のデータでバッファ１１３に保持しているデータを更新した後に、不揮発性メモリ１２の新たなページへ更新データを書き込む。
【００４６】
従って、記憶システム１０００では、リード・モディファイ・ライト処理において、２つのコマンド（リードコマンドとライトコマンド）に基づく処理を行う場合でも、不揮発性記憶装置１が、不揮発性メモリ１２のページからデータを読み出す回数は１回で済むため、不揮発性メモリ１２からの読み出し回数を低減し信頼性を向上させることができる。
また、記憶システム１０００では、リード・モディファイ・ライト処理において、不揮発性記憶装置１がホスト装置２からライトコマンドを受信した際に、不揮発性メモリ１２のページからデータをバッファ１１３に読み出す処理が不要であるので、ライト処理に要する時間を短縮できる。その結果、記憶システム１０００において、リード・モディファイ・ライト処理を高速化することができる。
［第２実施形態］
次に、本発明の第２実施形態について、説明する。
【００４７】
＜２．１：記憶システムの構成＞
第２実施形態に係る記憶システムは、図１に示す不揮発性記憶装置１とホスト装置２がバス３を介して通信を行う。第２実施形態に係る不揮発性記憶装置１及びホスト装置２の構成要素は、第１実施形態に係る不揮発性記憶装置１およびホスト装置２と同じである。
＜２．２：記憶システムの動作＞
以下、図面を用いて、第２実施形態に係る記憶システムの動作について、説明する。
（２．２．１：コマンドのフォーマット）
まず、本実施形態の記憶システムで用いられるコマンドのフォーマットについて、説明する。
図５は、第２実施形態に係る記憶システムにおける、ホスト装置２と不揮発性記憶装置１とがリード・モディファイ・ライト処理をアトミックオペレーションとして行なう場合に用いるコマンドのフォーマットを示している。
【００４８】
ここで、「アトミックオペレーション」とは、リード・モディファイ・ライト処理を、一連の不可分な処理として行う処理のことを意味する。
図５（ａ）〜（ｄ）に示したリード・モディファイ・ライトコマンドでは、アトミックオペレーションを指示するフラグＡＴＭＣを引数に設定することが可能であり、フラグＡＴＭＣが”有効”と設定されている場合、リード・モディファイ・ライト処理は、アトミックオペレーションとして扱われる。なお、フラグＡＴＭＣは、データに含んでもよく、あるいはリード・モディファイ・ライト処理を、常に、アトミックオペレーションとして実行する場合は、フラグＡＴＭＣを省略することも可能である。
（２．２．２：コマンドシーケンス）
次に、本実施形態の記憶システムにおけるコマンドシーケンスについて、説明する。
【００４９】
本実施形態の記憶システムでは、リード・モディファイ・ライト処理をアトミックオペレーションとして実行する。
図６は、第２実施形態に係る記憶システムにおける、ホスト装置２と不揮発性記憶装置１との間でリード・モディファイ・ライト処理をアトミックオペレーションとして実行する場合のコマンドシーケンスを模式的に示す図（ホスト装置２と不揮発性記憶装置１との間のコマンド、応答、データ等の送受信状況を時系列に示した図）である。
（２．２．２．１：アトミックオペレーション型リード・モディファイ・ライト処理（第１例））
まず、本実施形態の記憶システムにおいて、リード・モディファイ・ライト処理をアトミックオペレーションとして実行する場合のコマンドシーケンス（第１例）について、説明する。
【００５０】
≪リード・モディファイ・ライト処理のコマンドシーケンス（正常処理）≫
図６（ａ）に示すコマンドシーケンスでは、本実施形態の記憶システムにおいて、以下のように処理が実行される。すなわち、
（１）ホスト装置２は、不揮発性記憶装置１に対して、リード・モディファイ・ライトコマンド（”ＲＭＷ”）を、アトミックオペレーションを指示して送信する（シーケンス６１）。
（２）その後、ホスト装置２は、不揮発性記憶装置１に対して、アドレスｘｘを付加してリードコマンドを送信して、不揮発性記憶装置１からリードデータを読み出す（シーケンス６２）。
（３）そして、ホスト装置２は、その読み出したデータを更新した後、アドレスｘｘを付加してライトコマンドを不揮発性記憶装置１に送信した後、ライトデータを不揮発性記憶装置１に送信する（シーケンス６３）。
【００５１】
このようにして、本実施形態の記憶システムでは、コマンドシーケンス６１〜６３が一つの動作として行なわれる。
≪リード・モディファイ・ライト処理のコマンドシーケンス（異常処理）≫
図６（ｂ）に示すコマンドシーケンスでは、リード・モディファイ・ライトコマンドによるシーケンス６１、リードコマンドによるシーケンス６２の後に、ホスト装置２がシーケンス６２で指示したアドレスｘｘとは異なるアドレスｙｙが付加された別のコマンドを、ホスト装置２が不揮発性記憶装置１に発行した場合、不揮発性記憶装置１は、「エラー」と判定する（シーケンス６４）。
この場合、不揮発性記憶装置１は、ホスト装置２への応答に、エラーの発生を示すフラグを付加してもよいし、あるいは、ホスト装置２へ応答を返さないようにしてもよい。ホスト装置２へ応答を返さないようにする場合、ホスト装置２は、応答の受信タイムアウトによりエラーの発生を検知することができる。
【００５２】
また、エラーが発生した場合、不揮発性記憶装置１は、自動的にアトミックオペレーションを抜けてもよく（アトミックオペレーションを終了させてもよく）、あるいは、ホスト装置２が発行するリード・モディファイ・ライト終了コマンド６５を受信して、アトミックオペレーションを抜けてもよい（アトミックオペレーションを終了させてもよい）（シーケンス６５）。
なお、図６（ｃ）に示すコマンドシーケンスのように、リード・モディファイ・ライトコマンドによるシーケンス６１、リードコマンドコマンドによるシーケンス６２の後に、ホスト装置２がシーケンス６２で指示したアドレスｘｘとは異なるアドレスｙｙが付加された別のコマンド（シーケンス６４のコマンド）を、不揮発性記憶装置１がホスト装置２から受信した場合であっても、次に、不揮発性記憶装置１がホスト装置２からアドレスｘｘが付加された正しいライトコマンドを受信した場合は、リード・モディファイ・ライトコマンド処理を継続させてもよい（シーケンス６３）。
【００５３】
このように処理することにより、本実施形態の記憶システムでは、不揮発性記憶装置１が、一連の処理中に無効なコマンド（シーケンス６４のコマンド）を受信した場合であっても、あたかも処理がアトミックオペレーションであるように動作することができる。
また、図６（ｄ）に示すコマンドシーケンスのように、リード・モディファイ・ライトコマンドによるシーケンス６１、リードコマンドによるシーケンス６２に続いて、アドレス「ｘｘ」が付加されたリードコマンド（シーケンス６６のリードコマンド）を、不揮発性記憶装置１がホスト装置２から受信した場合（シーケンス６６）には、不揮発性記憶装置１は、「エラー」と判定する（シーケンス６５）。
図６（ｄ）の場合、不揮発性記憶装置１により、シーケンス６６のリードコマンドによる処理（アドレス「ｘｘ」のデータをリードする処理）が実行されると、リード・モディファイ・ライト処理による更新処理が完了する前にアドレス「ｘｘ」のデータが読み出されることになる。つまり、リード・モディファイ・ライトコマンドによる処理（リード・モディファイ・ライト処理）がアトミックオペレーションとして実行されないことになるので、図６（ｄ）の場合、不揮発性記憶装置１は、「エラー」と判定する。そして、本実施形態の記憶システムでは、このように処理することで、リード・モディファイ・ライトコマンドによる処理が、適切に実行される（アトミックオペレーションとして実行される）ことを保証する。
【００５４】
第２実施形態に係る不揮発性記憶装置１とホスト装置２は、図６（ａ）〜（ｄ）に示す４つの動作（コマンドシーケンス処理）のうちの、いずれかあるいか全ての動作（コマンドシーケンス処理）を行なうことができる。
（２．２．２．２：アトミックオペレーション型リード・モディファイ・ライト処理（第２例））
次に、本実施形態の記憶システムにおいて、リード・モディファイ・ライト処理をアトミックオペレーションとして実行する場合のコマンドシーケンス（第２例）について、説明する。
図７Ａ、図７Ｂは、リード・モディファイ・ライトコマンドに処理対象アドレスが付加されている場合に、第２実施形態に係るホスト装置２と不揮発性記憶装置１とが、リード・モディファイ・ライト処理をアトミックオペレーションとして実行する場合のコマンドシーケンスを模式的に示す図（ホスト装置２と不揮発性記憶装置１との間のコマンド、応答、データ等の送受信状況を時系列に示した図）である。
【００５５】
図７Ａ（ａ）に示すコマンドシーケンスでは、本実施形態の記憶システムにおいて、以下のように処理が実行される。すなわち、
≪アドレス付加型リード・モディファイ・ライトコマンド処理（正常処理）≫
（１）ホスト装置２は、不揮発性記憶装置１に対して、リード・モディファイ・ライトコマンド（”ＲＭＷ”）にアドレスｘｘを付加し、アトミックオペレーションを指示して送信する（シーケンス７１）。
（２）その後、ホスト装置２は、不揮発性記憶装置１に対して、アドレスｘｘを付加したリードコマンドを送信して、不揮発性記憶装置１からリードデータを読み出す（シーケンス７２）。
（３）そして、ホスト装置２は、その読み出したデータを更新した後、アドレスｘｘを付加したライトコマンドを送信した後、ライトデータを不揮発性記憶装置１に送信する（シーケンス７３）。
【００５６】
このようにして、本実施形態の記憶システムでは、コマンドシーケンス７１〜７３が一つの動作として行なわれる。
≪アドレス付加型リード・モディファイ・ライトコマンド処理（異常処理）≫
図７Ａ（ｂ）に示すコマンドシーケンスでは、リード・モディファイ・ライトコマンドによるシーケンス７１の後に、ホスト装置２がシーケンス７１で指示したアドレスｘｘとは異なるアドレスｙｙが付加された別のコマンドを、ホスト装置２が不揮発性記憶装置１に発行した場合、不揮発性記憶装置１は、「エラー」と判定する。
この場合、不揮発性記憶装置１は、ホスト装置２への応答に、エラーの発生を示すフラグを付加してもよいし、あるいは、ホスト装置２へ応答を返さないようにしてもよい。ホスト装置２へ応答を返さないようにする場合、ホスト装置２は、応答の受信タイムアウトによりエラーの発生を検知することができる。
【００５７】
また、エラーが発生した場合は、不揮発性記憶装置１は、自動的にアトミックオペレーションを抜けてもよく（アトミックオペレーションを終了させてもよく）、あるいは、ホスト装置が発行するリード・モディファイ・ライト終了コマンド７５を受信して、アトミックオペレーションを抜けてもよい（アトミックオペレーションを終了させてもよい）（シーケンス７５）。
なお、図７Ａ（ｃ）に示すコマンドシーケンスのように、リード・モディファイ・ライトコマンドによるシーケンス７１の後に、ホスト装置２がシーケンス６２で指示したアドレスｘｘとは異なるアドレスｙｙが付加された別のコマンド（シーケンス７４のコマンド）、不揮発性記憶装置１がホスト装置２から受信した場合であっても、次に、不揮発性記憶装置１がホスト装置２からアドレスｘｘが付加された正しいリードコマンド（シーケンス７２のリードコマンド）およびライトコマンド（シーケンス７３のライトコマンド）を受信した場合は、リード・モディファイ・ライトコマンド処理を継続させてもよい。
【００５８】
このように処理することにより、本実施形態の記憶システムでは、不揮発性記憶装置１が、一連の処理中に無効なコマンド（シーケンス７４のコマンド）を受信した場合であっても、あたかも処理がアトミックオペレーションであるように動作することができる。
≪アドレス・サイズ付加型リード・モディファイ・ライトコマンド処理（正常処理）≫
図７Ｂ（ｄ）に示すコマンドシーケンスでは、本実施形態の記憶システムにおいて、以下のように処理が実行される。すなわち、
（１）ホスト装置２は、不揮発性記憶装置１に対して、リード・モディファイ・ライトコマンド（シーケンス７７のコマンド）にアドレスｘｘと更新データサイズｚｚを付加し、アトミックオペレーションを指示して、リード・モディファイ・ライトコマンドを発行する。
（２）その後、本実施形態の記憶システムでは、アドレスｘｘを付加したリードコマンド（シーケンス７８１のリードコマンド）による処理と、ライトコマンド（シーケンス７９１のコマンド）による処理が実行される。
（３）以降、アドレスを更新しながら最終的に処理サイズがｚｚに達するアドレス（ｘｘ＋Ｗ）を付加したリードコマンド（シーケンス７８Ｎのリードコマンド）の処理と、ライトコマンド（シーケンス７９Ｎのライトコマンド）の処理が完了するまで、上記（２）に相当する処理が繰り返し実行される。
【００５９】
このように処理することで、本実施形態の記憶システムでは、リード・モディファイ・ライト処理が実行される。すなわち、本実施形態の記憶システムでは、ホスト装置２がリード・モディファイ・ライトコマンドを発行する際に、処理を行うデータサイズを指定した場合、以降のリード・モディファイ・ライト処理を複数回のリードコマンドによる処理（リード処理）とライトコマンドによる処理（ライト処理）に分割して実行することができる。
≪アドレス・サイズ付加型リード・モディファイ・ライトコマンド処理（異常処理）≫
なお、図７Ｂ（ｅ）に示すコマンドシーケンスのように、不揮発性記憶装置１が、リードコマンド（シーケンス７２のリードコマンド）に続いて、アドレスｘｘが付加されたリードコマンド（シーケンス７６のリードコマンド）を受信した場合には、シーケンス７６のリードコマンドで指示されたリード処理は、アドレスｘｘのデータがリード・モディファイ・ライトコマンド処理により更新される前のリード処理となるため、不揮発性記憶装置１は、「エラー」と判定する。
【００６０】
このように処理することで、本実施形態の記憶システムでは、リード・モディファイ・ライトコマンドによる処理が、適切に実行される（アトミックオペレーションとして実行される）ことを保証する。
本実施形態に係る不揮発性記憶装置１とホスト装置２とは、図７（ａ）〜（ｅ）に示す５つの動作（コマンドシーケンス処理）のうちの、いずれかあるいか全ての動作（コマンドシーケンス処理）を行なうことができる。
なお、図７Ａ、Ｂにおいて、本実施形態に係る不揮発性記憶装置１およびホスト装置２が用いるリードコマンドおよびライトコマンドのフォーマットは、図３のフォーマットに従う。さらに、本実施形態に係る不揮発性記憶装置１およびホスト装置２がアトミックオペレーションを行なう場合でも、不揮発性記憶装置１の内部処理は、前述の図４を用いて説明した動作に従う。
【００６１】
以上のように、本実施形態に係る不揮発性記憶装置１は、ホスト装置２からリード・モディファイ・ライト処理をアトミックオペレーションとして行うよう指示されると、
（１）ホスト装置へ送信した不揮発性メモリ１２のページのデータをバッファ１１３へ保持し、
（２）ホスト装置から受信した更新後のデータでバッファ１１３のデータを更新した後に、
（３）不揮発性メモリ１２の新たなページへ更新後のデータを含むデータ（ページデータ）を書き込む。
従って、本実施形態の記憶システムでは、リード・モディファイ・ライト処理において、２つのコマンド（リードコマンドとライトコマンド）に基づく処理を行う場合でも、不揮発性記憶装置１が、不揮発性メモリ１２のページからデータを読み出す回数は１回で済むため、不揮発性メモリ１２からの読み出し回数を低減し信頼性を向上することができる。
【００６２】
また、本実施形態の記憶システムでは、リード・モディファイ・ライト処理において、不揮発性記憶装置１がホスト装置２からライトコマンドを受信した際に、不揮発性メモリ１２のページからデータをバッファ１１３に読み出す処理が不要であるので、ライト処理に要する時間を短縮できる。その結果、本実施形態の記憶システムにおいて、リード・モディファイ・ライト処理を高速化することができる。
さらに、本実施形態の記憶システムでは、アドレスを判定して、不正なコマンドを受信した場合、当該不正なコマンドに基づく処理を行わないため、一連のリード・モディファイ・ライト処理をアトミックオペレーションとして確実に処理することができる。
［他の実施形態］
なお、上記実施形態で説明した記憶システム、ホスト装置、不揮発性記憶装置において、各ブロックは、ＬＳＩなどの半導体装置により個別に１チップ化されても良いし、一部又は全部を含むように１チップ化されても良い。
【００６３】
なお、ここでは、ＬＳＩとしたが、集積度の違いにより、ＩＣ、システムＬＳＩ、スーパーＬＳＩ、ウルトラＬＳＩと呼称されることもある。
また、集積回路化の手法はＬＳＩに限るものではなく、専用回路又は汎用プロセサで実現してもよい。ＬＳＩ製造後に、プログラムすることが可能なＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）や、ＬＳＩ内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサーを利用しても良い。
さらには、半導体技術の進歩又は派生する別技術によりＬＳＩに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて機能ブロックの集積化を行ってもよい。バイオ技術の適用等が可能性としてあり得る。
また、上記実施形態の各処理をハードウェアにより実現してもよいし、ソフトウェア（ＯＳ（オペレーティングシステム）、ミドルウェア、あるいは、所定のライブラリとともに実現される場合を含む。）により実現してもよい。さらに、ソフトウェアおよびハードウェアの混在処理により実現しても良い。なお、上記実施形態に係る記憶システム、ホスト装置、不揮発性記憶装置をハードウェアにより実現する場合、各処理を行うためのタイミング調整を行う必要があるのは言うまでもない。上記実施形態においては、説明便宜のため、実際のハードウェア設計で生じる各種信号のタイミング調整の詳細については省略している。
【００６４】
また、上記実施形態における処理方法の実行順序は、必ずしも、上記実施形態の記載に制限されるものではなく、発明の要旨を逸脱しない範囲で、実行順序を入れ替えることができるものである。
また、上記実施形態において、ホスト装置と不揮発性記憶装置とは、別装置である場合について説明したが、これに限定されることはなく、ホスト装置と不揮発性記憶装置とは、１つの装置内に構成されるものであってもよい。また、ホスト装置は、ホストモジュールを含む概念であり、不揮発性記憶装置は、不揮発性記憶モジュールを含む概念である。
なお、本発明の具体的な構成は、前述の実施形態に限られるものではなく、発明の要旨を逸脱しない範囲で種々の変更および修正が可能である。
【産業上の利用可能性】
【００６５】
本発明によると、ホスト装置と不揮発性記憶装置とで構成される記憶システムにおいて、ホスト装置がリード・モディファイ・ライト処理を行う場合に不揮発性メモリからの読み出し回数を低減でき、リード・モディファイ・ライト処理を高速化できるホスト装置、不揮発性記憶装置および記憶システムを提供することができる。さらに、指定したアドレスのデータの更新をアトミックオペレーションとして実現できるため、例えば、ホスト装置としてシステムＬＳＩ、不揮発性記憶装置としてコントローラを内蔵したメモリデバイスを用いて使い勝手のよい記憶システムを実現することができる。したがって、本発明は、記憶装置関連分野において有用であり、当該分野において、実施することができる。
【符号の説明】
【００６６】
１０００  記憶システム
１  不揮発性記憶装置
２  ホスト装置
３  バス
１１  コントローラ部
１１１  ホスト装置ＩＦ部
１１２  メモリ制御部
１１３  バッファ
１２  不揮発性メモリ
【図１】
2011159226.tif 000003
【図２】
2011159226.tif 000004
【図３】
2011159226.tif 000005
【図４】
2011159226.tif 000006
【図５】
2011159226.tif 000007
【図６】
2011159226.tif 000008
【図７Ａ】
2011159226.tif 000009
【図７Ｂ】
2011159226.tif 000010
【図８】
2011159226.tif 000011
【図９】
2011159226.tif 000012