(57)【要約】【課題】  誤りの訂正能力が高い誤り訂正符号を用いた場合に、フラッシュメモリの劣化を抑制することができるフラッシュメモリシステムを提供する。【解決手段】  フラッシュメモリ２から読出されたユーザデータが誤り訂正符号・復号器２４に入力され、フラッシュメモリ２の冗長領域から読出された誤り訂正符号がマスク回路２５を介して、誤り訂正符号・復号器２４に入力される。誤り訂正符号・復号器２４は、誤り訂正符号に基づいてユーザデータの誤り検出と訂正を行ってユーザデータをバッファ９に与える。そして、ユーザデータの誤りの数が設定値を超えた場合にのみ、フラッシュメモリ２のユーザデータを正しいユーザデータに書換える。【選択図】  図４
2006221334.tif 000002
【特許請求の範囲】
【請求項１】
データの書込み及び読み出しがページ単位で行われ、データの消去が複数ページからなるブロック単位で行われるフラッシュメモリにアクセスするメモリコントローラであって、
前記フラッシュメモリの各ページのユーザー領域に書込まれているデータと該各ページの冗長領域に書込まれている付加情報を読み出すデータ読出し手段と、
前記付加情報に含まれる誤り訂正に関する情報に基づいて、前記ユーザー領域から読み出されたデータに含まれる誤りを検出して訂正する誤り訂正手段と、
前記誤り訂正手段により検出された誤りが、予め設定された設定値を超えた場合に、訂正後のデータを消去状態のページのユーザー領域に書込む再書込み手段と、
を備えることを特徴とするメモリコントローラ。
【請求項２】
前記誤り訂正手段は、前記ユーザー領域から読み出されたデータに含まれる複数ビット又は複数シンボルの誤りを訂正することができるよう構成され、
前記設定値は、前記誤り訂正手段によって検出される誤りのビット数又はシンボル数に関して設定された値であることを特徴とする請求項１に記載のメモリコントローラ。
【請求項３】
前記誤り訂正手段が訂正することができる前記ビット或いはシンボルの数をＮ（Ｎは、２以上の整数）とすると、前記設定値は、１以上Ｎ以下の整数に設定されることを特徴とする請求項２に記載のメモリコントローラ。
【請求項４】
前記設定値を可変に変更する手段を備えることを特徴とする請求項３に記載のメモリコントローラ。
【請求項５】
前記付加情報に含まれる誤り訂正に関する情報が、前記ユーザー領域に書込まれているデータに基づいて生成された誤り訂正符号であることを特徴とする請求項１乃至４のいずれか１項に記載のメモリコントローラ。
【請求項６】
前記付加情報に含まれる誤り訂正に関する情報が、前記ユーザー領域に書込まれているデータに基づいて生成された誤り訂正符号に対して変換処理を施した情報であることを特徴とする請求項１乃至５のいずれか１項に記載のメモリコントローラ。
【請求項７】
前記変換処理が、予め設定されたマスクデータとの排他的論理和をとる処理であることを特徴とする請求項６に記載のメモリコントローラ。
【請求項８】
前記誤り訂正符号が、リードソロモン符号であることを特徴とする請求項６又は７に記載のメモリコントローラ。
【請求項９】
請求項１乃至８のいずれか１項に記載のメモリコントローラと、データの書込み及び読み出しがページ単位で行われ、データの消去が複数ページからなるブロック単位で行われるフラッシュメモリと、を備えることを特徴とするフラッシュメモリシステム。
【請求項１０】
データの書込み及び読み出しがページ単位で行われ、データの消去が複数ページからなるブロック単位で行われるフラッシュメモリに対するアクセスを制御するフラッシュメモリの制御方法であって、
前記フラッシュメモリの各ページのユーザー領域に書込まれているデータと各ページの冗長領域に書込まれている付加情報を読み出す読出し処理と、
前記付加情報に含まれる誤り訂正に関する情報に基づいて、前記ユーザー領域から読み出されたデータに含まれる誤りを検出して訂正する誤り訂正処理と、
前記誤り訂正処理により検出された誤りが、予め設定された設定値を超えた場合に、訂正後のデータを消去状態のページのユーザー領域に書込む再書込み処理と、
を含むことを特徴とするフラッシュメモリの制御方法。
【請求項１１】
前記誤り訂正処理は、前記ユーザー領域から読み出されたデータに含まれる誤りをビット又はシンボル単位で訂正する処理であり、
前記設定値は、前記誤り訂正処理によって検出される誤りのビット数又はシンボル数に関しての値であることを特徴とする請求項１０に記載のフラッシュメモリの制御方法。
【請求項１２】
前記誤り訂正処理で訂正することができる前記ビット或いはシンボルの数をＮ（Ｎは、２以上の整数）とすると、前記設定値は、１以上Ｎ以下の整数に設定されることを特徴とする請求項１１に記載のフラッシュメモリの制御方法。
【請求項１３】
前記設定値を可変に変更する設定値変更処理を含むことを特徴とする請求項１２に記載のフラッシュメモリの制御方法。
【請求項１４】
前記付加情報に含まれる誤り訂正に関する情報が、前記ユーザー領域に書込まれているデータに基づいて生成された誤り訂正符号であることを特徴とする請求項１０乃至１３のいずれか１項に記載のフラッシュメモリの制御方法。
【請求項１５】
前記付加情報に含まれる誤り訂正に関する情報が、前記ユーザー領域に書込まれているデータに基づいて生成された誤り訂正符号に対して変換処理を施した情報であることを特徴とする請求項１０乃至１４のいずれか１項に記載のフラッシュメモリの制御方法。
【請求項１６】
前記変換処理が、予め設定されたマスクデータとの排他的論理和をとる処理であることを特徴とする請求項１５に記載のフラッシュメモリの制御方法。
【請求項１７】
前記誤り訂正符号が、リードソロモン符号であることを特徴とする請求項１５又は１６に記載のフラッシュメモリの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリコントローラ、フラッシュメモリシステム及びフラッシュメモリの制御方法に関する。
【背景技術】
【０００２】
近年、メモリーカードやシリコンディスクといったメモリシステムにて使用される半導体メモリに、フラッシュメモリが広く採用されている。フラッシュメモリは、不揮発性メモリの一種である。フラッシュメモリに格納されたデータは、電力が供給されていないときでも保持されていることが要求される。
【０００３】
ＮＡＮＤ型フラッシュメモリは、上記のメモリシステムで特に多く用いられるフラッシュメモリの一種である。ＮＡＮＤ型フラッシュメモリに含まれている複数のメモリセルのそれぞれは、他のメモリセルとは独立して、論理値"１"を示すデータが格納されている消去状態から、論理値"０"を示すデータが格納されている書込状態へと変化することができる。これとは対照的に、書込状態から消去状態へと変化するときには、各メモリセルは他のメモリセルと独立して変化することができない。このときには、ブロックと称される予め定められた数のメモリセルが、全て同時に消去状態になる。この一括消去動作は、一般的に、"ブロック消去"と称されている。
【０００４】
ＮＡＮＤ型フラッシュメモリに対する書込処理若しくは読出処理は、ページと称される予め定められた数のメモリセル単位で処理が行なわれる。消去処理の単位であるブロックは複数のページで構成されている。
【０００５】
ＮＡＮＤ型フラッシュメモリに対する書込み処理では、まず、書込みデータがＮＡＮＤ型フラッシュメモリ内のレジスタに転送され、レジスタに保持された書込みデータがメモリセルアレイに複写される。この複写（書込み）処理で、メモリセルを消去状態から書込状態に変化させる場合、コントロールゲートに高電圧が印加され、フローティングゲートに電子が注入される。このような処理により、メモリセルアレイにデータが書込まれるため、ＮＡＮＤ型フラッシュメモリに対する書込み処理では、書込みエラーが発生することがある。
【０００６】
書込みエラー等に起因する読出しデータの誤りは、通常、各ページの冗長領域に書込まれている誤り訂正符号に基づいて検出、訂正が行われる。この誤り訂正符号は、書込み処理のときに、各ページのユーザー領域に書込まれるデータに基づいて生成され、各ページの冗長領域に書込まれる。
【０００７】
データの誤りを検出、訂正するための誤り訂正符号としては、リードソロモン符号、ＢＣＨ符号、ハミング符号等が知られている。ハミング符号は、誤りの訂正能力が高くないが、ユーザー領域に書込む書込みデータの全てのビットデータが論理値"１"（消去状態）のときに、この書込みデータに基づいて生成される誤り訂正符号の全てのビットデータが、論理値"１"（消去状態）に一致するので、ＮＡＮＤ型フラッシュメモリの誤り訂正符号として使用されることが多い。
【０００８】
一方、リードソロモン符号を誤り訂正符号として用いた場合、誤りの訂正能力は高くなるが、書込みデータの全てのビットデータが論理値"１"（消去状態）のときに、この書込みデータに基づいて生成される誤り訂正符号の全てのビットデータが、論理値"１"（消去状態）に一致しない。従って、ＮＡＮＤ型フラッシュメモリの誤り訂正符号として、リードソロモン符号を使用する場合には、この不整合を解消する処理が必要になる。
【０００９】
上記不整合を解消するため、下記特許文献１では、書込み処理のときに、書込みデータと消去状態のデータとを比較し、両データが一致した場合には、書込みデータに基づいて生成された誤り訂正符号を、冗長領域に書込まないようにしている。一方、読出し処理のときは、読出しデータと消去状態のデータとを比較し、両データが一致した場合には、読出しデータに対する誤りの検出、訂正を行っていない。
【特許文献１】特開２００４−７１０１２号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
特許文献１では、書込みデータが消去状態のデータと一致する場合には、誤り訂正符号が冗長領域に書込まれず、読出しデータが消去状態のデータと一致する場合には、読出しデータに対する誤りの検出、訂正を行っていない。従って、読出しエラーが発生したために、読出しデータと消去状態のデータが一致してしまった場合には、誤りの検出、訂正が行われないという問題が発生する。
【００１１】
又、読出しデータに含まれる誤りが検出された場合には、誤り訂正符号に基づいて訂正された訂正後のデータを再書込みすることが好ましいが、検出された誤りが誤りの訂正能力に比べて小さい場合であっても一律に再書込みを行うと、フラッシュメモリの劣化を促進することになる。
【００１２】
従って、上記のようなリードソロモン符号を用いた場合の問題を解消しても、再書込みによりフラッシュメモリの劣化を促進してしまうという問題は解消されない。
【００１３】
そこで、本発明は、誤りの訂正能力が高い誤り訂正符号を用いた場合に、フラッシュメモリの劣化を抑制することができるメモリコントローラ及びそのメモリコントローラを備えるフラッシュメモリシステム、並びに、フラッシュメモリの制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１４】
上記目的を達成するために、本発明の第１の観点に係るメモリコントローラは、
データの書込み及び読み出しがページ単位で行われ、データの消去が複数ページからなるブロック単位で行われるフラッシュメモリにアクセスするメモリコントローラであって、
前記フラッシュメモリの各ページのユーザー領域に書込まれているデータと該各ページの冗長領域に書込まれている付加情報を読み出すデータ読出し手段と、
前記付加情報に含まれる誤り訂正に関する情報に基づいて、前記ユーザー領域から読み出されたデータに含まれる誤りを検出して訂正する誤り訂正手段と、
前記誤り訂正手段により検出された誤りが、予め設定された設定値を超えた場合に、訂正後のデータを消去状態のページのユーザー領域に書込む再書込み手段と、
を備えることを特徴とする。
【００１５】
このような構成を採用したことにより、誤り訂正手段により検出された誤りが、設定値を超えない場合には、再書込み手段による書込みが発生しない。
【００１６】
尚、前記誤り訂正手段は、前記ユーザー領域から読み出されたデータに含まれる複数ビット又は複数シンボルの誤りを訂正することができるよう構成され、
前記設定値は、前記誤り訂正手段によって検出される誤りのビット数又はシンボル数に関して設定された値であってもよい。
この場合、前記誤り訂正手段が訂正することができる前記ビット或いはシンボルの数をＮ（Ｎは、２以上の整数）とすると、前記設定値は、１以上Ｎ以下の整数に設定されてもよい。さらに、前記設定値を可変に変更する手段を備えてもよい。
【００１７】
また、前記付加情報に含まれる誤り訂正に関する情報が、前記ユーザー領域に書込まれているデータに基づいて生成された誤り訂正符号であってもよい。
【００１８】
また、前記付加情報に含まれる誤り訂正に関する情報が、前記ユーザー領域に書込まれているデータに基づいて生成された誤り訂正符号に対して変換処理を施した情報であってもよい。
【００１９】
この場合、前記変換処理が、予め設定されたマスクデータとの排他的論理和をとる処理であってよい。
同様に、記誤り訂正符号も、リードソロモン符号であってもよい。
【００２０】
上記目的を達成するために、本発明の第２の観点に係るフラッシュメモリシステムは、本発明の第１の観点に係るメモリコントローラと、データの書込み及び読み出しがページ単位で行われ、データの消去が複数ページからなるブロック単位で行われるフラッシュメモリと、を備えることを特徴とする。
【００２１】
上記目的を達成するために、本発明の第３の観点に係るフラッシュメモリの制御方法は、
データの書込み及び読み出しがページ単位で行われ、データの消去が複数ページからなるブロック単位で行われるフラッシュメモリに対するアクセスを制御するフラッシュメモリの制御方法であって、
前記フラッシュメモリの各ページのユーザー領域に書込まれているデータと各ページの冗長領域に書込まれている付加情報を読み出す読出し処理と、
前記付加情報に含まれる誤り訂正に関する情報に基づいて、前記ユーザー領域から読み出されたデータに含まれる誤りを検出して訂正する誤り訂正処理と、
前記誤り訂正処理により検出された誤りが、予め設定された設定値を超えた場合に、訂正後のデータを消去状態のページのユーザー領域に書込む再書込み処理と、
を含むことを特徴とする。
【００２２】
尚、前記誤り訂正処理は、前記ユーザー領域から読み出されたデータに含まれる誤りをビット又はシンボル単位で訂正する処理であり、
前記設定値は、前記誤り訂正処理によって検出される誤りのビット数又はシンボル数に関しての値であってもよい。
【００２３】
この場合、前記誤り訂正処理で訂正することができる前記ビット或いはシンボルの数をＮ（Ｎは、２以上の整数）とすると、前記設定値は、１以上Ｎ以下の整数に設定されてもよい。さらに、前記設定値を可変に変更する設定値変更処理を含んでもよい。
【００２４】
また、前記付加情報に含まれる誤り訂正に関する情報が、前記ユーザー領域に書込まれているデータに基づいて生成された誤り訂正符号であってもよい。
【００２５】
また、前記付加情報に含まれる誤り訂正に関する情報が、前記ユーザー領域に書込まれているデータに基づいて生成された誤り訂正符号に対して変換処理を施した情報であってもよい。
【００２６】
この場合、前記変換処理が、予め設定されたマスクデータとの排他的論理和をとる処理であってもよい。
また、前記誤り訂正符号が、リードソロモン符号であってもよい。
【発明の効果】
【００２７】
本発明によれば、誤りの訂正能力が高い誤り訂正符号を用いた場合に、検出された誤りが、予め設定されたレベルを超えているか否かを判断し、設定されたレベルを超えているときだけ訂正後のデータの再書込みを行っている。従って、再書込みを行うか否かの判断基準となる誤りのレベルを適切に設定することにより、信頼性をほとんど低下させることなくフラッシュメモリの劣化を抑制することができる。
【発明を実施するための最良の形態】
【００２８】
以下、図面に基づき、本発明の実施の形態について詳細に説明する。
図１は、フラッシュメモリシステム１を、概略的に示すブロック図である。
図１に示したように、フラッシュメモリシステム１は、フラッシュメモリ２と、それを制御するメモリコントローラ３で構成されている。又、フラッシュメモリシステム１は、通常、ホストシステム４に着脱可能に装着され、ホストシステム４に対して、一種の外部記憶装置として用いられる。
【００２９】
尚、ホストシステム４としては、文字、音声、あるいは画像情報等の種々の情報を処理するパーソナルコンピュータやデジタルスチルカメラをはじめとする各種情報処理装置が挙げられる。
以下に、フラッシュメモリ２及びメモリコントローラ３の詳細を説明する。
【００３０】
[フラッシュメモリ２の説明]
このフラッシュメモリシステム１において、データが記憶されるフラッシュメモリ２は、ＮＡＮＤ型フラッシュメモリで構成されている。ＮＡＮＤ型フラッシュメモリは、ストレージデバイスへの用途として(ハードディスクの代わりになるものとして)開発された不揮発性メモリである。このＮＡＮＤ型フラッシュメモリは、ランダムアクセスを行なうことができず、書込みと読出しはページ単位で、消去はブロック単位で行なわれる。又、データの上書きができないので、データを書込むときは、消去されている領域にデータの書込みが行なわれる。
【００３１】
ＮＡＮＤ型フラッシュメモリは、このような特徴を有するため、通常、データの書替を行なう場合には、ブロック消去されている消去済ブロックに新たなデータ（書替後のデータ）を書込み、古いデータ（書替前のデータ）が書込まれていたブロックを消去するという処理を行なっている。
【００３２】
このようなデータの書替を行なった場合、書替後のデータは、書替前と異なるブロックに書込まれるため、ホストシステム４側から与えられる論理アドレスと、フラッシュメモリ２内での物理アドレスとの対応関係は、データを書替える毎に動的に変化する。従って、フラッシュメモリ２にアクセスするときには、通常、論理アドレスと物理アドレスとの対応関係を示したアドレス変換テーブルが作成され、このアドレス変換テーブルを用いて、フラッシュメモリ２に対するアクセスが行なわれる。
【００３３】
図２は、ブロックとページの関係を示す説明図である。
上記ブロックとページの構成は、フラッシュメモリ２の仕様によって異なるが、一般的なフラッシュメモリ２では、図２（ａ）に示したように、１ブロックが３２ページ（Ｐ０〜Ｐ３１）で構成され、各ページが５１２バイトのユーザー領域と１６バイトの冗長領域で構成されている。又、記憶容量の増加に伴い、図２（ｂ）に示したように、１ブロックが６４ページ（Ｐ０〜Ｐ６３）で構成され、各ページが２０４８バイトのユーザー領域と６４バイトの冗長領域で構成されているものも提供されている。
【００３４】
ここで、ユーザー領域は、主に、ホストシステム４から供給されるデ―タが記憶される領域であり、冗長領域は、誤り訂正符号、対応論理アドレス情報及びブロックステータス等の付加データが記憶される領域である。誤り訂正符号は、ユーザー領域に記憶されているデータに含まれる誤りを検出、訂正するための付加データであり、後述するＥＣＣブロックによって生成される。
【００３５】
対応論理アドレス情報は、物理ブロックにデータが記憶されている場合に書込まれ、その物理ブロックに記憶されているデータの論理アドレスに関する情報を示している。尚、物理ブロックにデータが記憶されていない場合は、対応論理アドレス情報が書込まれないので、対応論理アドレス情報が書込まれているか否かで、そのブロックが消去済ブロックであるか否かを判断することができる。つまり、対応論理ブロックアドレスが書込まれていない場合は、消去済ブロックであると判断される。
【００３６】
ブロックステータスは、その物理ブロックが不良ブロック（正常にデータの書込み等を行なうことができない物理ブロック）であるか否かを示すフラグであり、その物理ブロックが不良ブロックであると判断された場合には、不良ブロックであることを示すフラグが設定される。
【００３７】
次に、フラッシュメモリ２の、回路構成について説明する。
一般的なＮＡＮＤ型フラッシュメモリは、書込みデータ若しくは読出しデータを保持するためのレジスタと、データを記憶するメモリセルアレイによって構成されている。メモリセルアレイは、複数のメモリセルが直列に接続されたメモリセル群を複数備えており、ワード線によって、メモリセル群の特定のメモリセルが選択される。このワード線によって選択されたメモリセルとレジスタの間で、データの複写（レジスタからメモリセルへの複写、若しくはメモリセルからレジスタへの複写）が行なわれる。
【００３８】
メモリセルアレイを構成するメモリセルは、２つのゲートを備えたＭＯＳトランジスタで構成されている。ここで、上側のゲートはコントロールゲートと、下側のゲートはフローティングゲートと呼ばれており、フローティングゲートに電荷（電子）を注入したり、フローティングゲートから電荷（電子）を排出したりすることによって、データの書込みや消去を行っている。
【００３９】
フローティングゲートは、周囲を絶縁体で囲まれているので、注入された電子は長期間にわたって保持される。フローティングゲートに電子を注入するときは、コントロールゲートが高電位側となる高電圧を印加して電子を注入し、フローティングゲートから電子を排出するときは、コントロールゲートが低電位側となる高電圧を印加して電子を排出する。フローティングゲートに電子が注入されている状態（書込状態）が、論理値"０"のデータに対応し、フローティングゲートから電子が排出されている状態（消去状態）が、論理値"１"のデータに対応する。
【００４０】
［メモリコントローラ３の説明］
メモリコントローラ３は、ホストインターフェース制御ブロック５と、マイクロプロセッサ６と、ホストインターフェースブロック７と、ワークエリア８と、バッファ９と、フラッシュメモリインターフェースブロック１０と、ＥＣＣ（エラー・コレクション・コード）ブロック１１と、フラッシュメモリシーケンサブロック１２とから構成される。
【００４１】
これら機能ブロックによって構成されるメモリコントローラ３は、一つの半導体チップ上に集積されている。以下に、各機能ブロックの機能を説明する。
マイクロプロセッサ６は、メモリコントローラ３を構成する各機能ブロック全体の、動作を制御する機能ブロックである。
【００４２】
ホストインターフェース制御ブロック５は、ホストインターフェースブロック７の動作を制御する機能ブロックである。ここで、ホストインターフェース制御ブロック５は、ホストインターフェースブロック７の動作を設定する動作設定レジスタ（図示せず）を備えており、この動作設定レジスタに基づいて、ホストインターフェースブロック７は動作する。
【００４３】
ホストインターフェースブロック７は、ホストシステム４とデータ、アドレス情報、ステータス情報及び外部コマンド情報の授受を行なう機能ブロックである。すなわち、フラッシュメモリシステム１がホストシステム４に装着されると、フラッシュメモリシステム１とホストシステム４とは、外部バス１３を介して相互に接続され、かかる状態において、ホストシステム４よりフラッシュメモリシステム１に供給されるデータ等は、ホストインターフェースブロック７を入口として、メモリコントローラ３の内部に取り込まれ、フラッシュメモリシステム１からホストシステム４に供給されるデータ等は、ホストインターフェースブロック７を出口として、ホストシステム４に供給される。
ホストインターフェースブロック７は、ホストシステム４より供給される論理アドレス、セクタ数及び外部コマンドを保持するレジスタや、エラーが発生した場合にセットされるエラーレジスタ（図示せず）等を有している。
【００４４】
ワークエリア８は、フラッシュメモリ２の制御に必要なデータが一時的に格納される作業領域であり、複数のＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）セルによって構成されている。
【００４５】
バッファ９は、フラッシュメモリ２から読出したデータ及びフラッシュメモリ２に書込むデータを、一時的に保持する機能ブロックである。すなわち、フラッシュメモリ２から読出したデータは、ホストシステム４の受取準備ができるまで、バッファ９に保持され、フラッシュメモリ２に書込むデータは、フラッシュメモリ２の書込準備ができるまで、バッファ９に保持される。
【００４６】
フラッシュメモリシーケンサブロック１２は、内部コマンドに基づいて、フラッシュメモリ２の動作を制御する機能ブロックである。フラッシュメモリシーケンサブロック１２は、複数のレジスタ（図示せず）を備え、この複数のレジスタに内部コマンドを実行する際に必要な情報が設定される。この複数のレジスタに、内部コマンドを実行する際に必要な情報が設定されると、フラッシュメモリシーケンサブロック１２は、その情報に基づいて処理を実行する。
【００４７】
前述の「内部コマンド」とは、メモリコントローラ３からフラッシュメモリ２に与えられるコマンドであり、ホストシステム４からフラッシュメモリシステム１に与えられるコマンドである「外部コマンド」と区別される。
【００４８】
フラッシュメモリインターフェースブロック１０は、内部バス１４を介して、フラッシュメモリ２とデータ、アドレス情報、ステータス情報、内部コマンド情報及びデバイスＩＤ情報等の授受を行なう機能ブロックである。
【００４９】
ＥＣＣブロック１１は、フラッシュメモリ２に書込むデ―タに付加される誤り訂正符号を生成するとともに、読出しデータに付加されている誤り訂正符号に基づいて、読出したデータに含まれる誤りを検出・訂正する機能ブロックである。
【００５０】
ここで、ＥＣＣブロック１１について詳細に説明する。
図３は、書込み処理におけるＥＣＣブロックの動作を説明するための説明図である。
図４及び図５は、読出し処理におけるＥＣＣブロックの動作を説明するための図面である。
【００５１】
ＥＣＣブロック１１は、ＥＣＣレジスタ２２と管理データレジスタ２３と誤り訂正符号・復号器２４とマスク回路２５とを備えている。
ＥＣＣレジスタ２２は、フラッシュメモリ２の冗長領域から読み出した誤り訂正符号を一時的に保持する。管理データレジスタ２３は、フラッシュメモリ２の冗長領域に書込む管理データ、又はフラッシュメモリ２の冗長領域から読み出した管理データを一時的に保持する。誤り訂正符号・復号器２４は、書込み処理のときに、書込みデータに基づいて誤り訂正符号を生成し、読出し処理のときに、誤り訂正符号に基づいて読出しデータの誤りを検出、訂正する。マスク回路２５は、入力された誤り訂正符号に対して予め設定されている第１の変換処理及び第２の変換処理を施す。フラッシュメモリ２には、ユーザーデータ、管理データ（ＭＮＧ）及び誤り訂正符号（ＥＣＣ−Ｍ）が書込まれる。
【００５２】
以下に、１０ビットを１シンボルとし、４シンボルの誤り訂正、５シンボルの誤り検出能力を持つリードソロモン符号を例にとり、ＥＣＣブロック１１の動作を説明する。
【００５３】
まず、書込み処理におけるＥＣＣブロック１１の動作を説明する（図３参照）。
ホストシステム４から供給された５１２バイト（４０９６ビット）の書込みデータ（ユーザーデータ）は、バッファ９に一時的に保持された後、フラッシュメモリ２及び誤り訂正符号・復号器２４に転送される。フラッシュメモリ２に転送された５１２バイト（４０９６ビット）の書込みデータは、フラッシュメモリ２のユーザー領域に書込まれる。
【００５４】
誤り訂正符号・復号器２４に転送された５１２バイト（４０９６ビット）の書込みデータには、４ビットのダミーデータが付加される。誤り訂正符号・復号器２４は、４ビットのダミーデータが付加された４１００ビットの書込みデータに対する誤り訂正符号を生成する。生成された８０ビットの誤り訂正符号には、マスク回路２５で第１の変換処理が施され、第１の変換処理が施された誤り訂正符号（ＥＣＣ−Ｍ）が、フラッシュメモリ２の冗長領域に書込まれる。
【００５５】
誤り訂正符号・復号器２４は、４１８シンボルに対して、５シンボルの誤り検出と、４シンボルの誤り訂正が可能なリードソロモン符号を使用している。ここで、１シンボルは１０ビットに対応し、４１８シンボルのうち４１０シンボルは、書込みデータに割当てられ、８シンボルは誤り訂正符号に割当てられる。
【００５６】
書込みデータに割当てられた４１０シンボルは、４１００ビットに対応するため、誤り訂正符号・復号器２４に転送する５１２バイト（４０９６ビット）の書込みデータ（ユーザデータ）に、４ビットのダミーデータを付加している。このダミーデータの論理値については、適宜設定すればよい。
【００５７】
マスク回路２５では、フラッシュメモリ２のユーザー領域に書込まれる４０９６ビットのビットデータが、全て消去状態（論理値の"１"）のときに、第１の変換処理が施された後の８０ビットのビットデータが、全て消去状態（論理値の"１"）になるような変換処理が施される。リードソロモン符号を用いた場合、４０９６ビットのビットデータが、全て論理値の"１"のときに、誤り訂正符号・復号器２４で生成される８０ビットのビットデータが、全て論理値の"１"になることはないが、マスク回路２５で施される第１の変換処理を適宜設定すれば、第１の変換処理を施した後の誤り訂正符号のビットデータを、全て論理値の"１"に対応させることができる。
【００５８】
尚、ダミーデータの設定によって、誤り訂正符号・復号器２４で生成される誤り訂正符号は変わるが、４ビットのダミーデータをどのように設定しても、８０ビットのビットデータが、全て論理値の"１"になることはない。
【００５９】
次に、図４を参照して、読出し処理におけるＥＣＣブロック１１の動作を説明する。
フラッシュメモリ２のユーザー領域から読み出されたユーザーデータは、バッファ９に保持されると共に、誤り訂正符号・復号器２４にも入力される。誤り訂正符号・復号器２４に入力される４０９６ビットのビットデータには、書込み処理の場合と同様に４ビットのダミーデータが付加される。
【００６０】
一方、冗長領域から読み出された誤り訂正符号（ＥＣＣ−Ｍ）は、マスク回路２５で、第２の変換処理が施された後、ＥＣＣレジスタ２２に保持されると共に、誤り訂正符号・復号器２４にも入力される。第２の変換処理では、冗長領域から読み出された誤り訂正符号を、第１の変換処理を施す前の誤り訂正符号に戻すような変換処理が行われる。つまり、書込み処理のときに、誤り訂正符号・復号器２４で生成された誤り訂正符号と同じ誤り訂正符号（第１の変換処理を施す前の誤り訂正符号）が、読み出した４０９６ビットのユーザーデータと４ビットのダミーデータに続いて、誤り訂正符号・復号器２４に入力される。
【００６１】
誤り訂正符号・復号器２４では、入力された４０９６ビットのユーザーデータ、４ビットのダミーデータ、及び８０ビットの誤り訂正符号に基づいて、ユーザーデータ及び誤り訂正符号に含まれる誤りの検出が行われ、訂正可能な誤りが検出された場合は、バッファ９に保持されているユーザーデータ、又はＥＣＣレジスタ２２に保持されている誤り訂正符号を訂正する。この際、誤りの検出と訂正は、シンボル（１０ビット）単位で行われる。
【００６２】
図５は、誤り訂正符号・復号器２４が、４１８０ビットのデータを保持することができるデータ保持手段を備えている場合を示している。
この場合、ユーザー領域から読み出されたユーザーデータと、マスク回路２５で第２の変換処理がされた誤り訂正符号は、誤り訂正符号・復号器２４だけに入力され、誤り訂正符号・復号器２４内のデータ保持手段に保持される。
【００６３】
図４の場合と同様に、ユーザーデータ、ダミーデータ、及び誤り訂正符号に基づいた誤りの検出が行われ、訂正可能な誤りが検出された場合は、誤り訂正符号・復号器２４内のデータ保持手段に保持されているユーザーデータや誤り訂正符号が訂正される。その後、ユーザーデータと誤り訂正符号は、バッファ９とＥＣＣレジスタ２２にそれぞれ転送される。
【００６４】
次に、図６〜９を参照して、マスク回路２５の設定方法について説明する。
図６は、第１の変換処理の概要を示す説明図である。
図７は、第２の変換処理の概要を示す説明図である。
【００６５】
マスク回路２５は、マスクデータを出力するマスクデータ出力回路２５ａと、排他的論理和を出力する論理回路２５ｂとで構成されている。
第１の変換処理の場合（図６参照）、誤り訂正符号・復号器２４から出力された誤り訂正符号（ＥＣＣ）が、論理回路２５ｂに入力され、論理回路２５ｂで誤り訂正符号とマスクデータとの排他的論理和の演算処理が行われる。論理回路２５ｂから出力された演算処理後の誤り訂正符号（ＥＣＣ−Ｍ）は、フラッシュメモリ２の冗長領域に書込まれる。
【００６６】
第２の変換処理の場合（図７参照）、フラッシュメモリ２の冗長領域から読み出された誤り訂正符号（ＥＣＣ−Ｍ）が、論理回路２５ｂに入力され、論理回路２５ｂでマスクデータとの排他的論理和の演算処理が行われる。この構成では、第１の変換処理と第２の変換処理で、同じマスクデータが用いられている。同じマスクデータを用いて、第１の変換処理を施した誤り訂正符号（ＥＣＣ−Ｍ）に対して、第２の誤り訂正符号を施すと、第１の変換処理を施す前の誤り訂正符号（ＥＣＣ）が得られる。この第１の変換処理を施す前の誤り訂正符号（ＥＣＣ）は、誤り訂正符号・復号器２４に入力される。
【００６７】
次に、リードソロモン符号を使用した場合のマスクデータについて説明する。
図８は、ＥＣＣシンボルとマスクデータの対応関係を示す図である。
４１８シンボルに対して、５シンボルの誤り検出と、４シンボルの誤り訂正が可能なリードソロモン符号を使用した場合のマスクデータと演算処理前後の誤り訂正符号は、図８のようになる。ここで、誤り訂正符号はシンボル毎に示されており、マスクデータもこれに合わせて１０ビット毎に示している。例示されている８シンボルの誤り訂正符号は、ユーザーデータとして与えられる４０９６ビットのビットデータが、全て消去状態（論理値の"１"）のときの誤り訂正符号であり、４ビットのダミーデータは、全て論理値の"０"に設定されている。
【００６８】
誤り訂正符号のシンボルＥＣＣ０〜ＥＣＣ７には、それぞれに設定されたマスクデータとの排他的論理和の演算処理が施される。ＥＣＣ０のシンボル０９４ｈ（１６進数表示）には、マスクデータ３６Ｂｈ（１６進数表示）が割当てられ、ＥＣＣ１のシンボル１Ｂ６ｈ（１６進数表示）には、マスクデータ２４９ｈ（１６進数表示）が割当てられる。
【００６９】
ＥＣＣ２のシンボル０ＢＢｈ（１６進数表示）には、マスクデータ３４４ｈ（１６進数表示）が割当てられ、ＥＣＣ３のシンボル０３Ｅｈ（１６進数表示）には、マスクデータ３Ｃ１ｈ（１６進数表示）が割当てられる。ＥＣＣ４のシンボル０Ｂ７ｈ（１６進数表示）には、マスクデータ３４８ｈ（１６進数表示）が割当てられ、ＥＣＣ５のシンボル２９７ｈ（１６進数表示）には、マスクデータ１６８ｈ（１６進数表示）が割当てられる。ＥＣＣ６のシンボル１５３ｈ（１６進数表示）には、マスクデータ２ＡＣｈ（１６進数表示）が割当てられ、ＥＣＣ７のシンボル２Ｄ４ｈ（１６進数表示）には、マスクデータ１２Ｂｈ（１６進数表示）が割当てられる。
【００７０】
図９は、排他的論理和の演算処理を説明するための図であり、ＥＣＣのシンボルとマスタデータと演算処理後のシンボルとを２進数で示している。
ＥＣＣ０のシンボル０９４ｈ（１６進数表示）、ＥＣＣ０に割当てられたマスクデータ３６Ｂｈ（１６進数表示）、及びこれらの演算処理後のシンボル（ＥＣＣ−Ｍ）を２進数で示すと、図９のようになる。排他的論理和の演算処理では、誤り訂正符号のシンボルとマスクデータが、ビット毎に比較され、論理値が等しいときは、論理値の"０"が出力され、論理値が異なるときは、論理値の"１"が出力される。
【００７１】
０９４ｈ（１６進数表示）と３６Ｂｈ（１６進数表示）は、全てのビットの論理値が異なるので、演算処理後のシンボル（ＥＣＣ−Ｍ）は、３ＦＦｈ（１６進数表示）になる。ＥＣＣ１〜７のシンボルと、これらに割当てられているそれぞれのマスクデータも、対応するビットの論理値が全て異なるので、演算処理後のシンボル（ＥＣＣ−Ｍ）は、上記と同様に全て３ＦＦｈ（１６進数表示）になる。
【００７２】
図１０は、排他的論理和の演算処理を説明するための図であり、演算処理後のシンボルとマスタデータとＥＣＣのシンボルとを２進数で示している。
第２の変換処理、つまり、ＥＣＣ０に割当てられたマスクデータ３６Ｂｈ（１６進数表示）と演算処理後のシンボル（ＥＣＣ−Ｍ）３ＦＦｈ（１６進数表示）との排他的論理和の演算処理を行った場合、ＥＣＣ０のシンボル０９４ｈ（１６進数表示）が得られる。つまり、演算処理後のシンボル（ＥＣＣ−Ｍ）とマスクデータとの排他的論理和の演算処理を行った場合には、演算処理前のシンボル（ＥＣＣ）が得られる。
【００７３】
尚、書込み処理のときに、誤り訂正符号・復号器２４から出力される誤り訂正符号に対して施される第１の変換処理は、ユーザーデータのビットデータが、全て消去状態（論理値の"１"）のときに、変換処理後の誤り訂正符号のビットデータが、全て消去状態（論理値の"１"）になるような変換処理であれば、特に限定されることはない。又、読出し処理のときに、フラッシュメモリ２から読み出された誤り訂正符号に対して施される第２の変換処理は、第１の変換処理を施す前の誤り訂正符号を得ることができる変換処理であれば、特に限定されることはない。
【００７４】
上述のようにすれば、４シンボルの誤り訂正、５シンボルの誤り検出能力を持つリードソロモン符号を、誤り訂正符号として用いることができる。この設定では、４シンボル以下の誤りは訂正することができるが、５シンボル以上の誤りは訂正することができない。従って、フラッシュメモリ２から読み出されたデータに含まれる誤りが４シンボル以下のうちに、訂正後のデータを再書込みしておく必要がある。
【００７５】
仮に、フラッシュメモリ２から読み出されたデータに含まれる誤りが４シンボルのときに再書込みを行わず放置し、その後、フラッシュメモリ２の劣化が進行して、次にそのデータを読み出したときに読み出されたデータに含まれる誤りが５シンボルになっていた場合には誤りを訂正することができなくなる。
【００７６】
訂正後のデータを再書込みする場合には、元のデータが書込まれていたブロックをブロック消去した後、そのブロックに訂正後のデータを書込んでも、別の消去済ブロックに書込んでもよい。論理アドレスと物理アドレスの対応関係をブロック単位で管理している場合には、ブロック内の特定のページからデータを読み出したときにだけ誤りが検出された場合であっても、他のページに書込まれているデータも再書込みしなければならないことが多い。
【００７７】
このような場合は、元のデータが書込まれていたブロック内のページから順次データを読出し、読み出されたデータ（誤りが検出された場合は、訂正後のデータ）を順次別の消去済ブロックに書込み、全てのデータ転送（元のデータが書込まれていたブロックから別の消去済ブロックへのデータ転送）が終了した後、元のデータが書込まれていたブロックをブロック消去する（又は元のデータが書込まれていたブロックに書込まれているデータが無効であることを示す情報を設定する）。
【００７８】
上述のように誤り訂正符号により４シンボルの誤り訂正が可能な場合、読み出されたデータに含まれる誤りが１シンボルのときに訂正後のデータを再書込みしても、読み出されたデータに含まれる誤りが２シンボルのときに訂正後のデータを再書込みしても、読み出されたデータに含まれる誤りが３シンボルのときに訂正後のデータを再書込みしても、又は読み出されたデータに含まれる誤りが４シンボルのときに訂正後のデータを再書込みしてもよい。
【００７９】
しかしながら、消去と書込みを行う回数が増加するのに伴い、フラッシュメモリ２の劣化が進行するため、消去と書込みを行う回数は、できるかぎり少ない方が好ましい。従って、読み出されたデータに含まれる誤りが１シンボルのときは再書込みを行わず、読み出されたデータに含まれる誤りが４シンボルのときは再書込みを行うようにする方が、消去と書込みを行う回数を少なくすることができるため、フラッシュメモリ２の劣化を抑制する面では好ましい。
【００８０】
一方、フラッシュメモリ２に書込まれているデータの信頼性という面では、読み出されたデータに含まれる誤りのシンボル数が少ないうちに再書込みを行うようにする方が好ましい。
【００８１】
従って、読み出されたデータに含まれる誤りのシンボル数が幾つ以上になったときに再書込みを行うかは、フラッシュメモリ２の劣化を抑制する面とフラッシュメモリ２に書込まれているデータの信頼性という面の双方を考慮して決定することが好ましい。
【００８２】
例えば、フラッシュメモリ２に書込まれているデータの信頼性を重視する場合には、読み出されたデータに含まれる誤りが２シンボル以上になったときに再書込みを行うように設定し、フラッシュメモリ２の劣化の抑制を重視したい場合には、読み出されたデータに含まれる誤りが４シンボル以上になったときに再書込みを行うように設定すればよい。
【００８３】
又、フラッシュメモリ２の使用期間が長くなるのに伴い劣化の進行速度が速くなる場合もあるので、再書込みを行うシンボル数の設定は、適宜変更できるようにしておくことが好ましい。
【００８４】
例えば、使用開始時に読み出されたデータに含まれる誤りが４シンボル以上になったときに再書込みを行うように設定し、その後、使用時間等を考慮して読み出されたデータに含まれる誤りが３シンボル以上になったとき又は２シンボル以上になったときに再書込みを行うように設定を変更してもよい。
【００８５】
リードソロモン符号を誤り訂正符号として用いた場合には、シンボル単位で誤りの検出と訂正が行われるが、ＢＣＨ符号やハミング符号を誤り訂正符号として用いた場合には、ビット単位で誤りの検出と訂正が行われる。従って、ＢＣＨ符号やハミング符号を誤り訂正符号として用いた場合には、読み出されたデータに含まれる誤りのビット数が幾つ以上になったときに再書込みを行うかを設定する。
【００８６】
例えば、ＢＣＨ符号を誤り訂正符号として用いて、２５６バイトに対して３ビットの誤り訂正、４ビットの誤り検出ができるように設定した場合には、再書込みを行う誤りのビット数を以下のように設定することができる。この例では、各ページから読み出されたデータの誤り訂正は２５６バイト毎に区分して行われるため、1ページのユーザ領域が５１２バイトであれば、２つの区分のそれぞれについて誤り訂正が行われる。
【００８７】
従って、読み出されたデータに含まれる誤りのビット数が幾つ以上になったときに再書込みを行うかを設定する場合に、１ページ内のいずれかの区分に含まれる誤りのビット数が３ビットになったときに再書込みを行うというように設定してもよい。又、区分毎の判断を行わずに各ページから読み出されたデータに含まれる誤りの総和が３ビット以上になったときに再書込みを行うというように設定してもよい。但し、いずれかの区分に含まれる誤りのビット数が４ビットになってしまったときは、誤り訂正をできなくなるので、再書込みは行わない。
【００８８】
尚、誤り訂正符号に基づいて訂正可能なシンボル数やビット数は、冗長領域に書込まれる誤り訂正符号の容量（ビット数）の大小に応じて適宜設定することができる。但し、誤り訂正符号に基づいて訂正可能なシンボル数やビット数を増やすにつれて誤り訂正符号の容量が増大するため、冗長領域内の誤り訂正符号に割当てることのできる領域の大きさを考慮して訂正可能なシンボル数やビット数を設定しなければならない。
【図面の簡単な説明】
【００８９】
【図１】本発明の実施形態に係るフラッシュメモリシステムのブロック図である。
【図２】フラッシュメモリのブロックとページの構成を示す図である。
【図３】ＥＣＣブロックの処理を説明するためのブロック図である。
【図４】ＥＣＣブロックの処理を説明するためのブロック図である。
【図５】ＥＣＣブロックの処理を説明するためのブロック図である。
【図６】第１の変換処理の概要を示す説明図である。
【図７】第２の変換処理の概要を示す説明図である。
【図８】ＥＣＣシンボルとマスクデータの対応関係を示す図である。
【図９】排他的論理和の演算処理を説明するための図である。
【図１０】排他的論理和の演算処理を説明するための図である。
【符号の説明】
【００９０】
１  フラッシュメモリシステム
２  フラッシュメモリ
３  メモリコントローラ
４  ホストシステム
５  ホストインターフェース制御ブロック
６  マイクロプロセッサ
７  ホストインターフェースブロック
８  ワークエリア
９  バッファ
１０  フラッシュメモリインターフェースブロック
１１  ＥＣＣブロック
１２  フラッシュメモリシーケンサブロック
１３  外部バス
１４  内部バス
２２  ＥＣＣレジスタ
２３  管理データレジスタ
２４  誤り訂正符号・復号器
２５  マスク回路
２５ａ  マスクデータ出力回路
２５ｂ  論理回路
【図１】
2006221334.tif 000003
【図２】
2006221334.tif 000004
【図３】
2006221334.tif 000005
【図４】
2006221334.tif 000006
【図５】
2006221334.tif 000007
【図６】
2006221334.tif 000008
【図７】
2006221334.tif 000009
【図８】
2006221334.tif 000010
【図９】
2006221334.tif 000011
【図１０】
2006221334.tif 000012