(57)【要約】【課題】動作信頼性を向上出来るメモリシステムを提供する。【解決手段】実施形態のメモリシステムは、アサートされたチップセレクト信号が受信された直後に受信された信号をコマンドとして認識するインターフェース回路210,220と、ブロック単位でデータが消去されるメモリセルアレイ100とを備える。ホスト機器から第１ブロックBLK0に対する読み出し命令が発行された際に、第１ブロックBLK0内の第１データが無効であった場合(S13, NO)、第２ブロックBLK1から読み出された第２データがホスト機器に出力される(S15)。【選択図】図１８
2017045405.tif 000002
【特許請求の範囲】
【請求項１】
ホスト機器からチップセレクト信号を受信可能な第１ピンと、
前記ホスト機器へ第１信号を出力可能な第２ピンと、
前記ホスト機器から第２信号を受信可能な第３ピンと、
前記ホスト機器からクロックを受信可能な第４ピンと、
アサートされた前記チップセレクト信号が受信された直後に前記第３ピンで受信された前記第２信号をコマンドとして認識するインターフェース回路と、
データを保持可能なメモリセルを含み、ブロック単位でデータが消去されるメモリセルアレイと
を具備し、前記メモリセルアレイは、第１ブロックと第２ブロックとを含み、
前記インターフェース回路は、前記ホスト機器から前記第１ブロックに対する読み出し命令が発行された際に、前記第１ブロック内の第１データが無効であった場合、前記第１ブロックに対する前記読み出し命令に応答して、前記第２ブロックから読み出された第２データを前記ホスト機器に出力する
ことを特徴とするメモリシステム。
【請求項２】
前記メモリセルアレイから読み出されたデータをエラー訂正可能なＥＣＣ回路を更に備え、
前記第１データが無効であった場合とは、読み出された前記第１データのエラービット数が、前記ＥＣＣ回路で訂正可能なビット数よりも多い場合である
ことを特徴とする請求項１記載のメモリシステム。
【請求項３】
前記インターフェース回路は第１半導体チップに実装され、
前記メモリセルアレイ及び前記ＥＣＣ回路は、前記第１半導体チップと異なる第２半導体チップに実装され、
前記インターフェース回路は前記ホスト機器から前記読み出し命令を受信した際、前記第２半導体チップに対して、前記第１ブロックから前記第１データを読み出す読み出しコマンドを発行し、
前記第２半導体チップでは、前記読み出しコマンドに応じて前記第１ブロックから前記第１データが読み出され、該読み出された前記第１データが前記ＥＣＣ回路で訂正不能であった場合に、前記インターフェース回路から再度の読み出しコマンドを待つことなく前記第２ブロックから前記第２データが読み出される
ことを特徴とする請求項２記載のメモリシステム。
【請求項４】
前記インターフェース回路は第１半導体チップに実装され、
前記メモリセルアレイ及び前記ＥＣＣ回路は、前記第１半導体チップと異なる第２半導体チップに実装され、
前記インターフェース回路は、前記ホスト機器から前記読み出し命令を受信した際、
前記第２半導体チップに対して、前記第１ブロックから前記第１データを読み出す第１読み出しコマンドを発行し、
第１データが前記ＥＣＣ回路で訂正可能であったか否かを判断し、
訂正不能であった際に、前記第２半導体チップに対して前記第２ブロックから前記第２データを読み出す第２読み出しコマンドを発行する
ことを特徴とする請求項２記載のメモリシステム。
【請求項５】
前記第１データが無効であった場合とは、前記第１ブロックがバッドブロックとして登録されていた場合である
ことを特徴とする請求項１記載のメモリシステム。
【請求項６】
前記インターフェース回路は第１半導体チップに実装され、
前記メモリセルアレイはバッドブロック情報を含み、且つ前記第１半導体チップと異なる第２半導体チップに実装され、
前記インターフェース回路は前記ホスト機器から前記読み出し命令を受信した際、前記第２半導体チップに対して、前記第１ブロックから前記第１データを読み出す読み出しコマンドを発行し、
前記第２半導体チップでは、前記バッドブロック情報において前記第１ブロックがバッドブロックであった場合に、前記インターフェース回路から読み出しコマンドを待つことなく前記第２ブロックからデータが読み出される
ことを特徴とする請求項５記載のメモリシステム。
【請求項７】
前記インターフェース回路は第１半導体チップに実装され、
前記メモリセルアレイはバッドブロック情報を含み、且つ前記第１半導体チップと異なる第２半導体チップに実装され、
前記インターフェース回路は、前記ホスト機器から前記読み出し命令を受信した際、
前記メモリセルアレイから読み出した前記バッドブロック情報において前記第１ブロックがバッドブロックであった場合に、前記第２半導体チップに対して前記第２ブロックから前記第２データを読み出す第２読み出しコマンドを発行する
ことを特徴とする請求項５記載のメモリシステム。
【請求項８】
外部から前記第１データの前記第１ブロックへの書き込み命令を受信した際、
前記第１データが前記第１ブロックに書き込まれ、且つ前記第１データが前記第２データとして前記第２ブロックに書き込まれる
ことを特徴とする請求項１記載のメモリシステム。
【請求項９】
前記インターフェース回路は第１半導体チップに実装され、
前記メモリセルアレイは、前記第１半導体チップと異なる第２半導体チップに実装され、
前記インターフェース回路は前記書き込み命令を受信した際、前記第２半導体チップに対して、前記第１ブロックに前記第１データを書き込む書き込みコマンドを発行し、
前記第２半導体チップでは、前記書き込みコマンドに応じて前記第１ブロックに前記第１データが書き込まれ、且つ前記インターフェース回路から再度の書き込みコマンドを待つことなく前記第２ブロックに前記第１データが書き込まれる
ことを特徴とする請求項８記載のメモリシステム。
【請求項１０】
前記インターフェース回路は第１半導体チップに実装され、
前記メモリセルアレイは、前記第１半導体チップと異なる第２半導体チップに実装され、
前記インターフェース回路は、前記書き込み命令を受信した際、
前記第２半導体チップに対して、前記第１ブロックに前記第１データを書き込む第１書き込みコマンドを発行し、更に前記第２ブロックに前記第１データを書き込む第２書き込みコマンドを発行する
ことを特徴とする請求項８記載のメモリシステム。
【請求項１１】
前記第２ブロックは、前記ホスト機器から直接アクセス出来ない領域である
ことを特徴とする請求項８乃至１０いずれか１項記載のメモリシステム。
【請求項１２】
前記第１データ及び第２データは、前記ホスト機器の起動プログラムである
ことを特徴とする請求項１乃至１１いずれか１項記載のメモリシステム。
【請求項１３】
前記メモリセルアレイは複数のブロックを含み、
前記複数のブロックのうち、いずれのブロックを前記第１ブロックまたは前記第２ブロックとして選択するかを設定するレジスタを更に備える
ことを特徴とする請求項１乃至１２いずれか１項記載のメモリシステム。
【請求項１４】
前記インターフェース回路は、前記クロックに同期して前記第２信号を受信し、前記チップセレクト信号がアサートされた後の最初のクロックに同期して受信した前記第２信号を前記コマンドと認識する
ことを特徴とする請求項１乃至１３いずれか１項記載のメモリシステム。
【請求項１５】
前記インターフェース回路は、ＳＰＩ（Serial Peripheral Interface）に準拠したバスにより前記ホスト機器と接続可能である
ことを特徴とする請求項１乃至１４いずれか１項記載のメモリシステム。
【請求項１６】
前記インターフェース回路及び前記メモリセルアレイは、同一の半導体チップ内に実装される
ことを特徴とする請求項１または２記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
実施形態は、メモリシステムに関する。
【背景技術】
【０００２】
記憶デバイスとして、ＮＡＮＤ型フラッシュメモリが広く知られている。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】Toshiba Datasheet, TC58NVG0S3HTA00, 2012年8月31日
【非特許文献２】Toshiba Datasheet, TC58BVG0S3HTA00, 2012年8月31日
【発明の概要】
【発明が解決しようとする課題】
【０００４】
動作信頼性を向上出来るメモリシステムを提供する。
【課題を解決するための手段】
【０００５】
実施形態のメモリシステムは、ホスト機器からチップセレクト信号を受信可能な第１ピンと、ホスト機器へ第１信号を出力可能な第２ピンと、ホスト機器から第２信号を受信可能な第３ピンと、ホスト機器からクロックを受信可能な第４ピンと、アサートされたチップセレクト信号が受信された直後に第３ピンで受信された第２信号をコマンドとして認識するインターフェース回路と、データを保持可能なメモリセルを含み、ブロック単位でデータが消去されるメモリセルアレイとを備える。メモリセルアレイは、第１ブロックと第２ブロックとを含む。インターフェース回路は、ホスト機器から第１ブロックに対する読み出し命令が発行された際に、第１ブロック内の第１データが無効であった場合、第１ブロックに対する読み出し命令に応答して、第２ブロックから読み出された第２データをホスト機器に出力する。
【図面の簡単な説明】
【０００６】
【図１】図１は、第１実施形態に係るメモリシステムの外観図である。
【図２】図２は、第１実施形態に係るメモリシステムの断面図である。
【図３】図３は、第１実施形態に係るメモリシステムの外部端子の機能を示すダイアグラムである。
【図４】図４は、第１実施形態に係るメモリシステムの外観図である。
【図５】図５は、第１実施形態に係るメモリシステムの外部端子の機能を示すダイアグラムである。
【図６】図６は、第１実施形態に係るメモリシステムのブロック図である。
【図７】図７は、第１実施形態に係る半導体記憶装置のブロック図である。
【図８】図８は、第１実施形態に係るメモリシステムの読み出し時における各種信号のタイミングチャートである。
【図９】図９は、第１実施形態に係るメモリシステムの読み出し時における各種信号のタイミングチャートである。
【図１０】図１０は、第１実施形態に係るメモリシステムの読み出し時における各種信号のタイミングチャートである。
【図１１】図１１は、第１実施形態に係るメモリシステムの読み出し時における各種信号のタイミングチャートである。
【図１２】図１２は、第１実施形態に係るメモリシステムの書き込み時における各種信号のタイミングチャートである。
【図１３】図１３は、第１実施形態に係るメモリシステムの書き込み時における各種信号のタイミングチャートである。
【図１４】図１４は、第１実施形態に係るメモリシステムの書き込み時における各種信号のタイミングチャートである。
【図１５】図１５は、第１実施形態に係るメモリシステムの消去時における各種信号のタイミングチャートである。
【図１６】図１６は、第１実施形態に係るメモリシステムの消去時における各種信号のタイミングチャートである。
【図１７】図１７は、第１実施形態に係るメモリセルアレイのブロック図である。
【図１８】図１８は、第１実施形態に係るメモリシステムを含むアプリケーションの起動時の動作を示すフローチャートである。
【図１９】図１９は、第２実施形態に係る特徴テーブルの模式図である。
【図２０】図２０は、第２実施形態に係るメモリシステムの読み出し動作を示すフローチャートである。
【図２１】図２１は、第２実施形態に係るメモリシステムの読み出し動作時におけるコマンドシーケンスである。
【図２２】図２２は、第２実施形態に係るメモリシステムの読み出し動作を示すフローチャートである。
【図２３】図２３は、第２実施形態に係るメモリシステムの読み出し動作時におけるコマンドシーケンスである。
【図２４】図２４は、第３実施形態に係るメモリセルアレイのブロック図である。
【図２５】図２５は、第３実施形態に係るメモリシステムの読み出し動作を示すフローチャートである。
【図２６】図２６は、第３実施形態に係るメモリシステムの読み出し動作を示すフローチャートである。
【図２７】図２７は、第４実施形態に係るメモリシステムの書き込み動作を示すフローチャートである。
【図２８】図２８は、第４実施形態に係るメモリシステムの書き込み動作を示すフローチャートである。
【図２９】図２９は、第４実施形態に係るメモリシステムの書き込み動作を示すフローチャートである。
【図３０】図３０は、第１乃至第４実施形態に係るメモリシステムの書き込みコマンド発行時の動作を示すフローチャートである。
【図３１】図３１は、第１乃至第４実施形態に係る特徴テーブルに情報を設定する際における各種信号のタイミングチャートである。
【図３２】図３２は、第１乃至第４実施形態の変形例に係るメモリシステムのブロック図である。
【図３３】図３３は、第１乃至第４実施形態に係るメモリシステムを利用したシステムの概念図である。
【図３４】図３４は、第１乃至第４実施形態に係るメモリシステムを利用したシステムの概念図である。
【発明を実施するための形態】
【０００７】
以下、図面を参照して実施形態について説明する。なお、以下の説明において、同一の機能及び構成を有する構成要素については、共通する参照符号を付す。
【０００８】
１．第１実施形態  
第１実施形態に係るメモリシステムについて説明する。
【０００９】
１．１  構成について  
１．１．１  メモリシステムの全体構成について  
まず、本実施形態に係るメモリシステムの大まかな全体構成について、図１及び図２を用いて説明する。図１は、本実施形態に係るメモリシステムの外観図であり、特に上面から見た様子を示し、図２は図１における２−２線に沿った断面図である。
【００１０】
図示するように、メモリシステム１は２つの半導体チップ１００、２００を含む。半導体チップ（メモリチップ）１００はＮＡＮＤ型フラッシュメモリ等の半導体メモリを含み、半導体チップ２００（コントローラチップ）は、メモリチップ１００を制御するコントローラを含む。これらの半導体チップ１００及び２００はリードフレーム３００に実装され、更に樹脂３５０によって封止されてパッケージングされている。
【００１１】
より具体的には、図２に示すように、リードフレーム３００のダイパッド３１０上にメモリチップ１００が搭載され、メモリチップ１００上にコントローラチップ２００が重ねられている。
【００１２】
コントローラチップ２００は、例えばボンディングワイヤ３４０により、リードフレームのインナーリード３２０に接続され、更に図示せぬボンディングワイヤによりメモリチップ１００とも接続されている。そして、メモリチップ１００、コントローラチップ２００、ダイパッド３１０、インナーリード３２０、及びボンディングワイヤ３４０が、例えば樹脂３５０によって封止されている。
【００１３】
インナーリード３２０は、樹脂３５０外部に露出されたアウターリード３３０に接続されている。そしてアウターリード３３０は、メモリシステム１の外部接続端子（外部接続ピン）として機能する。図１の例であると、第１ピンから第１６ピンまでの１６個の外部接続端子が用意されている。そしてメモリシステム１は、これらのピンを介して、メモリシステム１を制御する（より具体的には、メモリチップにアクセスする）ホスト機器と通信する。
【００１４】
図３は、各ピンの機能を示すダイアグラムである。図示するように、第１ピンは、制御信号／ＨＯＬＤの入力用、またはシリアルデータＳＯ３の出力用に用いられる。制御信号／ＨＯＬＤは、ホスト機器とメモリシステム１との間の通信を一時的に停止する際にアサート（“Ｌ”レベル）される。第２ピンは、電源電圧Ｖccを受信する。第３ピンから第６ピン、及び第１１ピンから第１４ピンは未使用ピンであり、例えば将来的に何らかの信号やデータの送受信が必要になった際に使用することが出来る。第７ピンは、チップセレクト信号／ＣＳを受信する。チップセレクト信号／ＣＳは、メモリチップ１００及びコントローラチップ２００を活性化させるための信号（言い換えれば、メモリシステム１にアクセスする際に活性化される信号）であり、例えばホスト機器がメモリシステム１にコマンドを入力するタイミングでアサート（“Ｌ”レベル）される。第８ピンは、シリアルデータ（ＳＯまたはＳＯ１）の出力用に用いられる。第９ピンは、制御信号／ＷＰの入力用、またはシリアルデータ（ＳＯ２）の出力用に用いられる。制御信号／ＷＰはライトプロテクト信号であり、メモリチップへの書き込みを禁止する際にアサート（“Ｌ”レベル）される。第１０ピンは、基準電位Ｖssを受信する。第１５ピンは、シリアルデータ（ＳＩ）の入力用、またはシリアルデータ（ＳＯ０）の出力用に用いられる。第１６ピンは、シリアルクロック信号ＳＣＫを受信する。
【００１５】
上記ピン構成は、ＳＰＩ（Serial Peripheral Interface）に準拠している。そして、第１ピン、第８ピン、第９ピン、及び第１５ピンをシリアルデータ出力用として任意に選択することで、１倍速、２倍速、または４倍速でデータをホスト機器へ出力することが出来る。
【００１６】
図４は、図１とは別のパッケージ構成の例を示している。図４の例では、第１ピンから第８ピンまでの８個の外部接続端子が設けられている。図５は、図４の例における各ピンの機能を示すダイアグラムである。
【００１７】
図示するように、第１ピンはチップセレクト信号／ＣＳを受信し、第２ピンはシリアルデータＳＯ、ＳＯ１を出力し、第３ピンはライトプロテクト信号／ＷＰを受信、またはシリアルデータＳＯ２を出力し、第４ピンは基準電位Ｖssを受信し、第５ピンはシリアルデータＳＩを受信、またはシリアルデータＳＯ０を出力し、第６ピンはシリアルクロックを受信し、第７ピンは制御信号／ＨＯＬＤを受信、またはシリアルデータＳＯ３を出力し、第８ピンは電源電圧Ｖccを受信する。  
この場合でも、ピン構成はＳＰＩに準拠している。
【００１８】
図６は、メモリシステム１の内部構成を示す機能ブロック図である。以下では、メモリチップ１００をＮＡＮＤ型フラッシュメモリ１００と呼び、コントローラチップ２００を単にコントローラ２００と呼ぶ。
【００１９】
図示するように、メモリシステム１はＮＡＮＤ型フラッシュメモリ１００とコントローラ２００とを備えている。
【００２０】
ＮＡＮＤ型フラッシュメモリ１００は、複数のメモリセルを備え、データを不揮発に記憶する。コントローラ２００は、ＮＡＮＤバスによってＮＡＮＤ型フラッシュメモリ１００に接続され、ＳＰＩバスによってホスト機器５００に接続される。そしてコントローラ２００は、ＮＡＮＤ型フラッシュメモリ１００へのアクセスを制御する。
【００２１】
ＮＡＮＤバスは、ＮＡＮＤインターフェースに従った信号の送受信を行う。この信号の具体例は、チップイネーブル信号／ＣＥ、アドレスラッチイネーブル信号ＡＬＥ、コマンドラッチイネーブル信号ＣＬＥ、ライトイネーブル信号／ＷＥ、リードイネーブル信号／ＲＥ、レディ・ビジー信号／ＲＢ、入出力信号Ｉ／Ｏ、及びライトプロテクト信号／ＷＰである。
【００２２】
信号／ＣＥはlowレベルでアサートされ、ＮＡＮＤ型フラッシュメモリ１００を活性化させるための信号であり、ＮＡＮＤ型フラッシュメモリ１００にアクセスする際にアサートされる。信号ＣＬＥ及びＡＬＥは、ＮＡＮＤ型フラッシュメモリ１００への入力信号Ｉ／Ｏがそれぞれコマンド及びアドレスであることをＮＡＮＤ型フラッシュメモリ１００に通知する信号である。信号／ＷＥはlowレベルでアサートされ、入力信号Ｉ／ＯをＮＡＮＤ型フラッシュメモリ１００に取り込ませるための信号である。信号／ＲＥもlowレベルでアサートされ、ＮＡＮＤ型フラッシュメモリ１００から出力信号Ｉ／Ｏを読み出すための信号である。レディ・ビジー信号／ＲＢは、ＮＡＮＤ型フラッシュメモリ１００がレディ状態（コントローラ２００からの命令を受信出来る状態）であるか、それともビジー状態（コントローラ２００からの命令を受信出来ない状態）であるかを示す信号であり、lowレベルがビジー状態を示す。入出力信号Ｉ／Ｏは、例えば８ビット（ｎ＝８）の信号である。そして入出力信号Ｉ／Ｏは、ＮＡＮＤ型フラッシュメモリ１００とコントローラ２００との間で送受信されるデータの実体であり、コマンド、アドレス、書き込みデータ、及び読み出しデータ等である。信号／ＷＰは、ＮＡＮＤ型フラッシュメモリ１００への書き込みを禁止するための信号である。
【００２３】
ＳＰＩバスは、図３及び図５で説明した通りである。
【００２４】
１．１．２  コントローラ２００の構成について  
次に、コントローラ２００の構成の詳細につき、引き続き図６を用いて説明する。図示するようにコントローラ２００は、ホスト入出力回路２１０、ホストインターフェース回路２２０、ＮＡＮＤインターフェース回路２３０、ＮＡＮＤ入出力回路２４０、シーケンサ（ステートマシン）２５０、データバッファ２６０、２７０、ステータスレジスタ２８０、アドレスレジスタ２９０、及び周辺回路６００を備えている。
【００２５】
ホスト入出力回路２１０は、ホスト機器５００との間で送受信される信号のバッファとして機能する。信号ＳＣＫ、ＳＩ、／ＣＳ、／ＨＯＬＤ、及び／ＷＰはまずホスト入出力回路２１０で受信され、その後、ホストインターフェース回路２２０に出力される。
【００２６】
ホストインターフェース回路２２０は、信号ＳＣＫに同期して信号ＳＩを内部に取り込む。またホストインターフェース回路２２０は、信号ＳＣＫに同期して出力される信号ＳＯを、ホスト入出力回路２１０を介してホスト機器５００へ送信する。
【００２７】
ホストインターフェース回路２２０は、ホスト入出力回路２１０を介したホスト機器５００との間の信号の送受信制御を司る。またホストインターフェース回路２２０は、シリアル／パラレル変換器及びパラレル／シリアル変換器として機能する。例えば、ホスト機器５００からの入力信号ＳＩをシリアル信号からパラレル信号に変換し、ＮＡＮＤ型フラッシュメモリ１００から読み出されたデータをパラレル信号からシリアル信号に変換する。更にホストインターフェース回路２２０は、入力信号ＳＩがコマンドであった場合にコマンドデコーダとして機能し、受信したコマンドをデコードする。そしてデコード結果を例えばシーケンサ２５０に出力する。
【００２８】
データバッファ２６０、２７０は、ホスト機器５００から受信した書き込みデータを、ホストインターフェース回路２２０を介して一時的に保持する。更に、ＮＡＮＤ型フラッシュメモリ１００から読み出されたデータを、ＮＡＮＤインターフェース回路２３０を介して一時的に保持する。
【００２９】
ステータスレジスタ２８０は、メモリシステム１の種々のステータス情報を保持する。例えば、後述する特徴テーブルを保持する。
【００３０】
アドレスレジスタ２９０は、ホスト機器５００から受信したアドレスを、ホストインターフェース回路２２０を介して保持する。
【００３１】
ＮＡＮＤインターフェース回路２３０は、ＮＡＮＤ入出力回路２４０を介したＮＡＮＤ型フラッシュメモリ１００との間の信号の送受信制御を司る。そしてＮＡＮＤインターフェース回路２３０は、シーケンサ２５０の命令に従って、ＮＡＮＤインターフェースに準拠した各種コマンドを発行し、アドレスレジスタ２９０内のアドレスと共にＮＡＮＤ入出力回路２４０を介してＮＡＮＤ型フラッシュメモリ１００へ出力する。データの書き込み時には、データバッファ２６０及び／または２７０内のデータを、ＮＡＮＤ入出力回路２４０を介してＮＡＮＤ型フラッシュメモリ１００へ出力する。更にデータの読み出し時には、ＮＡＮＤ型フラッシュメモリ１００から読み出されたデータを、データバッファ２６０及び／または２７０に転送する。
【００３２】
ＮＡＮＤ入出力回路２４０は、ＮＡＮＤ型フラッシュメモリ１００との間で送受信される信号のバッファとして機能する。また、ＮＡＮＤインターフェース回路２３０の命令に従って、信号／ＣＥ、ＣＬＥ、ＡＬＥ、／ＷＥ、／ＲＥ、／ＷＰをアサートまたはデアサートする。更に、データの読み出し時には、信号ＩＯ（読み出しデータ）を一時的に保持し、ＮＡＮＤインターフェース回路２３０へ転送し、書き込み時には信号ＩＯ（書き込みデータ）を一時的に保持し、ＮＡＮＤ型フラッシュメモリ１００へ送信する。また、ＮＡＮＤ型フラッシュメモリ１００からレディ・ビジー信号／ＲＢを受信し、これをＮＡＮＤインターフェース回路２３０へ転送する。
【００３３】
シーケンサ２５０は、コントローラ２００全体の動作を制御する。例えば、ホスト機器５００からデータの読み出し要求があった際には、ＮＡＮＤインターフェース回路２３０に対して読み出し動作を実行するためのシーケンスを実行するよう命令する。またホスト機器５００からデータの書き込み要求があった際には、ＮＡＮＤインターフェース回路２３０に対して読み出し動作を実行するためのシーケンスを実行するよう命令する。更に、ＮＡＮＤ型フラッシュメモリ１００から受信したステータス情報に従って、ステータスレジスタ２８０内の特徴テーブルを更新する。
【００３４】
周辺回路６００は、外部から電源電圧Ｖccを受信し、各回路ブロックへ転送すると共に、コントローラ２００の動作に必要なその他の制御を行う。
【００３５】
１．１．３  ＮＡＮＤ型フラッシュメモリ１００の構成について  
次に、ＮＡＮＤ型フラッシュメモリ１００の構成について、図７を用いて説明する。図７は、ＮＡＮＤ型フラッシュメモリ１００のブロック図である。
【００３６】
図示するようにＮＡＮＤ型フラッシュメモリ１００は、メモリセルアレイ１１０、ロウデコーダ１２０、センスアンプ１３０、データレジスタ１４０、カラムデコーダ１５０、ＥＣＣ回路４００、ステータスレジスタ４１０、アドレスレジスタ４２０、コマンドレジスタ４３０、制御回路４４０、電圧発生回路４５０、入出力制御回路４６０、ロジック回路４７０、及びデータレジスタ４８０を備えている。
【００３７】
メモリセルアレイ１１０は、ロウ及びカラムに対応付けられた複数の不揮発性のメモリセルを備えている。そして、同一行にあるメモリセルは同一のワード線に接続され、同一列にあるメモリセルは同一のビット線に接続される。データの読み出し及び書き込みは、同一のワード線に接続された複数のメモリセルに対して一括して行われる。この単位をページと呼ぶ。１ページ分のデータは、正味のデータと管理データとを含む。正味のデータは、セクタと呼ばれる単位で管理される。例えば本例では、１ページは４つのセクタを含み、各セクタは５１２バイトのデータサイズを有する。管理データは、例えばエラー訂正のためのＥＣＣデータ（パリティ）を含む。エラー訂正はセクタ毎に行われる。従って管理データは、セクタ毎に用意されたＥＣＣデータを含む。また、データの消去は、複数のページ単位で一括して行われる。この単位をブロックと呼ぶ。
【００３８】
ロウデコーダ１２０は、メモリセルアレイ１１０のロウ方向を指定するロウアドレスをデコードする。そして、デコード結果に応じてワード線を選択し、データの書き込み、読み出し、及び消去に必要な電圧を印加する。
【００３９】
センスアンプ１３０は、データの読み出し時には、メモリセルアレイ１１０から読み出されたデータをセンスし、データレジスタ１４０に転送する。データの書き込み時には、データレジスタ１４０内のデータをメモリセルアレイ１１０に転送する。
【００４０】
データレジスタ１４０は、１ページ分の書き込みデータまたは読み出しデータを一時的に保持する。
【００４１】
カラムデコーダ１５０は、メモリセルアレイ１１０のカラム方向を指定するカラムアドレスをデコードする。そしてデコード結果に応じて、書き込み時にはデータをデータレジスタに転送し、読み出し時にはデータレジスタからデータを読み出す。
【００４２】
ＥＣＣ回路４００は、エラー検出及びエラー訂正処理を行う。より具体的には、データの書き込み時には、コントローラ２００から受信したデータに基づいて、セクタ毎にパリティを生成し、このパリティと正味のデータとをデータレジスタ１４０に転送する。データの読み出し時には、データレジスタ１４０から転送されたデータに含まれるパリティに基づき、セクタ毎にシンドロームを生成し、エラーの有無を検出する。そしてエラーが検出された際には、そのビット位置を特定し、エラーを訂正する。１セクタにつき訂正可能なエラービット数は、本例では例えば１セクタあたり８ビットである。またＥＣＣ回路４００は、各セクタにおいて検出されたエラービット数を、ステータス情報としてステータスレジスタ４１０に出力可能である。
【００４３】
ロジック回路４７０は、コントローラ２００から信号／ＣＥ、ＣＬＥ、ＡＬＥ、／ＷＥ、／ＲＥ、及び／ＷＰを受信する。
【００４４】
入出力制御回路４６０は、信号ＩＯ［ｎ：０］を受信する。そして入出力制御回路４６０は、信号ＩＯがアドレスであった場合（ＡＬＥ＝“Ｈ”の場合）には、これをアドレスレジスタ４２０に保持させる。また信号ＩＯがコマンドであった場合（ＣＬＥ＝“Ｈ”の場合）には、これをコマンドレジスタ４３０に保持させる。更に信号ＩＯがデータであった場合（ＡＬＥ＝ＣＬＥ＝“Ｌ”の場合）には、これをデータレジスタ４８０に保持させる。
【００４５】
ステータスレジスタ４１０は、ＮＡＮＤ型フラッシュメモリ１００の各種ステータス情報を保持する。ステータス情報には、前述のＥＣＣ回路４００から与えられるエラービット数、また制御回路４４０から与えられる書き込み動作及び消去動作が成功（パス）したか失敗（フェイル）したかを示す情報等が含まれる。
【００４６】
制御回路４７０は、コマンドレジスタ４３０に保持されたコマンドと、ロジック回路４７０に入力された各種信号に基づいて、ＮＡＮＤ型フラッシュメモリ１００全体を制御する。また制御回路４７０は、レディ・ビジー信号／ＲＢを発生して、コントローラ２００へ出力する。
【００４７】
電圧発生回路４５０は、制御回路４７０の命令に基づいて、データの書き込み、読み出し、及び消去動作に必要な電圧を生成し、これをメモリセルアレイ１１０、ロウデコーダ１２０、及びセンスアンプ１３０に供給する。
【００４８】
１．２  動作について  
次に、本実施形態に係るメモリシステムにおけるデータの読み出し動作、書き込み動作、及び消去動作につき、ＳＰＩバス及びＮＡＮＤバスで送受信される信号に着目して、以下簡単に説明する。
【００４９】
１．２．１  読み出し動作  
まず、読み出し動作について説明する。読み出し動作は、大まかには以下の３ステップを含む。すなわち、
（１）ＮＡＮＤ型フラッシュメモリからのデータ読み出し：本動作により、ＮＡＮＤ型フラッシュメモリ１００からコントローラ２００にデータが読み出される。  
（２）特徴テーブル読み出し（Get featureと呼ぶことがある）：本動作により、メモリシステム１がビジー状態であるかレディ状態であるか、すなわち上記（１）の動作が完了したか否かが判定される。  
（３）コントローラ２００からのデータ読み出し：本動作により、（１）でコントローラ２００に読み出されたデータがホスト機器５００に読み出される。
【００５０】
図８は、上記（１）実行時におけるＳＰＩバス上の各種信号のタイムチャートである。図示するようにホスト機器５００は、信号／ＣＳをアサートすると共に、第１読み出しコマンドＣＭＤ＿ＲＤ１を信号ＳＩとして発行し、更にクロックＳＣＫを発行する。
【００５１】
コントローラ２００のホストインターフェース回路２２０は、信号／ＣＳがアサートされて最初のクロックＳＣＫを受信した際の信号ＳＩをコマンドとして認識する。このコマンドは、例えば８クロックサイクルにわたって入力される８ビット信号である。第１読み出しコマンドＣＭＤ＿ＲＤ１を受信したことで、シーケンサ２５０はデータ読み出しシーケンスを開始する。
【００５２】
引き続きホスト機器５００は、例えば８クロックサイクルにわたってダミービットＤＭＹ＿ＢＩＴをコントローラ２００へ送信し、その後例えば１６サイクルにわたってアドレスＡＤＤをコントローラ２００へ送信する。そしてアドレスＡＤＤの送信後、ホスト機器５００は信号／ＣＳをデアサートする。アドレスＡＤＤは、ＮＡＮＤ型フラッシュメモリ１００におけるブロック及びページを指定するアドレスであり、アドレスレジスタ２９０に保持される。
【００５３】
このように、特定のコマンドを受信した際に、その後にどのような信号が入力されるか（コマンドシーケンス）は予め定められている。つまりコントローラ２００は、例えば第１読み出し命令を受信した際には、その後の８クロックサイクルで入力される信号ＳＩは意味の無いダミーデータであり、その後の１６クロックサイクルで入力される信号ＳＩが、実体的なアドレス信号であることを把握している。
【００５４】
上記（１）の動作に引き続いて上記（２）の動作が実行される。図９は、上記（２）実行時におけるＳＰＩバス上の各種信号のタイムチャートである。図示するようにホスト機器５００は、信号／ＣＳを再度アサートすると共に、Get featureコマンドＣＭＤ＿ＧＦを信号ＳＩとして発行し、更にクロックＳＣＫを発行する。
【００５５】
引き続きホスト機器５００は、例えば８クロックサイクルにわたってアドレスＡＤＤをコントローラ２００へ送信する。このアドレスＡＤＤは、特徴テーブル内のアドレスであり、当然ながらレディ・ビジー情報が格納された領域を指定するアドレスである。コントローラ２００では、アドレスＡＤＤの受信後、例えばシーケンサ２５０の命令に従ってホストインターフェース回路２２０がステータスレジスタ２８０から特徴テーブルの指定のエントリを読み出し、これを８サイクルにわたって８ビットのステータスデータＳＴ＿ＤＡＴとしてホスト機器５００に送信する。このステータスデータＳＴ＿ＤＡＴには、レディ・ビジー情報が含まれている。そしてステータスデータＳＴ＿ＤＡＴの受信後、ホスト機器５００は信号／ＣＳをデアサートする。
【００５６】
受信したステータスデータＳＴ＿ＤＡＴにおいて、メモリシステム１がレディ状態であることが示されていれば、上記（３）の動作が実行される。図１０は、上記（３）実行時におけるＳＰＩバス上の各種信号のタイムチャートである。図示するようにホスト機器５００は、信号／ＣＳをアサートすると共に、第２読み出しコマンドＣＭＤ＿ＲＤ２を信号ＳＩとして発行し、更にクロックＳＣＫを発行する。
【００５７】
引き続きホスト機器５００は、例えば４クロックサイクルにわたってダミービットＤＭＹ＿ＢＩＴをコントローラ２００へ送信し、その後例えば１２サイクルにわたってアドレスＡＤＤをコントローラ２００へ送信する。このアドレスＡＤＤは、コントローラ２００において、データバッファ２６０または２７０における領域を指定するためのアドレスであり、ＮＡＮＤフラッシュメモリ１００におけるページ内のカラムを指定するアドレスである。アドレスＡＤＤは、アドレスレジスタ２９０に保持される。すると、例えばシーケンサ２５０の制御に従い、ホストインターフェース回路２２０はデータバッファ２６０または２７０からデータを読み出す。そして、８クロックサイクル経過の後、ホストインターフェース回路２２０は、データバッファ２６０または２７０から読み出したデータＲＤ＿ＤＡＴをホスト機器５００へ送信する。
【００５８】
図１１は、上記（１）の動作時におけるＮＡＮＤバス上の各種信号のタイムチャートである。第１読み出しコマンドＣＭＤ＿ＲＤ１を受信したコントローラ２００では、例えばシーケンサ２３０の制御に従って、ＮＡＮＤインターフェース回路２３０がアドレス入力コマンド“００ｈ”を発行し、ＮＡＮＤ型フラッシュメモリ１００へ送信する。引き続き、例えば５サイクルにわってアドレスＡＤＤをＮＡＮＤ型フラッシュメモリ１００へ送信し、その後読み出しコマンド“３０ｈ”を発行して、これをＮＡＮＤ型フラッシュメモリ１００へ送信する。なお、このアドレスＡＤＤは、図８及び図１０で示された動作においてアドレスレジスタ２９０に保持されたブロック、ページ、及びカラムを示すアドレスを含む。
【００５９】
コマンド“３０ｈ”に応答して、ＮＡＮＤ型フラッシュメモリ１００内では、メモリセルアレイ１１０からのデータの読み出し動作が開始され、ＮＡＮＤ型フラッシュメモリ１００はビジー状態となる（／ＲＢ＝“Ｌ”）となる。
【００６０】
データのメモリセルアレイ１１０からの読み出しが完了すると、ＮＡＮＤ型フラッシュメモリ１００はレディ状態となる。これに応答してコントローラ２００は、信号／ＲＥをトグルさせる。すると、信号／ＲＥに同期して、データがＮＡＮＤ型フラッシュメモリ１００からコントローラ２００へ転送される。
【００６１】
１．２．２  書き込み動作  
次に書き込み動作について説明する。書き込み動作は、大まかには以下の３ステップを含む。すなわち、
（１）ホスト機器５００からコントローラ２００へのデータ転送。  
（２）転送したデータのＮＡＮＤ型フラッシュメモリ１００への書き込み。  
（３）特徴テーブル読み出し（Get feature）：本動作により、ＮＡＮＤ型フラッシュメモリ１００への書き込みがパスしたかフェイルしたかが判定される。
【００６２】
図１２は、上記（１）実行時におけるＳＰＩバス上の各種信号のタイムチャートである。図示するようにホスト機器５００は、信号／ＣＳをアサートすると共に、第１書き込みコマンドＣＭＤ＿ＷＲ１を信号ＳＩとして発行し、更にクロックＳＣＫを発行する。第１書き込みコマンドＣＭＤ＿ＷＲ１を受信したことで、シーケンサ２５０はデータ書き込みシーケンスを開始する。
【００６３】
引き続きホスト機器５００は、例えば４クロックサイクルにわたってダミービットＤＭＹ＿ＢＩＴをコントローラ２００へ送信し、その後例えば１２サイクルにわたってアドレスＡＤＤをコントローラ２００へ送信する。このアドレスＡＤＤは、データバッファ２６０または２７０における領域を指定するためのアドレスであり、ＮＡＮＤフラッシュメモリ１００におけるページ内のカラムを指定するアドレスである。アドレスＡＤＤは、アドレスレジスタ２９０に保持される。更にホスト機器５００は、書き込みデータＷＲ＿ＤＡＴをコントローラ２００へ送信する。この書き込みデータＷＲ＿ＤＡＴは、データバッファ２６０または２７０において、直前に受信したＡＤＤに対応する領域に保持される。そしてデータＷＲ＿ＤＡＴの送信後、ホスト機器５００は信号／ＣＳをデアサートする。
【００６４】
上記（１）の動作に引き続いて上記（２）の動作が実行される。図１３は、上記（２）実行時におけるＳＰＩバス上の各種信号のタイムチャートである。図示するようにホスト機器５００は、信号／ＣＳを再度アサートすると共に、第２書き込みコマンドＣＭＤ＿ＷＲ２を信号ＳＩとして発行し、更にクロックＳＣＫを発行する。第２書き込みコマンドＣＭＤ＿ＷＲ２を受信したことで、シーケンサ２５０は上記（２）の動作命令を受信したことを認識する。
【００６５】
引き続きホスト機器５００は、例えば８クロックサイクルにわたって８ビットのダミービットＤＭＹ＿ＢＩＴをコントローラ２００へ送信し、その後例えば１６サイクルにわたって１６ビットのアドレスＡＤＤをコントローラ２００へ送信する。このアドレスＡＤＤは、ＮＡＮＤ型フラッシュメモリ１００におけるブロック及びページを指定するアドレスであり、アドレスレジスタ２９０に保持される。そしてアドレスＡＤＤの送信後、ホスト機器５００は信号／ＣＳをデアサートする。
【００６６】
上記（２）の動作に引き続いて、上記（３）の動作が行われる。本動作におけるコマンドシーケンスは、読み出し動作時に説明した図９と同様である。またホスト機器５００は、受信したステータスデータＳＴ＿ＤＡＴにおいて、メモリシステム１がレディ状態であることが示されていれば、続いてデータの書き込みがフェイルしたか否かに関する情報を要求する。
【００６７】
図１４は、上記（２）の動作時におけるＮＡＮＤバス上の各種信号のタイムチャートである。第２書き込みコマンドＣＭＤ＿ＷＲ２を受信したコントローラ２００では、例えばシーケンサ２５０の制御に従って、ＮＡＮＤインターフェース回路２３０が書き込みコマンド“８０ｈ”を発行し、ＮＡＮＤ型フラッシュメモリ１００へ送信する。引き続き、例えば５サイクルにわたってアドレスＡＤＤをＮＡＮＤ型フラッシュメモリ１００へ送信し、更に書き込みデータＤＡＴが複数サイクルにわたってＮＡＮＤ型フラッシュメモリ１００へ送信され、その後書き込みコマンド“１０ｈ”を発行して、これをＮＡＮＤ型フラッシュメモリ１００へ送信する。なお、このアドレスＡＤＤは、図１２及び図１３で示された動作においてアドレスレジスタ２９０に保持されたブロック、ページ、及びカラムを示すアドレスを含む。
【００６８】
コマンド“１０ｈ”に応答して、ＮＡＮＤ型フラッシュメモリ１００内では、メモリセルアレイ１１０へのデータの書き込み動作が開始され、ＮＡＮＤ型フラッシュメモリ１００はビジー状態となる（／ＲＢ＝“Ｌ”）となる。
【００６９】
データのメモリセルアレイ１１０への書き込みが完了すると、ＮＡＮＤ型フラッシュメモリ１００はレディ状態となる。これに応答してコントローラ２００は、ステータス読み出しコマンド“７０ｈ”を発行し、信号／ＲＥをトグルさせる。すると、信号／ＲＥに同期して、書き込み動作がパスしたかフェイルしたかを示すステータスデータＳＴ＿ＤＡＴがコントローラ２００に転送される。このステータスデータＳＴ＿ＤＡＴは特徴テーブルに保持され、上記（３）のGet featureコマンドによってホスト機器５００に読み出される。
【００７０】
１．２．３  消去動作  
次に消去動作について説明する。消去動作は、大まかには以下の２ステップを含む。すなわち、
（１）ホスト機器５００からコントローラ２００への消去命令。  
（２）特徴テーブル読み出し（Get feature）：本動作により、ＮＡＮＤ型フラッシュメモリ１００への消去動作がパスしたかフェイルしたかが判定される。
【００７１】
図１５は、上記（１）実行時におけるＳＰＩバス上の各種信号のタイムチャートである。図示するようにホスト機器５００は、信号／ＣＳをアサートすると共に、消去コマンドＣＭＤ＿ＥＲを信号ＳＩとして発行し、更にクロックＳＣＫを発行する。消去コマンドＣＭＤ＿ＥＲを受信したことで、シーケンサ２５０はデータ消去シーケンスを開始する。
【００７２】
引き続きホスト機器５００は、例えば８クロックサイクルにわたって８ビットのダミービットＤＭＹ＿ＢＩＴをコントローラ２００へ送信し、その後例えば１６サイクルにわたって１６ビットのアドレスＡＤＤをコントローラ２００へ送信する。このアドレスＡＤＤは、メモリセルアレイ１１０において消去対象となるブロックを指定するためのアドレスであり、アドレスレジスタ２９０に保持される。その後、ホスト機器５００は信号／ＣＳをデアサートする。
【００７３】
上記（１）の動作に引き続いて上記（２）の動作が実行される。本動作におけるコマンドシーケンスは、読み出し動作時に説明した図９と同様である。またホスト機器５００は、受信したステータスデータＳＴ＿ＤＡＴにおいて、メモリシステム１がレディ状態であることが示されていれば、続いてデータの消去がパスしたかフェイルしたかに関する情報を要求する。
【００７４】
図１６は、上記（１）の動作時におけるＮＡＮＤバス上の各種信号のタイムチャートである。消去コマンドＣＭＤ＿ＥＲを受信したコントローラ２００では、例えばシーケンサ２５０の制御に従って、ＮＡＮＤインターフェース回路２３０が消去コマンド“６０ｈ”を発行し、ＮＡＮＤ型フラッシュメモリ１００へ送信する。引き続き、例えば３サイクルにわたってアドレスＡＤＤをＮＡＮＤ型フラッシュメモリ１００へ送信し、更に消去コマンド“Ｄ０ｈ”を発行して、これをＮＡＮＤ型フラッシュメモリ１００へ送信する。
【００７５】
コマンド“Ｄ０ｈ”に応答して、ＮＡＮＤ型フラッシュメモリ１００内では、メモリセルアレイ１１０のデータの消去動作が開始され、ＮＡＮＤ型フラッシュメモリ１００はビジー状態となる（／ＲＢ＝“Ｌ”）となる。
【００７６】
データの消去が完了すると、ＮＡＮＤ型フラッシュメモリ１００はレディ状態となる。これに応答してコントローラ２００は、ステータス読み出しコマンド“７０ｈ”を発行し、信号／ＲＥをトグルさせる。すると、信号／ＲＥに同期して、消去動作がパスしたかフェイルしたかを示すステータスデータＳＴ＿ＤＡＴがコントローラ２００に転送される。このステータスデータＳＴ＿ＤＡＴは特徴テーブルに保持され、上記（２）のGet featureコマンドによってホスト機器５００に読み出される。
【００７７】
１．３  ホスト機器の起動時の動作について  
本実施形態に係るホスト機器５００は、電源が投入された際に、ＮＡＮＤ型フラッシュメモリ１００から起動プログラムを読み出し、この起動プログラムに従って起動する。以下では、このホスト機器５００の起動に関して説明する。
【００７８】
１．３．１  起動プログラムについて  
まず、ＮＡＮＤ型フラッシュメモリ１００の保持する起動プログラムについて説明する。図１７は、メモリセルアレイ１１０のブロック図である。
【００７９】
図示するようにメモリセルアレイ１１０は、例えば１０２４個のブロックＢＬＫ（ＢＬＫ０〜ＢＬＫ１０２３）を備えている。そして各ブロックＢＬＫに含まれるページ数は、例えば６４ページである（ＰＧ０〜ＰＧ６３）。各ブロックＢＬＫ０〜ＢＬＫ１０２３には、それぞれブロックアドレス（物理アドレス）“ＢＡ００００”〜“ＢＡ１０２３”が割り当てられ、各ページＰＧ０〜ＰＧ６３には、それぞれのページアドレス（物理アドレス）“ＰＡ０”〜“ＰＡ６３”が割り当てられ、更に各ページはカラムアドレス（物理アドレス）“ＣＡ０”〜“ＣＡ２１１２”が割り当てられる。ホスト機器５００はこのアドレスを用いてメモリシステム１にアクセスする。
【００８０】
１０２４個のブロックＢＬＫのうち、ブロックＢＬＫ０及びＢＬＫ１がホスト機器５００の起動プログラムを保持する。この起動プログラムは、ホスト機器５００によって実行される例えばオペレーティングシステムであっても良い。
【００８１】
ブロックＢＬＫ０及びＢＬＫ１に保持される起動プログラムは同じものである。すなわち起動プログラムは、メモリセルアレイ１１０内において、複数のブロックＢＬＫに多重化されて保持されている。
【００８２】
１．３．２  ホスト機器起動時の動作の流れについて  
次に、図１８を用いて、ホスト機器５００起動時の動作の流れについて説明する。
【００８３】
図示するように、ホスト機器５００及びメモリシステム１に電源が投入されると（ステップＳ１０）、ホスト機器５００は、その内部の例えばＲＯＭに記憶された起動シーケンスを開始する（ステップＳ１１）。
【００８４】
すなわちホスト機器５００は、ブロックＢＬＫ０から起動プログラムを読み出すための読み出しコマンドを発行し、これをメモリシステム１へ送信する（ステップＳ１２）。本例では、ホスト機器５００とメモリシステム１との間で、起動プログラムがブロックＢＬＫ０に記憶され、ホスト機器５００はまずブロックＢＬＫ０にアクセスするような取り決めが予め定められている場合を例に説明するが、必ずしもブロックＢＬＫ０には限定されず、その他のブロックであっても良い。
【００８５】
ステップＳ１２で発行された読み出しコマンドを受信したメモリシステム１は、ブロックＢＬＫ０内の起動プログラムが有効か否かを判断する（ステップＳ１３）。ブロックＢＬＫ０に有効な起動プログラムが保持されていれば（ステップＳ１３、ＹＥＳ）、メモリシステム１は、ブロックＢＬＫ０から読み出された起動プログラムをホスト機器５００へ送信する（ステップＳ１４）。他方で、ブロックＢＬＫ０に有効な起動プログラムが保持されていなければ（ステップＳ１３、ＮＯ）、メモリシステム１は、ブロックＢＬＫ０ではなくブロックＢＬＫ１から読み出された起動プログラムをホスト機器５００へ送信する（ステップＳ１５）。
【００８６】
そしてホスト機器５００は、メモリシステム１から受信した起動プログラムを実行する（ステップＳ１６）。これにより、ホスト機器５００が起動し、ホスト機器５００とメモリシステム１を含むアプリケーションが動作を開始する。
【００８７】
１．４  本実施形態に係る効果  
本実施形態に係る構成によれば、メモリシステム１の動作信頼性を向上出来る。本効果につき、以下説明する。
【００８８】
ホスト機器とＮＡＮＤ型フラッシュメモリを含むシステムにおいて、システムの制御用のプログラム（ソフトウェア）がＮＡＮＤ型フラッシュメモリに保持される場合、システムの起動時にＮＡＮＤ型フラッシュメモリからこのソフトウェアが読み出される。この際、ＮＡＮＤ型フラッシュメモリを制御するホスト機器は、事前に決められた特定のブロックからデータを読み出す。
【００８９】
他方で、ＮＡＮＤ型フラッシュメモリはその特性上、多数回の読み出し動作を行うことで、メモリセルに保持されるデータが破壊されることがある。またデータ書き込みやデータ消去の際、ブロックに不良が生じ、ブロックからデータを読み出せなくなる場合がある。
【００９０】
この点、本実施形態に係る構成であると、起動プログラム（上記システム制御用のプログラム）を、ブロックＢＬＫ０だけでなくブロックＢＬＫ１にも保持させている。そして、ブロックＢＬＫ０内のデータが破壊されていた場合、またはブロックＢＬＫ０からデータを読み出せない場合等には、ブロックＢＬＫ１から起動プログラムが読み出される。従って、ブロックＢＬＫ０内の起動プログラムが使用出来ない場合であっても、ホスト機器５００はブロックＢＬＫ１内の起動プログラムを用いて起動出来る。この結果、ホスト機器５００が起動出来ない、という問題の発生確率を低減出来る。
【００９１】
また、本実施形態に係るメモリシステム１は、ブロックＢＬＫ０内のデータが破壊されていた場合、またはブロックＢＬＫ０からデータを読み出せない場合等に、ブロックＢＬＫ１から起動プログラムを読み出すための読み出しコマンドをホスト機器５００から受信することなく、自発的に、ブロックＢＬＫ１内の起動プログラムを読み出してホスト機器５００に送信している。この結果、ホスト機器５００は、ブロックＢＬＫ０内の起動プログラムが無効であるかを判断し、無効である場合にブロックＢＬＫ１に対して読み出しコマンドを送信する必要がなく、ホスト機器５００の起動シーケンスを簡略化することが出来る。
【００９２】
２．第２実施形態  
次に、第２実施形態に係るメモリシステムについて説明する。本実施形態は、上記第１実施形態において説明した図１８をより具体的に説明するものであり、またステップＳ１３の判定にＥＣＣ処理結果を用いるものである。以下では、第１実施形態と異なる点についてのみ説明する。
【００９３】
２．１  特徴テーブルについて  
まず、特徴テーブルの概念について図１９を用いて説明する。図示するように、特徴テーブルは１つのエントリを含み、エントリは８ビット長である。そして、エントリにはアドレス“Ｃ０ｈ”が割り当てられている。
【００９４】
アドレス“Ｃ０ｈ”のエントリは、最下位ビットから順に以下の情報が割り当てられている。すなわち、  
・ビット０＝ＯＩＰ（Operation in Progress）：メモリシステム１がレディ状態であるかビジー状態であるかを示すフラグであり、“０”でレディ状態、“１”でビジー状態を示す。  
・ビット１＝ＷＥＬ（Write Enable Latch）：データの書き込みがenableであるかdisableであるかを示すフラグであり、“０”でdisable、“１”でenableを示す。  
・ビット２＝ＥＲＳ＿Ｆ（Erase Fail）：データの消去動作がフェイルしたか否かを示すフラグであり、“０”でパス、“１”でフェイルを示す。  
・ビット３＝ＰＲＧ＿Ｆ（Program Fail）：データの書き込み動作がフェイルしたか否かを示すフラグであり、“０”でパス、“１”でフェイルを示す。  
・ビット４、５＝ＥＣＣＳ（ECC status）：ＮＡＮＤ型フラッシュメモリ１００におけるエラー訂正結果を示し、“００”はエラーが検出されなかったことを示し、“０１”及び“１１”はエラーが訂正されたことを示し、“１０”はエラーを訂正出来なかったことを示す。“０１”と“１１”の違いは、“０１”は、エラービット数が、予め設定された閾値未満であったことを示し、“１１”は、エラービット数が、予め設定された閾値以上であったことを示す点である。  
・ビット６、７＝未使用。
【００９５】
特徴テーブルは、ＮＡＮＤインターフェース回路２３０やホストインターフェース回路２２０から与えられる情報によって例えばシーケンサ２５０により生成され、例えばステータスレジスタ２８０に保持される。
【００９６】
２．２  第１の例について  
第１実施形態の図１８で説明した起動シーケンスの詳細の第１の例につき、図２０及び図２１を用いて説明する。図２０は、読み出し動作時におけるホスト機器５００、コントローラ２００、及びＮＡＮＤ型フラッシュメモリ１００の動作を示すフローチャートであり、図２１はコマンドシーケンスである。また図２１は、具体例としてブロックＢＬＫ１から読み出された起動プログラムがホスト機器５００に送信される場合を示している。読み出し動作時の動作の詳細は図８乃至図１１を用いて説明した通りであるので、その説明は省略する。
【００９７】
図示するように、まずホスト機器５００が第１読み出しコマンドＣＭＤ＿ＲＤ１を発行し、引き続きアドレスＡＤＤを発行する。このアドレスＡＤＤは、ＮＡＮＤ型フラッシュメモリ１００のブロックＢＬＫ０を指定するすると共に、更にブロックＢＬＫ０内のページＰＧ０を指定する。このアドレスに応答して、メモリシステム１はビジー状態となり、特徴テーブルにおけるＯＩＰは“１”となる。またホスト機器５００は、Get featureコマンドＣＭＤ＿ＧＦ及びアドレスＡＤＤ（＝“Ｃ０ｈ”）を発行し、特徴テーブルからＯＩＰを含むエントリの情報（１バイトデータ）を読み出す。このエントリ情報は、クロックＳＣＫが入力されている期間、ＯＩＰが“０”になるまで繰り返しホスト機器５００へ送信される（Get featureコマンドを繰り返し発行しても良い）。
【００９８】
メモリシステム１がビジー状態となると共に、コントローラ２００はＮＡＮＤ型フラッシュメモリ１００に対してコマンド“００ｈ”、アドレスＡＤＤ、及びコマンド“３０ｈ”を発行する。コマンド“３０ｈ”に応答して、ＮＡＮＤ型フラッシュメモリ１００はビジー状態となる。なお、コントローラ２００の出力するアドレスＡＤＤは、ブロックＢＬＫ０及びブロックＢＬＫ０内のページＰＧ０及びカラムＣＡ０（ページ内における先頭カラム）を指定するアドレスである。
【００９９】
そしてＮＡＮＤ型フラッシュメモリ１００では、メモリセルアレイ１１０のブロックＢＬＫ０からデータが読み出される（ステップＳ１０）。引き続き、読み出されたデータ（起動プログラム）につき、ＥＣＣ回路４００がエラー検出を行う（ステップＳ２１）。
【０１００】
ステップＳ２１においてエラーが検出され、且つエラーが訂正出来なかった場合には（ステップＳ２２、ＮＯ）、制御回路４４０は、ブロックＢＬＫ０のブロックアドレス“ＢＡ００００”の次のアドレス“ＢＡ０００１”が割り当てられたブロックＢＬＫ１からデータを読み出す（ステップＳ２３）。この読み出し動作は、特にコントローラ２００からのコマンドを必要とせずに、ＮＡＮＤ型フラッシュメモリ１００が自発的に行う。そして、ブロックＢＬＫ１から読み出されたデータにつき、ＥＣＣ回路４００がエラー検出を行う（ステップＳ２４）。
【０１０１】
ステップＳ２４においてエラーが検出され、且つエラーが訂正出来なかった場合には（ステップＳ２５）、訂正されていないデータが出力される。そして、この場合にはブロックＢＬＫ０及びＢＬＫ１に対するエラー訂正が無効であった旨が、例えば特徴テーブルに保持される。ホスト機器は、この情報を例えばGet featureコマンドによって読み出すことが出来る。
【０１０２】
ステップＳ２１でエラーが検出されなかった場合、ステップＳ２１でエラーが検出されたが訂正された場合（ステップＳ２２、ＹＥＳ）、またはステップＳ２４でエラーが検出されなかった場合、ステップＳ２４でエラーが検出されたが訂正された場合（ステップＳ２５、ＹＥＳ）には、ＮＡＮＤ型フラッシュメモリ１００はレディ状態となり、ブロックＢＬＫ０またはブロックＢＬＫ１から読み出されたデータがコントローラ２００へ送信される。
【０１０３】
更に、コントローラ２００がＮＡＮＤ型フラッシュメモリ１００からデータを受信するとメモリシステム１はレディ状態となり、例えばシーケンサ２５０は、特徴テーブル内のＯＩＰを“１”から“０”にセットする。
【０１０４】
ＯＩＰが“０”になったことに応答して、ホスト機器５００は第２読み出しコマンドＣＭＤ＿ＲＤ２を発行して、ブロックＢＬＫ０またはブロックＢＬＫ１から読み出されたデータを、コントローラ２００から読み出す。
【０１０５】
２．３  第２の例について  
次に、第２の例につき、図２２及び図２３を用いて説明する。図２２は、読み出し動作時におけるホスト機器５００、コントローラ２００、及びＮＡＮＤ型フラッシュメモリ１００の動作を示すフローチャートであり、図２３はコマンドシーケンスである。また図２３は、具体例としてブロックＢＬＫ１から読み出された起動プログラムがホスト機器５００に送信される場合を示している。第２の例が第１の例と異なる点は、コントローラ２００がＥＣＣ処理結果を判断し、これに基づきブロックＢＬＫ１へのアクセスコマンドを発行することである。以下では、第１の例と異なる点についてのみ説明する。
【０１０６】
ホスト機器５００がブロックＢＬＫ０を指定するアドレスＡＤＤと共に第１読み出しコマンドＣＭＤ＿ＲＤ１を発行し、これによりブロックＢＬＫ０への読み出し動作が実行されるまでは第１の例と同様である。
【０１０７】
本例の場合、ＥＣＣ回路４００でＥＣＣ処理が完了し、ＮＡＮＤ型フラッシュメモリ１００がレディ状態になると、コントローラ２００は信号／ＲＥをトグルして、まずブロックＢＬＫ０から読み出されたデータをＮＡＮＤ型フラッシュメモリ１００から読み出す。引き続きシーケンサ２５０は、コマンド“７Ａｈ”を発行して、これをＮＡＮＤ型フラッシュメモリ１００へ送信する。コマンド“７Ａｈ”は、ＥＣＣ処理結果（以下、ＥＣＣステータスデータと呼ぶ）をＮＡＮＤ型フラッシュメモリ１００から読み出すためのコマンドであり、例えばセクタ毎のエラービット数に関する情報が得られる。
【０１０８】
そしてコントローラ２００は、ＮＡＮＤ型フラッシュメモリ１００から読み出したＥＣＣステータスデータに基づいて、ブロックＢＬＫ０から正しいデータが読み出せたか否かを判断する（ステップＳ２２）。この判断は、ＥＣＣ回路によって、例えば実際に発生したエラービットがエラー訂正可能なビット数を超えているかを確認することによって可能である。
【０１０９】
正しいデータが読み出せなかった場合、すなわちエラー訂正出来なかった場合には（ステップＳ２２、ＮＯ）、シーケンサ２５０は、再度コマンド“００ｈ”を発行し、ブロックアドレス“ＢＡ００００”、“ＰＡ００”、及び“ＣＡ００”の次のアドレス“ＢＡ０００１”、“ＰＡ００”、及び“ＣＡ００”を発行し、更にコマンド“３０ｈ”を発行する。これによりＮＡＮＤ型フラッシュメモリ１００は再びビジー状態となり、ブロックＢＬＫ１からデータが読み出される（ステップＳ２３）。
【０１１０】
その後は同様にして、ブロックＢＬＫ１からデータがコントローラ２００に転送され、更にブロックＢＬＫ１から読み出されたデータに関するＥＣＣステータスデータがコントローラ２００に転送される。そして、ブロックＢＬＫ１から正しいデータが読み出された場合（ステップＳ２５、ＹＥＳ）、またはブロックＢＬＫ０から正しいデータが読みされた場合（ステップＳ２２、ＹＥＳ）、ホスト機器５００は第２読み出しコマンドＣＭＤ＿ＲＤ２を発行して、ブロックＢＬＫ０またはブロックＢＬＫ１から読み出されたデータを、コントローラ２００から読み出す。
【０１１１】
２．４  本実施形態に係る効果  
上記第１実施形態で説明した構成は、例えば本実施形態によって実現出来る。すなわち、ブロックＢＬＫ０から読み出したデータにつきエラー訂正不能であった場合には、第１実施形態で説明したステップＳ１３において、ブロックＢＬＫ０内のデータは無効であると判断する。そしてこの場合にブロックＢＬＫ１からデータを読み出す。
【０１１２】
またブロックＢＬＫ１からデータを読み出す際には、ＮＡＮＤ型フラッシュメモリ１００がブロックＢＬＫ０内のデータがエラー訂正不能であったか否かを判断し、コントローラ２００からのコマンドを待つこと無く、自発的にブロックＢＬＫ１からデータを読み出しても良い。もちろん、第２の例のように、コントローラ２００がブロックＢＬＫ０のデータが有効か無効かを判断し、その結果に基づいてブロックＢＬＫ１に対する読み出しコマンドを発行しても良い。
【０１１３】
なお、図２３の例では、ブロックＢＬＫ０及びＢＬＫ１内のデータがコントローラ２００に転送された後にコマンド“７Ａｈ”が発行される例を示している。しかし、データがコントローラ２００に転送される前にコマンド“７Ａｈ”を発行して、データの有効／無効を判断しても良い。そしてコントローラ２００は、有効と判断された場合にデータをＮＡＮＤ型フラッシュメモリ１００から読み出し、無効と判断された場合には読み出さない場合であっても良い。なぜなら、無効なデータはコントローラ２００にとっても不要だからである。
【０１１４】
３．第３実施形態  
次に、第３実施形態に係るメモリシステムについて説明する。本実施形態は、上記第２実施形態と異なる例について説明するものであり、ステップＳ１３の判定にバッドブロック情報を用いるものである。以下では、第２実施形態と異なる点についてのみ説明する。
【０１１５】
３．１  バッドブロック情報について  
まず、本実施形態に係るバッドブロック情報について、図２４を用いて説明する。
【０１１６】
ＮＡＮＤ型フラッシュメモリでは、不良セルが含まれ、その結果としてアクセスされるべきではないと判断されたブロックＢＬＫはバッドブロックとして登録される。そしてバッドブロックに登録されると、以後、当該ブロックＢＬＫに対するアクセスは禁止される。このバッドブロックに関する情報（例えば、バッドブロックに登録されたブロックＢＬＫのブロックアドレス）は、ＮＡＮＤ型メモリセルアレイ１１０のいずれかの領域に保持される。
【０１１７】
バッドブロックには、先天的なバッドブロックと、後天的なバッドブロックとが含まれる。先天的なバッドブロックとは、出荷前のテストにより発見されたバッドブロックである。そして先天的なバッドブロックに関する情報は、メモリセルアレイ１１０内の例えばＲＯＭフューズ領域内に記憶され、電源投入時に例えば制御回路４４０によって自発的に読み出され、バッドブロックに対応するロウデコーダ１２０にフラグがセットされる。これにより、バッドブロックへのアクセスが禁止される。
【０１１８】
これに対して後天的なバッドブロックとは、出荷後に不良が発生し、バッドブロックとして登録されたブロックのことである。例えば、書き込み動作がフェイルした場合や、消去動作がフェイルした場合には、対応するブロックは以後、バッドブロックとみなされる。後天的なバッドブロックに関する情報も、メモリセルアレイ１１０内の特定の領域に記憶される。この情報は、例えばコントローラ２００によって読み出され、システムの起動後は、コントローラ２００によって後天的なバッドブロックは管理される。
【０１１９】
本例の場合、図２４に示すように、ＲＯＭフューズ領域とは異なるブロックＢＬＫ３に、後天的なバッドブロックに関する情報が保持される。以下の説明では、特に断らない限り、「バッドブロック情報」は後天的なバッドブロックに関する情報を指すものとする。
【０１２０】
３．２  第１の例について  
本実施形態に係る第１の例につき、図２５を用いて説明する。図２５は、読み出し動作時におけるホスト機器５００、コントローラ２００、及びＮＡＮＤ型フラッシュメモリ１００の動作を示すフローチャートである。
【０１２１】
図示するように、ＮＡＮＤ型フラッシュメモリ１００は、電源が投入されてＲＯＭフューズ内のデータが各種レジスタにセットされた後、コントローラ２００からのコマンドを受信することなく自発的にブロックＢＬＫ３からバッドブロック情報を読み出す（ステップＳ３０）。このバッドブロック情報は、例えばステータスレジスタ４１０等のレジスタに保持される。
【０１２２】
その後、ホスト機器５００によってメモリシステム１から起動プログラムが読み出される。すなわち、第２実施形態で説明したようにホスト機器５００が第１読み出しコマンドＣＭＤ＿ＲＤ１を発行し、引き続きアドレスＡＤＤを発行する。このアドレスＡＤＤは、ＮＡＮＤ型フラッシュメモリ１００のブロックＢＬＫ０及びこのブロックＢＬＫ０内のページＰＧ０を指定する。すると、メモリシステム１はビジー状態となり、特徴テーブルにおけるＯＩＰは“１”となる。
【０１２３】
メモリシステム１がビジー状態となると共に、コントローラ２００はＮＡＮＤ型フラッシュメモリ１００に対してコマンド“００ｈ”、アドレスＡＤＤ、及びコマンド“３０ｈ”を発行する。これによりＮＡＮＤ型フラッシュメモリ１００はビジー状態となる。なお、コントローラ２００の出力するアドレスＡＤＤは、ブロックＢＬＫ０を指定するアドレス“ＢＡ００００”、このブロックＢＬＫ０内のページＰＧ０及びＣＡ０である。
【０１２４】
すると、例えば制御回路４４０は、ステータスレジスタ４１０内のバッドブロック情報を参照し、ブロックＢＬＫ０がバッドブロックであるか否かを確認する（ステップＳ３１）。バッドブロックでなかった場合（ステップＳ３２、ＮＯ）、制御回路４４０は、ブロックＢＬＫ０からの読み出しシーケンスを続行し、ブロックＢＬＫ０からデータが読み出される（ステップＳ３３）。
【０１２５】
他方で、ブロックＢＬＫ０がバッドブロックであった場合（ステップＳ３２、ＹＥＳ）、ブロックＢＬＫ１がバッドブロックであるか否かを確認する（ステップＳ３４）。ブロックＢＬＫ１がバッドブロックでなかった場合（ステップＳ３４、ＮＯ）、制御回路４４０は、活性化させるブロックをブロックＢＬＫ０からＢＬＫ１に変更して、読み出しシーケンスを続行する。この結果、ブロックＢＬＫ１からデータが読み出される（ステップＳ３５）。
【０１２６】
ブロックＢＬＫ０及びＢＬＫ１の両方がバッドブロックであった場合（ステップＳ３２、ＹＥＳ、ステップＳ３４、ＹＥＳ）には、起動動作はフェイルで終了する。また、フェイルしたことを特徴テーブルに保存することで、ホスト機器５００がGet Featureコマンドにその情報を得ることができる。
【０１２７】
その後、ブロックＢＬＫ０またはＢＬＫ１から読み出されたデータがコントローラ２００に転送され、その後、第２実施形態で説明したようにして、データはホスト機器５００に転送される。
【０１２８】
３．３  第２の例について  
次に、第２の例につき、図２６を用いて説明する。図２６は、読み出し動作時におけるホスト機器５００、コントローラ２００、及びＮＡＮＤ型フラッシュメモリ１００の動作を示すフローチャートである。第２の例が第１の例と異なる点は、ブロックＢＬＫ０及びＢＬＫ１がバッドブロックであるか否かの判断をコントローラ２００が行うことである。以下では、第１の例と異なる点についてのみ説明する。
【０１２９】
図示するように、第１の例と同様にＮＡＮＤ型フラッシュメモリ１００は、ブロックＢＬＫ３からバッドブロック情報を読み出す（ステップＳ４０）。その後、コントローラ２００は、例えばステータスリードコマンドを発行して、ステータスレジスタ４１０等に保持されたバッドブロック情報を読み出し、これを例えばステータスレジスタ２８０等に保持させる。このステータスレジスタ２８０には、ＲＯＭフューズから読み出された先天性バッドブロック情報も保持されていても良い。このことは第１の例も同様である。
【０１３０】
その後、ホスト機器５００によってメモリシステム１から起動プログラムが読み出される。本例の場合、ホスト機器５００から第１読み出しコマンドＣＭＤ＿ＲＤ１及びアドレスＡＤＤを受信すると、コントローラ２００のシーケンサ２５０が、ステータスレジスタ２８０内のバッドブロック情報を参照する（ステップＳ４１）。これによりシーケンサ２５０は、ブロックＢＬＫ０がバッドブロックであるか否かを判断する。
【０１３１】
ブロックＢＬＫ０がバッドブロックでなかった場合（ステップＳ４２、ＮＯ）、コントローラ２００はＮＡＮＤ型フラッシュメモリ１００に対して読み出しコマンドと、ブロックＢＬＫ０、ページＰＧ０、及びカラムＣＡ０を指定するアドレスとを発行し、ＮＡＮＤ型フラッシュメモリ１００へ送信する。
【０１３２】
ブロックＢＬＫ０がバッドブロックであった場合（ステップＳ４２、ＹＥＳ）、シーケンサ２５０はブロックＢＬＫ１がバッドブロックであるか否かを判断する（ステップＳ４３）。
【０１３３】
ブロックＢＬＫ１がバッドブロックでなかった場合（ステップＳ４３、ＮＯ）、コントローラ２００はＮＡＮＤ型フラッシュメモリ１００に対して読み出しコマンドと、ブロックＢＬＫ１、ページＰＧ０、及びカラムＣＡ０を指定するアドレスとを発行し、ＮＡＮＤ型フラッシュメモリ１００へ送信する。
【０１３４】
そしてＮＡＮＤ型フラッシュメモリ１００は、受信した読み出しコマンドとアドレスに基づいて、ブロックＢＬＫ０またはＢＬＫ１からデータを読み出す（ステップＳ４４）。
【０１３５】
３．４  本実施形態に係る効果  
上記第１実施形態で説明した構成は、例えば本実施形態によっても実現出来る。すなわち、メモリセルアレイ１１０からバッドブロック情報を読み出し、この情報に基づいて、データが有効か無効かを判断出来る。そしてこの際、第１の例のように、ＮＡＮＤ型フラッシュメモリ１００内においてこの判断が行われても良いし、第２の例のようにコントローラ２００によって行われても良い。
【０１３６】
なお、上記第１及び第２の例では、ホスト機器５００から起動プログラムの読み出し命令を受信する前に、メモリシステム１内部においてバッドブロック情報が読み出される場合を例に説明した。しかし、例えばホスト機器５００からの起動プログラムの読み出し命令に応答してバッドブロック情報が読み出されても良い。また、可能な場合には、先天性バッドブロック情報だけではなく後天性バッドブロック情報もＲＯＭフューズ領域に保持されても良い。また、コントローラ２００が指定するメモリセルアレイのアドレスは、ページＰＧ０、カラムＣＡ０以外であっても良い。
【０１３７】
４．第４実施形態  
次に、第４実施形態に係るメモリシステムについて説明する。本実施形態は、上記第１乃至第３実施形態において、起動プログラムをブロックＢＬＫ０及びＢＬＫ１に書き込む方法に関するものである。以下では、第１乃至第３実施形態と異なる点についてのみ説明する。また、書き込み動作の詳細は、第１実施形態で説明した図１２乃至図１４の通りであるので、重複する説明は省略する。
【０１３８】
４．１  第１の例  
第１の例は、ブロックＢＬＫ０への書き込み及びブロックＢＬＫ１への書き込み動作の各々において、第１実施形態において図１２乃至図１４で説明したシーケンスを繰り返すものである。
【０１３９】
図２７は、起動プログラム書き込み時におけるホスト機器５００、コントローラ２００、及びＮＡＮＤ型フラッシュメモリ１００の動作を示すフローチャートである。
【０１４０】
図示するように、まずホスト機器５００が第１書き込みコマンドＣＭＤ＿ＷＲ１を発行し、引き続きアドレスＡＤＤを発行する。このアドレスＡＤＤは、ＮＡＮＤ型フラッシュメモリ１００のブロックＢＬＫ０及びブロックＢＬＫ０内のページＰＧ０を指定する。引き続き、ホスト機器５００は書き込みデータ（起動プログラム）をメモリシステム１へ送信し、更に第２書き込みコマンドＣＭＤ＿ＷＲ２を発行する。
【０１４１】
すると、メモリシステム１内では、コントローラ２００が書き込みコマンドを発行し、ブロックＢＬＫ０に起動プログラムが書き込まれる（ステップＳ５０）。そしてホスト機器５００はGet featureコマンドを発行し、特徴テーブル内におけるフラグＰＲＧ＿Ｆにより、ブロックＢＬＫ０への起動プログラムの書き込みの成功を確認する。このシーケンスをブロックＢＬＫ０内の各ページＰＧに対して繰り返すことでブロックＢＬＫ０への書き込みが完了する。
【０１４２】
引き続きホスト機器５００は、第１書き込みコマンドＣＭＤ＿ＷＲ１及びアドレスＡＤＤを発行する。このアドレスＡＤＤは、ブロックＢＬＫ１及びブロックＢＬＫ１内のページＰＧ０を指定する。引き続き、ホスト機器５００は書き込みデータ（起動プログラム）をメモリシステム１へ送信し、更に第２書き込みコマンドＣＭＤ＿ＷＲ２を発行する。
【０１４３】
すると、メモリシステム１内では、コントローラ２００が書き込みコマンドを発行し、ブロックＢＬＫ１に起動プログラムが書き込まれる（ステップＳ５１）。そしてホスト機器５００はGet featureコマンドを発行し、特徴テーブル内におけるフラグＰＲＧ＿Ｆにより、ブロックＢＬＫ１への起動プログラムの書き込みの成功を確認する。このシーケンスをブロックＢＬＫ１内の各ページＰＧに対して繰り返すことでブロックＢＬＫ１への書き込みが完了する。
【０１４４】
４．２  第２の例  
次に第２の例について、図２８を用いて説明する。本例は、上記第１の例において、コントローラ２００からブロックＢＬＫ０への書き込み命令を受信したＮＡＮＤ型フラッシュメモリ１００が自発的に、ブロックＢＬＫ０だけでなくブロックＢＬＫ１へも起動プログラムを書き込むものである。以下では第１の例と異なる点についてのみ説明する。
【０１４５】
図示するように、コントローラ２００からブロックＢＬＫ０への書き込みコマンドを受信したＮＡＮＤ型フラッシュメモリ１００では、制御回路４４０により起動プログラムがブロックＢＬＫ０に書き込まれる（ステップＳ５０）。引き続き制御回路４４０は、ブロックアドレスを“ＢＡ００００”からインクリメントして“ＢＡ０００１”を発行し、ブロックＢＬＫ０へ起動プログラムを書き込む（ステップＳ５１）。
【０１４６】
その後、ブロックＢＬＫ１に対する書き込み動作に関するステータス情報がコントローラ２００へ送信される。
【０１４７】
４．３  第３の例  
次に第３の例について、図２９を用いて説明する。本例は、上記第２の例において、ブロックＢＬＫ１に起動プログラムを書き込む際に、コントローラ２００がコマンドを発行するものである。以下では、第２の例と異なる点についてのみ説明する。
【０１４８】
図示するように、ステップＳ５０においてブロックＢＬＫ０に起動プログラムが書き込まれると、ＮＡＮＤ型フラッシュメモリ１００はレディ状態となる。これに応答してコントローラ２００は、ブロックＢＬＫ１に対する書き込みコマンドを発行する。このコマンドに応答して、ＮＡＮＤ型フラッシュメモリ１００では、ブロックＢＬＫ１に起動プログラムが書き込まれる。
【０１４９】
４．４  本実施形態に係る効果  
上記第１乃至第３実施形態で説明した起動プログラムは、本実施形態のような方法によりＮＡＮＤ型フラッシュメモリ１００に書き込むことが出来る。
【０１５０】
なお、上記第１乃至第３の例におけるコマンドシーケンスの一部は必要に応じて省略しても良いし、または新たなシーケンスを追加しても良い。
【０１５１】
例えば第２、第３の例であると、Get featureコマンドによってホスト機器５００が得られるフラグＰＧＭ＿Ｆは、ブロックＢＬＫ１に対する書き込みに関するものである。ブロックＢＬＫ０に関するフラグＰＧＭ＿Ｆが必要な場合には、別途、Get featureコマンドを発行しても良い。例えば第２の例であると、ブロックＢＬＫ０に対する書き込みが完了した後、ステータス情報がコントローラ２００に送信され、このステータス情報をGet featureコマンドにより読み出しても良い。また第３の例でも同様であり、ブロックＢＬＫ０に対する書き込みが完了してからブロックＢＬＫ１に対する書き込みが完了する間に、Get feature コマンドを発行すれば、ブロックＢＬＫ０に関するフラグＰＧＭ＿Ｆが得られる。あるいは、図１９の特徴テーブルにおいて、フラグＰＲＧ＿Ｆを２つ用意して、それぞれにブロックＢＬＫ０及びＢＬＫ１の書き込み結果を割り当てても良い。
【０１５２】
また、ブロックＢＬＫ０に関するフラグＰＲＧ＿Ｆが不要であれば、第３の例において、ブロックＢＬＫ０への書き込み後のステータスリードコマンドの発行を省略しても良い。また第３の例において、ブロックＢＬＫ１にはブロックＢＬＫ０と同じ起動プログラムが書き込まれる。従って、ブロックＢＬＫ０への書き込み完了後、ＮＡＮＤ型フラッシュメモリ１００内に起動プログラムが残っていれば、コントローラ２００からＮＡＮＤ型フラッシュメモリ１００へのデータの転送を省略しても良い。
【０１５３】
更に、第２、第３の例では、ホスト機器５００から１つのブロックＢＬＫ０を指定して書き込みコマンドを受信したにも関わらず、メモリシステム１は２つのブロックＢＬＫ０及びＢＬＫ１にデータを書き込んでいる。このような動作は、例えばコントローラ２００またはＮＡＮＤ型フラッシュメモリ１００が、受信したブロックアドレスに基づいて判断することが出来る。すなわち、ブロックアドレスとして“ＢＡ００００”を受信した際には、このアドレスに相当するブロックＢＬＫ０だけでなく、インクリメントしたブロックアドレス“ＢＡ０００１”に相当するブロックＢＬＫ１にもデータを書き込む、というシーケンスが用意されていれば良い。
【０１５４】
５．変形例等  
上記のように、本実施形態に係るメモリシステムは、ホスト機器からチップセレクト信号(/CS in 図4)を受信可能な第１ピン(Pin No.1 in 図4)と、ホスト機器へ第１信号(SO in 図4)を出力可能な第２ピン(Pin No.2 in 図4)と、ホスト機器から第２信号(SI in 図4)を受信可能な第３ピン(Pin No.5 in 図4)と、ホスト機器からクロック(SCK in 図4)を受信可能な第４ピン(Pin No.6 in 図4)と、アサートされたチップセレクト信号が受信された直後に第３ピンで受信された第２信号をコマンドとして認識するインターフェース回路(210,220 in 図6)と、データを保持可能なメモリセルを含み、ブロック単位でデータが消去されるメモリセルアレイ(100 in 図6)とを備える。メモリセルアレイは、第１ブロック(BLK0 in 図17)と第２ブロック(101 in 図17)とを含む。そしてインターフェース回路は、ホスト機器から第１ブロック(BLK0)に対する読み出し命令が発行された際に、第１ブロック(BLK0)内の第１データが無効であった場合(S13, NO in 図18)、第１ブロックに対する読み出し命令に応答して、第２ブロック(BLK1)から読み出された第２データをホスト機器に出力する(S15 in 図18)。
【０１５５】
以上のように、データを複数のブロックに多重化させることで、いずれかのブロックからデータが読み出すことが出来なくなった場合であっても、別のブロックから必要なデータを得ることが出来る。
【０１５６】
なお、実施形態は上記説明した形態に限られず、種々の変形が可能である。例えば、起動プログラムが記憶されるブロックは、ブロックＢＬＫ０とＢＬＫ１とに限定されず、任意のブロックＢＬＫを選択することが出来る。但し、起動時に最初にアクセスされるブロックは、先頭ブロックアドレスが割り当てられたブロックＢＬＫ０であることが、ホスト機器５００の保持する起動シーケンスを簡略にする点で好ましい。つまり、起動プログラムを保持するブロックとして、ブロックＢＬＫ０をメインブロックとし、その他のいずれかのブロックをバックアップ用ブロックとして扱うことが好ましい。しかし、ブロックＢＬＫ０以外のブロックをメインブロックとして用いても良い。
【０１５７】
また、起動プログラムを読み出すためにホスト機器が指定するブロックのアドレスと実際に起動プログラムが格納されるブロックのアドレスとは異なっても良い。上述の通り、ホスト機器が起動時にアクセスするブロックは、先頭ブロックアドレスが割り当てられたブロックＢＬＫ０であることが好ましい。例えば、ブロックＢＬＫ１をメインブロックとして、ブロックＢＬＫ０に対してホスト機器から読み出しコマンドが発行された際に、ブロックＢＬＫ１から起動プログラムを読み出すように構成しても良い。
【０１５８】
更に、メインブロックとバックアップ用ブロックとに割り当てられるブロックは、動的に変更されても良い。例えば、最初はブロックＢＬＫ０にメインブロックに割り当て、ブロックＢＬＫ１をバックアップ用ブロックに割り当てて、ブロックＢＬＫ０がバッドブロックとなった際に、ブロックＢＬＫ１をメインブロックに割り当て、ブロックＢＬＫ１に格納された起動プログラムをメモリシステムが自発的にブロックＢＬＫ０及びブロックＢＬＫ１以外の他のブロックにコピーし、当該他のブロックをバックアップ用ブロックに割り当てても良い。この場合、メインブロックへの割り当てを変更しても、起動プログラムを読み出すためにホスト機器が指定するブロックのアドレスは変更しなくても良い。上述の例で言えば、ブロックＢＬＫ１をメインブロックに割り当てた後も、起動プログラムを読み出すためにホスト機器が指定するブロックのアドレスはブロックＢＬＫ０のままでも良い。
【０１５９】
更に、メインブロックＢＬＫ０へ起動プログラムを書き込む際には、ホスト機器５００は通常のコマンドとは異なるコマンドを発行しても良い。すなわち、図３０に示すようにホスト機器は、メインブロックＢＬＫ０に対して起動プログラムを書き込む際（ステップＳ６０、ＹＥＳ、ステップＳ６１、ＹＥＳ）には、起動プログラム書き込みコマンドＣＭＤ＿ＷＲ３を発行し（ステップＳ６２）、それ以外の場合には通常の書き込みコマンドＣＭＤ＿ＷＲ１を発行する（ステップＳ６３）。そして、コマンドＣＭＤ＿ＷＲ３を受信した際に、メモリシステム１は図２８及び図２９で説明した動作を実行する。
【０１６０】
更に、メインブロックとバックアップ用ブロックとは、ブロックアドレスが連続していることが望ましい。なぜなら、この場合にはブロックアドレスをインクリメントするだけで、メモリシステム１はバックアップ用ブロックを選択出来るからである。しかし、場合によってはブロックアドレスの連続していないブロックをバックアップ用ブロックとして用いたいと場合が考えられる。一例として、バックアップ用ブロックとしてブロックＢＬＫ０とＢＬＫ１０２３とのいずれかをホスト機器５００が選択可能構成について説明する。この場合、例えばコントローラ２００のステータスレジスタ２８０や、ＮＡＮＤ型フラッシュメモリ１００のステータスレジスタ４１０等にフラグが設けられる。そして、このフラグがセットされていない場合（フラグ＝“０”）には、ブロックＢＬＫ１がバックアップ用ブロックとして使用され、フラグがセットされている場合（フラグ＝“１”）には、ブロック１０２３がバックアップ用ブロックとして使用されるようにしても良い。この際、フラグのセットにはSet featureコマンドを使用出来る。もちろん、バックアップブロックだけでなく、メインブロック用にもフラグを用意し、レジスタ内においてこのフラグを設定することで、メインブロックを任意に選択しても良い。
【０１６１】
図３１は、Set featureコマンド発行時におけるＳＰＩバス上の各種信号のタイムチャートである。図示するようにホスト機器５００は、信号／ＣＳをアサートすると共に、Set featureコマンドＣＭＤ＿ＳＦを信号ＳＩとして発行し、更にクロックＳＣＫを発行する。
【０１６２】
引き続きホスト機器５００は、例えば８クロックサイクルにわたってアドレスＡＤＤをコントローラ２００へ送信する。このアドレスＡＤＤは、特徴テーブル内のアドレスであり、特徴テーブル内において、バックアップ用ブロックをブロックＢＬＫ１とするかＢＬＫ１０２３とするかを選択するビットを含むエントリを指定する。引き続きホスト機器５００は、特徴テーブルの上記エントリに保持させる８ビットデータＳＴ＿ＤＡＴを送信する。このデータＳＴ＿ＤＡＴにより、特徴テーブル内のデータがホスト機器５００によって指定され、更にこのデータに基づいて、各レジスタに上記フラグがセットされる。
【０１６３】
以上のように、メインブロックとバックアップ用ブロックの組み合わせは適宜選択出来る。すなわち、両方をホスト機器５００（ユーザ）が決定しても良いし、またはメインブロックをメモリシステム製造業者が決定し、バックアップ用ブロックをユーザが決めても良い。あるいは、両方をメモリシステム製造業者が決定しても良い。
【０１６４】
更に、図２７で説明したシーケンスによって起動プログラムを書き込む場合には、メインブロックＢＬＫ０とバックアップ用ブロックＢＬＫ１の両方のブロックアドレスがホスト機器５００に対して公開される。つまり、ブロックＢＬＫ０及びＢＬＫ１は、特段の制限無くホスト機器５００からアクセス可能なメモリ領域である。
【０１６５】
これに対して図２８及び図２９で説明したシーケンスによって起動プログラムを書き込む場合には、例えばバックアップ用ブロックＢＬＫ１は、ホスト機器５００からは見えない領域としても良い。つまり、ブロックＢＬＫ１は、通常の方法ではホスト機器５００から直接アクセスすることが出来ない領域とすることが出来る。
【０１６６】
更に、ＮＡＮＤ型フラッシュメモリ１００は、２つのプレーンＰＮ０及びＰＮ１を有していても良い。プレーンとは、例えばメモリセルアレイ１１０、ロウデコーダ１２０、センスアンプ１３０、データレジスタ１４０、及びカラムデコーダ１５０の集合であり、制御回路４４０により、２つのプレーンは独立して、また平行して動作することが可能である。そして、メインブロックはプレーンＰＮ０内のブロックであり、バックアップ用ブロックはプレーンＰＮ１内のブロックとしても良い。この場合、メインブロックに対する書き込みとバックアップ用ブロックに対して起動プログラムを平行して書き込むことが出来、書き込み時間を短縮出来る。
【０１６７】
更に、例えば上記実施形態では、ＮＡＮＤ型フラッシュメモリ１００とコントローラ２００とが別々の半導体チップである場合を例に説明した。しかし、これらはワンチップで形成されても良い。この場合のメモリシステム１のブロック図を図３２に示す。
【０１６８】
図示するように、ブロック構成は、図７と同様であるが、ホスト機器５００からの信号ＳＣＫ、／ＣＳ、／ＨＯＬＤ、及び／ＷＰがロジック回路４７０に入力され、信号ＳＩ及びＳＯは入出力制御回路４６０を介して入出力される。そして、レジスタ４１０〜４３０、制御回路４４０及び４６０、並びにロジック回路４７０がコントローラ２００の機能を果たす。すなわち、制御回路４４０がシーケンサ２５０及びホストインターフェース回路２２０としての機能を果たし、信号／ＣＳによりホスト機器５００からの命令を判別する。入出力制御回路４６０及びロジック回路４７０は、ホスト入出力回路２１０として機能する。レジスタ４１０及び４２０はレジスタ２８０及び２９０として機能し、特徴テーブルは、例えばステータスレジスタ４１０等に保持される。
【０１６９】
また、上記実施形態で説明したフローチャートにおける各処理は、可能な限りその順番を入れ替えることが出来る。更に、上記実施形態で説明したタイミングチャートも一例に過ぎず、信号ＳＩを入力する際に必要なクロック数や、信号ＳＯを出力する際に必要なクロック数も、上記実施形態に限定されるものでは無い。また、コマンドによっては、直後にダミービットが入力される例を示しているが、この場合に限定されるものでは無い。これは特徴テーブルについても同様であり、上記実施形態で説明した情報を保持出来るものであれば、上記実施形態で説明した形式に限定されない。
【０１７０】
更に、上記第１乃至第４実施形態は、任意に組み合わせて実施することが出来、または可能な限り独立して実施することが出来る。例えば、第２実施形態で説明した第１の例と第２の例を選択して実行可能な構成であっても良いし、第３実施形態についても同様である。またホスト機器５００は、第４実施形態で説明した第１乃至第３の例の全てを実行可能であっても良い。なお、第４実施形態におけるホスト機器５００は、第１乃至第３実施形態におけるホスト機器５００とは異なる機器であっても良い。第１乃至第３実施形態では、メモリシステム１とホスト機器５００とが、あるアプリケーションを構成している。このアプリケーションの例としては、例えばテレビやセットトップボックス等である。この点、第４実施形態におけるホスト機器５００は、アプリケーションを出荷するために起動プログラムをメモリシステム１に書き込むための製造装置の一種であっても良い。
【０１７１】
上記のように、第１乃至第４実施形態で説明したメモリシステムは、例えばテレビやセットトップボックス等のアプリケーションを起動するために用いることが出来る。図３３はそのようなシステムの例を示す。本例であると、メモリシステム１の他に、ＮＯＲ型フラッシュメモリ２が用意され、メモリシステム１及びＮＯＲ型フラッシュメモリ２は、共に共通にＳＰＩインターフェースによって接続される。本例では、メモリシステム１を制御するためのコマンド（コマンドＣＭＤ＿ＲＤ１、ＣＭＤ＿ＲＤ２、ＣＭＤ＿ＧＦ、ＣＭＤ＿ＳＦ等）がＮＯＲ型フラッシュメモリ２に保持されている。そして、ホスト機器５００起動時に、ホスト機器５００内のＲＯＭの保持するシーケンスによって、ホスト機器５００はＮＯＲ型フラッシュメモリ２から上記コマンド情報を読み出す。そして、このコマンド情報を用いて、ホスト機器５００はメモリシステム１から起動プログラムを読み出し、これを実行してアプリケーションが起動される。
【０１７２】
あるいは、ホスト機器５００のＲＯＭ内にメモリシステム１のコマンド情報が保持されていれば、図３４に示すようにＮＯＲ型フラッシュメモリ２が廃されても良い。
【０１７３】
ＮＡＮＤ型フラッシュメモリは、ＮＯＲ型フラッシュメモリに比べて、より安価に高集積化が可能である。従って、起動プログラムを含めた種々のソフトウェアを保持させるためにはＮＡＮＤ型フラッシュメモリを用いることが好ましい。また、ＳＰＩ等に準拠したシリアルインターフェースを備えたＮＡＮＤ型フラッシュメモリを用いれば、ＮＯＲ型フラッシュメモリを代替することも可能である。更に、ＮＡＮＤ型フラッシュメモリであると、ＮＯＲ型フラッシュメモリと異なり、データはブロック単位で消去され、このブロック全体がバッドブロック化する場合がある。しかし、このような場合が生じても、上記実施形態を適用することで、システムの安定性を格段に向上出来る。
【０１７４】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【０１７５】
１…メモリシステム、１００…ＮＡＮＤ型フラッシュメモリ、２００…コントローラ、２１０…ホスト入出力回路、２２０…ホストインターフェース回路、２３０…ＮＡＮＤインターフェース回路、２４０…ＮＡＮＤ入出力回路、２５０…シーケンサ、２６０、２７０…データバッファ、２８０，４１０…ステータスレジスタ、２９０，４２０…アドレスレジスタ、４００…ＥＣＣ回路、３００…リードフレーム、３４０…ボンディングワイヤ、３５０…封止樹脂、４３０…コマンドレジスタ、４４０…制御回路、４５０…電圧発生回路、４６０…入出力制御回路、４７０…ロジック回路、４８０…データレジスタ、５００…ホスト機器
【図１】
2017045405.tif 000003
【図２】
2017045405.tif 000004
【図３】
2017045405.tif 000005
【図４】
2017045405.tif 000006
【図５】
2017045405.tif 000007
【図６】
2017045405.tif 000008
【図７】
2017045405.tif 000009
【図８】
2017045405.tif 000010
【図９】
2017045405.tif 000011
【図１０】
2017045405.tif 000012
【図１１】
2017045405.tif 000013
【図１２】
2017045405.tif 000014
【図１３】
2017045405.tif 000015
【図１４】
2017045405.tif 000016
【図１５】
2017045405.tif 000017
【図１６】
2017045405.tif 000018
【図１７】
2017045405.tif 000019
【図１８】
2017045405.tif 000020
【図１９】
2017045405.tif 000021
【図２０】
2017045405.tif 000022
【図２１】
2017045405.tif 000023
【図２２】
2017045405.tif 000024
【図２３】
2017045405.tif 000025
【図２４】
2017045405.tif 000026
【図２５】
2017045405.tif 000027
【図２６】
2017045405.tif 000028
【図２７】
2017045405.tif 000029
【図２８】
2017045405.tif 000030
【図２９】
2017045405.tif 000031
【図３０】
2017045405.tif 000032
【図３１】
2017045405.tif 000033
【図３２】
2017045405.tif 000034
【図３３】
2017045405.tif 000035
【図３４】
2017045405.tif 000036