(57)【要約】【課題】バーストエラーが発生したために、読み出されたデータに含まれる全てのビットの論理値が、“１”又は“０”になったときに、そのバーストエラーの発生を高い確率で検出すること。【解決手段】ビットエラーを訂正するためのＥＣＣに符号化されたデータと共に、論理値０のビットと論理値１のビットの双方を複数ビットずつ含む整合性符号をフラッシュメモリ内のページに書き込む。そして、そのデータをフラッシュメモリから読み出したときに、そのデータ及びそのデータと共に書き込まれた整合性符号に含まれる全てのビットが論理値０のビットであるとき、又は、その全てのビットが論理値１のビットであるとき、ＥＣＣに基づいて訂正不能エラーの発生が検出されなかった場合でも、訂正不能エラーが発生したと判断し、ホストシステムにその旨を通知する。【選択図】図５
2012003569.tif 000002
【特許請求の範囲】
【請求項１】
ホストシステムからの要求に従って、フラッシュメモリに対するアクセスを制御するメモリコントローラであって、
所定データ長のデータ毎に、当該データに生じるビットエラーを訂正するため、当該データを符号化する手段であって、この符号化により、当該データに冗長ビットが付加された第1の符号化データを出力する第１の符号化手段と、
論理値０のビットと論理値１のビットの双方を複数ビットずつ含む所定データパターンの符号であるデータパターン符号を出力するデータパターン符号出力手段と、
前記第1の符号化データ及び前記データパターン符号をフラッシュメモリ内のページに書き込む書き込み手段と、
前記第1の符号化データ及び前記データパターン符号をフラッシュメモリ内のページから読み出す読み出し手段と、
前記読み出し手段により読み出された前記第1の符号化データを復号化する手段であって、この復号化により、当該第1の符号化データに含まれるデータに生じたビットエラーを訂正する第１の復号化手段と、
前記読み出し手段により読み出された前記第1の符号化データ及び前記データパターン符号に含まれる全てのビットが、論理値０のビットであるときにエラー検出信号を出力する第１の検出手段と、
前記読み出し手段により読み出された前記第1の符号化データ及び前記データパターン符号に含まれる全てのビットが、論理値１のビットであるときにエラー検出信号を出力する第２の検出手段と、
ホストシステムに訂正不能エラーが発生したことを通知する訂正不能エラー通知手段とを備え、
前記訂正不能エラー通知手段は、前記第１の復号化手段が訂正不能エラーを検出しなかった場合でも、前記第１の検出手段又は前記第２の検出手段がエラー検出信号を出力したときに、ホストシステムに訂正不能エラーが発生したことを通知する、
ことを特徴とするメモリコントローラ。
【請求項２】
ホストシステムからの要求に従って、フラッシュメモリに対するアクセスを制御するメモリコントローラであって、
所定データ長のデータ毎に、当該データに生じるビットエラーを訂正するため、当該データを符号化する手段であって、この符号化により、当該データに冗長ビットが付加された第1の符号化データを出力する第１の符号化手段と、
前記所定データ長のデータ毎に、当該データの巡回冗長検査符号である第１の巡回冗長検査符号を生成する第１の巡回冗長検査符号生成手段と、
前記第１の巡回冗長検査符号に含まれる各ビットの論理値を反転させた符号である反転符号を生成する反転符号生成手段と、
前記第1の符号化データ、前記第１の巡回冗長検査符号及び前記反転符号をフラッシュメモリ内のページに書き込む書き込み手段と、
前記第1の符号化データ、前記第１の巡回冗長検査符号及び前記反転符号をフラッシュメモリ内のページから読み出す読み出し手段と、
前記読み出し手段により読み出された前記第1の符号化データを復号化する手段であって、この復号化により、当該第1の符号化データに含まれるデータに生じたビットエラーを訂正する第１の復号化手段と、
前記第１の復号化手段により復号化されたデータの巡回冗長検査符号である第２の巡回冗長検査符号を生成する第２の巡回冗長検査符号生成手段と、
前記読み出し手段により読み出された前記第1の符号化データ、前記第１の巡回冗長検査符号及び前記反転符号に含まれる全てのビットが、論理値０のビットであるときにエラー検出信号を出力する第１の検出手段と、
前記読み出し手段により読み出された前記第1の符号化データ、前記第１の巡回冗長検査符号及び前記反転符号に含まれる全てのビットが、論理値１のビットであるときにエラー検出信号を出力する第２の検出手段と、
前記読み出し手段により読み出された前記第１の巡回冗長検査符号と前記第２の巡回冗長検査符号生成手段により生成された前記第２の巡回冗長検査符号を比較し、両者が不一致のときにエラー検出信号を出力する第３の検出手段と、
ホストシステムに訂正不能エラーが発生したことを通知する訂正不能エラー通知手段とを備え、
前記訂正不能エラー通知手段は、前記第１の復号化手段が訂正不能エラーを検出しなかった場合でも、前記第１の検出手段、前記第２の検出手段及び前記第３の検出手段のうち、少なくとも１つがエラー検出信号を出力したときに、ホストシステムに訂正不能エラーが発生したことを通知する、
ことを特徴とするメモリコントローラ。
【請求項３】
前記第１の巡回冗長検査符号及び前記反転符号に生じるビットエラーを訂正するため、これらの符号を符号化する手段であって、この符号化により、これらの符号に冗長ビットが付加された第２の符号化データを出力する第２の符号化手段と、
前記第２の符号化データを復号化する手段であって、この復号化により、当該第２の符号化データに含まれる前記第１の巡回冗長検査符号及び前記反転符号に生じたビットエラーを訂正する第２の復号化手段とを更に備え、
前記書き込み手段は、前記第１の巡回冗長検査符号及び前記反転符号に代えて、第２の符号化データをフラッシュメモリ内のページに書き込み、
前記読み出し手段は、前記第１の巡回冗長検査符号及び前記反転符号に代えて、第２の符号化データをフラッシュメモリ内のページから読み出す、
ことを特徴とする請求項２に記載のメモリコントローラ。
【請求項４】
ホストシステムからの要求に従って、フラッシュメモリに対するアクセスを制御するメモリコントローラであって、
所定データ長のデータ毎に、当該データに論理値０のビットと論理値１のビットの双方を複数ビットずつ含む所定データパターンの符号であるデータパターン符号を付加するデータパターン符号付加手段と、
前記所定データ長のデータ毎に、当該データ及びこのデータに付加される前記データパターン符号に生じるビットエラーを訂正するため、当該データ及び当該データパターン符号を併せて符号化する手段であって、この符号化により、当該データ及び当該データパターン符号に冗長ビットが付加された第1の符号化データを出力する第１の符号化手段と、
前記第1の符号化データをフラッシュメモリ内のページに書き込む書き込み手段と、
前記第1の符号化データをフラッシュメモリ内のページから読み出す読み出し手段と、
前記読み出し手段により読み出された前記第1の符号化データのうち、前記データパターン符号に対応する全てのビットが、論理値０のビットであるときにエラー検出信号を出力する第１の検出手段と、
前記読み出し手段により読み出された前記第1の符号化データのうち、前記データパターン符号に対応する全てのビットが、論理値１のビットであるときにエラー検出信号を出力する第２の検出手段と、
前記読み出し手段により読み出された前記第1の符号化データを復号化する手段であって、この復号化により、当該第1の符号化データに含まれるデータに生じたビットエラーを訂正する第１の復号化手段と、
ホストシステムに訂正不能エラーが発生したことを通知する訂正不能エラー通知手段とを備え、
前記データパターン符号は、前記第１の復号化手段の訂正能力を超えるビット数の論理値０のビットと論理値１のビットをそれぞれ含み、
前記訂正不能エラー通知手段は、前記第１の検出手段又は前記第２の検出手段がエラー検出信号を出力したときに、ホストシステムに訂正不能エラーが発生したことを通知する、
ことを特徴とするメモリコントローラ。
【請求項５】
前記データパターン符号付加手段は、前記所定データ長のデータ毎に、当該データの巡回冗長検査符号とこの巡回冗長検査符号に含まれる各ビットの論理値を反転させた符号である反転符号を生成し、当該巡回冗長検査符号及び当該反転符号を前記データパターン符号として前記所定データ長のデータに付加する、
ことを特徴とする請求項４に記載のメモリコントローラ。
【請求項６】
請求項１乃至５のいずれか１項に記載のメモリコントローラと、
このメモリコントローラにより制御されるフラッシュメモリを備えるフラッシュメモリシステム。
【請求項７】
ホストシステムからの要求に従って、フラッシュメモリに対するアクセスを制御するフラッシュメモリの制御方法であって、
所定データ長のデータ毎に、当該データに生じるビットエラーを訂正するため、当該データを符号化するステップであって、この符号化により、当該データに冗長ビットが付加された第1の符号化データを出力する第１の符号化ステップと、
論理値０のビットと論理値１のビットの双方を複数ビットずつ含む所定データパターンの符号であるデータパターン符号を出力するデータパターン符号出力ステップと、
前記第1の符号化データ及び前記データパターン符号をフラッシュメモリ内のページに書き込む書き込みステップと、
前記第1の符号化データ及び前記データパターン符号をフラッシュメモリ内のページから読み出す読み出しステップと、
前記読み出しステップにより読み出された前記第1の符号化データを復号化するステップであって、この復号化により、当該第1の符号化データに含まれるデータに生じたビットエラーを訂正する第１の復号化ステップと、
前記読み出しステップにより読み出された前記第1の符号化データ及び前記データパターン符号に含まれる全てのビットが、論理値０のビットであるときにエラー検出信号を出力する第１の検出ステップと、
前記読み出しステップにより読み出された前記第1の符号化データ及び前記データパターン符号に含まれる全てのビットが、論理値１のビットであるときにエラー検出信号を出力する第２の検出ステップと、
ホストシステムに訂正不能エラーが発生したことを通知する訂正不能エラー通知ステップとを備え、
前記訂正不能エラー通知ステップでは、前記第１の復号化ステップにおいて訂正不能エラーが検出されなかった場合でも、前記第１の検出ステップ又は前記第２の検出ステップにおいてエラー検出信号が出力されたときに、ホストシステムに訂正不能エラーが発生したことを通知する、
ことを特徴とするフラッシュメモリの制御方法。
【請求項８】
ホストシステムからの要求に従って、フラッシュメモリに対するアクセスを制御するフラッシュメモリの制御方法であって、
所定データ長のデータ毎に、当該データに生じるビットエラーを訂正するため、当該データを符号化するステップであって、この符号化により、当該データに冗長ビットが付加された第1の符号化データを出力する第１の符号化ステップと、
前記所定データ長のデータ毎に、当該データの巡回冗長検査符号である第１の巡回冗長検査符号を生成する第１の巡回冗長検査符号生成ステップと、
前記第１の巡回冗長検査符号に含まれる各ビットの論理値を反転させた符号である反転符号を生成する反転符号生成ステップと、
前記第1の符号化データ、前記第１の巡回冗長検査符号及び前記反転符号をフラッシュメモリ内のページに書き込む書き込みステップと、
前記第1の符号化データ、前記第１の巡回冗長検査符号及び前記反転符号をフラッシュメモリ内のページから読み出す読み出しステップと、
前記読み出しステップにより読み出された前記第1の符号化データを復号化するステップであって、この復号化により、当該第1の符号化データに含まれるデータに生じたビットエラーを訂正する第１の復号化ステップと、
前記第１の復号化ステップにより復号化されたデータの巡回冗長検査符号である第２の巡回冗長検査符号を生成する第２の巡回冗長検査符号生成ステップと、
前記読み出しステップにより読み出された前記第1の符号化データ、前記第１の巡回冗長検査符号及び前記反転符号に含まれる全てのビットが、論理値０のビットであるときにエラー検出信号を出力する第１の検出ステップと、
前記読み出しステップにより読み出された前記第1の符号化データ、前記第１の巡回冗長検査符号及び前記反転符号に含まれる全てのビットが、論理値１のビットであるときにエラー検出信号を出力する第２の検出ステップと、
前記読み出しステップにより読み出された前記第１の巡回冗長検査符号と前記第２の巡回冗長検査符号生成手段により生成された前記第２の巡回冗長検査符号を比較し、両者が不一致のときにエラー検出信号を出力する第３の検出ステップと、
ホストシステムに訂正不能エラーが発生したことを通知する訂正不能エラー通知ステップとを備え、
前記訂正不能エラー通知ステップでは、前記第１の復号化ステップにおいて訂正不能エラーが検出されなかった場合でも、前記第１の検出ステップ、前記第２の検出ステップ及び前記第３の検出ステップのうち、少なくとも１つのステップにおいてエラー検出信号が出力されたときに、ホストシステムに訂正不能エラーが発生したことを通知する、
ことを特徴とするフラッシュメモリの制御方法。
【請求項９】
前記第１の巡回冗長検査符号及び前記反転符号に生じるビットエラーを訂正するため、これらの符号を符号化するステップであって、この符号化により、これらの符号に冗長ビットが付加された第２の符号化データを出力する第２の符号化ステップと、
前記第２の符号化データを復号化するステップであって、この復号化により、当該第２の符号化データに含まれる前記第１の巡回冗長検査符号及び前記反転符号に生じたビットエラーを訂正する第２の復号化ステップとを更に備え、
前記書き込みステップでは、前記第１の巡回冗長検査符号及び前記反転符号に代えて、第２の符号化データをフラッシュメモリ内のページに書き込み、
前記読み出しステップでは、前記第１の巡回冗長検査符号及び前記反転符号に代えて、第２の符号化データをフラッシュメモリ内のページから読み出す、
ことを特徴とする請求項６に記載のフラッシュメモリの制御方法。
【請求項１０】
ホストシステムからの要求に従って、フラッシュメモリに対するアクセスを制御するフラッシュメモリの制御方法であって、
所定データ長のデータ毎に、当該データに論理値０のビットと論理値１のビットの双方を複数ビットずつ含む所定データパターンの符号であるデータパターン符号を付加するデータパターン符号付加ステップと、
前記所定データ長のデータ毎に、当該データ及びこのデータに付加される前記データパターン符号に生じるビットエラーを訂正するため、当該データ及び当該データパターン符号を併せて符号化するステップであって、この符号化により、当該データ及び当該データパターン符号に冗長ビットが付加された第1の符号化データを出力する第１の符号化ステップと、
前記第1の符号化データをフラッシュメモリ内のページに書き込む書き込みステップと、
前記第1の符号化データをフラッシュメモリ内のページから読み出す読み出しステップと、
前記読み出しステップにより読み出された前記第1の符号化データのうち、前記データパターン符号に対応する全てのビットが、論理値０のビットであるときにエラー検出信号を出力する第１の検出ステップと、
前記読み出しステップにより読み出された前記第1の符号化データのうち、前記データパターン符号に対応する全てのビットが、論理値１のビットであるときにエラー検出信号を出力する第２の検出ステップと、
前記読み出しステップにより読み出された前記第1の符号化データを復号化するステップであって、この復号化により、当該第1の符号化データに含まれるデータに生じたビットエラーを訂正する第１の復号化ステップと、
ホストシステムに訂正不能エラーが発生したことを通知する訂正不能エラー通知ステップとを備え、
前記データパターン符号は、前記第１の復号化ステップにおける訂正能力を超えるビット数の論理値０のビットと論理値１のビットをそれぞれ含み、
前記訂正不能エラー通知ステップでは、前記第１の検出ステップ又は前記第２の検出ステップにおいてエラー検出信号を出力したときに、ホストシステムに訂正不能エラーが発生したことを通知する、
ことを特徴とするフラッシュメモリの制御方法。
【請求項１１】
前記データパターン符号付加ステップでは、前記所定データ長のデータ毎に、当該データの巡回冗長検査符号とこの巡回冗長検査符号に含まれる各ビットの論理値を反転させた符号である反転符号を生成し、当該巡回冗長検査符号及び当該反転符号を前記データパターン符号として前記所定データ長のデータに付加する、
ことを特徴とする請求項１１に記載のフラッシュメモリの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フラッシュメモリに書き込まれるデータに生じるビットエラーを訂正する機能と、当該訂正における誤訂正を検出する機能を有するメモリコントローラ及びメモリコントローラを備えるフラッシュメモリシステム、並びにフラッシュメモリの制御方法に関する。
【背景技術】
【０００２】
フラッシュメモリに格納されるデータに生じるビットエラーを訂正する方法として、リードソロモン符号、ＢＣＨ符号等の誤り訂正符号（ECC : Error Correcting Code）に基づいた訂正方法が知られている。この誤り訂正符号に基づいた訂正方法においては、符号化の際に付加される冗長ビットのビット数に応じて訂正可能なビットエラーのビット数（以下、訂正能力と言う。）が決まる。従って、訂正能力を超えるビット数のビットエラーが生じた場合には、そのビットエラーを訂正することができない。このような場合に、この誤り訂正符号に基づいた訂正方法により正常に処理できる範囲であれば、訂正能力を超えるビット数のビットエラーが生じたことが検出され、ビットエラーの訂正処理は行われない。しかしながら、正常に処理できる範囲を超える多数のビットエラーが生じたときには、訂正能力を超えるビット数のビットエラーが生じたことが検出されずに、ビットエラーの訂正処理が行われてしまうことがある。このような場合、訂正能力を超えるビット数のビットエラーが生じたことが看過されてしまうだけでなく、正常にビットエラーが訂正されていないデータが、正常にビットエラーが訂正されたデータとして取り扱われてしまう。
【０００３】
このような問題を解決するため、特許文献１では、誤り訂正符号に基づいた訂正処理が行われた後に、再度、符号化の際に付加される冗長ビットを生成し、その冗長ビットに基づいて、その訂正処理が正常に行われたか否かを判断している。つまり、その訂正処理後のデータに基づいて、再度、符号化の際に付加される冗長ビットを生成し、その冗長ビットと元の冗長ビットを比較して、その訂正処理が正常に行われたか否かを判断している。
【０００４】
また、特許文献２では、誤り訂正符号に基づいた訂正処理が行われた後に、巡回冗長検査（CRC : Cyclic Redundancy Check）符号に基づいたビットエラーの検出処理を行うことにより、その訂正処理が正常に行われたか否かを判断している。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００３−２９８４２６号公報
【特許文献２】特開平５−２１８８８３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
プロセスの微細化、メモリセルの多値化により、フラッシュメモリは高密度化されたが、フラッシュメモリの記憶素子としての信頼性は低下している。つまり、フラッシュメモリからの読み出しデータに生じるランダムエラーの発生頻度が増加し、バーストエラーが発生することも珍しくなくなっている。
【０００７】
バーストエラーが発生したページでは、そのページ内の全てのビットの論理値が、“１”になってしまうことや、“０”になってしまうことがある。このような場合、ＢＣＨ符号等の誤り訂正符号に基づいた訂正処理では、訂正能力を超えるビット数のビットエラーが生じたことが検出されない。更に、訂正処理後に再度生成された冗長ビットに基づいたビットエラーの検出処理や、巡回冗長検査符号に基づいたビットエラーの検出処理でも、誤り訂正符号に基づいた訂正処理が正常に行われなかったことを検出することができない。このようなことは、ページ内の全てのビットの論理値が、“１”又は“０”にならなくても、訂正処理の単位データ（復号化の単位データ）及び巡回冗長検査符号に含まれる全てのビットの論理値が、“１”又は“０”になれば起こりうる。
【０００８】
そこで、本発明は、バーストエラーが発生したために、読み出されたデータに含まれる全てのビットの論理値が、“１”又は“０”になったときに、そのバーストエラーの発生を検出しうるメモリコントローラ及びメモリコントローラを備えるフラッシュメモリシステム、並びにフラッシュメモリの制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明の第１の側面に従う、メモリコントローラは、
ホストシステムからの要求に従って、フラッシュメモリに対するアクセスを制御するメモリコントローラであって、
所定データ長のデータ毎に、当該データに生じるビットエラーを訂正するため、当該データを符号化する手段であって、この符号化により、当該データに冗長ビットが付加された第1の符号化データを出力する第１の符号化手段と、
論理値０のビットと論理値１のビットの双方を複数ビットずつ含む所定データパターンの符号であるデータパターン符号を出力するデータパターン符号出力手段と、
前記第1の符号化データ及び前記データパターン符号をフラッシュメモリ内のページに書き込む書き込み手段と、
前記第1の符号化データ及び前記データパターン符号をフラッシュメモリ内のページから読み出す読み出し手段と、
前記読み出し手段により読み出された前記第1の符号化データを復号化する手段であって、この復号化により、当該第1の符号化データに含まれるデータに生じたビットエラーを訂正する第１の復号化手段と、
前記読み出し手段により読み出された前記第1の符号化データ及び前記データパターン符号に含まれる全てのビットが、論理値０のビットであるときにエラー検出信号を出力する第１の検出手段と、
前記読み出し手段により読み出された前記第1の符号化データ及び前記データパターン符号に含まれる全てのビットが、論理値１のビットであるときにエラー検出信号を出力する第２の検出手段と、
ホストシステムに訂正不能エラーが発生したことを通知する訂正不能エラー通知手段とを備え、
前記訂正不能エラー通知手段は、前記第１の復号化手段が訂正不能エラーを検出しなかった場合でも、前記第１の検出手段又は前記第２の検出手段がエラー検出信号を出力したときに、ホストシステムに訂正不能エラーが発生したことを通知する。
【００１０】
本発明の第２の側面に従う、メモリコントローラは、
ホストシステムからの要求に従って、フラッシュメモリに対するアクセスを制御するメモリコントローラであって、
所定データ長のデータ毎に、当該データに生じるビットエラーを訂正するため、当該データを符号化する手段であって、この符号化により、当該データに冗長ビットが付加された第1の符号化データを出力する第１の符号化手段と、
前記所定データ長のデータ毎に、当該データの巡回冗長検査符号である第１の巡回冗長検査符号を生成する第１の巡回冗長検査符号生成手段と、
前記第１の巡回冗長検査符号に含まれる各ビットの論理値を反転させた符号である反転符号を生成する反転符号生成手段と、
前記第1の符号化データ、前記第１の巡回冗長検査符号及び前記反転符号をフラッシュメモリ内のページに書き込む書き込み手段と、
前記第1の符号化データ、前記第１の巡回冗長検査符号及び前記反転符号をフラッシュメモリ内のページから読み出す読み出し手段と、
前記読み出し手段により読み出された前記第1の符号化データを復号化する手段であって、この復号化により、当該第1の符号化データに含まれるデータに生じたビットエラーを訂正する第１の復号化手段と、
前記第１の復号化手段により復号化されたデータの巡回冗長検査符号である第２の巡回冗長検査符号を生成する第２の巡回冗長検査符号生成手段と、
前記読み出し手段により読み出された前記第1の符号化データ、前記第１の巡回冗長検査符号及び前記反転符号に含まれる全てのビットが、論理値０のビットであるときにエラー検出信号を出力する第１の検出手段と、
前記読み出し手段により読み出された前記第1の符号化データ、前記第１の巡回冗長検査符号及び前記反転符号に含まれる全てのビットが、論理値１のビットであるときにエラー検出信号を出力する第２の検出手段と、
前記読み出し手段により読み出された前記第１の巡回冗長検査符号と前記第２の巡回冗長検査符号生成手段により生成された前記第２の巡回冗長検査符号を比較し、両者が不一致のときにエラー検出信号を出力する第３の検出手段と、
ホストシステムに訂正不能エラーが発生したことを通知する訂正不能エラー通知手段とを備え、
前記訂正不能エラー通知手段は、前記第１の復号化手段が訂正不能エラーを検出しなかった場合でも、前記第１の検出手段、前記第２の検出手段及び前記第３の検出手段のうち、少なくとも１つがエラー検出信号を出力したときに、ホストシステムに訂正不能エラーが発生したことを通知する。
【００１１】
本発明の第２の側面に従う、メモリコントローラは、
前記第１の巡回冗長検査符号及び前記反転符号に生じるビットエラーを訂正するため、これらの符号を符号化する手段であって、この符号化により、これらの符号に冗長ビットが付加された第２の符号化データを出力する第２の符号化手段と、
前記第２の符号化データを復号化する手段であって、この復号化により、当該第２の符号化データに含まれる前記第１の巡回冗長検査符号及び前記反転符号に生じたビットエラーを訂正する第２の復号化手段とを更に備え、
前記書き込み手段は、前記第１の巡回冗長検査符号及び前記反転符号に代えて、第２の符号化データをフラッシュメモリ内のページに書き込み、
前記読み出し手段は、前記第１の巡回冗長検査符号及び前記反転符号に代えて、第２の符号化データをフラッシュメモリ内のページから読み出すようにしてもよい。
【００１２】
本発明の第３の側面に従う、メモリコントローラは、
ホストシステムからの要求に従って、フラッシュメモリに対するアクセスを制御するメモリコントローラであって、
所定データ長のデータ毎に、当該データに論理値０のビットと論理値１のビットの双方を複数ビットずつ含む所定データパターンの符号であるデータパターン符号を付加するデータパターン符号付加手段と、
前記所定データ長のデータ毎に、当該データ及びこのデータに付加される前記データパターン符号に生じるビットエラーを訂正するため、当該データ及び当該データパターン符号を併せて符号化する手段であって、この符号化により、当該データ及び当該データパターン符号に冗長ビットが付加された第1の符号化データを出力する第１の符号化手段と、
前記第1の符号化データをフラッシュメモリ内のページに書き込む書き込み手段と、
前記第1の符号化データをフラッシュメモリ内のページから読み出す読み出し手段と、
前記読み出し手段により読み出された前記第1の符号化データのうち、前記データパターン符号に対応する全てのビットが、論理値０のビットであるときにエラー検出信号を出力する第１の検出手段と、
前記読み出し手段により読み出された前記第1の符号化データのうち、前記データパターン符号に対応する全てのビットが、論理値１のビットであるときにエラー検出信号を出力する第２の検出手段と、
前記読み出し手段により読み出された前記第1の符号化データを復号化する手段であって、この復号化により、当該第1の符号化データに含まれるデータに生じたビットエラーを訂正する第１の復号化手段と、
ホストシステムに訂正不能エラーが発生したことを通知する訂正不能エラー通知手段とを備え、
前記データパターン符号は、前記第１の復号化手段の訂正能力を超えるビット数の論理値０のビットと論理値１のビットをそれぞれ含み、
前記訂正不能エラー通知手段は、前記第１の検出手段又は前記第２の検出手段がエラー検出信号を出力したときに、ホストシステムに訂正不能エラーが発生したことを通知する。
【００１３】
本発明の第３の側面に従う、メモリコントローラは、
前記データパターン符号付加手段が、前記所定データ長のデータ毎に、当該データの巡回冗長検査符号とこの巡回冗長検査符号に含まれる各ビットの論理値を反転させた符号である反転符号を生成し、当該巡回冗長検査符号及び当該反転符号を前記データパターン符号として前記所定データ長のデータに付加するようにしてもよい。
【００１４】
本発明の第４の側面に従う、フラッシュメモリシステムは、
前記第１又は第２の側面に従うメモリコントローラと、
このメモリコントローラにより制御されるフラッシュメモリを備える。
【００１５】
本発明の第５の側面に従う、フラッシュメモリの制御方法は、
ホストシステムからの要求に従って、フラッシュメモリに対するアクセスを制御するフラッシュメモリの制御方法であって、
所定データ長のデータ毎に、当該データに生じるビットエラーを訂正するため、当該データを符号化するステップであって、この符号化により、当該データに冗長ビットが付加された第1の符号化データを出力する第１の符号化ステップと、
論理値０のビットと論理値１のビットの双方を複数ビットずつ含む所定データパターンの符号であるデータパターン符号を出力するデータパターン符号出力ステップと、
前記第1の符号化データ及び前記データパターン符号をフラッシュメモリ内のページに書き込む書き込みステップと、
前記第1の符号化データ及び前記データパターン符号をフラッシュメモリ内のページから読み出す読み出しステップと、
前記読み出しステップにより読み出された前記第1の符号化データを復号化するステップであって、この復号化により、当該第1の符号化データに含まれるデータに生じたビットエラーを訂正する第１の復号化ステップと、
前記読み出しステップにより読み出された前記第1の符号化データ及び前記データパターン符号に含まれる全てのビットが、論理値０のビットであるときにエラー検出信号を出力する第１の検出ステップと、
前記読み出しステップにより読み出された前記第1の符号化データ及び前記データパターン符号に含まれる全てのビットが、論理値１のビットであるときにエラー検出信号を出力する第２の検出ステップと、
ホストシステムに訂正不能エラーが発生したことを通知する訂正不能エラー通知ステップとを備え、
前記訂正不能エラー通知ステップでは、前記第１の復号化ステップにおいて訂正不能エラーが検出されなかった場合でも、前記第１の検出ステップ又は前記第２の検出ステップにおいてエラー検出信号が出力されたときに、ホストシステムに訂正不能エラーが発生したことを通知する。
【００１６】
本発明の第６の側面に従う、フラッシュメモリの制御方法は、
ホストシステムからの要求に従って、フラッシュメモリに対するアクセスを制御するフラッシュメモリの制御方法であって、
所定データ長のデータ毎に、当該データに生じるビットエラーを訂正するため、当該データを符号化するステップであって、この符号化により、当該データに冗長ビットが付加された第1の符号化データを出力する第１の符号化ステップと、
前記所定データ長のデータ毎に、当該データの巡回冗長検査符号である第１の巡回冗長検査符号を生成する第１の巡回冗長検査符号生成ステップと、
前記第１の巡回冗長検査符号に含まれる各ビットの論理値を反転させた符号である反転符号を生成する反転符号生成ステップと、
前記第1の符号化データ、前記第１の巡回冗長検査符号及び前記反転符号をフラッシュメモリ内のページに書き込む書き込みステップと、
前記第1の符号化データ、前記第１の巡回冗長検査符号及び前記反転符号をフラッシュメモリ内のページから読み出す読み出しステップと、
前記読み出しステップにより読み出された前記第1の符号化データを復号化するステップであって、この復号化により、当該第1の符号化データに含まれるデータに生じたビットエラーを訂正する第１の復号化ステップと、
前記第１の復号化ステップにより復号化されたデータの巡回冗長検査符号である第２の巡回冗長検査符号を生成する第２の巡回冗長検査符号生成ステップと、
前記読み出しステップにより読み出された前記第1の符号化データ、前記第１の巡回冗長検査符号及び前記反転符号に含まれる全てのビットが、論理値０のビットであるときにエラー検出信号を出力する第１の検出ステップと、
前記読み出しステップにより読み出された前記第1の符号化データ、前記第１の巡回冗長検査符号及び前記反転符号に含まれる全てのビットが、論理値１のビットであるときにエラー検出信号を出力する第２の検出ステップと、
前記読み出しステップにより読み出された前記第１の巡回冗長検査符号と前記第２の巡回冗長検査符号生成手段により生成された前記第２の巡回冗長検査符号を比較し、両者が不一致のときにエラー検出信号を出力する第３の検出ステップと、
ホストシステムに訂正不能エラーが発生したことを通知する訂正不能エラー通知ステップとを備え、
前記訂正不能エラー通知ステップでは、前記第１の復号化ステップにおいて訂正不能エラーが検出されなかった場合でも、前記第１の検出ステップ、前記第２の検出ステップ及び前記第３の検出ステップのうち、少なくとも１つのステップにおいてエラー検出信号が出力されたときに、ホストシステムに訂正不能エラーが発生したことを通知する。
【００１７】
本発明の第６の側面に従う、フラッシュメモリの制御方法は、
前記第１の巡回冗長検査符号及び前記反転符号に生じるビットエラーを訂正するため、これらの符号を符号化するステップであって、この符号化により、これらの符号に冗長ビットが付加された第２の符号化データを出力する第２の符号化ステップと、
前記第２の符号化データを復号化するステップであって、この復号化により、当該第２の符号化データに含まれる前記第１の巡回冗長検査符号及び前記反転符号に生じたビットエラーを訂正する第２の復号化ステップとを更に備え、
前記書き込みステップでは、前記第１の巡回冗長検査符号及び前記反転符号に代えて、第２の符号化データをフラッシュメモリ内のページに書き込み、
前記読み出しステップでは、前記第１の巡回冗長検査符号及び前記反転符号に代えて、第２の符号化データをフラッシュメモリ内のページから読み出すようにしてもよい。
【００１８】
本発明の第７の側面に従う、フラッシュメモリの制御方法は、
ホストシステムからの要求に従って、フラッシュメモリに対するアクセスを制御するフラッシュメモリの制御方法であって、
所定データ長のデータ毎に、当該データに論理値０のビットと論理値１のビットの双方を複数ビットずつ含む所定データパターンの符号であるデータパターン符号を付加するデータパターン符号付加ステップと、
前記所定データ長のデータ毎に、当該データ及びこのデータに付加される前記データパターン符号に生じるビットエラーを訂正するため、当該データ及び当該データパターン符号を併せて符号化するステップであって、この符号化により、当該データ及び当該データパターン符号に冗長ビットが付加された第1の符号化データを出力する第１の符号化ステップと、
前記第1の符号化データをフラッシュメモリ内のページに書き込む書き込みステップと、
前記第1の符号化データをフラッシュメモリ内のページから読み出す読み出しステップと、
前記読み出しステップにより読み出された前記第1の符号化データのうち、前記データパターン符号に対応する全てのビットが、論理値０のビットであるときにエラー検出信号を出力する第１の検出ステップと、
前記読み出しステップにより読み出された前記第1の符号化データのうち、前記データパターン符号に対応する全てのビットが、論理値１のビットであるときにエラー検出信号を出力する第２の検出ステップと、
前記読み出しステップにより読み出された前記第1の符号化データを復号化するステップであって、この復号化により、当該第1の符号化データに含まれるデータに生じたビットエラーを訂正する第１の復号化ステップと、
ホストシステムに訂正不能エラーが発生したことを通知する訂正不能エラー通知ステップとを備え、
前記データパターン符号は、前記第１の復号化ステップにおける訂正能力を超えるビット数の論理値０のビットと論理値１のビットをそれぞれ含み、
前記訂正不能エラー通知ステップでは、前記第１の検出ステップ又は前記第２の検出ステップにおいてエラー検出信号を出力したときに、ホストシステムに訂正不能エラーが発生したことを通知する。
【００１９】
本発明の第７の側面に従う、フラッシュメモリの制御方法は、
前記データパターン符号付加ステップにおいて、前記所定データ長のデータ毎に、当該データの巡回冗長検査符号とこの巡回冗長検査符号に含まれる各ビットの論理値を反転させた符号である反転符号を生成し、当該巡回冗長検査符号及び当該反転符号を前記データパターン符号として前記所定データ長のデータに付加するようにしてもよい。
【発明の効果】
【００２０】
本発明によれば、バーストエラーが発生したために、読み出されたデータに含まれる全てのビットの論理値が“１”又は“０”になったとき、そのバーストエラーの発生が整合性符号に基づいて検出される。従って、誤り訂正符号に基づいた訂正処理で看過された訂正不能エラーを高い確率で検出することができる。
【図面の簡単な説明】
【００２１】
【図１】図１は、本実施の形態に係るフラッシュメモリシステム１を概略的に示すブロック図である。
【図２】図２は、本実施の形態に係る誤り訂正ブロック１１を概略的に示すブロック図である。
【図３】図３は、本実施の形態に係る第1の符号化ブロック２１及び第２の符号化ブロック２２を概略的に示すブロック図である。
【図４】図４は、本実施の形態に係る訂正不能エラー検出ブロック２４に入力される符号を示している。
【図５】図５は、本実施の形態に係る第1の復号化ブロック２３及び訂正不能エラー検出ブロック２４を概略的に示すブロック図である。
【図６】図６は、本実施の形態に係る訂正不能エラー検出ブロック２４に入力される符号と、それに応じて訂正不能エラー検出ブロック２４から出力される信号を示している。
【発明を実施するための形態】
【００２２】
図１に示されているように、フラッシュメモリシステム１は、フラッシュメモリ２と、それを制御するメモリコントローラ３とで構成されている。メモリコントローラ３は、内部バス１４を介してフラッシュメモリ２と接続されている。
【００２３】
フラッシュメモリシステム１は、外部バス１３を介してホストシステム４と接続されている。ホストシステム４は、ホストシステム４の全体の動作を制御するためのＣＰＵ（Central Processing Unit）、フラッシュメモリシステム１との情報の授受を担うコンパニオンチップ等から構成されている。ホストシステム４は、例えば、文字、音声、あるいは画像情報等の種々の情報を処理するパーソナルコンピュータやデジタルスチルカメラをはじめとする各種情報処理装置であってもよい。
【００２４】
メモリコントローラ３は、図１に示されているように、マイクロプロセッサ６と、ホストインターフェースブロック７と、ＳＲＡＭ８と、バッファメモリ９と、フラッシュメモリインターフェースブロック１０と、誤り訂正ブロック１１と、ＲＯＭ（Read Only Memory）１２とから構成される。これら機能ブロックによって構成されるメモリコントローラ３は、一つの半導体チップ上に集積される。以下、各機能ブロックについて説明する。
【００２５】
ホストインターフェースブロック７は、ホストシステム４との間で行われるデータ、アドレス情報、ステータス情報、外部コマンド等の送受信を制御する。つまり、フラッシュメモリシステム１は、ホストインターフェースブロック７を介して、ホストシステム４から供給されるデータ等を取り込む。また、フラッシュメモリシステム１は、ホストインターフェースブロック７を介して、データ等をホストシステム４に供給する。外部コマンドとは、ホストシステム４がフラッシュメモリシステム１に対して処理の実行を指示するためのコマンドである。
【００２６】
ホストインターフェースブロック７は、コマンドレジスタＲ１、セクタ数レジスタＲ２及びＬＢＡレジスタＲ３を備えている。コマンドレジスタＲ１、セクタ数レジスタＲ２及びＬＢＡレジスタＲ３には、ホストシステム４から与えられる情報が書き込まれる。コマンドレジスタＲ１には、書き込みコマンド、読み出しコマンド等の外部コマンドが書き込まれる。セクタ数レジスタＲ２には、書き込むデータ又は読み出すデータのセクタ数が書き込まれる。ＬＢＡレジスタＲ３には、書き込み又は読み出しを開始する論理セクタに対応するＬＢＡ（Logical Block Address）が書き込まれる。ＬＢＡは、５１２バイトの容量を持った論理セクタに割り当てられたアドレスである。
【００２７】
ＳＲＡＭ（Static
Random Access Memory）８は、フラッシュメモリ２の制御に必要な情報を一時的に格納する揮発性メモリである。フラッシュメモリ２にアクセスするために必要な各種のテーブルは、ＳＲＡＭ８に保持され、ＳＲＡＭ８上で更新される。フラッシュメモリ２にアクセスするために必要なテーブルが、ＳＲＡＭ８に保持されていない場合は、そのテーブルはＳＲＡＭ８上で作成される。但し、そのテーブルが、フラッシュメモリ２に格納されている場合は、格納されているテーブルがフラッシュメモリ２から読み出され、ＳＲＡＭ８に保持される。上記各種テーブルには、アドレス変換テーブル、検索テーブル、不良ブロックテーブル等が含まれる。アドレス変換テーブルは、論理ブロックと物理ブロックの対応関係を管理するためのテーブルである。検索テーブルは、空きブロックを検索するためのテーブルである。不良ブロックテーブルは不良ブロックを管理するためのテーブルである。
【００２８】
バッファメモリ９は、フラッシュメモリ２から読み出したデータ、又はフラッシュメモリ２に書き込むデータを、一時的に保持する揮発性メモリである。
【００２９】
フラッシュメモリインターフェースブロック１０は、フラッシュメモリ２との間で行われるデータ、アドレス情報、ステータス情報、内部コマンド等の送受信を制御する。ここで、内部コマンドとは、メモリコントローラ３がフラッシュメモリ２に処理の実行を指示するためのコマンドであり、フラッシュメモリ２は、メモリコントローラ３から与えられる内部コマンドに従って動作する。
【００３０】
誤り訂正ブロック１１は、フラッシュメモリ２にデータを書き込むときに、そのデータをＢＣＨ符号の誤り訂正符号（ＥＣＣ：Error Correcting Code）に符号化し、フラッシュメモリ２から符号化されたデータを読み出したときに、その符号化されたデータを復号化する。つまり、フラッシュメモリ２に書き込まれるデータは、冗長ビットが付加されたＢＣＨ符号に符号化されてフラッシュメモリ２に書き込まれ、その符号化されたデータ（冗長ビットが付加されたデータ）は、読み出されたときに復号化される。この復号化では、符号化の際に付加される冗長ビットのビット数に応じて、所定のビット数までのビットエラーが訂正される。更に、誤り訂正ブロック１１は、このＢＣＨ符号に基づいた訂正機能に加えて、当該訂正機能の訂正能力を超えるビット数のビットエラーが発生したことを検出する検出機能を備えている。
【００３１】
ＲＯＭ１２は、フラッシュメモリ２を制御するために必要なファームウェアを格納するための不揮発性の記憶素子である。尚、フラッシュメモリシステム１を起動させるために必要な最小限のファームウェアだけをＲＯＭ１２に格納し、その他のファームウェアをフラッシュメモリ２に格納するようにしてもよい。
【００３２】
マイクロプロセッサ６は、ＲＯＭ１２又はフラッシュメモリ２から、ファームウェアを読み込み、ファームウェアに従って動作する。メモリコントローラ３に含まれる機能ブロックは、マイクロプロセッサ６により制御される。
【００３３】
フラッシュメモリ２は、ＮＡＮＤ型フラッシュメモリであり、レジスタと、複数のメモリセルが２次元的に配列されたメモリセルアレイを備えている。メモリセルアレイは、複数のメモリセル群と、ワード線とを備える。ここで、メモリセル群は、複数のメモリセルが直列に接続されたものである。各ワード線は、メモリセル群の特定のメモリセルを選択するためのものである。このワード線を介して選択されたメモリセルとレジスタとの間で、レジスタから選択されたメモリセルへのデータの書き込み又は選択されたメモリセルからレジスタへのデータの読み出しが行われる。尚、フラッシュメモリには、ＳＬＣ(Single Level Cell)タイプのメモリセルで構成されたものと、ＭＬＣ(Multi
Level Cell)タイプのメモリセルで構成されたものがある。
【００３４】
ＮＡＮＤ型フラッシュメモリでは、データ読み出し動作及びデータ書き込み動作はページ単位で行われ、データ消去動作はブロック（物理ブロック）単位で行われる。それぞれの物理ブロックは、複数のページ（物理ページ）で構成され、それぞれの物理ページは、ユーザ領域と冗長領域で構成されている。例えば、１個の物理ページは、４セクタ（２０４８バイト）のユーザ領域と、６４バイトの冗長領域とで構成され、１個の物理ブロックは、６４個の物理ページで構成されている。ユーザ領域は、ホストシステム４から与えられるデータを主に格納するための領域であり、冗長領域は、論理アドレス情報、ブロックステータス（フラグ）等の付加データを主に格納するための領域である。
【００３５】
論理アドレス情報は、当該情報に係る物理ブロックと対応する論理ブロックを特定するための情報である。ブロックステータス（フラグ）は、当該情報に係る物理ブロックが、不良ブロック（正常にデータの書き込み等を行うことができない物理ブロック）であるか否かを示すフラグである。尚、不良ブロックには、初期不良の不良ブロックと後発不良の不良ブロックがある。初期不良の不良ブロックは、出荷前に検出された不良ブロックである。後発不良の不良ブロックは、使用中に生じた不良ブロックである。初期不良の物理ブロックについては、不良ブロックであることを示すブロックステータス（フラグ）が製造メーカによって書き込まれている。また、この初期不良の物理ブロックを示すブロックステータス（フラグ）を、ユーザ領域に書き込んでいる製造メーカもある。不良ブロックか否かの判断基準は、設計の際に決められる。
【００３６】
次に、誤り訂正ブロック１１の構成及び誤り訂正ブロック１１において行われる処理について説明する。
【００３７】
図２に示されているように、バッファメモリ９に保持されているデータがフラッシュメモリ２に書き込まれるとき、その書き込みデータは、第1の符号化ブロック２１により符号化される。この符号化では、１セクタ（５１２バイト）単位で、ＢＣＨ符号に符号化される。本実施の形態では、最大１５ビットのビットエラーを訂正することができるように設計したため、つまり、訂正能力を１５ビットに設定したため、第1の符号化ブロック２１に入力された1セクタの書き込みデータは、その書き込みデータに１９５ビットの冗長ビットが付加された第1の符号化データに符号化される。この第1の符号化データは、フラッシュメモリインターフェースブロック１０を介してフラッシュメモリ２に書き込まれる。この符号化では、図３に示されているように、第１の冗長ビット生成ブロック３１で生成された１９５ビットの冗長ビットが、1セクタの書き込みデータに付加される。
【００３８】
更に、本実施の形態では、このＢＣＨ符号に基づいたビットエラーの訂正処理で、その訂正能力を超えるビットエラーが発生したことを検出するため、つまり、１５ビットを超えるビットエラーが発生したことを検出するため、書き込みデータに基づいて生成された巡回冗長検査（CRC : Cyclic Redundancy Check）符号と整合性符号をフラッシュメモリに書き込んでいる。本実施の形態では、この巡回冗長検査符号と整合性符号をＢＣＨ符号に符号化してフラッシュメモリ２に書き込んでいる。
尚、整合性符号については、ＢＣＨ符号に符号化しなくもよい。
第２の符号化ブロック２２には書き込みデータが入力される。そして、第２の符号化ブロック２２は、1セクタの書き込みデータ毎に、１２ビットの巡回冗長検査符号と８ビットの整合性符号をＢＣＨ符号に符号化した第２の符号化データを出力する。第２の符号化データは最大４ビットのビットエラーを訂正することができるように設定したため、第２の符号化ブロック２２は、巡回冗長検査符号と整合性符号に２４ビットの冗長ビットを付加したものを第２の符号化データとして出力する。第２の符号化ブロック２２は、図３に示されているように、第１のＣＲＣ生成ブロック３２、整合性符号ブロック３３及び第２の冗長ビット生成ブロック３４で構成されている。第１のＣＲＣ生成ブロック３２は、入力された1セクタの書き込みデータに基づいて、１２ビットの巡回冗長検査符号を生成する。整合性符号ブロック３３は、論理値“０”のビットと論理値“１”のビットをそれぞれ４ビットずつ含む８ビットの整合性符号を出力する。１２ビットの巡回冗長検査符号と８ビットの整合性符号を一緒に符号化する場合は、この巡回冗長検査符号及び整合性符号が第２の冗長ビット生成ブロック３４に入力される。そして、第２の冗長ビット生成ブロック３４で生成された２４ビットの冗長ビットが、巡回冗長検査符号及び整合性符号に付加される。尚、整合性符号ブロック３３は、第１のＣＲＣ生成ブロック３２で生成された巡回冗長検査符号の各ビットの論理値を反転させた符号（以下、反転符号と言う。）を出力するように構成されてもよい。この場合、巡回冗長検査符号にその反転符号を付加したものが整合性符号として取り扱われる。また、整合性符号は、1セクタの書き込みデータ毎でなく、各物理ページに１つ書き込むようにしてもよい。つまり、１つの整合性符号が、その整合性符号が書き込まれている物理ページ内に格納されたデータに共通の符号として使用されてもよい。
【００３９】
図４を参照して、第１のＣＲＣ生成ブロック３２が生成する巡回冗長検査符号、整合性符号ブロック３３が出力する整合性符号及び第２の符号化データについて説明する。符号１の場合は、第１のＣＲＣ生成ブロック３２で生成された巡回冗長検査符号と整合性符号ブロック３３から出力された整合性符号が連結され、この連結された符号がＢＣＨ符号に符号化される。第２の冗長ビット生成ブロック３４は、巡回冗長検査符号と整合性符号が連結された符号に基づいて冗長ビットを生成する。そして、この冗長ビットが、巡回冗長検査符号と整合性符号が連結された符号に付加される。従って、第２の符号化データは、付加巡回冗長検査符号、整合性符号及び冗長ビットで構成される。
【００４０】
符号２の場合は、第１のＣＲＣ生成ブロック３２で生成された巡回冗長検査符号だけがＢＣＨ符号に符号化される。第２の冗長ビット生成ブロック３４は、巡回冗長検査符号に基づいて冗長ビットを生成する。そして、この冗長ビットが、巡回冗長検査符号に付加される。従って、第２の符号化データは、付加巡回冗長検査符号及び冗長ビットで構成される。整合性符号は、第２の符号化データに含まれないため、整合性符号と第２の符号化データが別々にフラッシュメモリ２に書き込まれる。この符号の構成は、１つ整合性符号を、同一ページ格納される複数セクタのデータで共用する場合に適している。
【００４１】
符号３の場合は、整合性符号ブロック３３が第１のＣＲＣ生成ブロック３２で生成された巡回冗長検査符号の反転符号を出力するように設定される。この反転符号は、第１のＣＲＣ生成ブロック３２で生成された巡回冗長検査符号に連結され、巡回冗長検査符号とその反転符号が整合性符号として取り扱われる。反転符号は巡回冗長検査符号の各ビットの論理値を反転させた符号なので、巡回冗長検査符号と反転符号の相互に対応するビットの論理値の関係は、巡回冗長検査符号に含まれるビットの論理値が“０”であれば反転符号に含まれるビットの論理値が“１”になり、巡回冗長検査符号に含まれるビットの論理値が“１”であれば反転符号に含まれるビットの論理値が“０”になる。従って、巡回冗長検査符号とその反転符号を連結したものを整合性符号とした場合、この整合性符号には、論理値“０”のビットと論理値“１”のビットが同数含まれている。巡回冗長検査符号とその反転符号を連結したものは、ＢＣＨ符号に符号化される。第２の冗長ビット生成ブロック３４は、巡回冗長検査符号及びその反転符号に基づいて冗長ビットを生成する。そして、この冗長ビットが、巡回冗長検査符号とその反転符号を連結したものに付加される。従って、第２の符号化データは、巡回冗長検査符号、反転符号及び冗長ビットで構成される。
【００４２】
符号４は、符号３と同じ符号であるが、第２の符号化データ全体が整合性符号として取り扱われる。つまり、第２の符号化データに含まれる全てのビットが整合性符号として取り扱われる。
【００４３】
図２に示されているように、フラッシュメモリ２からバッファメモリ９にデータを読み出すとき、フラッシュメモリ２から読み出された第１の符号化データは、第1の復号化ブロック２３に入力される。第1の復号化ブロック２３に入力された第１の符号化データは復号化され、その復号化データがバッファメモリ９に保持される。また、第1の復号化ブロック２３は、訂正能力を超えるビットエラー（１５ビットを超えるビットエラー）である訂正不能エラーの発生を検出したとき、訂正不能エラーが発生したことをマイクロプロセッサ６に通知する。第1の復号化ブロック２３が訂正不能エラーの発生を検出したときは、訂正処理が施されていないデータがバッファメモリ９に保持される。
【００４４】
フラッシュメモリ２から読み出された第２の符号化データは、第２の復号化ブロック２５に入力される。第２の復号化ブロック２５で復号化された巡回冗長検査符号及び整合性符号は、訂正不能エラー検出ブロック２４に入力される。更に、フラッシュメモリ２から読み出された第１の符号化データは、訂正不能エラー検出ブロック２４にも入力される。尚、書き込みのときに、整合性符号がＢＣＨ符号に符号化されなかった場合は、フラッシュメモリ２から読み出された整合性符号は、第２の復号化ブロック２５を介さずに訂正不能エラー検出ブロック２４に入力される。第２の符号化データ全体が整合性符号として取り扱われる場合、第２の符号化データは、第２の復号化ブロック２５及び訂正不能エラー検出ブロック２４に入力される。また、第1の復号化ブロック２３で復号化された復号化データは、訂正不能エラー検出ブロック２４に読み込まれる。
【００４５】
次に、第1の復号化ブロック２３及び訂正不能エラー検出ブロック２４の構成及び動作を、図５を参照して詳細に説明する。第1の復号化ブロック２３は、誤り検出ブロック４１と誤り訂正ブロック４２で構成されている。誤り検出ブロック４１は、入力された第1の復号化データに基づいてシンドロームを生成する。このシンドロームは、誤り訂正ブロック４２に入力される。誤り訂正ブロック４２は、入力されたシンドロームに基づいてエラービット（ビットエラーが生じたビット）を特定し、そのビットの論理値を訂正する。尚、全てのシンドロームの値が“０”の場合は、ビットエラーが発生していないと判断され、誤り訂正ブロック４２によるビットエラーの訂正は行われない。誤り訂正ブロック４２は、入力されたシンドロームに基づいて正常にエラービットを特定できなかった場合は、訂正不能エラーが発生したことをマイクロプロセッサ６に通知する。
【００４６】
訂正不能エラー検出ブロック２４は、第１のデータパターン検出回路４３、第２のデータパターン検出回路４４、整合性符号判断ブロック４５、ＡＮＤ回路４６、ＡＮＤ回路４７、ＣＲＣレジスタ４８、第２のＣＲＣ生成ブロック４９、比較回路５０及びＯＲ回路５１で構成されている。
【００４７】
第１のデータパターン検出回路４３には、第１の符号化データが入力される。第１のデータパターン検出回路４３は、入力された第１の符号化データに含まれる全てのビットの論理値が“０”のときに、それを検出したことを示す第１の信号（ハイレベルの信号）を出力する。
【００４８】
第２のデータパターン検出回路４４には、第１の符号化データが入力される。第２のデータパターン検出回路４４は、入力された第１の符号化データに含まれる全てのビットの論理値が“１”のときに、それを検出したことを示す第２の信号（ハイレベルの信号）を出力する。
【００４９】
整合性符号判断ブロック４５には、整合性符号が入力される。整合性符号判断ブロック４５は、入力された整合性符号に含まれる全てのビットの論理値が“０”のときに、それを検出したことを示す第３の信号を出力し、入力された整合性符号に含まれる全てのビットの論理値が“１”のときに、それを検出したことを示す第４の信号を出力する。
【００５０】
ＡＮＤ回路４６には、第１の信号及び第３の信号が入力される。ＡＮＤ回路４６は、第１の信号及び第３の信号に基づいて、第１の符号化データに含まれる全てのビットの論理値が“０”であり、かつ整合性符号に含まれる全てのビットの論理値が“０”であることを検出する。そして、第１の符号化データに含まれる全てのビットの論理値が“０”であり、かつ整合性符号に含まれる全てのビットの論理値が“０”であることを検出したときに、それを検出したことを示す第５の信号を出力する。
【００５１】
ＡＮＤ回路４７には、第２の信号及び第４の信号が入力される。ＡＮＤ回路４６は、第２の信号及び第４の信号に基づいて、第１の符号化データに含まれる全てのビットの論理値が“１”であり、かつ整合性符号に含まれる全てのビットの論理値が“１”であることを検出する。そして、第１の符号化データに含まれる全てのビットの論理値が“１”であり、かつ整合性符号に含まれる全てのビットの論理値が“１”であることを検出したときに、それを検出したことを示す第６の信号を出力する。
【００５２】
ＣＲＣレジスタ４８は、フラッシュメモリ２から読み出された巡回冗長検査符号、つまり、書き込みのときに第１のＣＲＣ生成ブロック３２で生成された巡回冗長検査符号を保持する。
【００５３】
第２のＣＲＣ生成ブロック４９は、誤り訂正ブロック４２により訂正処理が施されたデータであるバッファメモリデータに基づいて巡回冗長検査符号を生成する。
【００５４】
比較回路５０は、ＣＲＣレジスタ４８に保持された巡回冗長検査符号と第２のＣＲＣ生成ブロック４９により生成された巡回冗長検査符号を比較し、両方の符号が一致しなかったときに、それを検出したことを示す第７の信号を出力する。
【００５５】
ＯＲ回路５１には、第５の信号、第６の信号及び第７の信号が入力される。ＯＲ回路５１は、第５の信号、第６の信号及び第７の信号のうち、少なくとも１つの信号に基づいて、訂正不能エラーが発生したことを検知したときに、訂正不能エラーが発生したことをマイクロプロセッサ６に通知する。    
【００５６】
まず、ＯＲ回路５１は、第５の信号に基づいて、第１の符号化データに含まれる全てのビットの論理値が“０”であり、かつ整合性符号に含まれる全てのビットの論理値が“０”であることを検知することができる。整合性符号には、論理値が“１”のビットが複数個含まれているため、ランダムエラーにより、第１の符号化データ及び整合性符号に含まれる全てのビットの論理値が“０”なる可能性は非常に低い。従って、ＯＲ回路５１は、第１の符号化データ及び整合性符号に含まれる全てのビットの論理値が“０”
を検知したときに、訂正不能エラーが発生したことをマイクロプロセッサ６に通知する。
【００５７】
更に、ＯＲ回路５１は、第６の信号に基づいて、第１の符号化データに含まれる全てのビットの論理値が“１”であり、かつ整合性符号に含まれる全てのビットの論理値が“１”であることを検知することができる。整合性符号には、論理値が“０”のビットが複数個含まれているため、ランダムエラーにより、第１の符号化データ及び整合性符号に含まれる全てのビットの論理値が“１”なる可能性は非常に低い。従って、ＯＲ回路５１は、第１の符号化データ及び整合性符号に含まれる全てのビットの論理値が“１”
を検知したときに、訂正不能エラーが発生したことをマイクロプロセッサ６に通知する。
【００５８】
又、ＯＲ回路５１は、第７の信号に基づいて、フラッシュメモリ２から読み出された巡回冗長検査符号である第１の巡回冗長検査符号と復号化データに基づいて生成された巡回冗長検査符号である第２の巡回冗長検査符号が一致していないことを検知することができる。バッファメモリ９からフラッシュメモリ２に書き込まれた書き込みデータとその読み出しデータである復号化データが一致していれば、第１の巡回冗長検査符号と第２の巡回冗長検査符号は一致する。従って、ＯＲ回路５１は、第１の巡回冗長検査符号と第２の巡回冗長検査符号が一致していないことを検知したときに、訂正不能エラーが発生したことをマイクロプロセッサ６に通知する。
【００５９】
尚、ＯＲ回路５１は、第５の信号に基づいて、第１の符号化データ及び整合性符号に含まれる全てのビットの論理値が“０”
を検知し、更に、第７の信号に基づいて、第１の巡回冗長検査符号と第２の巡回冗長検査符号が一致していないことを検知することがある。この場合も、ＯＲ回路５１は、訂正不能エラーが発生したことをマイクロプロセッサ６に通知する。
【００６０】
また、ＯＲ回路５１は、第６の信号に基づいて、第１の符号化データ及び整合性符号に含まれる全てのビットの論理値が“１”
を検知し、更に、第７の信号に基づいて、第１の巡回冗長検査符号と第２の巡回冗長検査符号が一致していないことを検知することがある。この場合も、ＯＲ回路５１は、訂正不能エラーが発生したことをマイクロプロセッサ６に通知する。
【００６１】
次に、図６を参照して、メモリコントローラ３がホストシステム４に訂正不能エラーが発生したことを通知する場合と通知しない場合について説明する。
【００６２】
ケース＃１は、第１の復号化ブロック２３により、訂正不能エラーの発生が検出された場合である。つまり、ＢＣＨ符号に基づいたビットエラーの訂正処理で、訂正不能エラーの発生が検出された場合である。この場合、巡回冗長検査符号に基づいた訂正不能エラー検出処理や整合性符号に基づいた訂正不能エラー検出処理の結果に関わらず、訂正不能エラーの発生がマイクロプロセッサ６に通知される。
【００６３】
ケース＃２は、第１の復号化ブロック２３によりビットエラーの訂正処理が行われたが、比較回路５０により訂正不能エラーの発生が検出された場合である。つまり、巡回冗長検査符号に基づいた訂正不能エラー検出処理で、訂正不能エラーの発生が検出された場合である。この場合、訂正不能エラー検出処理の結果に関わらず、訂正不能エラーの発生がマイクロプロセッサ６に通知される。
【００６４】
ケース＃３及びケース＃４は、ＢＣＨ符号に基づいたビットエラーの訂正処理及び巡回冗長検査符号に基づいた訂正不能エラー検出処理で訂正不能エラーの発生が看過され、整合性符号に基づいた訂正不能エラー検出処理で訂正不能エラーの発生が検出された場合である。ケース＃３の場合、第１の符号化データ及び整合性符号に含まれる全てのビットの論理値が“０”であることに基づいて訂正不能エラーの発生が検出される。ケース＃４の場合、第１の符号化データ及び整合性符号に含まれる全てのビットの論理値が“１”であることに基づいて訂正不能エラーの発生が検出される。つまり、ケース＃３及びケース＃４は、整合性符号に基づいた訂正不能エラー検出処理を行うことによりマイクロプロセッサ６に通知されるようになった訂正不能エラーの発生である。
【００６５】
ケース＃５、ケース＃６、及びケース＃７は、ＢＣＨ符号に基づいたビットエラーの訂正処理、巡回冗長検査符号に基づいた訂正不能エラー検出処理及び整合性符号に基づいた訂正不能エラー検出処理で訂正不能エラーの発生が検出されなかった場合であり、これらの場合には訂正不能エラーの発生がマイクロプロセッサ６に通知されない。
【００６６】
尚、書き込みデータに整合性符号を付加し、その整合性符号が付加された書き込みデータを、ＢＣＨ符号に符号化し、その符号化されたデータをフラッシュメモリに書き込むようにしてもよい。つまり、この符号化されたデータに、書き込みデータ、整合性符号及びこれらに基づいて生成された冗長ビットが含まれるようにしてもよい。このように整合性符号が付加された書き込みデータをＢＣＨ符号に符号化する場合は、整合性符号に含まれる論理値“０”のビットの個数及び論理値“１”のビットの個数の双方を、訂正能力を超える個数、つまり、１５個を超える個数にすることが好ましい。このように整合性符号に訂正能力を超える個数の論理値“０”のビット及び論理値“１”のビットが含まれていれば、読み出されたデータのうち、整合性符号に対応する全てのビットが論理値“０”のビットになっていた場合、又は、整合性符号に対応する全てのビットが論理値“１”のビットになっていた場合、訂正能力を超えるビットエラーが発生したと判断することができる。
【００６７】
この訂正能力エラーの検出では、この符号化されたデータを読み出したときに、そのデータのうち、整合性符号に対応する全てのビットが論理値“０”のビットであるか、又は、整合性符号に対応する全てのビットが論理値“１”のビットであるかが検査される。この検査で、整合性符号に対応する全てのビットが論理値“０”のビットであること、又は、整合性符号に対応する全てのビットが論理値“１”のビットであることが検出されたときは、この符号化されたデータの復号化は行われず、訂正不能エラーの発生がマイクロプロセッサ６に通知される。このように処理されるのは、整合性符号に対応する全てのビットが論理値“０”のビットである場合、又は、整合性符号に対応する全てのビットが論理値“１”のビットである場合、必ず訂正能力を超えるビットエラーが発生しているからである。
【００６８】
又、整合性符号は、書き込みデータに基づいて生成された巡回冗長検査符号とその反転符号を連結したものであってもよい。この場合、巡回冗長検査符号のビット数を、ＢＣＨ符号に基づいた訂正の訂正能力を超えるビット数に設定する。このように設定すれば、巡回冗長検査符号とその反転符号を連結したものには、ＢＣＨ符号に基づいた訂正の訂正能力を超える個数の論理値“０”のビット及び論理値“１”のビットが含まれる。従った、上記の整合性符号と同様に、訂正能力エラーの検出を行うことができる。
【００６９】
以上、本発明の実施の形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこの実施の形態にのみ限定する趣旨ではない。本発明の要旨を逸脱しない範囲内において種々の変更を加え得ることは勿論である。
【００７０】
例えば、ビットエラーの訂正処理における符号化の種類は、ＢＣＨ符号以外の符号に基づいた符号化であってもよい。また、ビットエラーの訂正処理における訂正能力は、適宜変更することができる。  巡回冗長検査符号に基づいた訂正不能エラー検出処理及びその巡回冗長検査符号のビット数も適宜変更することができる。符号化及び復号化の処理単位は、１セクタ（５１２バイト）単位に限定されず、例えば、２セクタ（１０２４バイト）単位や４セクタ（２０４８バイト）単位であってもよい。
【００７１】
第１の符号化データ及び整合性符号に含まれる全てのビットの論理値が“０” であることを検出する過程や第１の符号化データ及び整合性符号に含まれる全てのビットの論理値が“１”
であることを検出する過程は、適宜変更することができる。また、整合性符号は、必ず論理値“０”のビットと論理値“１”のビットの双方を複数ビットずつ含むものであれば、どんな符号（データパターン）であってもよい。
【産業上の利用可能性】
【００７２】
本発明は、種々のデジタル情報を取り扱うパーソナルコンピュータやデジタルスチルカメラ等の電子機器に装着又内蔵される情報記憶（記録）装置に適用することができる。
【符号の説明】
【００７３】
１…フラッシュメモリシステム、２…フラッシュメモリ、３…メモリコントローラ、１１…誤り訂正ブロック、２４…訂正不能エラー検出ブロック
【図１】
2012003569.tif 000003
【図２】
2012003569.tif 000004
【図３】
2012003569.tif 000005
【図４】
2012003569.tif 000006
【図５】
2012003569.tif 000007
【図６】
2012003569.tif 000008