(57)【特許請求の範囲】
【請求項１】
フラッシュメモリを制御するための方法であって、
現在の順方向誤り訂正(FEC)パラメータセットより高い冗長性を提供する新しいFECパラメータセットを選択するステップと、
前記フラッシュメモリ内の第1の破壊されたページへの書込み動作中に、前記新しいFECパラメータセットを使用してソース情報ビットをコーディングするステップと、
前記第1の破壊されたページおよび前記フラッシュメモリ内の少なくとも1つの追加の破壊されたページを、期待されるページサイズを有する単一の論理ページにマッピングするステップと
を含む方法。
【請求項２】
選択する前記ステップは、前記第1の破壊されたページへの書込み失敗に応答して、または推定されたページ誤り率が前記第1の破壊されたページからの読取り動作中にFECしきい値を超える時に、実行される、請求項1に記載の方法。
【請求項３】
選択する前記ステップは、それぞれが異なる量の冗長性を提供する複数のFECパラメータセットの中から前記新しいFECパラメータセットを選択するステップを含む、請求項1に記載の方法。
【請求項４】
前記新しいFECパラメータセットは、前記現在のFECパラメータセットより多い、1ページ当たりに訂正され得るビットエラーの個数を有する、請求項1に記載の方法。
【請求項５】
前記新しいFECパラメータセットを前記第1の破壊されたページに、別のFECパラメータセットを前記少なくとも1つの追加の破壊されたページに記憶するステップをさらに含む、請求項1に記載の方法。
【請求項６】
前記第1の破壊されたページおよび前記少なくとも1つの追加の破壊されたページから前記単一の論理ページへの前記マッピングを示すマッピングインジケータを、前記第1の破壊されたページおよび前記少なくとも1つの追加の破壊されたページに記憶するステップをさらに含む、請求項1に記載の方法。
【請求項７】
前記第1の破壊されたページおよび前記少なくとも1つの追加の破壊されたページに記憶されたデータの配置を示す順序情報を、前記第1の破壊されたページおよび前記少なくとも1つの追加の破壊されたページに記憶するステップをさらに含む、請求項1に記載の方法。
【請求項８】
受け取られた命令に基づいて、前記単一の論理ページからデータを読み取り、前記単一の論理ページにデータを書き込むステップをさらに含む、請求項1に記載の方法。
【請求項９】
前記第1の破壊されたページを部分的に劣化したページリストに記録するステップと、
前記少なくとも1つの追加の破壊されたページを前記部分的に劣化したページリストから検索するステップと、
前記第1の破壊されたページの使用可能データバイトと前記少なくとも1つの追加の破壊されたページの使用可能データバイトとの合計が、前記期待されるページサイズ以上であることを判定するステップと、
グループ化情報を論理ページ情報テーブルに記録するステップと、
前記グループ化情報を前記第1の破壊されたページおよび前記少なくとも1つの追加の破壊されたページのメタデータに記録するステップと
をさらに含む、請求項1に記載の方法。
【請求項１０】
前記単一の論理ページに関するインターフェース一貫性を維持するステップをさらに含む、請求項1に記載の方法。
【請求項１１】
ページ誤り率を推定するステップをさらに含み、前記新しいFECパラメータセットを選択するステップは、前記ページ誤り率に基づく、請求項1に記載の方法。
【請求項１２】
フラッシュメモリを制御するための電子デバイスであって、
プロセッサと、
前記プロセッサと電子通信しているフラッシュメモリと、
前記プロセッサによって実行可能である、前記メモリに記憶された命令と含み、前記命令が、
現在の順方向誤り訂正(FEC)パラメータセットより高い冗長性を提供する新しいFECパラメータセットを選択するための命令と、
前記フラッシュメモリ内の第1の破壊されたページへの書込み動作中に、前記新しいFECパラメータセットを使用してソース情報ビットをコーディングするための命令と、
前記第1の破壊されたページおよび前記フラッシュメモリ内の少なくとも1つの追加の破壊されたページを、期待されるページサイズを有する単一の論理ページにマッピングするための命令と
を含む、電子デバイス。
【請求項１３】
前記選択するための命令は、前記第1の破壊されたページへの書込み失敗に応答して、または推定されたページ誤り率が前記第1の破壊されたページからの読取り動作中にFECしきい値を超える時に、選択するための命令を含む、請求項12に記載の電子デバイス。
【請求項１４】
前記選択するための命令は、それぞれが異なる量の冗長性を提供する複数のFECパラメータセットの中から前記新しいFECパラメータセットを選択するために実行可能な命令を含む、請求項12に記載の電子デバイス。
【請求項１５】
前記新しいFECパラメータセットは、前記現在のFECパラメータセットより多い、1ページ当たりに訂正され得るビットエラーの個数を有する、請求項12に記載の電子デバイス。
【請求項１６】
前記新しいFECパラメータセットを前記第1の破壊されたページに、別のFECパラメータセットを前記少なくとも1つの追加の破壊されたページに記憶するために実行可能な命令をさらに含む、請求項12に記載の電子デバイス。
【請求項１７】
前記第1の破壊されたページおよび前記少なくとも1つの追加の破壊されたページから前記単一の論理ページへのマッピングを示すマッピングインジケータを、前記第1の破壊されたページおよび前記少なくとも1つの追加の破壊されたページに記憶するために実行可能な命令をさらに含む、請求項12に記載の電子デバイス。
【請求項１８】
前記第1の破壊されたページおよび前記少なくとも1つの追加の破壊されたページに記憶されたデータの配置を示す順序情報を、前記第1の破壊されたページおよび前記少なくとも1つの追加の破壊されたページに記憶するために実行可能な命令をさらに含む、請求項12に記載の電子デバイス。
【請求項１９】
受け取られた命令に基づいて、前記単一の論理ページからデータを読み取り、前記単一の論理ページにデータを書き込むために実行可能な命令をさらに含む、請求項12に記載の電子デバイス。
【請求項２０】
前記第1の破壊されたページを部分的に劣化したページリストに記録し、
前記少なくとも1つの追加の破壊されたページを前記部分的に劣化したページリストから検索し、
前記第1の破壊されたページの使用可能データバイトと前記少なくとも1つの追加の破壊されたページの使用可能データバイトとの合計が、前記期待されるページサイズ以上であることを判定し、
グループ化情報を論理ページ情報テーブルに記録し、
前記グループ化情報を前記第1の破壊されたページおよび前記少なくとも1つの追加の破壊されたページのメタデータに記録する
ために実行可能な命令をさらに含む、請求項12に記載の電子デバイス。
【請求項２１】
前記単一の論理ページに関するインターフェース一貫性を維持するために実行可能な命令をさらに含む、請求項12に記載の電子デバイス。
【請求項２２】
ページ誤り率を推定するために実行可能な命令をさらに含み、前記新しいFECパラメータセットの選択は、前記ページ誤り率に基づく、請求項12に記載の電子デバイス。
【請求項２３】
フラッシュメモリを制御するためのコンピュータプログラムであって、
電子デバイスに、現在の順方向誤り訂正(FEC)パラメータセットより高い冗長性を提供する新しいFECパラメータセットを選択させるコードと、
前記電子デバイスに、前記フラッシュメモリ内の第1の破壊されたページへの書込み動作中に、前記新しいFECパラメータセットを使用してソース情報ビットをコーディングさせるコードと、
前記電子デバイスに、前記第1の破壊されたページおよび前記フラッシュメモリ内の少なくとも1つの追加の破壊されたページを、期待されるページサイズを有する単一の論理ページにコードマッピングさせるコードと
を含む命令を含むコンピュータプログラム。
【請求項２４】
前記電子デバイスに選択させる前記コードは、前記第1の破壊されたページへの書込み失敗に応答して、または推定されたページ誤り率が前記第1の破壊されたページからの読取り動作中にFECしきい値を超える時に、実行される、請求項23に記載のコンピュータプログラム。
【請求項２５】
前記電子デバイスに選択させる前記コードは、前記電子デバイスに、それぞれが異なる量の冗長性を提供する複数のFECパラメータセットの中から前記新しいFECパラメータセットを選択させるコードを含む、請求項23に記載のコンピュータプログラム。
【請求項２６】
前記電子デバイスに、前記新しいFECパラメータセットを前記第1の破壊されたページに記憶させ、別のFECパラメータセットを前記少なくとも1つの追加の破壊されたページに記憶させるコードをさらに含む、請求項23に記載のコンピュータプログラム。
【請求項２７】
前記電子デバイスに、受け取られた命令に基づいて、前記単一の論理ページからデータを読み取らせ、前記単一の論理ページにデータを書き込ませるコードをさらに含む、請求項23に記載のコンピュータプログラム。
【請求項２８】
フラッシュメモリを制御するための電子デバイスであって、
現在の順方向誤り訂正(FEC)パラメータセットより高い冗長性を提供する新しいFECパラメータセットを選択し、前記フラッシュメモリ内の第1の破壊されたページへの書込み動作中に、前記新しいFECパラメータセットを使用してソース情報ビットをコーディングし、前記第1の破壊されたページおよび前記フラッシュメモリ内の少なくとも1つの追加の破壊されたページを、期待されるページサイズを有する単一の論理ページにマッピングするように構成された回路
を含む電子デバイス。
【請求項２９】
選択するように構成された前記回路が、前記第1の破壊されたページへの書込み失敗に応答して、または推定されたページ誤り率が前記第1の破壊されたページからの読取り動作中にFECしきい値を超える時に、選択するように構成される、請求項28に記載の電子デバイス。
【請求項３０】
選択するように構成された前記回路は、それぞれが異なる量の冗長性を提供する複数のFECパラメータセットの中から前記新しいFECパラメータセットを選択するように構成された回路を含む、請求項28に記載の電子デバイス。
【請求項３１】
前記新しいFECパラメータセットを前記第1の破壊されたページに、別のFECパラメータセットを前記少なくとも1つの追加の破壊されたページに記憶するように構成された回路をさらに含む、請求項28に記載の電子デバイス。
【請求項３２】
受け取られた命令に基づいて、前記単一の論理ページからデータを読み取り、前記単一の論理ページにデータを書き込むように構成された回路をさらに含む、請求項28に記載の電子デバイス。
【請求項３３】
フラッシュメモリを制御するための装置であって、
現在の順方向誤り訂正(FEC)パラメータセットより高い冗長性を提供する新しいFECパラメータセットを選択するための手段と、
前記フラッシュメモリ内の第1の破壊されたページへの書込み動作中に、前記新しいFECパラメータセットを使用してソース情報ビットをコーディングするための手段と、
前記第1の破壊されたページおよび前記フラッシュメモリ内の少なくとも1つの追加の破壊されたページを、期待されるページサイズを有する単一の論理ページにマッピングするための手段と
を含む装置。
【請求項３４】
前記選択するための手段は、前記第1の破壊されたページへの書込み失敗に応答して実行される、請求項33に記載の装置。
【請求項３５】
前記選択するための手段は、それぞれが異なる量の冗長性を提供する複数のFECパラメータセットの中から前記新しいFECパラメータセットを選択するための手段を含む、請求項33に記載の装置。
【請求項３６】
前記新しいFECパラメータセットを前記第1の破壊されたページに、別のFECパラメータセットを前記少なくとも1つの追加の破壊されたページに記憶するための手段をさらに含む、請求項33に記載の装置。
【請求項３７】
受け取られた命令に基づいて、前記単一の論理ページからデータを読み取り、前記単一の論理ページにデータを書き込むための手段をさらに含む、請求項33に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
優先権出願
本願は、その全体が参照によって本明細書に組み込まれている、2013年4月12日に出願した米国特許出願第13/861691号、名称「SYSTEMS AND METHODS TO IMPROVE THE RELIABILITY AND LIFESPAN OF FLASH MEMORY」の優先権を主張するものである。
【０００２】
本開示は、全般的にはフラッシュメモリに関する。より具体的には、本開示は、フラッシュメモリの信頼性および寿命を改善するシステムおよび方法に関する。
【背景技術】
【０００３】
電子デバイス(セルラー電話、ワイヤレスモデム、コンピュータ、デジタル音楽プレイヤ、全地球測位システムユニット、携帯情報端末、ゲーム機など)が、日常生活の一部になった。現在では、小型のコンピューティングデバイスが、自動車から住宅の鍵に至るまで、あらゆるものに設けられている。電子デバイスは、ここ数年で劇的に複雑になっている。たとえば、多くの電子デバイスは、デバイスの制御を助ける1つまたは複数のプロセッサを有するとともに、そのプロセッサおよびデバイスの他の部分を支援するための、多数のデジタル回路も有する。
【０００４】
電子デバイスは、しばしば、メモリ内にデータを記憶する。メモリは、フラッシュメモリ、具体的にはNANDフラッシュメモリ(すなわち、NAND論理を使用するフラッシュメモリ)とすることができる。したがって、フラッシュメモリの信頼性および寿命を改善することによって、利益を実現することができる。
【発明の概要】
【課題を解決するための手段】
【０００５】
フラッシュメモリを制御するための方法が説明される。この方法は、現在の順方向誤り訂正(FEC)パラメータセットより高い冗長性を提供する新しいFECパラメータセットを選択するステップを含む。ソース情報ビットが、フラッシュメモリ内の第1の破壊されたページへの書込み動作中に、新しいFECパラメータセットを使用してコーディングされる。第1の破壊されたページおよびフラッシュメモリ内の少なくとも1つの追加の破壊されたページが、期待されるページサイズを有する単一の論理ページにマッピングされる。
【０００６】
選択するステップは、第1の破壊されたページへの書込み失敗(write failure)に応答して、または推定されたページ誤り率が第1の破壊されたページからの読取り動作中にFECしきい値を超える時に、実行され得る。選択するステップは、それぞれが異なる量の冗長性を提供する複数のFECパラメータセットの中から新しいFECパラメータセットを選択するステップを含むことができる。新しいFECパラメータセットは、現在のFECパラメータセットより多い、1ページ当たりに訂正され得るビットエラー(誤り)の個数を有することができる。
【０００７】
この方法は、新しいFECパラメータセットを第1の破壊されたページに、別のFECパラメータセットを少なくとも1つの追加の破壊されたページに記憶するステップをも含むことができる。この方法は、第1の破壊されたページおよび少なくとも1つの追加の破壊されたページから単一の論理ページへのマッピングを示すマッピングインジケータを、第1の破壊されたページおよび少なくとも1つの追加の破壊されたページに記憶するステップをさらに含むことができる。この方法は、第1の破壊されたページおよび少なくとも1つの追加の破壊されたページに記憶されたデータの配置を示す順序情報を、第1の破壊されたページおよび少なくとも1つの追加の破壊されたページに記憶するステップをさらに含むことができる。この方法は、受け取られた命令に基づいて、単一の論理ページからデータを読み取り、単一の論理ページにデータを書き込むステップをも含むことができる。
【０００８】
この方法は、第1の破壊されたページを部分的に劣化したページリストに記録するステップをも含むことができる。部分的に劣化したページリストから、少なくとも1つの追加の破壊されたページを検索することができる。この方法は、第1の破壊されたページの使用可能データバイトと少なくとも1つの追加の破壊されたページの使用可能データバイトとの合計が、期待されるページサイズ以上であることを判定するステップをも含むことができる。グループ化情報が、論理ページ情報テーブルに記録され得る。グループ化情報は、第1の破壊されたページおよび少なくとも1つの追加の破壊されたページのメタデータに記録され得る。
【０００９】
この方法は、単一の論理ページに関するインターフェース一貫性を維持するステップをも含むことができる。この方法は、ページ誤り率を推定するステップをさらに含むことができる。新しいFECパラメータセットを選択するステップは、ページ誤り率に基づくものとすることができる。
【００１０】
フラッシュメモリを制御するための電子デバイスも説明される。この電子デバイスは、プロセッサと、プロセッサと電子通信しているメモリとを含む。メモリは、実行可能な命令を含む。現在の順方向誤り訂正(FEC)パラメータセットより高い冗長性を提供する新しいFECパラメータセットが、選択される。ソース情報ビットが、フラッシュメモリ内の第1の破壊されたページへの書込み動作中に、新しいFECパラメータセットを使用してコーディングされる。第1の破壊されたページおよびフラッシュメモリ内の少なくとも1つの追加の破壊されたページが、期待されるページサイズを有する単一の論理ページにマッピングされる。
【００１１】
フラッシュメモリを制御するためのコンピュータプログラム製品も説明される。このコンピュータプログラム製品は、命令をその上に有する非一時的有形コンピュータ可読媒体を含む。この命令は、電子デバイスに、現在の順方向誤り訂正(FEC)パラメータセットより高い冗長性を提供する新しいFECパラメータセットを選択させるコードを含む。この命令は、電子デバイスに、フラッシュメモリ内の第1の破壊されたページへの書込み動作中に、新しいFECパラメータセットを使用してソース情報ビットをコーディングさせるコードをも含む。この命令は、電子デバイスに、第1の破壊されたページおよびフラッシュメモリ内の少なくとも1つの追加の破壊されたページを、期待されるページサイズを有する単一の論理ページにコードマッピングさせるコードをさらに含む。
【００１２】
フラッシュメモリを制御するための電子デバイスも説明される。この電子デバイスは、現在の順方向誤り訂正(FEC)パラメータセットより高い冗長性を提供する新しいFECパラメータセットを選択するように構成された回路を含む。この回路は、フラッシュメモリ内の第1の破壊されたページへの書込み動作中に、新しいFECパラメータセットを使用してソース情報ビットをコーディングするようにも構成される。この回路は、第1の破壊されたページおよびフラッシュメモリ内の少なくとも1つの追加の破壊されたページを、期待されるページサイズを有する単一の論理ページにマッピングするようにさらに構成される。
【００１３】
フラッシュメモリを制御するための装置も説明される。この装置は、現在の順方向誤り訂正(FEC)パラメータセットより高い冗長性を提供する新しいFECパラメータセットを選択するための手段を含む。この装置は、フラッシュメモリ内の第1の破壊されたページへの書込み動作中に、新しいFECパラメータセットを使用してソース情報ビットをコーディングするための手段をも含む。この装置は、第1の破壊されたページおよびフラッシュメモリ内の少なくとも1つの追加の破壊されたページを、期待されるページサイズを有する単一の論理ページにマッピングするための手段をさらに含む。
【００１４】
フラッシュメモリを制御するための方法も説明される。この方法は、フラッシュメモリ内のページにデータを書き込むステップを含む。ページの使用可能データバイトおよび破壊されたデータバイトの量を示す使用可能メモリインジケータが、判定される。使用可能メモリインジケータが、記憶される。ページ内に追加データを記憶すべきかどうかが、使用可能メモリインジケータに基づいて判定される。
【００１５】
記憶するステップは、使用可能メモリインジケータをページ内に記憶するステップを含むことができる。記憶するステップは、使用可能メモリインジケータをフラッシュコントローラ内に記憶するステップをも含むことができる。使用可能メモリインジケータは、オペレーティングシステムに関する期待されるページサイズ未満であるページの使用可能データバイトの量を示すことができる。
【００１６】
この方法は、ページへの後続の書込み動作またはページからの後続の読取り動作を実行するステップをも含むことができる。ページ誤り率が、ページへの後続の書込み動作またはページからの後続の読取り動作に基づいて推定され得る。使用可能メモリインジケータが、ページ誤り率に基づいて更新され得る。
【００１７】
フラッシュメモリを制御するための電子デバイスも説明される。この電子デバイスは、プロセッサと、プロセッサと電子通信しているメモリとを含む。メモリは、実行可能な命令を含む。データが、フラッシュメモリ内のページに書き込まれる。ページの使用可能データバイトおよび破壊されたデータバイトの量を示す使用可能メモリインジケータが、判定される。使用可能メモリインジケータが、記憶される。ページ内に追加データを記憶すべきかどうかが、使用可能メモリインジケータに基づいて判定される。
【００１８】
フラッシュメモリを制御するためのコンピュータプログラム製品も説明される。このコンピュータプログラム製品は、命令をその上に有する非一時的有形コンピュータ可読媒体を含む。この命令は、電子デバイスに、フラッシュメモリ内のページにデータを書き込ませるためのコードを含む。この命令は、電子デバイスに、ページの使用可能データバイトおよび破壊されたデータバイトの量を示す使用可能メモリインジケータを判定させるためのコードをも含む。この命令は、電子デバイスに、使用可能メモリインジケータを記憶させるためのコードをさらに含む。この命令は、電子デバイスに、使用可能メモリインジケータに基づいて、ページ内に追加データを記憶すべきかどうかを判定させるためのコードをさらに含む。
【００１９】
フラッシュメモリを制御するための電子デバイスも説明される。この電子デバイスは、フラッシュメモリ内のページにデータを書き込むように構成された回路を含む。この回路は、ページの使用可能データバイトおよび破壊されたデータバイトの量を示す使用可能メモリインジケータを判定するようにも構成される。この回路は、使用可能メモリインジケータを記憶するようにさらに構成される。この回路は、使用可能メモリインジケータに基づいて、ページ内に追加データを記憶すべきかどうかを判定するようにさらに構成される。
【００２０】
フラッシュメモリを制御するための装置も説明される。この装置は、フラッシュメモリ内のページにデータを書き込むための手段を含む。この装置は、ページの使用可能データバイトおよび破壊されたデータバイトの量を示す使用可能メモリインジケータを判定するための手段をも含む。この装置は、使用可能メモリインジケータを記憶するための手段をさらに含む。この装置は、使用可能メモリインジケータに基づいて、ページ内に追加データを記憶すべきかどうかを判定するための手段をさらに含む。
【図面の簡単な説明】
【００２１】
【図１】フラッシュメモリの信頼性および寿命を改善するためのフラッシュコントローラを含む電子デバイスを示すブロック図である。
【図２】フラッシュメモリを制御するための方法を示す流れ図である。
【図３】フラッシュメモリ内の破壊されていないページおよび破壊されたページを示すブロック図である。
【図４】フラッシュメモリの信頼性および寿命を改善するためのフラッシュコントローラのより詳細な構成を示すブロック図である。
【図５】データをフラッシュメモリに書き込むための方法を示す流れ図である。
【図６】論理ページからデータを読み取るための方法を示す流れ図である。
【図７】フラッシュメモリ内の破壊されたページのもう1つの構成を示すブロック図である。
【図８】フラッシュメモリを制御するためのもう1つの方法を示す流れ図である。
【図９】電子デバイス内に含めることができる、ある種の構成要素を示す図である。
【発明を実施するための形態】
【００２２】
今日の消費者用電子デバイスの多くは、NANDフラッシュメモリを使用する。フラッシュは、電力が除去された後であっても記憶されたデータを保持することができる不揮発性メモリである。フラッシュの1タイプであるNANDフラッシュは、高密度設計であり、大きい記憶容量(たとえば、1ギガビット以上)、連続アクセスに関する良い速度、および低いコストを含む、他のタイプのメモリに対するある種の利点を有する。しかしながら、NANDフラッシュは、NANDフラッシュの動作耐用期間(operation lifetime)にわたるビットエラーに対する感受性の増加を含む固有の欠点をも有する。
【００２３】
NANDフラッシュは、シングルレベルセルNANDフラッシュまたはマルチレベルセル(MLC) NANDフラッシュとすることができる。シングルレベルセルNANDフラッシュと比較した時に、MLC NANDフラッシュは、より低い信頼性という犠牲をはらって、大きいメモリ容量を提供することができる。NANDフラッシュは、通常はページ単位で、一時に1ページずつアクセスされ(たとえば読取り動作および書込み動作を介して)、各ページの使用可能なデータバイトは、特定のサイズ(たとえば、512バイト、2048バイト、または4096バイト)を有する。NANDフラッシュは、その耐用期間の中での書込みサイクルの回数に対する制限を有する。フラッシュデバイスエラーのタイプは、プログラムエラー、保持エラー、消去エラー、および読取りエラーとして分類することができる。一般に、すべてのタイプのエラーが、生のフラッシュセルがプログラムされたサイクル数に伴って増加する。本システムおよび本方法を使用して、すべてのタイプのエラーに起因するフラッシュメモリの信頼性を高め、寿命を延ばすことができる。いくつかのフラッシュコントローラ(またはフラッシュドライバ)は、ページを不良としてマークし、そのページをメモリの別のブロックに再マッピングすることができる、すなわち、フラッシュの容量は、各失われたページに伴って減少する。したがって、ページがどのようにして不良と判定されるのかと、ページがどのように他のページにマッピングされ得るのかとを変更することによって、利益を実現することができる。
【００２４】
図1は、フラッシュメモリ106の信頼性および寿命を改善するためのフラッシュコントローラ104を含む電子デバイス102を示すブロック図である。フラッシュコントローラ104は、フラッシュメモリ106とオペレーティングシステムまたは他のユーザアプリケーションとの間のインターフェースとして働くことができる。フラッシュコントローラ104は、フラッシュメモリ106内の物理セル(たとえば、ページ120)を管理することの複雑さを隠すことができる。オペレーティングシステムまたは他のユーザアプリケーションは、フラッシュメモリ106に記憶されるソース情報ビットをフラッシュコントローラ104に供給することができ、フラッシュコントローラ104は、ソース情報ビットをフラッシュメモリ106に記憶し、フラッシュメモリ106から取り出す。フラッシュコントローラ104が、ハードウェア(たとえば、回路)、ソフトウェア(たとえば、フラッシュドライバ)、またはハードウェアとソフトウェアとの組合せとして実施され得ることに留意されたい。また、図1に示された要素のうちの1つまたは複数を、いくつかの構成で回路(たとえば、集積回路)内で実施できることに留意されたい。
【００２５】
フラッシュメモリ106に書き込む前に、フラッシュコントローラ104は、符号語を作るために、順方向誤り訂正(FEC)符号122を用いてソース情報ビットを符号化することができる。永続メモリストレージ(フラッシュメモリ106など)は、ソース情報ビットを符号化するのにFEC符号122を利用することができる。FEC符号122は、データストレージエラーを制御するのに使用されるアルゴリズムである。ソース情報ビットを、誤り訂正符号(ECC)を使用して冗長な形で記憶することができる。FECに関連する冗長性は、フラッシュコントローラ104が、書込み/読取りプロセス中に発生する可能性があるエラーのうちの制限された個数を検出し、しばしば、オリジナルのソース情報ビットを参照せずにこれらのエラーを訂正することを可能にすることができる。
【００２６】
1つの構成では、フラッシュコントローラ104は、ソース情報ビットを符号語に変換することができる。たとえば、書込みプロセスは、ソース情報ビット(またはシンボル)を符号語に符号化し、符号化された符号語をフラッシュメモリ106に記憶することができる。読取りプロセスは、フラッシュメモリ106から符号語を取り出し、符号語をソース情報ビットに復号することができる。このプロセス中に、FEC符号122を使用して、エラーを検出し、いくつかの場合にエラーを訂正することができる。ソース情報ビットを符号化するのに使用できる、異なるタイプのFEC符号122がある。たとえば、FEC符号122を、リードソロモン(RS)符号とすることができる。
【００２７】
符号化動作は、誤り検出および訂正を可能にするために、ある冗長データ(たとえば、FECビット)を導入することができる。より良い誤り検出および訂正を可能にするが、より多くの誤り訂正用FECビットが記憶されることを必要とする、異なるパラメータが、所与のFEC符号122方式について選択され得る。たとえば、所与のFEC符号122について、異なるFECパラメータセット112を選択して、FEC符号122の誤り訂正能力を調整することができる。1つの構成では、線形FEC符号122のFECパラメータセット112は、情報ビットの個数(N)、誤り訂正ビットの個数(k)、および訂正できるビットエラーの個数(t)を含むことができる。別の構成では、FECパラメータセット112は、FEC符号122によって使用される誤り訂正ビットの個数(k)だけを含むことができる。もう1つの構成では、FECパラメータセット112は、FEC符号122のFECコーディングレートをさらに含むことができる。いくつかの構成では、FECパラメータセット112は、単一のFECコーディングパラメータを含むことができる。本明細書で使用される時に、FECコーディングパラメータという用語は、FECパラメータセット112と交換可能に使用され得る。
【００２８】
いくつかのフラッシュコントローラ104は、固定されたFECパラメータ(および書込み失敗が宣言される前に訂正できるビットエラーの対応する固定された個数)を有するFEC符号122を使用する場合がある。したがって、従来のフラッシュコントローラ104は、フラッシュメモリ106の耐用期間の間にFEC符号122について1つの特定のFECパラメータセット112を使用する。しかしながら、いくつかのFEC符号122方式は、FECパラメータセット112の簡単な調整を可能にすることができ、より多くの誤り訂正用FECビット(またはシンボル)が、エラーを起こしやすいページ120の信頼性を高めるために追加され得る。
【００２９】
フラッシュメモリ106の有用な寿命に対する制限する要因の1つが、フラッシュメモリ106に対して実行される書込み動作の回数である(たとえば、メモリウェア)。最終的に、フラッシュメモリ106の複数の部分が、壊れる可能性があり、信頼できる形でデータを記憶し、読み出すことができず、その点で、フラッシュメモリ106のこれらの部分は、もはや有用ではなくなる。フラッシュメモリ106は、物理ブロックまたはページ120によって編成され得る。フラッシュコントローラ104は、オペレーティングシステムまたはユーザアプリケーションなどの外部モジュールによってアドレッシング可能な論理ページにページ120をマッピングすることができる。書込み動作中に、フラッシュコントローラ104は、フラッシュメモリ106内の特定のページ120にFECコーディングされたデータ(たとえば、符号語)を書き込むことができ、その後に、書き込まれたデータが、正確さを検証するために読み取られる。読み出されたデータが、書き込まれたデータと一致しない場合には、FEC符号122を使用してすべてのエラーを訂正することを試みた後に、書込み失敗が宣言される。その点で、固定されたFECパラメータを使用するフラッシュコントローラ104は、ページ120全体を破壊されたものとしてマークし、フラッシュメモリ106を論理的に再マッピングすることができ、その結果、破壊されたページ120は、もはや使用されなくなる。
【００３０】
対照的に、本明細書で説明されるシステムおよび方法によるフラッシュコントローラ104は、グレースフルデグラデーションを使用することができる。ページ120全体を不良または破壊としてマークするのではなく、フラッシュコントローラ104は、現在のFECパラメータセット112より高い冗長性を提供する新しいFECパラメータセット112を選択することができる。したがって、フラッシュコントローラ104は、破壊されたページ120を不良としてマークし、破壊されたページ120への読取りおよび書込みを防ぐためにマッピングするのではなく、フラッシュメモリ106内の破壊されたページ120の一部を利用し続けることができる。しかしながら、新しいFECパラメータセット112に関連する高められた冗長性は、ページ120の減らされた記憶容量を犠牲にして成り立つ可能性がある。
【００３１】
1つの構成では、フラッシュコントローラ104は、書込み失敗に応答して新しいFECパラメータセット112を選択する、動的FECパラメータセレクタ110を含むことができる。たとえば、符号器108が、符号語を作るためにFEC符号122および現在のFECパラメータセット112を使用してソース情報ビットをコーディングした後に、フラッシュコントローラ104は、フラッシュメモリ106内のページ120にその符号語を書き込むことができる。復号器114は、フラッシュメモリ106から符号語を取り出し、データの正確さを検証することができる。1つの構成では、復号器114は、エラーチェッカ116を含むことができ、このエラーチェッカ116は、エラーを検出するために符号語をチェックする。ページ120が破壊され、エラーが検出される場合には、動的FECパラメータセレクタ110は、より高い誤り訂正能力を提供するために、現在のFECパラメータより高い冗長性を有する新しいFECパラメータセット112を選択することができる。これは、単一の書込み失敗が、ページ120全体の使用を除外しないので、フラッシュメモリ106全体の寿命を延ばすことができる。
【００３２】
上で説明した構成では、フラッシュコントローラ104は、1つのFEC符号122方式を使用することができるが、フラッシュコントローラ104は、異なるFECパラメータセット112を備えることができる。たとえば、RS符号を、ページ120長nを有するFEC符号122として使用することができる。
誤り訂正ビットの固定された個数(k)を使用するのではなく、各FECパラメータセット112は、より大きい値kを有することができる。FEC符号122のために使用可能な誤り訂正ビット数(k)を、集合K={k1, k2,…, kN}、ただしk1 < k2 <…< kNと表すことができる。より大きい値kは、より高い誤り訂正能力およびより少ない記憶容量を示す。したがって、フラッシュメモリ106ライフサイクルの始めに、すべてのページ120は、最大の容量および最低の誤り訂正能力を提供する、k1に関連するFECパラメータセット112から開始することができる。フラッシュコントローラ104が、ページ120への書込み失敗に出会う時に、フラッシュコントローラ104は、そのページ120のモードを異なるFECパラメータセット112(すなわち、k2以上に関連するFECパラメータセット112)に切り替えることができ、したがって、より高い信頼性を提供するが、減らされた記憶容量を提供することができる。この構成では、RS符号以外のFEC符号122を使用することもできることに留意されたい。
【００３３】
オペレーティングシステムが、読取り/書込み動作について同一のページサイズを期待する可能性があるので、フラッシュコントローラ104は、複数の物理的に劣化したページ120を、期待されるページサイズを有する単一の論理ページにマッピングすることができる。破壊されたページ120の容量が、新しいFECパラメータセット112に関連する高められた冗長性に起因して減らされる可能性があるので、破壊されたページ120の使用可能なデータバイトは、期待されるページサイズ未満になる場合がある。たとえば、オペレーティングシステムは、ページ120が4096バイトの使用可能データを有すると期待する可能性があるが、高められた冗長性のゆえに、破壊されたページ120の使用可能データバイトが、2048バイトにすぎない場合がある。1つの構成では、マッピングモジュール118が、複数の破壊されたページ120を、期待されるページ120サイズを有する単一の論理ページにマッピングすることができる。そのような論理ページは、より高いコーディングレベルを使用し、通常のページ120と同一のサイズを有する「良い」ブロックとしてオペレーティングシステムに提示され得る。たとえば、2048個の使用可能なデータバイトを有する2つの破壊されたページ120を、期待される4096個の使用可能なデータバイトを有する単一の論理ページにマッピングすることができる。そのような動作は、各ページ120の使用可能な記憶容量の不均一をオペレーティングシステムから隠すことができる。
【００３４】
図2は、フラッシュメモリ106を制御するための方法200を示す流れ図である。方法200は、フラッシュコントローラ104によって実行され得る。いくつかの構成では、図2に関連して説明されるフラッシュコントローラ104を、図1に関連して説明されたフラッシュコントローラ104に従って実施することができる。
【００３５】
1つの構成では、フラッシュコントローラ104は、記憶される符号語を作るために順方向誤り訂正(FEC)符号122を使用してソース情報ビットを符号化することによって、書込み動作を実行することができる。フラッシュコントローラ104は、現在のFECパラメータセット112に基づいてソース情報ビットを符号化することができる。フラッシュコントローラ104は、記憶される符号語をフラッシュメモリ106内の第1の破壊されたページ120に書き込むことができる。
【００３６】
フラッシュコントローラ104は、記憶されたデータの正確さを検証するために、記憶されたデータを読み戻すことができる。書込み失敗が発生する(たとえば、第1の破壊されたページ120が破壊され、書込みエラーが検出される)場合には、フラッシュコントローラ104は、現在のFECパラメータセット112より高い冗長性を提供する新しいFECパラメータセット112を選択する202ことができる。新しいFECパラメータセット112は、より高い誤り訂正能力を提供することができる。1つの構成では、新しいFECパラメータセット112は、複数のFECパラメータセット112の中から選択され得、各FECパラメータセット112は、異なる量の冗長性を提供する。新しいFECパラメータセット112は、現在のFECパラメータセット112より多数の、ページ120ごとに訂正され得るビットエラーの個数を提供することができる。したがって、フラッシュコントローラ104は、第1の破壊されたページ120に正確にデータを記憶するのに十分な冗長性を保証するが、第1の破壊されたページ120の使用可能な容量を減らす不必要な冗長性を導入しない、新しいFECパラメータセット112を選択することができる。
【００３７】
フラッシュコントローラ104は、フラッシュメモリ106内の第1の破壊されたページ120への書込み動作中に、新しいFECパラメータセット112を使用してソース情報ビットをコーディングする204ことができる。たとえば、フラッシュコントローラ104は、新しいFECパラメータセット112に基づいて符号語を作るために、FEC符号122および新しいFECパラメータセット112を使用してソース情報ビットを再符号化することができる。フラッシュコントローラ104は、フラッシュメモリ106内の第1の破壊されたページ120に符号語を書き込むことができる。
【００３８】
フラッシュコントローラ104は、第1の破壊されたページ120と少なくとも1つの追加の破壊されたページ120とを、期待されるページサイズを有する単一の論理ページにマッピングする206ことができる。オペレーティングシステム(または他のユーザアプリケーション)が、あるページサイズを期待する可能性があるので、第1の破壊されたページ120および少なくとも1つの追加の破壊されたページ120は、期待されるページサイズを有する単一の論理ページを形成するために組み合わされ(たとえば、マッピングされ)得る。したがって、フラッシュコントローラ104は、命令を(たとえば、オペレーティングシステムから)受け取ることができ、その単一の論理ページからデータを読み取り、その単一の論理ページにデータを書き込むことができる。
【００３９】
いくつかの構成では、第1の破壊されたページ120および1つまたは複数の追加の破壊されたページ120が、単一の論理ページを形成するために一緒にマッピングされる206場合に、フラッシュコントローラ104は、第1の破壊されたページ120および1つまたは複数の追加の破壊されたページ120に追加のグループ化情報を記憶することができる。グループ化情報は、第1の破壊されたページ120および1つまたは複数の追加の破壊されたページ120のメタデータ内に記憶され得る。たとえば、フラッシュコントローラ104は、各破壊されたページ120のために使用される新しいFECパラメータセット112を記憶することができる。新しいFECパラメータセット112が、破壊されたページ120ごとに別々に決定されるので、第1の破壊されたページ120のために使用される新しいFECパラメータセット112は、追加の破壊されたページ120のために使用される新しいFECパラメータセット112とは異なるものとされ得る。
【００４０】
フラッシュコントローラ104は、第1の破壊されたページ120および1つまたは複数の追加の破壊されたページ120にマッピングインジケータを記憶することもできる。マッピングインジケータは、第1の破壊されたページ120および1つまたは複数の追加の破壊されたページ120から単一の論理ページへのマッピングを示すことができる。
【００４１】
フラッシュコントローラ104は、第1の破壊されたページ120および1つまたは複数の追加の破壊されたページ120に順序情報をさらに記憶することができる。順序情報は、第1の破壊されたページ120および1つまたは複数の追加の破壊されたページ120内に記憶されたデータの配置を示すことができる。たとえば、フラッシュコントローラ104は、第1の破壊されたページ120に第1のデータセグメントを記憶することができ、1つまたは複数の追加の破壊されたページ120に追加のデータセグメントを記憶することができる。順序情報は、データの正しい再構成を容易にするために、フラッシュコントローラ104が単一の論理ページにデータを記憶する時のページ120の順序を示すことができる。
【００４２】
図3は、フラッシュメモリ106内の破壊されていないページ320aおよび破壊されたページ320b〜cを示すブロック図である。ページ320は、メモリの特定のブロックを指すことができる。いくつかの構成では、フラッシュメモリ106をNANDフラッシュメモリとすることができ、このNANDフラッシュメモリは、繰り返されたプログラミングの後に書込みエラーに出会う可能性がある。通常、各ページ320は、個別にプログラムされ(たとえば、書き込まれ)、ページ320のプログラミングは、選択されたビットを1から0にセットすることを伴う。プログラミング論理は、さらに、プログラミングが成功であったかどうかをチェックするために、プログラムされた結果を読み出すことができる。
【００４３】
生のページ320を、データエリアと予備エリアとに分割することができる。データエリアは、使用可能なデータバイトを含むことができる。予備エリアは、FECビットおよびメタデータを含むことができる。フラッシュメモリ106のユーザ(たとえば、オペレーティングシステム)は、あるデータエリアサイズを期待することができる。外部の観点から、各ページ320は、通常、2048バイトまたは4096バイトなど、通常は2のべきのバイトの固定されたサイズであるものとすることができる。予備エリアを使用して、FEC情報(たとえば、FECビット)および他のメタデータを記憶することができる。予備エリアは、数十バイトであるものとすることができる(たとえば、やはり通常はサイズにおいて2のべきの、64バイト、128バイト)。しかしながら、フラッシュメモリ106内の生のビットが、どのタイプのデータがフラッシュメモリ106内の所与のビットに記憶されているのかの間で区別しないので、使用可能なデータバイト、FECビット、およびメタデータの間の区別は、表面的なものである。
【００４４】
破壊されていないページ320aは、フラッシュメモリ106内の正常なページ320を表す。破壊されていないページ320aは、FECビット、使用可能なデータバイト、およびメタデータを含むことができる。FECビットは、フラッシュコントローラ304によって、順方向誤り訂正(FEC)に使用され得る。FECビットの量は、使用されるFECパラメータセット112に依存して変化する可能性がある。たとえば、k1は、破壊されていないページ320aについて、書込み失敗が宣言されており、より高い冗長性を提供するFECパラメータセット112が選択されている破壊されたページ320よりも小さいものとすることができる。
【００４５】
破壊されていないページ320a内の使用可能なデータバイトを使用して、データ(たとえば、ソース情報ビット)を記憶することができる。図示の構成では、期待されるサイズは4096バイトであるが、任意の適切な値を使用することができる。しかしながら、使用可能なデータバイトの個数は、変化する可能性がある。破壊されていないページ320a内の使用可能なデータバイト数は、オペレーティングシステムによって期待されるページサイズに対応するものとすることができる。
【００４６】
メタデータは、ソース情報ビットが破壊されていないページ320a内にどのように記憶されるのかに関する情報を含むことができる。メタデータは、ソース情報ビットを符号化するのに使用されたFEC符号122、特定のページ320のために選択されたFECパラメータセット112、およびページ320が破壊されたページ320と考えられるかどうかの表示を含むことができる。
【００４７】
第1の破壊されたページ320bおよび第2の破壊されたページ320cは、各々、破壊されたビットを含む。破壊されたビットは、書込みエラーをもたらす可能性がある。ページ320が書込みエラーに出会い始める時に、従来のフラッシュ管理は、これらのエラーを訂正するのにFECビットに頼ることができる、すなわち、ページ320内のバイトエラーの個数が、既存のFECが信頼できる形でエラーを訂正するのに使用され得ない範囲まで増加した後には、ページ320は、不良と考えられ、放棄されたものとしてマークされる。
【００４８】
しかしながら、ページ320を不良ページ320として破棄するのではなく、本システムおよび本方法のフラッシュコントローラ104は、従来のデータエリア(たとえば、使用可能なデータバイト)からの生のビットセルを使用して、より多くのFECビットを記憶し、ページ320内の使用可能なデータバイトの個数を減らすことができる。たとえば、現在のFECパラメータセット112より高い冗長性を提供する新しいFECパラメータセット112を選択することができる。新しいFECパラメータセット112が選択される時に、より高い冗長性がFECコーディング中に導入されるので、より少数の使用可能なデータバイトが使用可能になる可能性がある。この例では、破壊されたページ320b〜cの使用可能なデータバイトの個数は、2048バイトである。複数の破壊されたページ320の使用可能なデータバイト数が、同一であってもなくてもよいことに留意されたい。
【００４９】
第1の破壊されたページ320bおよび第2の破壊されたページ320cは、FECビット、使用可能なデータバイト、およびメタデータを含むことができる。破壊されていないページ320aと同様に、FECビットは、フラッシュコントローラ304によって、破壊されたページ320b〜cの順方向誤り訂正(FEC)に使用され得る。
しかしながら、各破壊されたページ320b〜cについて、より高い冗長性を提供するFECパラメータセット112が選択され得る。この場合に、FECビットの個数は、破壊されていないページ320aのために使用されるk1個のFECビットより多数であるk2個である。
【００５０】
破壊されたページ320b〜c内の使用可能なデータバイトは、破壊されていないページ320aより少ない可能性がある。これは、全体的な使用可能なデータバイトを減らす、破壊されたビットに起因する可能性がある。さらに、使用可能なデータバイトは、FECビットが増えるにつれて減る可能性がある。言い換えると、より多くのFECビットが、エラーを起こしやすい破壊されたページ320b〜cの信頼性を高めるためにより多くの冗長性を提供するのに使用されるので、使用可能なデータバイトは、減る。
【００５１】
破壊されたページ320b〜cを組み合わせて、期待されるページサイズを有する1つの論理ページ324を形成することができる。フラッシュコントローラ304は、複数の破壊されたページ320b〜cを1つの論理的な「良い」ページ324に組み合わせることができる。この形で、ユーザアプリケーションまたはオペレーティングシステムが、破壊されたページ320b〜cを利用できるものとすることができる。したがって、フラッシュコントローラ304は、ユーザアプリケーションから複雑さを隠し、インターフェース一貫性を維持する。図3は、各々が期待される使用可能なデータバイトの50%を有する2つの破壊されたページ320b〜cを組み合わせる構成を示すが、合計で期待される使用可能なデータバイトの100%になる任意の組合せを使用することができる。たとえば、期待される使用可能なデータバイトの10%を有する10個のページ320を、一緒にグループ化することができる。同様に、各々期待される使用可能なデータバイトの25%を有する4個のページ320を、グループ化することができるなどである。代替案では、使用可能なデータバイトのパーセンテージが、単一の論理ページ324に一緒にグループ化される破壊されたページ320ごとに同一でなくてもよい。たとえば、30%容量を有するページ320を、70%容量を有するページ320と組み合わせることができる。
【００５２】
論理ページ324が、破壊されていないページ320a内と同一のメタデータのうちのいくつかを有することができることに留意されたい。たとえば、論理ページ324のメタデータは、ページが最後に書き込まれた時を示すことができる。しかし、論理ページ324は、その論理ページ324を構成する複数の物理ページ320b〜cをポイントするためのメタデータを含むこともできる。インターフェースの観点から、オペレーティングシステムに提示されるメタデータは、論理ページ324が1つの物理ページ320からなるのか複数の物理ページ320からなるのかによって変化してはならない。しかしながら、追加のメタデータを使用して、フラッシュコントローラ304が物理ページマッピングのために論理ページ324を識別するのを助けることができる。
【００５３】
破壊されたページ320b〜cのためのメタデータは、ソース情報ビットが破壊されたページ320b〜c内にどのように記憶されているのかに関する情報を含むことができる。
メタデータは、ソース情報ビットを符号化するのに使用されたFEC符号122、特定のページ320のために選択されたFECパラメータセット112、およびページ320が破壊されたページ320b〜cと考えられるのかどうかの表示を含むことができる。
メタデータは、さらに、どのページ320b〜cが一緒にグループ化されるのか、グループ化されるページ320b〜cの順序、および論理ページ情報(たとえば、論理ページID)を含むことができるマッピング情報を含むことができる。
【００５４】
図4は、フラッシュメモリ406の信頼性および寿命を改善するためのフラッシュコントローラ404のより詳細な構成を示すブロック図である。図4に関連して説明されるフラッシュコントローラ404は、図1に関連して説明されたフラッシュコントローラ104に従って実施され得る。たとえば、フラッシュコントローラ404を、電子デバイス102内に含めることができる。
【００５５】
いくつかの構成では、フラッシュコントローラ404は、ソースバッファ426、符号器408、動的FECパラメータセレクタ410、復号器414、およびマッピングモジュール418を含むことができる。ソースバッファ426は、フラッシュメモリ406内に保存されるべきソース情報ビット428を受け取ることができる。ソース情報ビット428は、オペレーティングシステムまたはユーザアプリケーションから発するものとすることができる。符号器408は、FEC符号422を使用してソース情報ビットを符号化することができる。上で図1に関連して説明したように、FEC符号422を使用して、フラッシュメモリ406に関連するデータストレージエラーを検出し、訂正することができる。符号器408は、記憶される符号語430を作るために、FEC符号422を使用してソース情報ビット428を符号化することができる。
【００５６】
書込み動作中に、記憶される符号語430を、フラッシュメモリ406内のページ420に記憶する(たとえば、書き込む)ことができる。たとえば、書込み動作中に、FECビット432、使用可能データバイト434、およびメタデータ436を、ページ420に書き込むことができる。記憶される符号語430を、使用可能データバイト434に書き込むことができる。FECビット432は、FEC符号422によってソース情報ビット428に追加される冗長誤り訂正ビットとすることができる。メタデータ436は、ソース情報ビット428を符号化するのに使用されたFEC符号422、ページ420のために選択されたFECパラメータセット412、およびページ420が破壊されたページ420と考えられるかどうかの表示を含むことができる。
【００５７】
記憶される符号語430を書き込む際に、フラッシュコントローラ404は、記憶されたデータの正確さを検証するために、記憶されたデータを取り出し、読み取ることができる。たとえば、復号器414は、取り出された符号語438を復号することができる。エラーチェッカ416は、書込み失敗が発生した可能性があるかどうかを判定するために、FECチェックを実行することができる。エラーチェッカ416は、ページ誤り率442を入手するために、FEC符号422に基づいてFECビット432を比較することができる。たとえば、エラーチェッカ416は、書込み失敗を検出することができ、FEC符号422を使用してページ誤り率442を推定することができる。ページ誤り率442を、ビット誤り率とも称する場合があることに留意されたい。
【００５８】
1つの構成では、線形FEC符号422の特定のタイプが、入力ビット(たとえば、ソース情報ビット428)のある部分に基づいて各FECビット432を計算できる形で、たとえば、計算が、異なる位置の入力ビットのサブセットのXOR演算を用いることができる形で、FECビット432(パリティチェックビットとも称する)を作ることができる。読取り動作を実行する時に、新しいFECビット432を、入力データビットに基づいて再計算し、フラッシュデバイス上に記憶されたFECビット432と比較することができる。この形で、記憶されたFECビット432と新しいFECビット432とにおける相違の個数をカウントすることができ、この相違個数は、ビット誤り率(たとえば、ページ誤り率442)の範囲を示すことができる。
【００５９】
いくつかのシナリオでは、フラッシュメモリの所与のページ420が、複数のFEC符号語を含むことができる。各符号語は、それ自体のパリティチェックビット(たとえば、FECビット432)を有することができる。したがって、ビットエラーの総数は、ページ420内のFEC符号語からすべてのビットエラーを集計することによって推定され得る。FECコーディングパラメータ(たとえば、FECパラメータセット412)の適合は、現在のページ420がそれでも正しく復号され得るが、推定されたページ誤り率442が復号不能領域に近すぎると思われる時であっても、発生することができる。この場合に、フラッシュコントローラ404は、より強力なFECパラメータセット412を選択することによって、先を見越して冗長性を高めることができる。
【００６０】
もう1つの構成では、FECパラメータセット412適合は、読取り動作の後にも行われ得る。たとえば、フラッシュコントローラ404は、読取り動作を実行することができ、ここで、ページ420での推定されたビット誤り率(たとえば、ページ誤り率442)が、継続使用のために安全であるには高すぎると考えられる。この場合に、フラッシュコントローラ404は、現在のページ420のために別のFECパラメータセット412を選択することができる。フラッシュコントローラ404は、さらに、論理ページ324を形成するために1つまたは複数の劣化したフラッシュページ420を現在のページ420と組み合わせ、現在のページ420内のデータのある部分を、組み合わされた論理ページ324に再配置することができる。
【００６１】
ページ誤り率442が、最大誤り率しきい値440を超える場合には、ページ420は、信頼できる形でデータを記憶するためには破壊されすぎていると判定される。フラッシュコントローラ404は、破壊されたページ420を破壊されているものとしてマークし、破壊されたページ420がもはや使用されなくなるようにするために、フラッシュメモリ406を論理的に再マッピングすることができる。しかしながら、ページ誤り率442が、最大誤り率しきい値440未満である場合には、ページ420は、それでも、さらなる冗長性がFEC符号422に追加される場合に、信頼できる形で使用され得る。
【００６２】
動的FECパラメータセレクタ410は、ページ誤り率442に基づいてFECパラメータセット412を選択することができる。動的FECパラメータセレクタ410は、高まる冗長性をFEC符号422に提供することができる複数のFECパラメータセット412a〜nを含むことができる。たとえば、フラッシュメモリ406ライフサイクルの始めに、ページ420は、第1のFECパラメータセット412aから開始することができ、この第1のFECパラメータセット412aは、最大の容量と最低の誤り訂正能力とを提供する。次いで、ページ誤り率442に依存して、動的FECパラメータセレクタ410は、第1のFECパラメータセット412aより高い冗長性を提供する新しいFECパラメータセット412を選択することができる。動的FECパラメータセレクタ410は、ページ誤り率442に基づいて、信頼できるデータストレージを提供する新しいFECパラメータセット412を選択することができる。ソース情報ビット428は、新しいFECパラメータセット412を用いて符号化され得、記憶される符号語430は、フラッシュメモリ406の破壊されたページ420に記憶され得る。フラッシュコントローラ404は、ソース情報ビットを符号化するのに使用された新しいFECパラメータセット412をメタデータ436に記憶することもできる。
【００６３】
マッピングモジュール418は、複数の破壊されたページ420を単一の論理ページ324に組み合わせることができる。1つの構成では、オペレーティングシステムが、期待されるページサイズ444を要求することができる。しかしながら、破壊されたページ420の容量が、新しいFECパラメータセット412に関連する高められた冗長性に起因して減らされている可能性があるので、破壊されたページ420の使用可能データバイト434は、期待されるページサイズ444より少ない可能性がある。たとえば、期待されるページサイズ444が、4096バイトである可能性があるが、劣化およびFEC動作に起因して、破壊されたページ420の使用可能データバイト434が、2048バイトにすぎない場合がある。
【００６４】
マッピングモジュール418は、破壊されたページ420を、フラッシュメモリ406内の少なくとも1つの追加の破壊されたページ420とともに、期待されるページサイズ444を有する単一の論理ページ324にマッピングすることができる。1つの構成では、マッピングモジュール418は、部分的に劣化したページリスト446を含むことができ、部分的に劣化したページリスト446は、現在のFECパラメータセット412の誤り率のFECしきい値より高い推定された誤り率をエラーチェッカ416が検出する時に、破壊されたページ420に関連するエントリを投入され得る。部分的に劣化したページリスト446は、破壊されたページ420の使用可能データバイト434に関する情報を含むこともできる。マッピングモジュール418は、論理ページ情報テーブル448をも含むことができ、論理ページ情報テーブル448は、特定の論理ページ324にマッピングされている各破壊されたページ420の論理ページIDとアドレスとを含むことができる。
【００６５】
図5は、データをフラッシュメモリ406に書き込むための方法500を示す流れ図である。方法500は、フラッシュコントローラ404によって実行され得る。フラッシュコントローラ404は、現在のページ420への書込み動作を実行する502ことができる。たとえば、フラッシュコントローラ404は、記憶される符号語430を作るために、順方向誤り訂正(FEC)符号422を使用してソース情報ビット428を符号化することができる。フラッシュコントローラ404は、現在のFECパラメータセット412に基づいて、FECビット432を用いてソース情報ビット428を符号化することができる。フラッシュコントローラ404は、フラッシュメモリ406内の現在のページ420に符号化されたソース情報ビット428(たとえば、記憶される符号語430)を書き込むことができる。
【００６６】
フラッシュコントローラ404は、ページ誤り率442を入手する504ことができる。コンテンツ(たとえば、記憶される符号語430)を現在のページ420に書き込む際に、フラッシュコントローラ404は、コンテンツ(たとえば、取り出された符号語438)を読み戻すことによってページ誤り率442を入手する504ことができ、FEC符号422を使用して誤り率推定を実行することができる。1つの構成では、フラッシュコントローラ404は、ページ誤り率442を入手する504ために、記憶されたFECビット432とFEC符号422に基づいて新たに計算されたFECビット(使用可能データバイト434内に記憶されたデータビットから入手される)とを比較することができる。フラッシュコントローラ404は、ページ420の推定されたビット誤り率(たとえば、ページ誤り率442)を、FECパラメータセット412に関連する事前に決定されたFECしきい値のセットと比較する506ことができる。たとえば、推定されたページ誤り率442が1%未満である場合には、最低の冗長性を有する第1のFECコーディングパラメータ(たとえば、第1のFECパラメータセット412a)が使用され、推定されたページ誤り率442が1%を超えるが2%未満である場合には、第2のFECコーディングパラメータ(たとえば、第2のFECパラメータセット412b)が使用されるなどである。最後に、推定されたページ誤り率442が最大誤り率しきい値440を超える場合には、フラッシュコントローラ404は、現在のページ420を不良としてマークする508ことができ、現在のページ420は、もはや使用されなくなる。1つの構成では、最大誤り率しきい値440は、10%の推定されたビット誤り率とすることができる。しかしながら、ページ誤り率442が最大誤り率しきい値440未満である場合には、現在のページ420は、まだ使用され得る。
【００６７】
フラッシュコントローラ404が、ページ誤り率442が最大誤り率しきい値440未満であると判定する506場合には、フラッシュコントローラ404は、ページ誤り率442に基づいてFECパラメータセット412に関連するFECコーディングレートを選択する510ことができる。所与のページ誤り率442に対応するFECコーディングレートは、フラッシュコントローラ404が、より多くのエラーを有する場合であっても成功の復号をほぼ保証できるように設計される。1つの構成では、これは、符号化中により高い冗長性を追加する(たとえば、ソース情報ビット428により多くのFECビット432を追加する)ことによって達成され得る。フラッシュコントローラ404は、現在のページ420のメタデータ436にFEC情報を書き込む512ことができる。FEC情報は、使用されたFEC符号422と、選択されたFECパラメータセット412(FECコーディングレートを含む)とを含むことができる。
【００６８】
FECパラメータセット412(たとえば、FECコーディングパラメータ)が、推定されたページ誤り率442(たとえば、ページ420のビット誤り率)を使用して判定された後に、フラッシュコントローラ404は、ページ420内の使用可能データバイト434の量が期待されるページサイズ444未満であるかどうかを判定する514ことができる。ページ420内の使用可能データバイト434の量が期待されるページサイズ444以上である場合には、ページ420容量(たとえば、使用可能データバイト434)は、オペレーティングシステムの期待に従う。したがって、フラッシュコントローラ404は、他のページ420とのマッピングを行わずにページ420を使用する516ことができる。しかしながら、フラッシュコントローラ404が、ページ420内の使用可能データバイト434の個数が期待されるページサイズ444(FECビット432を含む)未満であると判定する514場合には、フラッシュコントローラ404は、ページ420を1つまたは複数の部分的に劣化したページ420とともにグループ化する(たとえば、マッピングする)ことができる。
【００６９】
フラッシュコントローラ404は、ページIDを部分的に劣化したページリスト446に記録する518ことができる。ページIDは、フラッシュメモリ406内の現在のページ420のアドレスまたは他の一意識別子とすることができる。部分的に劣化したページリスト446は、部分的に劣化したページリスト446内の各ページ420に関連する使用可能データバイト434の個数によってソートされ得る。
【００７０】
フラッシュコントローラ404は、別の部分的に劣化したページ420とともに現在のページ420をグループ化する520ことができる。1つの構成では、フラッシュコントローラ404は、現在のページ420とともにグループ化520すべき別の部分的に劣化したページ420を検索することができ、ここで、使用可能データバイト434の合計は、期待されるページサイズ444を最小量だけ超える。たとえば、フラッシュコントローラ404は、現在のページ420とともにグループ化520すべき別の部分的に劣化したページ420を、部分的に劣化したページリスト446から検索することができる。フラッシュコントローラ404が、使用可能データバイト434の合計が期待されるページサイズ444未満であると判定する522場合には、フラッシュコントローラ404は、グループ化されたページ420とともに少なくとも1つの他の部分的に劣化したページ420をグループ化する524ことができる。1つの構成では、フラッシュコントローラ404は、単一の追加の部分的に劣化したページ420をグループに追加することができる。もう1つの構成では、フラッシュコントローラ404は、部分的に劣化したページ420の対をグループに追加することができる。もう1つの構成では、フラッシュコントローラ404は、2のべき単位で部分的に劣化したページ420を追加することができる(たとえば、グループは、2個、4個、8個、16個などの部分的に劣化したページ420を含むことができる)。
【００７１】
グループ化されたページ420の使用可能データバイト434の合計が、期待されるページサイズ444以上である場合には、フラッシュコントローラ404は、グループ化情報を論理ページ情報テーブル448に記録する526ことができる。グループ化されたページ420を、単一の論理ページ324に組み合わせることができ、この単一の論理ページ324を、期待されるページサイズ444を有するブロックとしてオペレーティングシステムに提示することができる。したがって、論理ページ情報テーブル448内の各エントリは、別々の論理ページ324に関するものとすることができ、論理ページ324を形成するために一緒にマッピングされた物理ページ420の各々の論理ページIDとアドレスとを含むことができる。
【００７２】
フラッシュコントローラ404は、すべてのグループ化されたページ420のメタデータ436にグループ化情報を記録する528ことができる。フラッシュコントローラ404は、同一の論理ページ番号、グループ内の物理ページ420の順序を示すサブページ番号、グループ内の次のサブページのアドレス、および現在の物理ページ420内に記憶されたデータバイトの個数を、論理ページ324を形成するすべての物理ページ420に記録する528ことができる。このグループ化情報は、FEC情報と一緒に、ページ420の予備エリア(たとえば、メタデータ436)に書き込まれ得る。
【００７３】
図6は、論理ページ324からデータを読み取るための方法600を示す流れ図である。方法600は、フラッシュコントローラ404によって実行され得る。フラッシュコントローラ404は、論理ページ324に対する読取り動作を開始する602ことができる。読取り動作は、フラッシュコントローラ404が論理ページ324に記憶されたデータに関する要求を(たとえば、オペレーティングシステムから)受け取る時に、開始され得る。論理ページ324は、上で図5に関連して説明したように、論理ページ324を形成するために一緒にマッピングされた複数の部分的に劣化したページ420を含むことができる。
【００７４】
フラッシュコントローラ404は、論理ページIDに基づいて、論理ページ324を形成する物理ページ420をルックアップする604ことができる。たとえば、フラッシュコントローラ404は、各論理ページ324のエントリを含む論理ページ情報テーブル448を含むことができる。論理ページ情報テーブル448内のエントリは、論理ページ324を形成するために組み合わされた物理ページ420の各々の論理ページIDとアドレスとを含むことができる。論理ページ情報テーブル448内の論理ページIDをルックアップする604ことによって、フラッシュコントローラ404は、フラッシュメモリ406内のどの物理ページ420が論理ページ324を形成するのかを判定することができる。
【００７５】
フラッシュコントローラ404は、論理ページ324を形成する各物理ページ420のFEC情報およびメタデータ436を読み取る606ことができる。FEC情報は、ソース情報ビット428を符号化するのに使用されたFEC符号422および選択されるFECパラメータセット412(FECコーディングレートを含む)を含むことができる。本明細書で説明されるシステムおよび方法によれば、選択されるFECパラメータセット412が、何個のページ420が破壊されているのかに応じて変化し得ることに留意されたい。したがって、論理ページ324を形成する物理ページ420の各々は、同一のまたは異なるFECパラメータセット412を有する可能性がある。メタデータ436は、論理ページ番号、グループ内の物理ページ420の順序を示すサブページ番号、グループ内の次のサブページのアドレス、および現在の物理ページ420内に記憶されたデータバイトの個数などのグループ化情報を含むことができる。
【００７６】
フラッシュコントローラ404は、各物理ページ420に関連するFEC情報およびメタデータ436に基づいて各物理ページ420内のデータを復号する608ことができる。ページ420内に記憶されたFEC情報およびメタデータ436は、ページ420内に記憶されたデータをどのように復号608すべきかをフラッシュコントローラ404に示すことができる。たとえば、フラッシュコントローラ404は、FECパラメータセット412をFEC符号422に適用して、各物理ページ420内のデータを正しく復号する608ことができる。
【００７７】
フラッシュコントローラ404は、各物理ページ420から復号されたデータを組み合わせる610ことができる。1つの構成では、フラッシュコントローラ404は、メタデータ436内に含まれるグループ化情報に基づいて、復号されたデータを組み合わせる610ことができる。たとえば、グループ化情報は、グループ化されたページ420内に記憶されたデータの配置を示すことができる。したがって、グループ化情報は、フラッシュコントローラ404が、各物理ページ420から復号されたデータからソース情報ビット428を再構成することを可能にすることができる。復号されたデータを組み合わせる610際に、フラッシュコントローラ404は、組み合わされたデータを配送する612ことができる。フラッシュコントローラ404は、オペレーティングシステムまたは記憶されたデータに関する要求を行ったユーザアプリケーションに、組み合わされたデータを配送する612ことができる。
【００７８】
図7は、フラッシュメモリ106内の破壊されたページ720のもう1つの構成を示すブロック図である。破壊されたページ720は、FECビット732、使用可能データバイト734、メタデータ736、および破壊されたデータバイト750を含むことができる。FECビット732は、フラッシュコントローラ104によって、順方向誤り訂正(FEC)に使用され得る。FECビット732の量は、使用されるFECパラメータセット112に依存して変化し得る。
【００７９】
破壊されたページ720内の使用可能データバイト734は、データ(たとえば、ソース情報ビット428)を記憶するのに使用され得る。使用可能データバイト734の個数は、変化する可能性がある。たとえば、破壊されたデータバイト750およびFECビット732が、使用可能データバイト734の個数を減らす可能性がある。
【００８０】
メタデータ736は、データが破壊されたページ720内にどのように記憶されているのかに関する情報を含むことができる。上で説明したように、メタデータ736は、FEC情報752を含むことができ、このFEC情報752は、ソース情報ビット428を符号化するのに使用されたFEC符号122と、ページ720のために選択されたFECパラメータセット112とを示す。メタデータ736は、ページ720が破壊されたページ720と考えられるかどうかを示すことができる破壊されたページインジケータ754をも含むことができる。
【００８１】
メタデータ736は、さらに、ページ720の使用可能データバイト734および破壊されたデータバイト750の量を示す使用可能メモリインジケータ756を含むことができる。1つの構成では、使用可能メモリインジケータ756は、使用可能データバイト734および破壊されたデータバイト750の量を数として表すことができる。たとえば、使用可能データバイト734を、Xバイトとして表すことができ、破壊されたデータバイト750を、Yバイトとして表すことができる。もう1つの構成では、使用可能メモリインジケータ756は、使用可能データバイト734および破壊されたデータバイト750の量を、使用可能メモリのパーセンテージ(または比率)として表すことができる。たとえば、使用可能データバイト734を、破壊されたページ720の総容量によって除算して、使用可能メモリのパーセンテージを入手することができる。代替案では、破壊されたデータバイト750を、使用可能データバイト734によって除算して、破壊されたメモリと使用可能メモリとの比率を入手することができる。もう1つの構成では、使用可能メモリインジケータ756を、破壊されたページ720ではなくフラッシュコントローラ104内に記憶することができる。
【００８２】
使用可能メモリインジケータ756は、FECコーディングパラメータ(たとえば、FECパラメータセット412)とページ420内の使用可能データバイト434の総数と基づいて決定され得る。FECコーディングパラメータは、推定されたページ誤り率442に基づいて決定され得る。たとえば、フラッシュコントローラ404が、記憶されたデータの正確さを検証するために記憶されたデータを読み戻す時に、フラッシュコントローラ404は、FEC符号422に基づいてFECビット732を比較して、推定されたページ誤り率442を入手することができる。次いで、フラッシュコントローラ404は、推定されたページ誤り率442と、所与のコーディング誤り率(たとえば、ページ誤り率442)を特定のFECコーディングパラメータにマッピングする事前に決定されたFECしきい値のセットとに基づいて、FECコーディングパラメータを決定することができる。次いで、FECコーディングパラメータとページ420内で使用可能な総ビット数(データビット434とFECビット432との両方を含む)とに基づいて、フラッシュコントローラ404は、使用可能データバイト734の個数を判定することができる。
【００８３】
特定のビットを破壊されたまたは使用可能として区別する必要がないことに留意されたい。読取り/書込み動作がFECに基づくので、フラッシュコントローラ104は、推定されたビットエラーが選択されたFEC符号422によって訂正可能であるか否かを知ることだけを必要とする可能性がある。ビットエラーが訂正可能である場合には、復号の後の読取り結果が正しくなる。このプロセスでは、選択されたFEC符号422がそのページ内の既存のエラービットを訂正するだけではなく、将来により多くのエラービットを処理するようにするために、あるヘッドルームを割り当てることができる。
【００８４】
図8は、フラッシュメモリ106を制御するためのもう1つの方法800を示す流れ図である。方法800は、フラッシュコントローラ104によって実行され得る。いくつかの構成では、図8に関連して説明されるフラッシュコントローラ104は、図1に関連して説明されたフラッシュコントローラ104に従って実施され得る。たとえば、フラッシュコントローラ104は、FEC符号122および選択されたFECパラメータセット112を使用してソース情報ビット428を符号化することができる。
【００８５】
フラッシュコントローラ104は、フラッシュメモリ106内のページ120にデータを書き込む802ことができる。これは、図1に関連して説明したように行うことができる。
【００８６】
フラッシュコントローラ104は、使用可能データバイト434および破壊されたデータバイト750の量を示す使用可能メモリインジケータ756を判定する804ことができる。たとえば、フラッシュコントローラ104が、記憶されたデータの正確さを検証するために記憶されたデータを読み戻す時に、フラッシュコントローラ104は、ページ誤り率442を入手するために、FEC符号122に基づいてFECビット432を比較することができる。フラッシュコントローラ104は、ページ誤り率442に基づいて、使用可能データバイト434および破壊されたデータバイト750の量を判定することができる。これは、上で図7に関連して説明したように達成することができる。たとえば、フラッシュコントローラ104が、記憶されたデータの正確さを検証するために記憶されたデータを読み戻す時に、フラッシュコントローラ104は、推定されたページ誤り率442を入手するために、FEC符号122に基づいてFECビット432を比較することができる。次いで、フラッシュコントローラ104は、推定されたページ誤り率442と、所与のコーディング誤り率(たとえば、ページ誤り率442)を特定のFECコーディングパラメータにマッピングする事前に決定されたFECしきい値のセットとに基づいて、FECコーディングパラメータを決定することができる。次いで、FECコーディングパラメータとページ420内で使用可能な総ビット数(データビット434とFECビット432との両方を含む)に基づいて、フラッシュコントローラ404は、使用可能データバイト434の個数を判定することができる。
【００８７】
フラッシュコントローラ104は、使用可能メモリインジケータ756を記憶する806ことができる。1つの構成では、使用可能メモリインジケータ756は、上で図7に関連して説明したように、ページ720のメタデータ736内に記憶され得る。もう1つの構成では、使用可能メモリインジケータ756は、フラッシュコントローラ104内に配置されたリストまたはテーブル内に記憶され得る。たとえば、フラッシュコントローラ104は、フラッシュメモリ406内のページ120のリストを記憶することができる。フラッシュコントローラ104は、ページ120のリスト内の特定のページ120に関連する使用可能メモリインジケータ756を記憶することもできる。フラッシュコントローラ104が、後続の書込み動作を実行する場合に、フラッシュコントローラ104は、使用可能メモリインジケータ756をもう一度判定することができ、使用可能メモリインジケータ756の記憶された値を更新することができる。それに加えてまたはその代わりに、フラッシュコントローラ104が、ページ120からの後続の読取り動作を実行する場合に、フラッシュコントローラ104は、使用可能メモリインジケータ756をもう一度判定し、使用可能メモリインジケータ756の記憶された値を更新することができる。たとえば、後続の書込み動作または後続の読取り動作を実行する際に、フラッシュコントローラ104は、書込み動作または読取り動作に基づいて、ページ誤り率442を推定することができる。フラッシュコントローラ104は、ページ誤り率442に基づいて、使用可能メモリインジケータ756の記憶された値を更新することができる。
【００８８】
フラッシュコントローラ104は、使用可能メモリインジケータ756に基づいて、ページ120内に追加データを記憶すべきかどうかを判定する808ことができる。この形で、フラッシュコントローラ104は、追加データを記憶するのにページ120を使用すべきかどうかをすばやく判定する808ことができる。1つの構成では、書込み動作を実行する時に、フラッシュコントローラ104は、まず、ページ120が期待されるページサイズ444を有するかどうかを判定するために、使用可能メモリインジケータ756をルックアップすることができる。ページ120の使用可能データバイト434の個数が、期待されるページサイズ444未満である場合には、フラッシュコントローラ104は、上で説明したように、他の部分的に劣化したページとともにページ120をマッピングすることなくページ120を使用することがないものとすることができる。
【００８９】
もう1つの構成では、使用可能メモリインジケータ756は、ページ120の使用可能な容量(たとえば、使用可能データバイト434)が期待されるページサイズ444未満であることを示すことができるが、フラッシュコントローラ104は、使用可能な容量が追加データを記憶するのに十分である場合に、その追加データをページ120に記憶することができる。したがって、フラッシュコントローラ104は、破壊されたページ120がオペレーティングシステムに関する期待されるページサイズ444未満を有するにもかかわらず、データが使用可能メモリインジケータ756によって示される使用可能な容量未満である場合に、そのデータを破壊されたページ120に記憶することができる。これは、オペレーティングシステムとハードウェアコントローラとの間のソフトウェアインターフェースを使用することと、記憶されるファイルに関する情報をオペレーティングシステムからフラッシュコントローラ104に渡すこととを含むことができる。1つの構成では、渡される情報は、アプリケーションソフトウェアによって使用されるファイルの、オペレーティングシステムによって認識される実際のサイズとすることができる。
【００９０】
図9に、電子デバイス902内に含めることができる、ある種の構成要素を示す。電子デバイス902は、上で説明した電子デバイス102のうちの1つまたは複数に従って実施され得る。電子デバイス902は、プロセッサ909を含む。プロセッサ909は、汎用の単一チップまたはマルチチップのマイクロプロセッサ(たとえば、ARM)、特殊目的マイクロプロセッサ(たとえば、デジタル信号プロセッサ(DSP))、マイクロコントローラ、プログラマブルゲートアレイなどとすることができる。プロセッサ909は、中央処理装置(CPU)と称する場合がある。図9の電子デバイス902内には、単一のプロセッサ909が図示されているが、代替の構成では、プロセッサの組合せ(たとえば、ARMおよびDSP)を使用することができる。
【００９１】
電子デバイス902は、プロセッサ909と電子通信しているメモリ903をも含む(すなわち、プロセッサ909は、メモリ903から情報を読み取り、かつ/またはメモリ903に情報を書き込むことができる)。メモリ903は、電子情報を記憶することができる任意の電子構成要素とすることができる。メモリ903は、その組合せを含めて、ランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、磁気ディスク記憶媒体、光記憶媒体、RAM内のフラッシュメモリデバイス、プロセッサとともに含まれるオンボードメモリ、プログラム可能読取り専用メモリ(PROM)、消去可能プログラム可能読取り専用メモリ(EPROM)、電気的消去可能PROM(EEPROM)、レジスタ、その他とすることができる。
【００９２】
データ905aおよび命令907aを、メモリ903内に記憶することができる。命令907aは、1つまたは複数のプログラム、ルーチン、サブルーチン、機能、手続きなどを含み得る。命令907aは、単一のコンピュータ可読ステートメントまたは多数のコンピュータ可読ステートメントを含むことができる。命令907aは、上で説明した方法のうちの1つまたは複数を実施するためにプロセッサ909によって実行可能であり得る。命令907aを実行することは、メモリ903内に記憶されたデータ905aを使用することを必要とし得る。図9は、プロセッサ909にロードされたいくつかの命令907bおよびデータ905bを示す。
【００９３】
電子デバイス902は、電子デバイス902とリモート位置(たとえば、基地局または他の電子デバイス)との間の信号の送信および受信を可能にするために、送信器915および受信器917を含むこともできる。送信器915および受信器917を、集合的にトランシーバ913と称する場合がある。アンテナ911を、トランシーバ913に電気的に結合することができる。電子デバイス902は、(図示されていない)複数の送信器、複数の受信器、複数のトランシーバ、および/または複数のアンテナを含むこともできる。
【００９４】
電子デバイス902の様々な構成要素を、1つまたは複数のバスによって一緒に結合することができ、このバスは、電力バス、制御信号バス、状況信号バス、データバスなどを含むことができる。単純さのために、様々なバスは、図9ではバスシステム919として図示されている。
【００９５】
上記の説明では、時として参照番号が様々な用語に関連して使用されている。用語が参照番号に関して使用される時、これは、図面のうちの1つまたは複数で示す特定の要素を指すことを意味する場合がある。用語が参照番号なしで使用される時、これは任意の特定の図面に限定せずに、一般に、その用語を指すことを意味する場合がある。
【００９６】
「determining(決定すること/判定すること)」という用語は、様々な行為を包含し、したがって、「determining」は、計算すること、コンピューティング、処理すること、導出すること、調査すること、ルックアップすること(たとえば、テーブル、データベース、または別のデータ構造でのルックアップ)、確認すること、および類似物を含むことができる。また、「determining」は、受信すること(たとえば、情報の受信)、アクセスすること(たとえば、メモリ内のデータへのアクセス)、および類似物を含むことができる。また、「determining」は、解決すること、選択すること、選ぶこと、確立すること、および類似物を含むことができる。
【００９７】
「〜に基づく」という句は、そうではないと明示的に指定されない限り、「〜だけに基づく」を意味しない。言い換えると、「〜に基づく」という句は、「〜だけに基づく」と「少なくとも〜に基づく」との両方を記述するものである。
【００９８】
「結合する」という用語およびその活用形は、要素の間の直接または間接の接続を示すことができる。たとえば、第2の要素に結合された第1の要素は、第2の要素に直接に接続され、または別の要素を介して第2の要素に間接的に接続され得る。
【００９９】
「プロセッサ」という用語は、汎用プロセッサ、中央処理装置(CPU)、マイクロプロセッサ、デジタル信号プロセッサ(DSP)、コントローラ、マイクロコントローラ、状態機械などを包含するように、広く解釈されなければならない。いくつかの情況の下で、「プロセッサ」は、特定用途向け集積回路(ASIC)、プログラマブル論理デバイス(PLD)、フィールドプログラマブルゲートアレイ(FPGA)などを指すことができる。「プロセッサ」という用語は、たとえば、デジタル信号プロセッサ(DSP)とマイクロプロセッサとの組合せ、複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)コアと連動する1つまたは複数のマイクロプロセッサ、または他の任意のそのような構成など、処理デバイスの組合せを指すことができる。
【０１００】
「メモリ」という用語は、電子情報を記憶することができるすべての電子構成要素を包含するように広く解釈されなければならない。メモリという用語は、たとえばランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、不揮発性ランダムアクセスメモリ(NVRAM)、プログラマブル読取り専用メモリ(PROM)、消去可能プログラマブル読取り専用メモリ(EPROM)、電気的消去可能PROM(EEPROM)、フラッシュメモリ、磁気または光学のデータストレージ、レジスタなどの様々なタイプのプロセッサ可読媒体を指し得る。メモリは、プロセッサがそのメモリから情報を読み取り、かつ/またはそのメモリに情報を書き込むことができる場合に、プロセッサと電子通信していると言われる。プロセッサと一体のメモリは、そのプロセッサと電子通信している。
【０１０１】
「命令」および「コード」という用語は、すべてのタイプのコンピュータ可読ステートメントを含むように広く解釈されなければならない。たとえば、「命令」および「コード」という用語は、1つまたは複数のプログラム、ルーチン、サブルーチン、関数、手続きなどを指すことができる。「命令」および「コード」は、単一のコンピュータ可読ステートメントまたは多数のコンピュータ可読ステートメントを含むことができる。
【０１０２】
本明細書で説明した機能は、プロセッサ可読媒体上またはコンピュータ可読媒体上に1つもしくは複数の命令として記憶され得る。「コンピュータ可読媒体」という用語は、コンピュータまたはプロセッサによってアクセスされ得る任意の利用可能な媒体を指す。限定ではなく、例として、そのような媒体は、RAM、ROM、EEPROM、フラッシュメモリ、CD-ROMもしくは他の光ディスクストレージ、磁気ディスクストレージデバイスもしくは他の磁気ストレージデバイス、あるいは所望のプログラムコードを命令またはデータ構造の形で記憶するために使用可能であり、かつコンピュータによってアクセス可能な任意の他の媒体を含み得る。ディスク(disk)およびディスク(disc)は、本明細書で使用される時に、コンパクトディスク(disc)(CD)、レーザディスク(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピディスク(disk)、およびBlu-ray(登録商標)ディスク(disc)を含み、ディスク(disk)は、通常はデータを磁気的に再生し、ディスク(disc)は、レーザを用いてデータを光学的に再生する。コンピュータ可読媒体を、有形かつ非一時的とすることができることに留意されたい。「コンピュータプログラム製品」という用語は、コンピューティングデバイスまたはプロセッサによって実行され、処理され、または計算され得るコードまたは命令(たとえば、「プログラム」)と組み合わされたコンピューティングデバイスまたはプロセッサを指す。本明細書で使用される時に、「コード」という用語は、コンピューティングデバイスまたはプロセッサによって実行可能であるソフトウェア、命令、コード、またはデータを指すことができる。
【０１０３】
ソフトウェアまたは命令を、伝送媒体を介して伝送することもできる。たとえば、ソフトウェアが、ウェブサイト、サーバ、または他のリモートソースから同軸ケーブル、光ファイバケーブル、より対線、デジタル加入者回線(DSL)、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用して伝送される場合に、同軸ケーブル、光ファイバケーブル、より対線、DSL、または赤外線、無線、およびマイクロ波などのワイヤレス技術は、伝送媒体の定義に含まれる。
【０１０４】
本明細書で開示される方法は、説明される方法を達成するための1つまたは複数のステップまたは行為を含む。方法ステップおよび/または行為を、特許請求の範囲の範囲から逸脱せずにお互いと交換することができる。言い換えると、ステップまたは行為の特定の順序が、説明されつつある方法の正しい動作のために必要である場合を除いて、特定のステップおよび/または行為の順序および/または使用を、特許請求の範囲の範囲から逸脱せずに変更することができる。
【０１０５】
特許請求の範囲が、上で示された正確な構成および構成要素に限定されないことを理解されたい。特許請求の範囲の範囲から逸脱せずに、本明細書で説明されるシステム、方法、および装置の配置、動作、および詳細において、様々な修正、変更、および変形を作ることができる。
【符号の説明】
【０１０６】
102  電子デバイス
104  フラッシュコントローラ
106  フラッシュメモリ
108  符号器
110  動的FECパラメータセレクタ
112  FECパラメータセット
114  復号器
116  エラーチェッカ
118  マッピングモジュール
120  ページ
122  順方向誤り訂正(FEC)符号
200  方法
304  フラッシュコントローラ
320  ページ
320a  破壊されていないページ
320b  破壊されたページ
320c  破壊されたページ
324  論理ページ
404  フラッシュコントローラ
406  フラッシュメモリ
408  符号器
410  動的FECパラメータセレクタ
412  FECパラメータセット
412a〜n  FECパラメータセット
414  復号器
416  エラーチェッカ
418  マッピングモジュール
420  ページ
422  FEC符号
426  ソースバッファ
428  ソース情報ビット
430  記憶される符号語
432  FECビット
434  使用可能なデータバイト
436  メタデータ
438  取り出された符号語
440  最大誤り率しきい値
442  ページ誤り率
444  期待されるページサイズ
446  部分的に劣化したページリスト
448  論理ページ情報テーブル
500  方法
600  方法
720  破壊されたページ
732  FECビット
734  使用可能なデータバイト
736  メタデータ
750  破壊されたデータバイト
752  FEC情報
754  破壊されたページインジケータ
756  使用可能メモリインジケータ
800  方法
902  電子デバイス
903  メモリ
905a  データ
905b  データ
907a  命令
907b  命令
909  プロセッサ
911  アンテナ
913  トランシーバ
915  送信器
917  受信器
919  バスシステム
【図１】
0005976979.tif 000002
【図２】
0005976979.tif 000003
【図３】
0005976979.tif 000004
【図４】
0005976979.tif 000005
【図５】
0005976979.tif 000006
【図６】
0005976979.tif 000007
【図７】
0005976979.tif 000008
【図８】
0005976979.tif 000009
【図９】
0005976979.tif 000010