(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-09-05
(45)【発行日】2024-09-13
(54)【発明の名称】半導体装置およびウエアレベリング方法
(51)【国際特許分類】
G06F 12/00 20060101AFI20240906BHJP
G06F 11/10 20060101ALI20240906BHJP
【FI】
G06F12/00 550Z
G06F11/10 668
G06F12/00 597U
(21)【出願番号】P 2023014436
(22)【出願日】2023-02-02
【審査請求日】2023-02-02
(73)【特許権者】
【識別番号】511062254
【氏名又は名称】ウィンボンド エレクトロニクス コーポレーション
(74)【代理人】
【識別番号】100098497
【氏名又は名称】片寄 恭三
(72)【発明者】
【氏名】矢野 勝
(72)【発明者】
【氏名】小野 真人
(72)【発明者】
【氏名】神永 雄大
【審査官】北村 学
(56)【参考文献】
【文献】特開2002-108722(JP,A)
【文献】米国特許出願公開第2010/0162081(US,A1)
【文献】米国特許出願公開第2014/0143632(US,A1)
【文献】米国特許出願公開第2014/0310569(US,A1)
【文献】米国特許出願公開第2016/0078966(US,A1)
【文献】米国特許出願公開第2016/0239383(US,A1)
【文献】国際公開第2016/203631(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/00
G06F 11/10
(57)【特許請求の範囲】
【請求項1】
メモリセルアレイを含む半導体装置が実行するウエアレベリング方法であって、当該ウエアレベリング方法は、
ビット訂正が生じたか否かを示す第1のフラグと、特定のデータを格納しているか否かを示す第2のフラグとを、前記メモリセルアレイの複数のセクタの各々に格納するための領域を設定し、
第2のフラグがセットされたセクタから前記特定のデータの読出し中にビット訂正が生じた場合、当該セクタの第1のフラグをセットし、読み出した特定のデータを第1のフラグがセットされていない別のセクタに書込み、かつ当該別のセクタの第2のフラグをセットすることを含む、ウエアレベリング方法。
【請求項2】
メモリセルアレイを含む半導体装置が実行するウエアレベリング方法であって、当該ウエアレベリング方法は、
ビット訂正が生じたか否かを示す第1のフラグと、特定のデータを格納しているか否かを示す第2のフラグとを、前記メモリセルアレイの複数のセクタの各々に格納するための領域を設定し、
第2のフラグがセットされたセクタの特定のデータをアップデートする場合、アップデート用の特定のデータを第1のフラグがセットされていない別のセクタに書込み、かつ当該別のセクタの第2のフラグをセットすることを含む、ウエアレベリング方法。
【請求項3】
前記別のセクタは、第2のフラグがセットされていないセクタである、請求項1または2に記載のウエアレベリング方法。
【請求項4】
前記別のセクタは、ビット訂正が生じたセクタまたはアップデート対象となる特定のデータが保持されたセクタと同一カラム上のセクタである、請求項1または2に記載のウエアレベリング方法。
【請求項5】
予め決められたアルゴリズムに従い第1のフラグがセットされていない複数のセクタの中から1つのセクタを前記別のセクタとして選択する、請求項1または2に記載のウエアレベリング方法。
【請求項6】
前記別のセクタは、ユーザーによってデータの書込みが行われていないセクタである、請求項1または2に記載のウエアレベリング方法。
【請求項7】
ビット訂正が生じたセクタまたはアップデート対象となる特定のデータが保持されたセクタと同一カラム上の他の全てのセクタの第1のフラグがセットされたとき、予め決められたアルゴリズムに従い選択されたセクタの第1のフラグをリセットする、請求項1または2に記載のウエアレベリング方法。
【請求項8】
前記予め決められたアルゴリズムは、前記他の全てのセクタの中で最初に第1のフラグがセットされたセクタを選択する、請求項7に記載のウエアレベリング方法。
【請求項9】
前記特定のデータは、ブートデータである、請求項1または2に記載のウエアレベリング方法。
【請求項10】
複数のセクタの各々はさらに第3のフラグを含み、
リセット状態の第3のフラグは、ビット訂正の頻度が一定以上になった
セクタに設けられた該第3のフラグがセットされる、あるいはホストシステムからコマンドを受け取ったときにセットされ、第3のフラグがセットされたセクタは、前記別のセクタ
として選択される対象から除外される、請求項1または2に記載のウエアレベリング方法。
【請求項11】
前記第3のフラグ
を用いたセクタ選択アルゴリズムは、レジスタ設定により選択的に有効化または無効化される、請求項10に記載のウエアレベリング方法。
【請求項12】
ビット訂正が生じたか否かを示す第1のフラグと、特定のデータを格納しているか否かを示す第2のフラグとを、複数のセクタの各々に格納するメモリセルアレイと、
第2のフラグがセットされたセクタから前記特定のデータの読出し中にビット訂正が生じた場合、当該セクタの第1のフラグをセットし、読み出した特定のデータを第1のフラグがセットされていない別のセクタに書込み、かつ当該別のセクタの第2のフラグをセットする、メモリ管理手段と、
を有する半導体装置。
【請求項13】
ビット訂正が生じたか否かを示す第1のフラグと、特定のデータを格納しているか否かを示す第2のフラグとを、複数のセクタの各々に格納するメモリセルアレイと、
第2のフラグがセットされたセクタの前記特定のデータをアップデートする場合、アップデート用の特定のデータを第1のフラグがセットされていない別のセクタに書込み、かつ当該別のセクタの第2のフラグをセットする、メモリ管理手段と、
を有する半導体装置。
【請求項14】
前記メモリ管理手段は、前記別のセクタとして、第2のフラグがセットされていないセクタを選択する、請求項12または13に記載の半導体装置。
【請求項15】
前記メモリ管理手段は、前記別のセクタとして、ビット訂正が生じたセクタと同一カラム上のセクタを選択する、請求項12または13に記載の半導体装置。
【請求項16】
前記メモリ管理手段は、予め決められたアルゴリズムに従い第1のフラグがセットされていない複数のセクタの中から1つのセクタを前記別のセクタとして選択する、請求項12または13に記載の半導体装置。
【請求項17】
前記メモリ管理手段は、ビット訂正が生じたセクタまたはアップデート対象となる特定のデータが保持されたセクタと同一カラム上の他の全てのセクタの第1のフラグがセットされたとき、予め決められたアルゴリズムに従い選択されたセクタの第1のフラグをリセットする、請求項12または13に記載の半導体装置。
【請求項18】
前記予め決められたアルゴリズムは、前記他の全てのセクタの中で最初に第1のフラグがセットされたセクタを選択する、請求項17に記載の半導体装置。
【請求項19】
複数のセクタの各々はさらに第3のフラグを含み、
前記メモリ管理手段は、ビット訂正の頻度が一定以上になったセクタに設けられた
、リセット状態の前記第3のフラグをセットし、あるいはホストシステムからコマンドを受け取ったときに前記リセット状態の前記第3のフラグをセットするように構成され、第3のフラグがセットされたセクタを前記別のセクタ
として選択される対象から除外する、請求項12または13に記載の半導体装置。
【請求項20】
前記メモリ管理手段は、レジスタ設定により前記第3のフラグ
を用いたセクタ選択アルゴリズムを選択的に有効化または無効化する、請求項19に記載の半導体装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、NOR型フラッシュメモリやNAND型フラッシュメモリ等の半導体記憶装置に関し、特に、メモリセルアレイのウエアレベリングに関する。
【背景技術】
【0002】
NAND型/NOR型のフラッシュメモリにおいて、プログラム/消去のサイクルが増加すると、Gm(トランスコンダクタンス)が劣化し、最終的にエンデュランス特性(データの書き換え可能な回数)やデータ保持特性を低下させてしまう。この1つの対策として、メモリセルの書き換え回数を均等化し、メモリセルの長寿命化を図るウエアレベリングがある。例えば、ホストシステムは、特定のブロックまたはセクタの使用量を監視し、特定のブロックまたはセクタへのプログラム/消去が集中しないように、使用するブロックまたはセクタを動的に調整したり、あるいは、それぞれのブロックまたはセクタへのアクセス回数をカウントし、アクセス回数が均等になるように使用するブロックまたはセクタを選択する(例えば、特許文献1、2)。
【先行技術文献】
【特許文献】
【0003】
【文献】特表2014-524609号
【文献】特表2017-538206号
【発明の概要】
【発明が解決しようとする課題】
【0004】
NOR型/NAND型フラッシュメモリにおける従来のウエアレベリングは、ホストシステムまたはフラッシュメモリ内のコントローラがカウンタ等を用いてブロックやセクタのアクセス回数をカウントし、そのカウント結果に基づき書き換え回数の均等化を図っているが、こうした方法は、カウンタを搭載しなければならず、構成が煩雑となる。
【0005】
また、アクセス回数の均等化を図ったとしても、実際には、アクセス回数からメモリセルの劣化の状態は分からず、アクセス回数が少ないブロックやセクタであっても、メモリセルに劣化が生じていることもあり、そのようなブロックまたはセクタの使用は、読出し時やプログラム時にデータのエラーを生じさせる可能性がある。特に、システム稼働用のブートデータの読出しでは、エラーの発生を極力避ける必要がある。それ故、従来のアクセス回数によるブロックまたはセクタの監視に代わるウエアレベリング方法が望まれる
【0006】
本発明は、このような従来の課題を解決するものであり、メモリセルアレイに格納されるデータの信頼性の向上を図る半導体装置およびウエアレベリング方法を提供することを目的とする。
【課題を解決するための手段】
【0007】
本発明に係るウエアレベリング方法は、メモリセルアレイを含む半導体装置のものであって、ビット訂正が生じたか否かを示す第1のフラグと、特定のデータを格納しているか否かを示す第2のフラグとを、前記メモリセルアレイの複数のセクタの各々に格納するための領域を設定し、第2のフラグがセットされたセクタから前記特定のデータの読出し中にビット訂正が生じた場合、当該セクタの第1のフラグをセットし、読み出した特定のデータを第1のフラグがセットされていない別のセクタに書込み、かつ当該別のセクタの第2のフラグをセットする。
【0008】
本発明に係るウエアレベリング方法は、メモリセルアレイを含む半導体装置のものであって、ビット訂正が生じたか否かを示す第1のフラグと、特定のデータを格納しているか否かを示す第2のフラグとを、前記メモリセルアレイの複数のセクタの各々に格納するための領域を設定し、第2のフラグがセットされたセクタの特定のデータをアップデートする場合、アップデート用の特定のデータを第1のフラグがセットされていない別のセクタに書込み、かつ当該別のセクタの第2のフラグをセットする。
【0009】
ある態様では、前記別のセクタは、第2のフラグがセットされていないセクタである。ある態様では、前記別のセクタは、ビット訂正が生じたセクタと同一カラム上のセクタである。ある態様では、予め決められたアルゴリズムに従い第1のフラグがセットされていない複数のセクタの中から1つのセクタを前記他のセクタとして選択する。ある態様では、前記別のセクタは、ユーザーによってデータの書込みが行われていないセクタである。ある態様では、同一カラム上の他の全てのセクタの第1のフラグがセットされたとき、予め決められたアルゴリズムに従い選択されたセクタの第1のフラグをリセットする。ある態様では、前記予め決められたアルゴリズムは、前記他の全てのセクタの中で最初に第1のフラグがセットされたセクタである。ある態様では、前記特定のデータは、ブートデータである。ある態様では、複数のセクタの各々はさらに、第1のアルゴリズムまたは第2のアルゴリズムを選択するための第3のフラグを含み、第1のアルゴリズムは、ビット訂正の頻度が高いセクタの中から前記別のセクタが選択されることを除外し、第2のアルゴリズムは、ビット訂正の頻度の低いセクタの中から前記別のセクタの選択を可能にし、第3のフラグがセットまたはリセットのとき第1のアルゴリズムが選択され、第3のフラグがリセットまたはセットのとき第2のアルゴリズムが選択される。ある態様では、第1のアルゴリズムおよび第2のアルゴリズムは、レジスタ設定により選択的に有効化または無効化される。
【0010】
本発明に係る半導体装置は、ビット訂正が生じたか否かを示す第1のフラグと、特定のデータを格納しているか否かを示す第2のフラグとを、複数のセクタの各々に格納するメモリセルアレイと、第2のフラグがセットされたセクタから前記特定のデータの読出し中にビット訂正が生じた場合、当該セクタの第1のフラグをセットし、読み出した特定のデータを第1のフラグがセットされていない別のセクタに書込み、かつ当該別のセクタの第2のフラグをセットする、メモリ管理手段と、を有する。
【0011】
本発明に係る半導体装置は、ビット訂正が生じたか否かを示す第1のフラグと、特定のデータを格納しているか否かを示す第2のフラグとを、複数のセクタの各々に格納するメモリセルアレイと、第2のフラグがセットされたセクタの前記特定のデータをアップデートする場合、アップデート用の特定のデータを第1のフラグがセットされていない別のセクタに書込み、かつ当該別のセクタの第2のフラグをセットする、メモリ管理手段とを有する。
【0012】
ある態様では、前記メモリ管理手段は、前記別のセクタとして、第2のフラグがセットされていないセクタを選択する。ある態様では、前記メモリ管理手段は、前記別のセクタとして、ビット訂正が生じたセクタと同一カラム上のセクタを選択する。ある態様では、前記メモリ管理手段は、予め決められたアルゴリズムに従い第1のフラグがセットされていない複数のセクタの中から1つのセクタを前記他のセクタとして選択する。ある態様では、前記メモリ管理手段は、前記別のセクタとして、ユーザーによってデータの書込みが行われていないセクタを選択する。ある態様では、前記メモリ管理手段は、同一カラム上の他の全てのセクタの第1のフラグがセットされたとき、予め決められたアルゴリズムに従い選択されたセクタの第1のフラグをリセットする。ある態様では、前記予め決められたアルゴリズムは、前記他の全てのセクタの中で最初に第1のフラグがセットされたセクタである。ある態様では、複数のセクタの各々はさらに、第1のアルゴリズムまたは第2のアルゴリズムを選択するための第3のフラグを含み、第1のアルゴリズムは、ビット訂正の頻度が高いセクタの中から前記別のセクタが選択されることを除外し、第2のアルゴリズムは、ビット訂正の頻度の低いセクタの中から前記別のセクタの選択を可能にし、
前記メモリ管理手段は、第3のフラグがセットまたはリセットのとき第1のアルゴリズムを選択し、第3のフラグがリセットまたはセットのとき第2のアルゴリズムを選択する。ある態様では、前記メモリ管理手段は、レジスタ設定により第1のアルゴリズムおよび第2のアルゴリズムを選択的に有効化または無効化する。ある態様では、前記メモリセルアレイは、NAND型またはNOR型フラッシュメモリのメモリセルアレイである。
【発明の効果】
【0013】
本発明によれば、特定のデータの読出し中にビット訂正が生じた場合あるいは特定のデータのアップデートする場合、当該特定のデータを第1のフラグがセットされていない他のセクタに移動させ、特定のデータが特定の領域に格納されないようにしたので、特定のデータのエラーの発生を抑制し、特定のデータの信頼性を向上させることができる。
【図面の簡単な説明】
【0014】
【
図1】本発明の実施例に係るフラッシュメモリの構成を示すブロック図である。
【
図2】本発明の第1の実施例に係るセクタとECCフラグ/ブートフラグとの関係を示す図である。
【
図3】本発明の第1の実施例に係るブートデータをプログラムするときの動作フローである。
【
図4】本発明の第1の実施例に係るブートデータを移動させるときの動作フローである。
【
図5】本発明の第1の実施例に係るブートデータを移動させるときの他の動作フローである。
【
図6】本発明の第1の実施例に係るウエアレベリングの一例を示す図である。
【
図7】本発明の第1の実施例に係るウエアレベリングの一例を示す図である。
【
図8】本発明の第1の実施例に係るブートデータを移動させるときの他の動作フローを示す図である。
【
図9】本発明の第1の実施例に係るブートデータを移動させるときの他の動作フローである。
【
図10】本発明の第1の実施例に係るブートデータを移動させるときの他の動作フローである。
【
図11】本発明の第2の実施例に係るECCフラグ/ブートフラグ/EXフラグをセクタに用いる例を説明する図である。
【
図12】本発明の第2の実施例による読出し動作と書込み動作のフローを示す図である。
【
図13A】本発明の第2の実施例によるセクタの選択動作を示すフローである。
【
図13B】本発明の第2の実施例によるセクタの選択動作を示すフローである。
【発明を実施するための形態】
【0015】
本発明に係る半導体装置は、例えば、NAND型/NOR型フラッシュメモリ、あるいはこのようなフラッシュメモリを埋め込むマイクロプロセッサ、マイクロコントローラ、ロジック、ASIC、画像や音声を処理するプロセッサ、無線信号等の信号を処理するプロセッサなどである。
【0016】
好ましい態様では、本発明に係るフラッシュメモリは、ウエアレベリングによりメモリセルアレイを管理することでフラッシュメモリの長寿命化を図るとともに、起動時にメモリセルアレイから読み出されるブートデータの格納位置を最適化することで、ブートデータのエラー発生を極力なくし、フラッシュメモリの信頼性を向上させる。
【実施例】
【0017】
次に、本発明の実施例について図面を参照して詳細に説明する。
図1は、本発明の実施例に係るフラッシュメモリの構成を示すブロック図である。本実施例のフラッシュメモリ100は、NOR型またはNAND型のいずれであってもよいが、以下の説明では、NOR型フラッシュメモリを例に説明する。
【0018】
フラッシュメモリ100は、複数のメモリセルが形成されたメモリセルアレイ110と、クロック信号ExCLKに同期して読出しデータを外部に出力したり、外部から入力されるデータを取り込む入出力回路120と、プログラムすべきデータの符号生成や読み出されたデータの誤り検出・訂正を行うECC回路130と、入出力回路120を介してアドレスデータを受け取るアドレスレジスタ140と、入出力回路120を介して受け取ったコマンドデータや端子に印加された制御信号に基づき各部を制御するコントローラ150と、アドレスレジスタ140から行アドレス情報Axを受け取り、行アドレス情報Axをデコードし、デコード結果に基づきワード線の選択やセクタの選択等を行う行選択回路160と、行選択回路160によって選択されたメモリセルから読み出されたデータをセンスしたり、選択されたメモリセルにプログラムすべきデータを書込むセンス/書込み回路170と、アドレスレジスタ140から列アドレス情報Ayを受け取り、列アドレス情報Ayをデコードし、当該デコード結果に基づきビット線/ソース線の選択等を行う列選択回路180と、データの読出し、プログラムおよび消去等のために必要な種々の電圧(プログラム電圧Vpgm、読出し電圧Vread、消去電圧Versなど)を生成する内部電圧発生回路190とを含んで構成される。
【0019】
メモリセルは、例えば、電荷を蓄積する電荷蓄積層(例えば、酸化膜-窒化膜-酸化膜(ONO))を含み、その上にポリシリコンまたは金属等の導電性のゲートを含み、ゲートがワード線に接続される。メモリセルアレイは、シリコン等の基板表面に形成される2次元構造であってもよいし、基板表面から垂直方向に形成される3次元構造であってもよい。また、メモリセルは、2値データを記憶するSLCであっても良いし、多値データを記憶するMLCであってもよい。
【0020】
メモリセルの読出しが行われるとき、行選択回路160によって選択ワード線に或る正の電圧が印加され、選択ビット線/選択ソース線との間に流れる電流または電圧がセンス/書込み回路170によっててセンスされる。メモリセルへのプログラム(書込み)が行われるとき、行選択回路160によって選択ワード線にプログラム電圧が印加され、センス/書込み回路170によって選択ビット線にプログラムすべきデータに応じた電圧が印加され、選択ビット線から選択ソース線に流れるホットエレクトロンが電荷蓄積層に蓄積される。但し、書込み方法は、これ以外であってもよく、FNトンネリングにより電荷を電荷蓄積層にトラップさせてもよい。メモリセルの消去は、選択ワード線に或る電圧が印加され、例えば、ホットホールを電荷蓄積層に注入したり、あるいは、基板に消去電圧と印加して電荷蓄積層に蓄積された電荷をFNトンネリングにより排出させる。メモリセルの消去は、複数のメモリセルを含むセクタ単位で行われるが、メモリセル単位で行うことも可能である。例えば、メモリセルアレイは256Mb、セクタサイズは4Kバイトである。
【0021】
本発明の第1の実施例のフラッシュメモリにおいて1つの特徴的な点は、メモリセルアレイ110の各セクタは、ウエアレベリングのアルゴリズムに使用される少なくとも2ビットのフラグを格納する領域をそれぞれ備えている。1つは、ブートデータの読出し中にビット訂正が生じたか否かを示すECCフラグであり、もう1つは、セクタがブートデータを格納しているか否かを示すブートフラグである。例えば、ECCフラグのセットは、当該セクタから読み出されたブートデータがECC回路130によってビット訂正が行われたことを示し、ブートフラグのセットは、当該セクタにブートデータが格納されていることを示す。各セクタに割り当てられた2ビットのフラグを格納するメモリ領域は、コントローラ150によってのみアクセスすることが可能であり、ユーザーによってアクセスがすることができない。
【0022】
ブートデータ(ブートコード)は、システム稼働に必要な重要なプログラム等を含むデータ、フラッシュメモリの動作を保証するためのコンフィギュレーションデータやトリミングデータ(例えば、例えば、プログラムや消去等の電圧の設定)などを含むものであり、システム稼働時、あるいはフラッシュメモリの電源投下時にメモリセルアレイから読み出され、外部のホストシステムに出力されたり、フラッシュメモリ内のコントローラ150に提供される。このようなブートデータは、消失したり、一部が書き換えられてしまうと、システム動作やフラッシュメモリ動作に障害を及ぼしてしまう。それ故、ブートデータは、信頼性の高いデータとして保護されるべきデータである。
【0023】
ある態様では、メモリセルアレイ110は、
図2に示すように、m行×n列に配置された複数のセクタを含み、1つのセクタは、P行×Q列の複数のメモリセルから構成される。1つのセクタは、ユーザーによってアクセスすることができるメイン領域と、ユーザーによってアクセスすることができないスペア領域とを含む。メイン領域は、ブートデータや、ユーザーが使用するデータを格納し、スペア領域は、メイン領域に書き込まれたデータの属性情報などを格納する。スペア領域は、例えば、メイン領域に格納されたデータのパリティデータや、ECCフラグ/ブートフラグなどを格納する。ECCフラグおよびブートフラグは、各行に対応して設けられるのではなく、セクタ単位で、つまり1つのセクタにECCフラグとブートフラグとが格納される。
【0024】
入出力回路120は、クロック信号ExCLKに同期してホストシステムからコマンド、アドレス、データ等を受け取り、受け取ったコマンド、アドレス、データをコントローラ150、アドレスレジスタ140、列選択回路180、センス/書込み回路170に提供する。また、入出力回路120は、メモリセルアレイ110から読み出されたデータをセンス/書込み回路170から受け取り、これをホストシステムに提供する。
【0025】
ECC回路130は、プログラム動作時、入出力回路120を介して入力されたデータを演算することにより、入力データの誤り検出および訂正に必要なパリティデータを生成する。ECC回路130は、特に限定されないが、例えば、ハミングコードやリード・ソロモンなどによってパリティデータを生成する。
【0026】
コントローラ150は、ハードウエアおよび/またはソフトウエア資源によって構成され、例えば、ROM/RAMを含むマイクロコントローラあるいはステートマシンによって構成される。コントローラ150は、ホストシステムからコマンドを受け取り、当該コマンドに基づき読出し、プログラム、消去等の全体の動作を制御する。
【0027】
また、コントローラ150は、メモリセルアレイの使用状況に応じてECCフラグおよびブートフラグのセット/リセットを行い、ECCフラグおよびブートフラグを参照して各セクタに格納されるブートデータのウエアレベリングを実行する。これにより、ブートデータの信頼性をより向上させる。
【0028】
次に、本実施例によるフラッシュメモリのブートデータのウエアレベリングについて説明する。
図3は、ブートデータをプログラムするときの動作フローである。入出力回路120を介してホストシステムからブートデータのプログラムコマンド、アドレスおよびブートデータを受け取ると、コントローラ150は、受け取ったコマンドに基づきブートデータのプログラムを制御する。
【0029】
行選択回路160および列選択回路180は、アドレスレジスタ140からのアドレスに基づきブートデータをプログラムすべきセクタ、セクタ内のメモリセルを選択する(S100)。但し、ブートデータを格納する位置が予め決められている場合には、必ずしもホストシステムからアドレスを受け取る必要なはい。この場合、コントローラ150は、ブートデータのプログラムコマンドを受け取ると、ROMに格納されたアドレスを読み出し、当該アドレスをアドレスレジスタ140に提供する。ブートデータは、ユーザーが使用する通常のデータと区別して保護されるデータであり、それ故、ブートデータは、特定のアドレスで指定される領域にプログラムされるようにしてもよい。
【0030】
ここで、メモリセルアレイ110がフレッシュ状態(プログラム/消去のサイクル数がゼロ)、あるいは消去の直後では、全てのメモリセルのデータは「1」である。各セクタのスペア領域内のECCフラグやブートフラグも「1」である。そこで、以下の説明では、データ「1」をフラグのリセット、データ「0」をフラグのセットと称する。
【0031】
次に、ECC回路130は、入力されたブートデータのパリティデータを生成し、コントローラ150は、ブートデータおよびパリティデータを選択されたセクタにプログラムする(S110)。ブートデータは、セクタのメイン領域にプログラムされ、パリティデータは、スペア領域にプログラムされる。
【0032】
コントローラ150はさらに、ブートデータを格納するセクタのブートフラグをセットする(S120)。つまり、選択されたセクタのスペア領域内のブートフラグにデータ「0」をプログラムする。もし、ブートデータを複数のセクタにプログラムする場合には、複数のセクタの各々のブートフラグがセットされる。ブートフラグのセットは、そのセクタにブートデータが格納されていることを示す。
【0033】
次に、ブートデータを移動させるときの動作フローを
図4に示す。入出力回路120を介してホストシステムからブートデータの読出しコマンド、アドレスを受け取ると、コントローラ150は、受け取ったコマンドに基づきブートデータの読出しを制御する。別の態様では、コントローラ150は、フラッシュメモリへの電源が投入されたとき、ブートデータの読出しを制御する(S200)。
【0034】
行選択回路160および列選択回路180は、アドレスレジスタ140からのアドレスに基づきブートデータを読み出すためのセクタ、セクタ内のメモリセルを選択する。但し、ブートデータを格納する位置が予め決められている場合には、必ずしもホストシステムからブートデータを読み出すためのアドレスは必要ではない。この場合、コントローラ150は、読出しコマンドを受け取ると、ROMに格納されたアドレスを読み出し、当該アドレスをアドレスレジスタ140に提供する。また、ブートデータを格納するアドレスが変更された場合には、コントローラ150は、ルックアップテーブルを参照し、変更されたアドレスを読み出し、これをアドレスレジスタ140に提供する。
【0035】
次に、ECC回路130は、選択されたセクタのメイン領域から読み出されたブートデータおよびスペア領域から読み出されたパリティデータに基づき誤り検出・訂正を行う。このとき、コントローラ150は、ECC回路130によりブートデータのエラービットの訂正が行われたか否かを判定する(S210)。ビット訂正の有無は、セクタ単位で判定される。
【0036】
コントローラ150は、ビット訂正ありと判定した場合には、当該セクタのECCフラグをセット(つまり、ECCフラグにデータ「0」をプログラム)する(S220)。エラー訂正の発生は、そのセクタの故障の前兆を意味し、ECCフラグのセットは、当該セクタの故障(例えば、リテンション特性の低下)の可能性を表す。
【0037】
それ故、コントローラ150は、ブートデータの読出し中にエラー訂正が発生した場合には、当該セクタとは別の信頼性の高いセクタにブートデータを移動させ、これにより、ブートデータのエラーの発生を可能な限り抑制する。ブートデータの移動は、セクタからブートデータを読み出した後の任意のタイミングで行うことが可能であり、例えば、読み出したブートデータをホストシステムに出力した後、あるいは、ホストシステムからの次のプログラムコマンドを入力したときにブートデータを他のセクタに移動させるようにしてもよい。
【0038】
ある態様では、コントローラ150は、エラー訂正が生じたセクタと同一カラム(列)上のECCフラグがセットされていない他のセクタを選択する。ECCフラグがセットされていないセクタが複数存在する場合には、予め決められたアルゴリズム(例えば、行アドレスが若い方のセクタを優先する)に従い1つのセクタが選択される。
【0039】
コントローラ150は、エラー訂正が生じたセクタ内のブートデータを読み出すときと同じアドレスを用いて、同一カラム上の他の選択されたセクタにブートデータをプログラムすることで、ブートデータを他のセクタに移動させる。さらにコントローラ150は、ブートデータを移動させたとき、移動先のセクタのブートフラグをセットする(S230)。
【0040】
ある態様では、コントローラ150は、エラー訂正が生じた元のセクタと移動先のセクタとの位置関係をルックアップテーブルに登録し、コントローラ150は、ブートデータを読み出すとき、ルックアップテーブルを参照して、ホストシステムからのアドレスあるいはROMから読み出したアドレスを変換する。
【0041】
ある態様では、エラー訂正が生じた元のセクタに格納されたブートデータは、バックアップ用としてそのまま残すことができる。この場合、当該セクタのブートフラグはセットのままである。バックアップ用のブートデータを元のセクタに残す場合、コントローラ150は、ECCフラグとブートフラグの双方がセットされていないセクタを選択する。ECCフラグとブートフラグの双方のセットは、当該セクタが移動前(エラー訂正前)のブートデータを格納することを表す。
【0042】
図5は、ブートデータを移動させるときの他の動作フローである。ブートデータは、しばしばアップデートされることがある。コントローラ150は、ホストシステムからブートデータの更新コマンド、更新用ブートデータ、および必要に応じてアドレスを受け取ると(S300)、リプレース用の他のセクタを選択し(S310)、選択したセクタに更新用ブートデータをプログラムし、選択されたセクタのブートフラグをセットする(S320)。他のセクタの選択方法は、
図4のブートデータの移動のときと同様に行われる。
【0043】
更新用ブートデータを他のセクタにプログラムした場合、更新前のブートデータを元のセクタにそのまま残すことが可能である。この場合、元のセクタのブートフラグはセットされた状態であり、かつECCフラグもリセットされた状態である。更新前のブートデータを格納するセクタと、更新用ブートデータを格納するセクタとの位置関係は、例えば、ルックアップテーブルを登録される。あるいは、更新前のブートデータを格納するセクタのスペア領域には、ブートデータのバージョンが古いことを示すバージョン情報をプログラムするようにしてもよい。コントローラ150は、ブートデータを読み出すとき、ルックアップテーブルを参照して、ホストシステムからのアドレスあるいはROMから読み出したアドレスを変換し、更新用ブートデータを読み出したり、あるいは、更新前のブートデータを読み出すことができる。但し、更新前のブートデータが不要であれば、当該セクタを消去するようにしてもよい。なお、セクタの消去時、ブートデータ以外のユーザーが使用するデータが格納されている場合には、ユーザーが使用するデータを他のセクタに移動させた後に消去が実施される。
【0044】
次に、本実施例のフラッシュメモリの具体的なウエアレベリングの一例について説明する。
図6(A)は、フレッシュなメモリセルアレイを示し、5行×4列に配列されたセクタの例を示している。
【0045】
図6(B)に示すように、例えば、フレッシュな4つのセクタ(行0:列0、1、2、3)のブート領域Bにブートデータがプログラムされる。ブートデータをプログラムするためのアドレスは、ホストシステムから提供されるものであっても良いし、フラッシュメモリ100において予め決められるものであってもよい。ブートデータは、各セクタ(行0:列0~3)の1つまたは複数の行にプログラムされ、同時に、各セクタ(行0:列0、1、2、3)のブートフラグがセットされる。なお、この例では、フラグのセットを「1」、リセットを「0」で表していることに留意すべきである。
【0046】
図6(C)は、ブートデータの読出し中に、セクタ(行0:列1)から読み出したブートデータにビット訂正が生じた例を示している。この場合、
図6(D)に示すように、セクタ(行0:列1)から読み出したブートデータが、例えば、リプレース領域Rの同一カラム上のセクタ(行4:列1)に移動される。
【0047】
同一カラム上の、ECCフラグおよびブートフラグがともにリセットされているフラグがリプレース用の他のセクタとして選択される。複数のセクタの候補が存在する場合には、その中から1つのセクタが選択される。選択するアルゴリズムは任意であるが、例えば、行アドレスの若いセクタから順にデータをプログラムするアルゴリズムであれば、プログラム順序が一番遅くなる一番遠い行アドレスのセクタが選択される。図の例では、セクタ(行4:列1)がリプレース用のセクタとして例示されている。
【0048】
また、ある態様では、ブートデータの移動先のセクタは、ユーザーによって使用されていないセクタ(つまり、ユーザーからのデータがプログラムされていないセクタ)が選択される。ユーザーがセクタを使用しているか否かは、例えば、スペア領域のユーザーデータに関するパリティデータの有無を確認したり、あるいはスペア領域のユーザーが使用中か否かを示すフラグを設けることによって確認される。
【0049】
ブートデータの移動が行われた場合、元のセクタ(行0:列1)と、移動先のセクタ(行4:列1)とのアドレス関係が、例えば、ルックアップテーブル(LUT)に登録される。また、元のセクタ(行0:列1)のECCフラグが「1」にセットされ、元のセクタ(行0:列1)には、故障の前兆が付与される。元のセクタ(行0:列1)のブートフラグが「1」のままである場合、セクタ(行0:列1)の2つのフラグは「11」となり、このコードの組み合わせは、元のセクタ(行0:列1)が、移動前のブートデータを格納していることを表す。
【0050】
図6(E)は、ブートデータに更新が生じたときに更新用ブートデータを別のセクタに移動する例を示している。例えば、セクタ(行0:列1)に格納されたブートデータに更新が生じた場合(つまり、更新用プログラムのコマンド等が入力されたとき)、
図6(D)のときと同様のアルゴリズムで、同一カラム上のECCフラグがリセットされている他のセクタが選択され、当該選択されたセクタに更新用ブートデータがプログラムされ、かつそのブートフラグが「1」にセットされる。更新前のブートデータを格納するセクタ(行0:列1)と、更新用ブートデータを格納するセクタ(行4:列1)とのアドレス関係は、例えば、フックアップテーブル(LUT)に登録される。なお、更新前のブートデータを格納するセクタ(行0:列1)のECCフラグは、リセット「0」のままである。
【0051】
図6(F)は、ブートデータが移動された後のブートデータの読出しを示している。読出しが行われるとき、コントローラ150は、読出しのためのアドレスをルックアップテーブルを参照して変換し、変換したアドレスに基づきセクタ(行0:列0)、セクタ(行4:列1)、セクタ(行0:列2)、セクタ(行0:列3)に格納されたブートデータを読み出す。
【0052】
図7(A)は、ブートデータを格納するセクタ以外の同一カラム上の他の全てのセクタのECCフラグがセットされた状態を示している。セクタ(行1、列1)には、ブートデータが格納され、ECCフラグはリセットされているが、列1の他の全てのセクタのECCフラグはセットされている。
【0053】
この場合、ブートデータを移動させるための他のセクタを用意するため、コントローラ150は、
図7(B)に示すように、同一カラム上の最初にブートデータを格納した一番古いセクタ(行0:列1)を消去し、ECCフラグおよびブートフラグをリセットする。
メモリセルの劣化は、時間経過とともに改善する可能性があり、一番古いセクタを次のリプレース用のセクタに割り当てることでブートデータのエラーの発生を極力抑え、ブートデータの信頼性を保つ。
【0054】
もし、セクタ(行0:列1)にユーザーが使用するユーザーデータが格納されている場合には、
図7(B1)に示すように、ユーザーデータを同一カラム上の他のセクタ(行4:列1)に移動した後、セクタ(行0:列1)のセクタを消去する。ユーザーデータの移動に関する元のセクタと移動先のセクタとのアドレス関係は、例えば、ルックアップテーブルに登録され、コントローラ150は、ユーザーデータの読出し時にルックアップテーブルを参照しアドレスを変換する。ユーザーデータの移動後、セクタ(行0:列1)が消去され、ECCフラグおよびブートフラグがリセットされる。
【0055】
図7(C)は、セクタ(行1:列1)のブートデータの読出し時にビット訂正が発生したときの例を示し、この場合、ブートデータは、セクタ(行0:列1)に移動され、そのブートフラグが「1」にセットされ、元のセクタ(行1:列1)のECCフラグが「1」にセットされる。
【0056】
再び列1上の残りのセクタの全てのECCフラグが「1」となるため、
図7(D)に示すように、列1上の一番古いセクタを消去し、ECCフラグおよびブートフラグを「0」にリセットする。セクタ(行4:列1)にユーザーデータが格納されている場合には、上記と同様に、ユーザーデータを同一カラム上の他のセクタに移動させた後に、セクタ(行4:列1)を削除する。
【0057】
その後、セクタ(行0:列1)の読出し中にビット訂正が生じた場合には、
図7(E)に示すように、ブートデータは、同一カラム上のセクタ(行4:列1)に移動され、そのブートフラグが「1」にセットされ、元のセクタ(行0:列1)のECCフラグが「1」にセットされる。
【0058】
このように本実施例によれば、ブートデータの読出し時にビット訂正が生じた場合には、ブートデータをビット訂正が生じていない他のセクタにブートデータを移動させるようにしたので、ブートデータのエラーが最小限になるようにブートデータを保護し、その信頼性を向上させることができる。さらにブートデータの更新が生じた場合にも同様に、ビット訂正が生じていない他のセクタにブートデータを移動させるようにしたので、ブートデータのエラーが最小限になるようにブートデータを保護し、その信頼性を向上させることができる。また、ブートデータの移動を一定のアルゴリズムに従い移動させることで、ブートデータを格納するセクタの使用頻度の均等化を図ることができる。
【0059】
次に、本実施例のフラッシュメモリにおいてブートデータを移動させる他の動作フローを
図8に示す。前述した
図4に示すフローは、ブートデータの読出し動作時にブートデータのエラーが発生した場合にブートデータを移動させる例を示したが、
図8のフローは、書込み動作時に生じ得るブートデータの移動である。
【0060】
コントローラ150は、
図3の動作フローで説明したように、入出力回路120を介して受け取ったブートデータを選択されたセクタにプログラムを行う(S400)。プログラムは、ISPP(Incremental Step Pulse Program)方式を用い、選択メモリセルにプログラムパルスを印加し、プログラムベリファイが不合格の場合、前回よりも1ステップ電圧だけ高いプログラムパルスを印加する。
【0061】
コントローラ150は、プログラムパルスの印加回数または印加時間が一定に達し、タイムアウトが発生したとき(S410)、プログラム動作を途中で終了させず、プログラム動作を継続させ、当該セクタへのプログラムを最後まで完了させ、当該セクタのブートフラグをセットする(S420)。この場合、ECCフラグは、リセットのままである。コントローラ150は、このセクタを疑似合格として管理する。
【0062】
コントローラ150は、ブートプログラムの終了後、疑似合格として管理されたセクタに書込まれたブートデータを、リプレース用の他のセクタにコピーバックで移動させ(S430)、疑似合格のセクタとリプレース用のセクタとの関係をルックアップテーブルにアップデートする(S440)。リプレース用の他のセクタは、消去状態にあるセクタである。こうして、リプレース用の他のセクタに、ブートデータが書き込まれ、かつブートフラグがセットされるが、ECCフラグはリセットのままである。
【0063】
図9は、ブートデータを移動させるさらなる他の動作フローである。ステップS400、S410は、
図8のときと同様であるが、コントローラ150は、疑似合格したブートデータのプログラム終了時に、ブートフラグとECCフラグの双方をセットする(S440)。
【0064】
その後、コントローラ150は、ブートデータの読出し時に(S450)、ECCフラグがセットされているか否かをチェックし(S460)、ECCフラグがセットされている場合には、疑似合格したセクタのブートデータをリプレース用の他のセクタにコピーバックし(S470)、疑似合格のセクタとリプレース用のセクタとの関係をルックアップテーブルにアップデートする(S480)。
【0065】
疑似合格したセクタは、そのセクタの故障の前兆を表すものであり、疑似合格したセクタにプログラムされたブートデータをリプレース用の他のセクタにコピーバックすることでブートデータの信頼性の維持することができる。
【0066】
次に、ブートフラグをライトプロテクト(書込み保護)に利用する例を
図10のフローに示す。コントローラ150は、セクタへのブートプログラムを行うとき(S500)、当該セクタのブートフラグがセットされている場合には(S510)、当該セクタへのプログラムを取りやめ、他のセクタ(例えば、リプレース用の他のセクタ)にブートデータをプログラムする(S520)。このとき、当該他のセクタのブートフラグがセットされる。
【0067】
コントローラ150は、他のセクタへのブートデータのプログラム終了後、古いブートデータの消去を可能にするため、元のセクタのECCフラグをセットする(S530)。コントローラ150は、セクタの消去を行う場合、ブートフラグとECCフラグを確認し、両フラグがセットされている場合(S540)、当該セクタを消去する(S550)。
【0068】
次に、本発明の第2の実施例について説明する。第2の実施例は、ECCフラグがセットされたときの移動先のセクタを選択するアルゴリズムに関し、運用初期時に使用されるパターンAのアルゴリズムと、経年変化時に使用されるパターンBのアルゴリズムを含む。パターンBのアルゴリズムは、ECCエラーの発生頻度が高いセクタがリプレース用のセクタとして選択されないようにする。第2の実施例では、パターンA、Bのアルゴリズムを選択するためにもう1つのEXフラグを用いる。
【0069】
本実施例では、
図11(A)に示すように、ECCフラグ、ブートフラグ、およびEXフラグの3つのフラグを使用し、これらの3ビットのフラグは、それぞれのセクタ内に設けられる。
【0070】
図11(B)は、メモリセルアレイの構成例であり、行方向にm個のセクタが配置され、カラム方向にn個のセクタが配置される。1つのセクタが2048バイトであるならば、m個のセクタを含む1つのカラムは、
図11(C)に示す記憶容量となる。
【0071】
パターンAのセクタ選択アルゴリズムは、次のように構成される。
1.当該カラム/セクタのECCフラグおよびブートフラグがともにセットされている場合、セクタ番号をインクリメントし、右方向に累進させる(第一優先度)。この様子を矢印P1で示す。
2.同カラム上のセクタの最終番号に到達している場合(つまり、セクタ番号=mの場合)、カラム番号をインクリメントし、下方向に累進させる(第二優先度)。この様子を矢印P2で示す。
ある態様では、コントローラ150は、セクタ番号およびカラム番号を保持するカウントを備え、当該カウンタの値をインクリメントし、セクタおよびカラムを選択または識別する。
【0072】
パターンBのセクタ選択アルゴリズムは、例えば、EXフラグをセット(「1」)することにより、リプレース用のセクタとして選択されないようにする。つまり、EXフラグがセットされたセクタは、ECCエラーの発生頻度が高く、故障し易いことを示す。ある態様では、コントローラ150は、セクタ毎のECCエラー(誤り訂正)の回数をカウントし、カウント値が一定以上になったとき、EXフラグをセットする。また、別の態様では、コントローラ150は、ホストシステムからEXフラグのセットするためのコマンドを受け取ると、これに応じてEXフラグをセットする。
【0073】
また、本実施例では、パターンA、Bのアルゴリズムは、レジスタ設定による有効化/無効化することを可能にする。例えば、パターンAを有効化し、パターンBを無効化したり、パターンAを無効化し、パターンBを有効化したり、パターンA、Bを有効化する。レジスタ設定は、例えば、ホストシステムからレジスタの書込みを行うコマンドを入力し、これによりレジスタの設定を変更することが可能である。
【0074】
次に、第2の実施例の読出し動作および書込み動作について説明する。
図12(A)は、第2の実施例の読出し動作のフロー、
図12(B)は、第2の実施例の書込み動作のフローを示し、ここでは、レジスタ設定によりパターンA、Bが有効化されているものとする。第2の実施例は、第1の実施例と異なり、パターンA、Bを実施するアルゴリズム(S440、S540)を包含する点で第1の実施例と異なる。
【0075】
読出し動作において、コントローラ150は、ホストシステムから読出しコマンドを受け取ると(S400)、読出し動作を開始し、選択メモリセルから読み出されたデータにECCエラーが生じたか否かを判定する(S410)。ECCエラーが生じていない場合には、読出しが継続される(S420)。他方、ECCエラーが生じた場合には、コントローラ150は、当該セクタにECCフラグをセットし(S430)、その後、移動先の新しいセクタの選択を行い(S440)、選択されたセクタに元のセクタのデータをコピーし(S450)、元のセクタと移動先のセクタとの関係をLUTに更新する(S460)。
【0076】
書込み動作において、コントローラ150は、ホストシステムから書込みコマンドを受け取ると(S500)、ISPPによる書込み動作を開始し、ベリファイエラーが生じたか否かを判定する(S510)。ベリファイエラーは、例えば、
図8のときのタイムアウトの発生である。ベリファイエラーが生じていない場合には、書込みが継続される(S520)。他方、ベリファイエラーが生じた場合には、コントローラ150は、当該セクタにECCフラグをセットし(S530)、その後、移動先の新しいセクタの選択を行い(S540)、選択されたセクタに元のセクタのデータをコピーし(S550)、元のセクタと移動先のセクタとの関係をLUTに更新する(S560)。
【0077】
次に、ステップS440、S540のセクタの選択動作を
図13A、
図13Bのフローを参照して説明する。このセクタの選択動作は、パターンA、Bのアルゴリズムに従うものである。
【0078】
図13Aにおいて、コントローラ150は、カラム番号a、ECCフラグ=1(セット)のセクタ番号bを識別すると仮定する(S600)。コントローラ150は、EXフラグ=1(セット)されているか否かを判定し(S610)、パターンAまたはパターンBのアルゴリズムを選択する。コントローラ150は、EXフラグがセットされている場合には、パターンBのアルゴリズムに従い、当該セクタのECCエラーの発生頻度が高いと判定し、LUTからカラム番号a、セクタbを除外し(S620)、移動先のセクタとして選択されないようにする。
【0079】
EXフラグ=1でない場合、コントローラ150は、パターンAのアルゴリズムの第一優先度に従いセクタ番号bが最終番号mに一致するか否かを判定し(S630)、最終番号mに一致しない場合には、セクタ番号bをインクリメントする(S640)。ここで、セクタ番号のインクリメントは、b’=b+1である。コントローラ150は、インクリメントしたセクタ番号b’のECCフラグ=0、かつブートフラグ=0か否かを判定し(S650)、両フラグがリセットされていなければ、セクタ番号を再度インクリメントし(S652)、最終的に両フラグがリセットされたセクタが選択される。
【0080】
セクタの選択を決定すると、コントローラ150は、カラム番号a、セクタ番号bの元のセクタのデータを、選択されたカラム番号a、セクタ番号b’のセクタにコピーする(S660)。データをコピーするタイミングは、特に限定されず、例えば、読出し/書込みが終了した後であってもよいし、次の読出し/書込みの動作時であってもよいし、待機中であってもよい。データをコピーした場合、LUTが更新される(S670)。
【0081】
一方、ステップS630において、セクタ番号bが最終番号mに一致する場合、コントローラ150は、第二優先度に従い、カラム番号aが最終番号nに一致するか否か判定し(S680)、最終番号nに一致しない場合には、カラム番号をインクリメントする(S690)。ここで、カラム番号のインクリメントは、a’=a+1である。このとき、セクタ番号bを、先頭のセクタ番号0に変更するようにしてもよい。コントローラ150は、インクリメントされたカラム番号a’、セクタ番号bのECCフラグ=0、かつブートフラフ=0か否かを判定し(700)、両フラグがリセットされていなければ、カラム番号をインクリメントし(S710)、最終的に両フラグがリセットされたセクタが選択される(S700)。
【0082】
セクタの選択が決定すると、コントローラ150は、カラム番号a、セクタ番号bの元の癖他のデータを、選択されたカラム番号a’、セクタ番号0のセクタにコピーする(S720)。次に、コントローラ150は、カラム番号a、セクタ番号bのセクタを消去し(S730)、当該セクタのECCフラグ、ブートフラグをクリアし(S740)、LUTが更新される(S670)。この場合、元のセクタのデータは消去される。
【0083】
ステップS680において、カラム番号aが最終番号nに一致した場合には、
図13Bに示すように、コントローラ150は、カラム/セクタをスキャンし、ECCフラグ=0、かつブートフラグ=0のセクタを抽出し(S750)、抽出したセクタにカラム番号a、セクタ番号bの元のセクタのデータをコピーし(S760)し、元のセクタのデータを消去し(S770)、LUTが更新される(S670)。この場合、元のデータは消去される。
【0084】
上記の例は、パターンA、Bが有効化された場合であり、レジスタ設定によりパターンBが無効化された場合には、ステップS610、S620の処理は実施されない。また、パターンAが無効化された場合には、ステップS630からS770は実施されない。この場合、例えば、第1の実施例のときと同様にリプレース用のセクタが選択される。
【0085】
なお、
図13A、
図13Bのフローは、パターンA、Bのアルゴリズムを実施するための1つの処理例を示したものであり、これ以外の処理またはステップによってもパターンA、Bのアルゴリズムを実施するようにしてよい。さらに第1の実施例と第2の実施例とを個別に説明したが、本発明を逸脱しない範囲において第1の実施例と第2の実施例とを組み合わせることも可能である。
【0086】
上記実施例では、NOR型フラッシュメモリを例示したが、本発明は、NAND型フラッシュメモリにも適用することができる。例えば、NAND型フラッシュメモリでは、各ブロックが、ECCフラグとブートフラグとを格納する領域をそれぞれ有し、ECCフラグのセットは、当該ブロックからのブートデータの読出し中にビット訂正が生じたことを示し、ブートフラグのセットは、当該ブロックにブートデータが格納されていることを示す。
【0087】
上記実施例では、メモリセルアレイに格納される保護すべきデータとしてブートデータ(ブートコード)を示したが、保護すべきデータは、ブートデータに限らず、ブートデータと同等の保護すべき他の特定のデータであってもよい。この場合、ブートフラグは、特定のデータが格納されているか否かを示すフラグに置き換えられる。
【0088】
上記実施例では、ECCフラグおよびブートフラグをスペア領域に格納する例を示したが、これは一例であり、ECCフラグおよびブートフラグは、セクタまたはブロックの任意の領域に格納されるようにしてもよい。また、ECCフラグおよびブートフラグを格納するセクタやブロックのサイズは、特に限定されるものではない。
【0089】
本発明の好ましい実施の形態について詳述したが、本発明は、特定の実施形態に限定されるものではなく、特許請求の範囲に記載された発明の要旨の範囲内において、種々の変形・変更が可能である。
【符号の説明】
【0090】
100:フラッシュメモリ
110:メモリセルアレイ
120:入出力回路
130:ECC回路
140:アドレスレジスタ
150:コントローラ
160:行選択回路
170:センス/書込み回路
180:列選択回路
190:内部電圧発生回路