以下に添付図面を参照して、実施形態にかかるメモリシステムおよび情報処理装置を詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
(第1の実施形態)
図1に、第1の実施形態のメモリシステム100の構成例を示す。メモリシステム100は、インタフェース2を介してホストシステム1(以下、ホストと略す)と接続され、ホスト1の外部記憶装置として機能する。ホスト1は、例えば、スマートフォン、タブレットPCなどのスマートデバイスである。
メモリシステム100は、不揮発性メモリとしてのNAND型フラッシュメモリ10(以下、NANDと略す)と、メモリコントローラ30と、揮発性半導体メモリとしてのRAM20と、ページサイズ識別情報記憶部40と、I/Oバス5とを有している。
NAND10は、メモリシステム100を駆動するデバイスドライバDV1、ホスト1から送信されるユーザデータUDなどを記憶する。デバイスドライバDV1は、ホスト1で使用される。ホスト1のオペレーティングシステムやアプリケーションソフトウェアは、デバイスドライバDV1を介してメモリシステム100とデータの書き込みや読み出しを実行する。
NAND10は、複数のブロックを含んで構成されている。ブロックは、データ消去の単位である。ブロックは、複数のページによって構成されている。この実施形態では、デバイスドライバDV1は、ブロック0〜9に記憶され、ユーザデータUDは、ブロック10以降のブロックに記憶されるとする。ここで、この実施形態では、NAND10の各ページの実ページサイズは8KBであるとし、また1ブロックは256ページで構成されているとする。すなわち、NAND10の1ブロックは2MBであるとする。NAND10のページサイズは、16KB、32KBであってもよいし、1ブロック内のページ数も他のページ数であってもよい。
メモリコントローラ30は、メモリシステム100の制御を行うプロセッサとしてのCPU31と、CPU31上で実行される制御管理プログラムとしてのファームウエアが記憶されるプログラムROM32と、ホスト1から送信されるコマンド、メモリシステム100からの応答などが設定される複数のレジスタを有する周辺レジスタ群33を備える。
RAM20は、ホスト1とNAND10間で転送されるデータを一時的に保存するためバッファ領域である一次バッファ21、二次バッファ22と、データ退避領域23と、プログラムROM32に記憶されるファームウエアとしての制御プログラムが展開して実行される領域とを有している。図1では、制御プログラムの中のデータ合成処理を行う合成処理部としてのマージプログラムが展開されて実行されるマージ機能実行部24を示している。マージプログラムは、後で詳述するが、ホスト1からのデータを複数個数分マージしてNAND10にライトする機能と、ホスト1が指定する物理アドレスをNAND10の物理アドレスに変換するためのマージ用アドレスに変換するアドレス変換機能を有する。
ページサイズ識別情報記憶部40は、NAND10のデバイスドライバDV1が記憶されている記憶領域のページサイズを識別するためのページサイズ識別情報PIを記憶する。ページサイズ識別情報記憶部40は、EEPROM(Electrically Erasable Programmable Read-Only Memory)、シリアル・ペリフェラル・インタフェース(SPI)フラッシュメモリなどの書き換え可能な不揮発メモリで構成されている。また、ページサイズ識別情報記憶部40に記憶されるページサイズ識別情報PIを、NAND10に記憶させるようにしてもよい。ページサイズ識別情報PIに関しては、後で詳述する。
ホスト1は、ホスト1のブートプログラムBPが記憶されるブートROM50、不揮発性メモリとしてのRAM51を有する。ホスト1内のCPU、OS(operating system)などは、便宜上、図示を省略する。RAM5には、NAND10に保存されたデバイスドライバDV1がメモリシステム100から読み出されて記憶される。また、ページサイズ識別情報PIの再設定の際には、ページサイズ識別情報記憶部40に保存されたページサイズ識別情報がメモリシステム100から読み出されてRAM51に記憶される。
ここで、ブートROM50に記憶されるブートプログラムBPは、接続されるメモリシステムの不揮発性半導体メモリが、例えば、2KBのページサイズを有していると認識しているものとする。前述したように、NAND10の実ページサイズは、8KBであり、ブートプログラムが認識するページサイズより大きい。すなわち、ブートプログラムBPが認識しているページサイズは、NAND10の実ページサイズの自然数n(nは2以上の自然数)分の1である。ここでは、n=4である。
図2は、ページサイズ識別情報記憶部40に記憶されるページサイズ識別情報PIの一例を示すものである。図2のページサイズ識別情報PIは、ブロック単位に、ページサイズを任意に設定可能なフォーマットとしている。図2(a)は、メモリシステム100がホスト1に組み込まれた初期状態での、ページサイズ識別情報PIの設定状態を示している。図2(a)では、ページサイズ識別情報PIは、全てのブロック0〜ブロックnについて、ページサイズが8KBと設定されており、NAND10の実ページサイズと一致している。
ページサイズ識別情報記憶部40に記憶されているページサイズ識別情報PIは、外部から書き換え可能となっている。このため、ホスト1の製造者、あるいはチップセットの製造者は、ページサイズ識別情報記憶部40に記憶されているページサイズ識別情報PIを書き換えることで、ブートプログラムBPがアクセスするNAND10の記憶領域であるブロック0〜ブロック9を、ブートプログラムBPが認識するページサイズと一致させることができる。
図3に、ホスト1側からページサイズ識別情報記憶部40に記憶されているページサイズ識別情報PIを書き換える手順を示す。まず、ホスト1の製造者、あるいはチップセットの製造者は、メモリシステム100の周辺レジスタ群33のレジスタへのコマンド設定を行い、メモリシステム100に対し、ページサイズ識別情報記憶部40に記憶されたページサイズ識別情報PIの読み出しを命令する。この周辺レジスタ群33のレジスタへのコマンド設定により、CPU31上で動作するファームウエアは、ページサイズ識別情報記憶部40から、例えば、図2(a)に示したページサイズ識別情報PIを読み出し、読み出したページサイズ識別情報PIを二次バッファ22、一次バッファ21、I/Oバス5、インタフェース2を介して、ホスト1に転送する(ステップS70)。
メモリシステム100から転送されたページサイズ識別情報PIはRAM51に記憶される。ホスト1の製造者、あるいはチップセットの製造者は、RAM51上のページサイズ識別情報PIを、例えば図2(b)に示すように、変更する(ステップS71)。
図2(b)は、ホスト1の製造者、チップセットの製造者などによって、変更されたページサイズ識別情報PIを示している。図2(b)では、デバイスドライバDV1が記憶されるNAND10のブロック0〜ブロック9が、ブートプログラムBPが認識可能な2KBのページサイズに変更されている。これにより、ブートプログラムBPは、ホスト1の起動時、ブートプログラムBP内に記述された判定条件を満足するメモリデバイスとして、メモリシステム100を認識することが可能となる。
ホスト1側で変更されたページサイズ識別情報PIは、ホスト1によってメモリシステム100の周辺レジスタ33のレジスタにコマンドとともにセットされる。この周辺レジスタ群33へのコマンド設定により、CPU31上で動作するファームウエアは、周辺レジスタ群33のレジスタにセットされたページサイズ識別情報PIをページサイズ識別情報記憶部40に書き込み、不揮発化する(ステップS72)。これにより、ページサイズ識別情報PIの再設定が行われる。
図4は、ページサイズ識別情報記憶部40に記憶されるページサイズ識別情報PIの他のフォーマット例を示すものである。このフォーマットでは、先頭ブロックから任意のブロックまでのページサイズを設定可能である。図4(a)は、メモリシステム100がホスト1に組み込まれた初期状態での、ページサイズ識別情報PIの設定状態を示している。図4(a)では、ページサイズ識別情報PIは、ブロック番号の番号を入力する箇所と、ページサイズを入力する箇所が空欄となっている。図4(b)は、ホスト1の製造者、チップセットの製造者などによって、変更されたページサイズ識別情報PIを示している。図4(b)では、ブロック9が2KBのページサイズを有するように設定されており、これにより、デバイスドライバDV1が記憶されるNAND10のブロック0〜ブロック9が、ブートプログラムBPが認識可能な2KBのページサイズであることをブートプログラムBPとメモリシステム10の双方が認識する。
つぎに、図5に従って、メモリシステム100が組み込まれたホスト1の通常の運用の際の起動時の動作手順について説明する。なお、メモリシステム100は、通常の運用の際は、図5のステップS100に示したホストシステム1の電源ONの際に、電源ONにされ、ステップS110〜S170の手順に従って起動される。但し、ホスト1の通常の運用の際は、メモリシステム100のページサイズ情報記憶部40に記憶されたページサイズ識別情報PIは、図2(b)あるいは図4(b)に示したように、ブートプログラムBPが認識可能なページサイズに再設定されている。
ホスト1が起動されると(ステップS100)、ブートROM50に記憶されるブートプログラムBPが起動される。ブートプログラムBPは、メモリシステム100に対し、ページサイズ識別情報記憶部40に記憶されたページサイズ識別情報PIの読み出しを要求する。CPU31は、ブートプログラムBPによる周辺レジスタ群33のレジスタへのコマンド設定によってホスト1からの読み出し要求を認識する。CPU31は、ページサイズ識別情報記憶部40から、例えば、図2(b)に示したページサイズ識別情報PIを読み出し、読み出したページサイズ識別情報PIを二次バッファ22、一次バッファ21、I/Oバス5、インタフェース2を介して、ホスト1に転送する(ステップS110)。ブートプログラムBPは、メモリシステム100から転送されたページサイズ識別情報PIをRAM51に記憶する(ステップS120)。
ブートプログラムBPは、ブートプログラム自身が認識しているNAND10のページサイズと、メモリシステム100から取得したページサイズ識別情報PIに登録されているページサイズとを比較し(ステップS130)、両者が不一致の場合は、これ以降の処理を停止する(ステップS140)。例えば、ページサイズ識別情報PIとして、図2(a)に示すように、全てのページが8KBであるような設定がなされている場合、ブートプログラムBPは、ブートプログラムBP内に記述された判定条件を満足するメモリデバイスとして、メモリシステム100を認識することができず、この時点で処理を停止する。
一方、ステップS130の判定で、両者が一致している場合、ブートプログラムBPは、メモリシステム100に対し、NAND10のブロック0〜ブロック9のデータ読み出しを要求する。ブートプログラムBPが周辺レジスタ群33のレジスタに対して読み出しコマンド、ブロック0〜ブロック9の物理アドレスを設定することによって、メモリシステム100に対する読み出し要求が実行される。
CPU31は、NAND10のブロック0〜ブロック9からデータを読み出し、読み出したデータを二次バッファ22、一次バッファ21、I/Oバス5、インタフェース2を介して、ホスト1に転送する(ステップS150)。ブートプログラムBPは、メモリシステム100から転送されたデータをデバイスドライバDV1としてRAM51に記憶する(ステップS160)。次に、ブートプログラムBPは、ホスト1のプログラムカウンタをデバイスドライバDV1に設定することで、デバイスドライバDV1を起動する(ステップS170)。このデバイスドライバDV1の起動によって、NAND10のユーザ記憶領域UDに対し、ホスト1のOSやアプリケーションからアクセスが可能な状態となる(ステップS180)。デバイスドライバDV1は、メモリシステム100とホスト1の起動時に読み出され、ユーザ記憶領域UDに記憶されたユーザデータは、メモリシステム1の起動後に読み出される。
図6は、データの読み出しおよびデータの書き込みの際に、マージ機能実行部24が行うアドレス変換処理を示すものである。図6において、左欄には、ブートプログラムBPのアクセス単位と、ブートプログラムBPが認識しているブロック内ページ数が示されている。ブートプログラムBPのアクセス単位とは、ブートプログラムBPが認識しているページサイズのことであり、この例では、2KBである。また、ブートプログラムBPは、1ブロックが128ページで構成されると認識している。図6において、右欄には、NAND10のページサイズと、NAND10のブロック内ページ数が示されている。この例では、NAND10のページサイズは8KBであり、NAND10は、1ブロックが256ページで構成されている。
図6の中欄は、マージ機能実行部24が行うアドレス変換処理を示すものである。このアドレス変換処理は、リード処理およびライト処理の双方に適用可能であり、次のようなアドレス変換が行われる。ブートプログラムBPのアドレス指定は、ブロック番号およびブロック内ページ番号を使うのではなく、図6の符号D2に示すように、通しページ番号によって行われる。図6の符号D1に示したブロック番号は便宜上図示しただけで、アドレス指定の際には使用されない。
ここで、NAND10のページサイズ(8KB)をページサイズ識別情報に登録されたページサイズ(2KB)で除算した商をページサイズ比R(=4)と呼ぶ。ホスト1が指定するページ番号をページサイズ比Rで除算した商が、NAND10のページ番号Npとなり、その余りが、ページ内オフセットOffとなる。また、ページ番号Npを、NAND10の1ブロックあたりのページ数PP(=256)で除算した商が、NAND10のブロック番号Nbとなる。
例えば、ホスト1が指定したページ番号0は、ブロック番号0、ページ番号0、オフセット0にアドレス変換され、ホスト1が指定したページ番号1は、ブロック番号0、ページ番号0、オフセット1にアドレス変換され、ホスト1が指定したページ番号2は、ブロック番号0、ページ番号0、オフセット2にアドレス変換され、ホスト1が指定したページ番号3は、ブロック番号0、ページ番号0、オフセット3にアドレス変換される。
このアドレス変換によれば、図7に示すように、ホスト1の指定した2KB単位の1280ページ分のデータ記憶領域は、NAND10のブロック0〜9のうちの前半部分(正確には、ブロック0のページ0からブロック1のページ63)に対応することになる。別言すれば、デバイスドライバDV1は、NAND10のブロック0〜9のうちの前半部分に先詰めで記憶されている。先の図5のステップS150で説明したブロック0〜ブロック9に対する読み出し処理では、実際には、図6に示したアドレス変換が行われて、デバイスドライバDV1は、NAND10におけるブロック0のページ0からブロック1のページ63までの領域から読み出されて、ホスト1に転送されることになる。
図8に、メモリシステム100の2KB単位の読み出し処理を示す。図9は、メモリシステム100の読み出し処理手順を示す図である。図10は、メモリシステム100の読み出し処理を示すタイムチャートである。ホスト1のデバイスドライバDV1は、周辺レジスタ群33のレジスタへ読み出しコマンド、読み出しアドレスをセットする(ステップS200)。マージ機能実行部24は、図10に示す、第1のリードコマンドRDCMD1、アドレスADDR、第2のリードコマンドRDCMD2をホスト1から受信したことを検出すると、図6に示したアドレス変換処理を用いて、ホスト1から入力された読み出しアドレスを、NAND10の物理アドレスに変換する(ステップS210)。マージ機能実行部24は、図8に示すように、変換したアドレスを用いてNAND10から2KBのデータを読み出し、読み出した2KBのデータを二次バッファ22に記憶する(ステップS220)。さらに、マージ機能実行部24は、図8に示すように、二次バッファ22に記憶された2KBのデータを一次バッファ21に転送する(ステップS230)。さらに、マージ機能実行部24は、図8に示すように、一次バッファ21に記憶された2KBのデータをホスト1へ転送する(ステップS240)。
なお、NAND10のカラム読み出しシーケンスを使えば、ホスト1からバイト単位でのカラムアクセスを行うことで、NAND10からデータをバイト単位に読み出すことも可能である。
図11に、ホスト1から2KB単位の通常の書き込み要求が来たときのタイムチャートを示す。図12は、通常の書き込み処理を示す図である。以下に示す書き込み処理は、ホストシステムの製造者や、チップセットの製造者が、デバイスドライバDV1を変更設定する際に、行われる。
メモリシステム100では、NAND10のページサイズ単位(8KB)で書き込みを行う。一方、ホスト1からの書き込みデータは2KB単位である。このため、マージ機能実行部24は、図6に示したアドレス変換規則にしたがって、図12に示すように、2KBのデータを一次バッファ21で4個バッファリングし、バッファリングした4個のデータを図6に示したアドレス変換規則にしたがってマージし、マージ後の8KBのデータを二次バッファ22にバッファリングし、さらに二次バッファ22にバッファリングした8KBのデータを、図6に示したアドレス変換規則にしたがって計算されるNAND10の所定のブロックに書き込む。
図11に示すように、ホスト1から、1回目はページ番号128へ2KBを書き込む要求があり、2回目はページ番号129へ2KBを書き込む要求があり、3回目はページ番号130へ2KBを書き込む要求があり、4回目はページ番号131へ2KBを書き込む要求があったとする。
ホスト1からの1回目のデータ書き込みでは、ホスト1のデバイスドライバDV1は、周辺レジスタ群33のレジスタへ、第1書き込みコマンドWTCMD1、書き込みアドレスADDR、書き込みデータA、第2書き込みコマンドWTCMD2を順次セットする。マージ機能実行部24は、第1書き込みコマンドWTCMD1、書き込みアドレスADDR(ページ番号)、書き込みデータAをホスト1から受信したことを検出すると、データAを周辺レジスタ群33のレジスタからI/Oバス5を介して一次バッファ21に転送する。また、図6に示したアドレス変換処理を用いて、ホスト1から入力された書き込みアドレスを、ブロック番号Nb、ページ番号NpおよびオフセットOffから成るマージ用アドレスに変換する。なお、1回目の書き込みでは、メモリコントローラ30は、第2書き込みコマンドWTCMD2を無視する。データは、一次バッファ21にバッファリングされるのみでNAND10に書かれることはないので、メモリシステム100からホスト1に応答されるビジー信号Busyのアサート期間は短い。
ホスト1からの2回目のデータ書き込みでは、ホスト1のデバイスドライバDV1は、周辺レジスタ群33のレジスタへ、第1書き込みコマンドWTCMD1、書き込みアドレスADDR、書き込みデータB、第2書き込みコマンドWTCMD2を順次セットする。マージ機能実行部24は、第1書き込みコマンドWTCMD1、書き込みアドレスADDR、書き込みデータBをホスト1から受信したことを検出すると、この書き込みアドレスADDRが1回目のデータ書き込みの際に入力された書き込みアドレスADDR(ページ番号)と同一ページに書き込むべきアドレスであるか否かを判定する。同一ページに書き込むべきアドレスでない場合の処理は、後で説明する。図11に示す例では、2回目の書き込み、3回目の書き込み、4回目の書き込みにおいて、アドレスADDR(ページ番号)が連続しており、かつこれらはNAND10上の同一ページに書き込むべきアドレスである。マージ機能実行部24は、書き込みデータBを周辺レジスタ群33のレジスタからI/Oバス5を介して一次バッファ21に転送する。また、図6に示したアドレス変換処理を用いて、ホスト1から入力された書き込みアドレスを、ブロック番号Nb、ページ番号NpおよびオフセットOffから成るマージ用アドレスに変換する。なお、2回目の書き込みでは、メモリコントローラ30は、第1書き込みコマンドWTCMD1および第2書き込みコマンドWTCMD2を無視する。前回同様、ビジー信号Busyのアサート期間は短い。
ホスト1からの3回目のデータ書き込みでは、ホスト1のデバイスドライバDV1は、周辺レジスタ群33のレジスタへ、第1書き込みコマンドWTCMD1、書き込みアドレスADDR、書き込みデータC、第2書き込みコマンドWTCMD2を順次セットする。マージ機能実行部24は、第1書き込みコマンドWTCMD1、書き込みアドレスADDR、書き込みデータCをホスト1から受信したことを検出すると、書き込みデータCを周辺レジスタ群33のレジスタからI/Oバス5を介して一次バッファ21に転送する。また、図6に示したアドレス変換処理を用いて、ホスト1から入力された書き込みアドレスを、ブロック番号Nb、ページ番号NpおよびオフセットOffから成るマージ用アドレスに変換する。なお、3回目の書き込みでも、メモリコントローラ30は、第1書き込みコマンドWTCMD1および第2書き込みコマンドWTCMD2を無視する。前回同様、ビジー信号Busyのアサート期間は短い。
ホスト1からの4回目のデータ書き込みでは、ホスト1のデバイスドライバDV1は、周辺レジスタ群33のレジスタへ、第1書き込みコマンドWTCMD1、書き込みアドレスADDR、書き込みデータD、第2書き込みコマンドWTCMD2を順次セットする。マージ機能実行部24は、第1書き込みコマンドWTCMD1、書き込みアドレスADDR、書き込みデータD、第2書き込みコマンドWTCMD2をホスト1から受信したことを検出すると、書き込みデータDを周辺レジスタ群33のレジスタからI/Oバス5を介して一次バッファ21に転送する。また、図6に示したアドレス変換処理を用いて、ホスト1から入力された書き込みアドレスを、ブロック番号Nb、ページ番号NpおよびオフセットOffから成るマージ用アドレスに変換する。なお、4回目の書き込みでも、メモリコントローラ30は、第1書き込みコマンドWTCMD1を無視する。
さらに、マージ機能実行部24は、第2書き込みコマンドWTCMD2の受信を検出すると、一次バッファ21でバッファリングしている4個の2KBのデータを、オフセットOff順にマージし、マージ後の8KBのデータを二次バッファ22にバッファリングする。さらに、マージ機能実行部24は、図6に示したアドレス変換規則にしたがって、マージ後の8KBのデータを書き込むべきNAND10上のアドレスを計算する。この場合は、ブロック0のページ番号32が計算される。したがって、マージ機能実行部24は、二次バッファ22にバッファリングした8KBのマージデータA,B,C,Dを、NAND10のブロック0のページ番号32のページに書き込む。ホスト1からの4回目のデータ書き込みの際には、NAND10への書き込みが実際に行われるので、ビジー信号Busyのアサート期間は長い。
図13に、ホスト1からページサイズ識別情報PIの登録内容と異なるデータサイズの書き込み要求が来た場合の書き込み処理を示す。図13に示すように、ホスト1から、1回目はページ番号128へ2KBを書き込む要求があり、2回目はページ番号129へ2KBを書き込む要求があり、3回目はページ番号130へ2KBを書き込む要求があり、4回目はページ番号0へ8KBを書き込む要求があったとする。
図13の場合、ホスト1からの1回目〜3回目のデータ書き込みでは、ホスト1からの書き込み要求がページサイズ識別情報と一致しているので、前述と同様の処理が行われる。ホスト1からの4回目のデータ書き込みでは、ホスト1のデバイスドライバDV1は、周辺レジスタ群33のレジスタへ、第1書き込みコマンドWTCMD1、書き込みアドレスADDR、書き込みデータD、第2書き込みコマンドWTCMD2を順次セットする。マージ機能実行部24は、第1書き込みコマンドWTCMD1、書き込みアドレスADDR(ページ番号0)、書き込みデータDをホスト1から受信したことを検出すると、このデータDのアドレスおよびデータサイズがページサイズ識別情報PIに登録内容と一致するか否かを判定する。この場合、ページサイズ識別情報PIでは、ブロック0に含まれるページ番号0のデータサイズは2KBであると登録されているので、ページ番号0のアドレスを持つ8KBのデータDと一致しない。
マージ機能実行部24は、データDのアドレスおよびデータサイズがページサイズ識別情報PIの登録内容と一致しないので、このデータDを一次バッファ21には転送しない。そして、メモリコントローラ30は、ホスト1に対し、今回の1回目〜4回目のデータ書き込みが失敗したことを示す情報と、4回目のデータ書き込みはページ識別情報PIに一致しないことを示す情報を含むエラー情報を応答する。このエラー情報により、ホスト1は、1回目〜4回目のデータ書き込みが失敗したことを知ることが可能となる。
図14は、1回目の転送データとマージして同一ページに書き込むべきでないデータの書き込み要求がホスト1から来たときの書き込み処理を示すタイムチャートである。図15は、1回目の転送データとマージして同一ページに書き込むべきでないデータの書き込み要求がホスト1から来たときの書き込み処理を示す図である。図14に示すように、ホスト1から、1回目はページ番号0へ2KBを書き込む要求があり、2回目はページ番号1へ2KBを書き込む要求があり、3回目はページ番号2へ2KBを書き込む要求があり、4回目はページ番号1152(ブロック9のページ0)へ2KBを書き込む要求があったとする。
図14の場合、ホスト1からの1回目〜3回目のデータ書き込み要求は、NAND10の同一ページに書き込むべきであるので、前述と同様の処理が行われる。したがって、ホスト1からの1回目〜3回目の書き込みデータA、B、Cは、図15(a)に示すように、一次バッファ21に順次バッファリングされる。ホスト1からの4回目のデータ書き込みでは、ホスト1のデバイスドライバDV1は、周辺レジスタ群33のレジスタへ、第1書き込みコマンドWTCMD1、書き込みアドレスADDR、書き込みデータD、第2書き込みコマンドWTCMD2を順次セットする。マージ機能実行部24は、第1書き込みコマンドWTCMD1、書き込みアドレスADDR(ページ番号0)、書き込みデータDをホスト1から受信したことを検出すると、このデータDのアドレスおよびデータサイズがページサイズ識別情報PIに登録内容と一致するか否かを判定する。この場合、ページサイズ識別情報PIでは、ブロック9に含まれるページ番号0のデータサイズは2KBであると登録されているので、ページ番号1152のアドレスを持つ2KBのデータDと一致する。
さらに、マージ機能実行部24は、このデータDのアドレスに基づき、このデータDが1回目の転送データとマージして同一ページに書き込むべきであるか否かを判定する。この場合、図6に示したアドレス変換規則では、1回目のデータ書き込み要求のデータは、NAND10のブロック0のページ0に書き込むべきであり、4回目の書き込み要求のデータは、ブロック0のページ31(ページ288)に書き込むべきである。したがって、マージ機能実行部24は、この4回目の書き込み要求のデータは、1回目のデータ書き込み要求のデータと同一ページに書き込むべきではないと判断する。マージ機能実行部24は、4回目の書き込みデータDを一次バッファ21に転送するのではなく、図15(a)に示すように、データ退避領域23に転送する。
さらに、マージ機能実行部24は、図6に示したアドレス変換処理を用いて、ホスト1から入力された1回目〜3回目のデータ書き込み要求の書き込みアドレスを、ブロック番号Nb、ページ番号NpおよびオフセットOffから成るマージ用アドレスに変換する。また、マージ機能実行部24は、図15(b)に示すように、一次バッファ21で3個バッファリングしている3個の2KBのデータA、B、Cを、オフセットOff順にマージし、さらにこのマージされた6KBのデータにダミーデータを付加して8KBのデータとし、この8KBのデータを二次バッファ22にバッファリングする。さらに、マージ機能実行部24は、図6に示したアドレス変換規則にしたがって、マージ後の8KBのデータを書き込むべきNAND10上のアドレスを計算する。この場合は、ブロック0のページ番号0が計算される。したがって、マージ機能実行部24は、二次バッファ22にバッファリングした8KBのマージデータ(A+B+C+ダミーデータ)を、NAND10のブロック0のページ番号0のページに書き込む。ホスト1からの4回目のデータ書き込みの際には、NAND10への書き込みが実際に行われるので、ビジー信号Busyのアサート期間は長い。その後、データ退避領域23に退避していたデータDを、図15(c)に示すように、一次バッファ21に転送する。一次バッファ21にバッファリングされたデータDは、その後のホスト1からの書き込み要求の内容に応じて、ホスト1からの書き込みデータあるいはダミーデータと組み合わされて8KBのデータにされた後、二次バッファ22を介してNAND10に書き込まれる。
図16は、図11〜図15で説明したマージ機能実行部24での書き込み処理の手順を示すフローチャートである。なお、この書き込み手順では、NAND10の書き込み単位であるページサイズは、8KBであって、ホスト1からの1回のコマンドシーケンスでの書き込みデータ単位(2KB)の4倍であり、4回のコマンドシーケンスに1回、NAND10での書き込みを行うことにしている。このため、NAND10のページサイズが16KBの場合は、8回のコマンドシーケンスに1回、NAND10での書き込みを行うことになる。
マージ機能実行部24は、ホスト1から書き込み要求を受信すると(ステップS300)、この書き込み要求で指定される書き込みアドレスおよびデータサイズがページサイズ識別情報記憶部40に記憶されているページサイズ識別情報PIの内容と一致するか否かを判定する(ステップS310)。そして、図13に示した例のように、書き込み要求で指定される書き込みアドレスおよびデータサイズがページサイズ識別情報PIの内容と一致していない場合は、マージ機能実行部24は、この時点で処理を停止し(ステップS320)、ホスト1にエラー情報を送信する(ステップS330)。
マージ機能実行部24は、ステップS310の判定がYesの場合、つぎにこのデータ書き込みが1回目の書き込み要求であるか否かを判定する(ステップS340)。マージ機能実行部24は、ステップS340の判定がYesの場合、周辺レジスタ群33のレジスタにセットされた書き込みデータを一次バッファ21に転送する(ステップS345)。マージ機能実行部24は、ステップS340の判定がNoの場合、すなわち今回の書き込み要求が2〜4回目の書き込み要求である場合は、今回の書き込み要求で指定される書き込みデータが、1回の書き込み要求で指定された書き込みデータと同一ページに書き込むべきデータであるか否かを判定する(ステップS342)。マージ機能実行部24は、1回目の書き込み要求で指定された書き込みアドレスと、今回の書き込み要求で指定された書き込みアドレスと、図6に示したアドレス変換規則とに基づいて、ステップS342の判定処理を実行する。
このステップS342の判定処理がYesの場合は、マージ機能実行部24は、今回の書き込み要求で指定された書き込みデータを周辺レジスタ群33のレジスタから一次バッファ21に転送する(ステップS345)。一方、ステップS342の判定処理がNoの場合は、マージ機能実行部24は、図14、図15を用いて説明したように、今回の書き込み要求で指定された書き込みデータを周辺レジスタ群33のレジスタからデータ退避領域23に転送する(ステップS360)。
ステップS370では、今回の書き込み要求が4回目であるか否かが判定され、その判定結果がNoである場合は、手順をステップS300に復帰させ、前述したステップS310〜S370の処理が、ステップS370の判定結果がYesになるまで、繰り返される。
ステップS370において、今回の書き込み要求が4回目であると判定された場合は、マージ機能実行部24は、一次バッファ21に、2KBのデータが4個バッファリングされているか否かを判定する(ステップS380)。マージ機能実行部24は、一次バッファ21に、2KBのデータが4個バッファリングされている場合は、一次バッファ21にバッファリングしている4個の2KBのデータを、オフセットOff順にマージし(ステップS390)、マージ後の8KBのデータを二次バッファ22にバッファリングする(ステップS410)。さらに、マージ機能実行部24は、図6に示したアドレス変換規則にしたがって、マージ後の8KBのデータを書き込むべきNAND10上のアドレスを計算し、計算したアドレスに従って二次バッファ22にバッファリングした8KBのマージデータを、NAND10のページに書き込む(ステップS420)。
ステップS380で、一次バッファ21にデータが1個以上〜4個未満しかバッファリングされていない場合、マージ機能実行部24は、この不足分をダミーデータで充足することで8KBのデータを作成する(ステップS400)。例えば、1回目の書き込み分のデータと、3回目の書き込み分のデータとを含む2個のデータしか一次バッファ21にバッファリングされていない場合は、2個目の書き込みデータと4個目の書き込みデータに対応する箇所にダミーデータが配置されるように、図6に示したアドレス変換規則と書き込みアドレスとを参照して、書き込みデータとダミーデータのマージ処理を行う。図15に示した例では、4回目の書き込み分のデータのみが不足しているので、4回目の書き込みデータに対応する箇所にダミーデータが配置されている。マージ機能実行部24は、ダミーデータによって充足した8KBのマージデータを二次バッファ22にバッファリングする(ステップS410)。さらに、マージ機能実行部24は、図6に示したアドレス変換規則にしたがって、マージ後の8KBのデータを書き込むべきNAND10上のアドレスを計算し、計算したアドレスに従って二次バッファ22にバッファリングした8KBのマージデータを、NAND10のページに書き込む(ステップS420)。
このようにこの実施形態においては、ページサイズ識別情報におけるデバイスドライバDV1が記憶される一部のブロックについてのページサイズを外部設定可能としている。このため、ホストシステムの製造業者や、チップセットの製造業者は、デバイスドライバDV1が記憶される一部のブロックがホストシステム側のブートプログラムによって読み出すことができるように、前記一部のブロックのページサイズを変更設定することができ、これにより、ブートプログラムによるメモリシステムの認識処理の際に、処理が停止されることが防止され、ホストシステムが起動不可能となることはない。
また、この実施形態では、ホストからの書き込みデータを複数個マージし、マージした複数個のデータをNAND10のページに書き込むためのデータマージ機能とアドレス変換機能を備えているので、デバイスドライバDV1が記憶される一部のブロックに対してホストシステム側がアクセスするデータサイズに比べ、NAND10のページサイズがn倍(nは2以上の自然数)である場合でも、ホストシステムの製造業者や、チップセットの製造業者によるデバイスドライバDV1の変更作業が可能となる。
また、この実施形態では、デバイスドライバDV1が記憶されたブロックに対する書き込みが行われる場合、この書き込みデータが、ページサイズ識別情報の登録内容と一致するか否かを判定し、一致しない場合、前記ホストシステムにエラーを送信することにしているので、ホストシステム1側で指定したデータサイズがメモリシステム側で受け入れることができない場合には、ホストシステム側で異常を検知することができ、デバイスドライバDV1の変更作業を軽減することが可能となる。
また、この実施形態では、デバイスドライバDV1が記憶されたブロックに対する書き込みが行われる場合、今回の書き込みデータが1回目の書き込みデータと合成して同一ページに書き込むか否かを判定し、同一ページに書き込むべきでない場合は、今回の書き込みデータをデータ退避領域に退避し、このデータ退避によりNAND10のページサイズに対しデータが不足する場合は、不足分だけダミーデータを付加することとしているので、ホストシステム1側でのデバイスドライバDV1の変更作業のアドレス指定作業が軽減化される。
なお、上記実施形態では、ホスト1の書き込みデータは、周辺レジスタ群33のレジスタで一旦受信され、周辺レジスタ群33のレジスタにセットされた書き込みデータをメモリコントローラ30が一次バッファ21に転送することとしたが、ホスト1がI/Oバス5上に出力したデータを、メモリコントローラ30が一次バッファ21に直接取り込むようにすることも可能である。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。