(57)【要約】不揮発メモリシステムの動作を制御するためのファームウエアコードの複数のコピーがメモリシステムのフラッシュメモリの適宜異なる位置に記憶される。これらの位置のアドレスマップもフラッシュメモリに記憶される。メモリシステムが初期化されると、アドレスマップを参照し、ファームウエアの１つのコピーをフラッシュメモリからコントローラメモリにロードするために、メモリコントローラに記憶されているブートコードがそのマイクロプロセッサによって実行され、その後、ユーザデータを記憶し、検索するためにメモリシステムを動作させるようにコピーがコントローラメモリからマイクロプロセッサによって実行されてもよい。データをチェックするために誤り訂正符号（ＥＣＣ）が使用されるが、ＥＣＣを使用する必要性を少なくするため、フラッシュメモリに記憶されている２つ以上のファームウエアコピーの最良部分が使用される。ユーザデータが同じメモリに２つ以上の状態で記憶される場合には、ファームウエアコードが２つの状態でフラッシュメモリに記憶されてもよい。
2007518166.tif 000002
【特許請求の範囲】
【請求項１】
異なる位置に記憶されたファームウエアコードの少なくとも第１および第２のコピーを含むフラッシュメモリと、マイクロプロセッサと、マイクロプロセッサがアクセス可能なブートコードを含む読み出し専用メモリ（ＲＯＭ）と、マイクロプロセッサがアクセス可能なファームウエアコードを記憶するためのランダムアクセスメモリ（ＲＡＭ）とを有するメモリ記憶システムを初期化するための方法において、
ファームウエアの第１のコピーをフラッシュメモリからＲＡＭへと転送するためにブートコードを実行するステップと、
ファームウエアコードの転送された第１のコピー内にビットエラーがあればそれを特定するステップと、
修正可能なビットエラーが特定された場合には、エラーがあるビットを修正するステップと、
修正不能なビットエラーが特定された場合には、修正不能なビットエラーを含む第１のコピーの少なくとも一部の代わりにファームウエアコードの第２のコピーの少なくとも一部をＲＡＭへと読み込むステップと、
ＲＡＭから得られるファームウエアコードのエラーのないコピーを実行するステップと、
を含む方法。
【請求項２】
前記転送された第１のコピー内にビットエラーがあればそれを特定するステップは、ファームウエア部分がフラッシュメモリからＲＡＭに転送される際に、ファームウエア部分を連続的にＥＣＣ回路へと送ることによって、ファームウエアの第１のコピーの個別部分から誤り訂正符号（ＥＣＣ）を計算するステップと、計算されたＥＣＣと以前にファームウエアデータの第１のコピーの前記部分から計算されたＥＣＣとを比較するステップとを含む請求項１記載の方法。
【請求項３】
前記エラーがあるビットを修正するステップは、エラーがあるビットを修正するためにマイクロプロセッサがブートコードのエラー修正アルゴリズムを実行するステップを含む請求項２記載の方法。
【請求項４】
前記ファームウエアコードの第１のコピーの個別部分は、１つまたは複数のデータセクタと、以前にデータセクタから計算され、それと共にフラッシュメモリに記憶されたＥＣＣとを含む請求項２記載の方法。
【請求項５】
ファームウエアの第１のコピーをフラッシュメモリからＲＡＭへと転送するためにブートコードを実行するステップの前に、
最初に、フラッシュメモリの複数の固定位置の少なくとも１つに記憶され、かつ前記ファームウエアコードの少なくとも第１および第２のコピーが記憶されるフラッシュメモリの異なる位置のアドレスを含む初期化メモリマップが発見されるまで、フラッシュメモリ内の複数の固定位置に１つずつアクセスするステップと、
前記アドレスを得るために初期化メモリマップのデータを読み出すステップと、
その後、ファームウエアコードの第１のコピーにアクセスするステップと、
をさらに含む請求項１記載の方法。
【請求項６】
初期化メモリマップから読み出されたデータ内にビットエラーがあればそれを特定するステップと、
読み出されたデータ内の修正可能なビットエラーが特定された場合には、エラーがあるビットを修正するステップと、
読み出されたデータ内の修正不能なビットエラーが特定された場合には、初期化メモリマップのデータを異なる条件で再読み出しするステップと、
をさらに含む請求項５記載の方法。
【請求項７】
前記ファームウエアコードの少なくとも第１および第２のコピーは、フラッシュメモリの異なる位置に記憶され、その際、所定数の単数または複数のビットのファームウエアコードだけがそのフラッシュメモリ記憶素子ごとに記憶される一方、前記メモリ記憶システムはさらに、ユーザデータをフラッシュメモリの別の位置に記憶し、その際、フラッシュメモリの記憶素子ごとに前記所定のビット数以上のユーザデータを記憶する請求項１記載の方法。
【請求項８】
前記所定数の単数または複数のビットは、フラッシュメモリ記憶素子ごとに厳密に１ビットである請求項７記載の方法。
【請求項９】
転送されたファームウエアコードの第２のコピーの少なくとも一部にビットエラーがあればそれを特定するステップと、
転送されたファームウエアコードの第２のコピーの少なくとも一部内の特定されたビットエラーが修正不能である場合には、転送された第２のコピーの少なくとも一部内のビットエラー数を減らす方向にする条件下で、ファームウエアコードの第２のコピーの少なくとも一部の読み出しを繰り返すステップと、
をさらに含む請求項１記載の方法。
【請求項１０】
前記ファームウエアの第１のコピーをフラッシュメモリからＲＡＭへと転送するためにブートコードを実行するステップの前に、ファームウエアがフラッシュメモリに記憶される際に設定されるファームウエアの存在フラグの状態をチェックするステップと、ファームウエアの存在フラグが設定された場合にだけファームウエアの第１のコピーをフラッシュメモリからＲＡＭに転送するためにブートコードの実行を継続するステップとをさらに含む請求項１記載の方法。
【請求項１１】
前記単数または複数の所定数のいくつかのビットエラーが特定されるのに応答して、ファームウエアの第１のコピーのエラーのあるデータが記憶されるフラッシュメモリの位置に関連するハウスキーピングフラグを設定するステップをさらに含む請求項１記載の方法。
【請求項１２】
前記ハウスキーピングフラグの設定に応答して、ファームウエアコードのエラーのないコピーがＲＡＭに転送された後、ファームウエアの第１のコピーのエラーのあるデータを修正するステップをさらに含む請求項１１記載の方法。
【請求項１３】
前記ファームウエアの第１のコピーのエラーのあるデータを修正するステップは、ファームウエアの修正された第１のコピーをフラッシュメモリに再書き込みするステップを含む請求項１２記載の方法。
【請求項１４】
前記ファームウエアの修正された第１のコピーを再書き込みするステップは、ファームウエアの修正された第１のコピーを当初記憶されていた位置とは異なる位置に再書き込みするステップを含む請求項１３記載の方法。
【請求項１５】
前記ファームウエアの第１のコピーのエラーのあるデータを修正するステップは、誤り訂正符号を使用するステップを含む請求項１２記載の方法。
【請求項１６】
前記ファームウエアの第１のコピーのエラーのあるデータを修正するステップは、ファームウエアコードの第２のコピーから良好なデータを転送するステップを含む請求項１２記載の方法。
【請求項１７】
フラッシュメモリと、マイクロプロセッサと、マイクロプロセッサによってアクセス可能なブートコードを含む読み出し専用メモリ（ＲＯＭ）と、ランダムアクセスメモリ（ＲＡＭ）と、送られてくるデータから誤り訂正符号（ＥＣＣ）を計算する回路とを有するメモリ記憶システムの動作方法において、
ファームウエアのコピーを１つずつＥＣＣ回路へと送ることによって、フラッシュメモリのアドレス指定可能な異なる位置にファームウエアコードの少なくとも第１および第２のコピーを記憶し、かつそれによって計算されたＥＣＣをフラッシュメモリに記憶するステップと、
その後、ファームウエアの第１のコピーをフラッシュメモリからＥＣＣを計算するＥＣＣ回路を経てＲＡＭに転送するために、マイクロプロセッサにブートコードを実行させることによってメモリシステムの動作を初期化するステップと、
計算され記憶されたＥＣＣを利用して、転送されたファームウエアコードの第１のコピー内にビットエラーがあればそれを特定するステップと、
ビットエラーが修正可能であると特定された場合には、エラーのあるビットを修正してエラーのないファームウエアコードがＲＡＭにロードされるようにするために、マイクロプロセッサにブートコード内のエラー修正アルゴリズムを実行させるステップと、
ビットエラーが修正不能であると特定された場合には、エラーのないファームウエアコードがＲＡＭにロードされるようにするために、修正不能のビットエラーを含む第１のコピーの少なくとも一部の代わりにファームウエアコードの第２のコピーの少なくとも一部をＲＡＭに転送するステップと、
を含む方法。
【請求項１８】
前記ファームウエアコードを記憶するステップは、ファームウエアコードの１つまたは複数のセクタから個々に計算されるＥＣＣを記憶するステップを含む請求項１７記載の方法。
【請求項１９】
ファームウエアコードの前記少なくとも第１および第２のコピーのアドレス指定可能な位置を含むフラッシュメモリの所定の複数の位置の１つにマップを記憶するステップをさらに含み、前記マイクロプロセッサによってブートコードを実行するステップは、まずマップが発見されるまで所定の複数の位置に１つずつアクセスすることによってマップの位置を突き止め、マップが記憶されている位置でマップのコンテンツを読み出すステップを含む請求項１７記載の方法。
【請求項２０】
前記ファームウエアコードを記憶するステップは、フラッシュメモリ内に少なくとも１つのファームウエアコピーが存在することを示すためのフラグを設定するステップをさらに含み、前記ファームウエアコードの第１または第２のコピーのいずれかを転送するためのブートコードを実行するステップは、まず関連するフラグを読み出し、関連するフラグが設定されている場合にのみファームウエアコードのコピーを読み出すステップに進む請求項１７記載の方法。
【請求項２１】
フラッシュメモリ記憶システムにおいて、
データを電荷蓄積素子内に記憶し、アレイの複数の所定のアドレスの少なくとも１つにメモリマップを含むフラッシュメモリセルのアレイであって、前記マップはファームウエアコードの１つまたは複数のコピーが記憶されているアドレスを指定するデータを含むフラッシュメモリセルのアレイと、
コントローラプロセッサと、
記憶システムの初期化に応答してプロセッサがアクセスし、実行するブートコードを含む読み出し専用メモリと、
実行される命令を得るためにプロセッサによるアクセスが可能なランダムアクセスメモリと、を備え、
前記ブートコードは、プロセッサがフラッシュメモリ内の複数の所定のアドレスにアクセスして、ファームウエアの１つまたは複数のコピーが記憶されているアドレスを指定するメモリマップのデータの位置を突き止めてこれを読み出し、その後、前記特定された１つまたは複数のアドレスの少なくとも１つに位置するファームウエアコードを読み出し、その後、読み出されたファームウエアコードをランダムアクセスメモリ内に書き込むようにさせるフラッシュメモリ記憶システム。
【請求項２２】
マップおよびファームウエアコードがメモリセル記憶素子ごとに１ビットずつフラッシュメモリに記憶され、さらにマップおよびファームウエアを含むメモリアレイのアドレス以外の少なくとも幾つかのアドレスにメモリセル記憶素子ごとに１ビット以上のデータが記憶される請求項２１記載のシステム。
【請求項２３】
フラッシュメモリ記憶システムにおいて、
電荷蓄積素子内にデータを記憶し、ファームウエアコードの第１および第２のコピーから計算された誤り訂正符号（ＥＣＣ）のそれぞれの第１および第２のセットと共に記憶されたファームウエアコードの少なくとも第１および第２のコピーを含むフラッシュメモリセルのアレイと、
コントローラプロセッサと、
回路を通過するデータからＥＣＣを計算する回路と、
記憶システムの初期化に応答してプロセッサがアクセスし、実行するブートコードを含む読み出し専用メモリと、
実行される命令を得るためにプロセッサによるアクセスが可能なランダムアクセスメモリと、を備え、
前記ブートコードは、プロセッサにファームウエアコードの第１のコピーを読み出すようにさせ、またこれにはＥＣＣを計算し、ＥＣＣが関連するファームウエアコードの第１のコピーの一部に存在するいずれかのデータエラーに対する状態をファームウエアコードの第１のコピーと共に記憶されたＥＣＣの第１のセットに対して供給するＥＣＣ計算回路へと前記読み出されたファームウエアコードの第１のコピーを送ることが含まれ、
（Ａ）ファームウエアコードの第１のコピーの所定の１つの部分にデータエラーがないことを状態が示している場合には、その後、ファームウエアコードの第１のコピーの所定の部分をランダムアクセスメモリへと書き込むが、
（Ｂ）ファームウエアコードの第１のコピーの所定の部分にデータエラーがあることを状態が示している場合には、ブートコードはファームウエアコード内のビットエラー数が所定数を超えているか否かをプロセッサに判定させ、
（ｉ）ビットエラー数が所定数を超えていない場合には、さらにプロセッサにエラーのあるビットを修正させ、修正されたファームウエアコードの第１のコピーをランダムアクセスメモリへと書き込ませるが、
（ｉｉ）ビットエラー数が所定数に等しいか、或いはこれを超えている場合には、さらにプロセッサにファームウエアコードの第２のコピーの少なくとも一部を読み出させ、少なくとも１つのＥＣＣを計算し、前記少なくとも１つのＥＣＣが関連するファームウエアコードの第２のコピーの前記少なくとも一部に存在するいずれかのデータエラーに対する状態を供給するＥＣＣ計算回路へと前記読み出された第２のファームウエアコードを送らせるようにし、ファームウエアコードの第２のコピーの前記少なくとも一部内にデータエラーがないことを状態が示している場合には、その後ファームウエアコードの読み出された第２のコピーの前記少なくとも１つの部分をランダムアクセスメモリへと書き込ませるシステム。
【請求項２４】
ファームウエアコードはメモリセル記憶素子ごとに１ビットずつフラッシュメモリに記憶され、さらにファームウエアコードを含むメモリアレイのアドレス以外の少なくとも幾つかのアドレスにメモリセル記憶素子ごとに１ビット以上データが記憶される請求項２３記載のシステム。
【請求項２５】
フラッシュメモリ記憶システムにおいて、
データを電荷蓄積素子内に記憶し、ファームウエアコードの存在を示す第１のフラグと、ファームウエアコードが存在する場合にはこれがロードされるべきではないことを示す第２のフラグと共に記憶されたファームウエアコードの少なくとも１つのコピーを含むフラッシュメモリセルのアレイと、
コントローラプロセッサと、
記憶システムの初期化に応答してプロセッサがアクセスし、実行するブートコードを含む読み出し専用メモリと、
実行される命令を得るためにプロセッサによるアクセスが可能なランダムアクセスメモリと、を備え、
前記ブートコードは、プロセッサに第１および第２のフラグを探させると共に、
（Ａ）第１のフラグが存在し、第２のフラグが存在しない場合には、ファームウエアコードをランダムアクセスメモリへとロードするように進行させ、
（Ｂ）第１のフラグと第２のフラグの双方が存在する場合には、ファームウエアコードをランダムアクセスメモリへとロードせずにテスト用にファームウエアコードにアクセスするようにさせ、
（Ｃ）第１のフラグが存在しない場合には、ファームウエアコードをランダムアクセスメモリへとロードする試みも、テスト用にファームウエアコードにアクセスする試みもなされないようにするフラッシュメモリ記憶システム。
【請求項２６】
前記ファームウエアコードと第１および第２のフラグはメモリセル記憶素子ごとに１ビットずつフラッシュメモリ内に記憶され、さらに前記ファームウエアコードと第１および第２のフラグを含むメモリアレイのアドレス以外の少なくとも幾つかのアドレスにメモリセル記憶素子ごとに１ビット以上のデータが記憶される請求項２５記載のシステム。
【請求項２７】
異なる位置に記憶されたファームウエアコードの少なくとも第１および第２のコピーおよび別の位置にあるユーザデータを含むフラッシュメモリと、マイクロプロセッサと、マイクロプロセッサがアクセス可能なブートコードを含む読み出し専用メモリ（ＲＯＭ）と、マイクロプロセッサがアクセス可能なファームウエアコードを記憶するためのランダムアクセスメモリ（ＲＡＭ）とを有するメモリ記憶システムを初期化するための方法において、
フラッシュメモリの前記異なる位置内のメモリセルの個々の記憶素子内にファームウエアコードの前記少なくとも第１および第２の１ビットのコピーを記憶し、フラッシュメモリの前記別の位置内のメモリセルの個々の記憶素子内に１ビット以上の前記ユーザデータを記憶するステップと、
ファームウエアコードの第１のコピーをフラッシュメモリからＲＡＭへと転送するためにブートコードを実行するステップと、
転送時にファームウエアコードの第１のコピー内にビットエラーがあればそれを特定するステップと、
転送されたファームウエアコードの第１のコピー内の特定されたビットエラーの特定のものを修正するか、或いは特定されたビットエラーを含むファームウエアコードの第１のコピーの少なくとも一部を置き換えるために、ファームウエアコードの第２のコピーの少なくとも一部を読み出すステップと、
ＲＡＭから得られるファームウエアコードのエラーのないコピーを実行するステップと、
を含む方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般に、不揮発性フラッシュメモリシステムのコントローラの初期化に関し、特にメモリシステムの初期化またはリセットがなされた場合に、動作ファームウエアをフラッシュメモリに記憶し、かつ記憶されたファームウエアをコントローラメモリへと読み込む方法に関する。
【背景技術】
【０００２】
今日、商業的に成功している多くの不揮発性メモリ製品が、特にフラッシュＥＥＰＲＯＭ（電気的に消去可能でプログラム可能な読み出し専用メモリ）セルのアレイを使用した小形形状のファクタカードの形式で使用されている。カードが接続されているホストとインターフェイスし、カード内のメモリアレイの動作を制御するために、カードにはメモリコントローラも含まれている。このようなコントローラは典型的に、マイクロプロセッサ、幾つかの不揮発性読み出し専用メモリ（ＲＯＭ）、および揮発性ランダムアクセスメモリ（ＲＡＭ）を含む。メモリカードという実装例の他に、１つまたは複数の集積回路の形式になったこの種のメモリシステムを様々な種類のホストシステムに代わりに組み込んでもよい。
【０００３】
２つの一般的なメモリセルアレイの構成、ＮＯＲおよびＮＡＮＤが市販されている。典型的なＮＯＲアレイでは、メモリセルは列方向に延びる隣接するビットラインのソース／ドレイン拡散層の間に接続され、コントロールゲートはセルの行に沿って延びるワードラインに接続されている。メモリセルはソースとドレインとの間のセルのチャネル領域の少なくとも一部の上方に配置された少なくとも１つの記憶素子を含む。このため、記憶素子にプログラムされる電荷レベルがセルの動作特性を左右し、よってアドレス指定されたメモリセルに適宜の電圧を印加するとセルを読み出すことができる。このようなセル、メモリシステムにおけるその使用、およびその製造方法の例が、米国特許第５，０７０，０３２号（特許文献１）、第５，０９５，３４４号（特許文献２）、第５，３１３，４２１号（特許文献３）、第５，３１５，５４１号（特許文献４）、第５，３４３，０６３号（特許文献５）、第５，６６１，０５３号（特許文献６）、および第６，２２２，７６２号（特許文献７）に記載されている。
【０００４】
ＮＡＮＤアレイは、個々のビットラインと基準電位との間に、１つまたは複数の選択トランジスタと共に接続された１６または３２などの２つ以上のメモリセルの直列ストリングを使用してセル列を形成する。ワードラインはこのような多数の列内のセルと交差して延びている。ストリング内の残りのセルをオン状態になりにくくすることによって、ストリングを流れる電流がアドレス指定されたセルに蓄積される電荷レベルに依存するように、プログラミング中に列内の各セルを読み出し、かつ検証する。メモリシステムの一部としてのＮＡＮＤ構成のアレイおよびその動作の例が、米国特許第５，５７０，３１５号（特許文献８）、第５，７７４，３９７号（特許文献９）、第６，０４６，９３５号（特許文献１０）、および第６，５２２，５８０号（特許文献１１）に記載されている。
【０００５】
前に参照した特許および論文に記載されている電流フラッシュＥＥＰＲＯＭアレイの電荷蓄積素子は最も一般的な導電性フローティングゲートであり、典型的にはドープされたポリシリコン材料から形成される。フラッシュＥＥＰＲＯＭシステムで有用な別の種類のメモリセルは、電荷を不揮発的に蓄積するために導電性フローティングゲートの変わりに非導電性誘電体材料を使用している。このようなセルは、チャンらの論文「真の単一トランジスタ酸化物−窒化物−酸化物ＥＥＰＲＯＭデバイス」，ＩＥＥＥ電子デバイスレターズ，ＥＤＬ−８巻３号，１９８７年３月，９３〜９５ページ ("A True Single-Transistor Oxide-Nitride-Oxide EEPROM Device", IEEE Electron Device Letters, Vol. EDL-8, No. 3, March 1987, pp. 93-95) に記載されている。導電性コントロールゲートとメモリセルチャネル上の半導体基板の表面との間には酸化シリコン、窒化シリコンおよび酸化シリコン（「ＯＮＯ」）から形成された３層誘電体が挟まれている。セルはセルチャネルから窒化シリコンへと電子を注入することによってプログラムされ、電子はそこにトラップされ、限定領域に蓄積され、また窒化シリコンに熱いホールを注入することによって消去される。誘電性蓄積素子を使用した幾つかの特定のセル構造が、２００２年１０月２５日に出願された米国特許出願第１０／２８０，３５２号（公開特許出願第２００３−０１０９０９３号）（特許文献１２）に記載されている。
【０００６】
集積回路を使用する場合のほとんどがそうであるが、フラッシュＥＥＰＲＯＭメモリセルのアレイの場合も、ある種の集積回路機能を実装するために必要なシリコン基板の面積を縮小させるための圧力が存在する。所定サイズのメモリカードおよびその他の種類のパッケージの記憶容量を高めるために、または容量の増加とサイズの縮小化の双方のためには、シリコン基板の所定領域内に記憶可能なデジタルデータの量を増大することが絶えず望まれている。データの記憶密度を高める方法の１つは、メモリセルごとに、および／または蓄積素子ごとに１ビット以上のデータを記憶することである。これは蓄積素子の電荷レベル電圧範囲のウインドウを２つ以上の状態に区分することによって達成される。このような４つの状態を利用することによって、各々のセルは２ビットのデータを記憶することが可能になり、状態が８つになると蓄積素子ごとに３ビットのデータが記憶され、以下同様である。フローティングゲートを使用した多状態フラッシュＥＥＰＲＯＭ構造およびその動作が、米国特許第５，０４３，９４０号（特許文献１３）および第５，１７２，３３８号（特許文献１４）に記載され、また誘電フローティングゲートを使用した構造が、前に援用されている米国特許出願第１０／２８０，３５２号（特許文献１２）に記載されている。米国特許第５，９３０，１６７号（特許文献１５）および第６，４５６，５２８号（特許文献１６）に記載されているように、様々な理由から多状態メモリセルアレイの選択された部分を２つの状態（二進）で動作させてもよい。
【０００７】
典型的なフラッシュＥＥＰＲＯＭアレイのメモリセル群は、同時に消去されるセル群からなる個別ブロックに区分される。すなわち、ブロックは消去単位である。各ブロックは典型的には単一または複数ページのデータを記憶し、ページはプログラミングと読み出しの最小単位であるが、１ページ以上を単一の動作でプログラムしたり、或いは読み出したりすることもできる。各ページは典型的に単数または複数のデータセクタを記憶し、セクタのサイズはホストシステムによって規定される。セクタの一例は、磁気ディスクドライブで確立された標準に従えば５１２バイトのユーザデータを含み、それに加えてユーザデータおよび／またはそれらが記憶されているブロックに関する幾つかのバイト数のオーバーヘッド情報を含む。メモリシステムは典型的に各ブロック内の１６、３２、またはそれ以上のページで構成され、各ページはホストのデータセクタを１つまたはごく少数記憶する。
【０００８】
フラッシュメモリシステム内のコントローラは典型的に、メモリアレイの動作およびアレイとホストシステムとの間のデータの流れを制御するために、ファームウエアの動作システムからの命令を実行するマイクロプロセッサを含む。ある市販の製品では、このファームウエアはコントローラの一部として、典型的には単数または複数のメモリセルアレイ集積回路チップである小形のフラッシュＥＥＰＲＯＭ内に記憶されている。フラッシュメモリを使用することによって再プログラミングによりファームウエアを容易に更新することができる。ファームウエアは典型的に、システムの電源投入またはリセット時にフラッシュメモリからコントローラＲＡＭへと読み込まれる。ファームウエアをＲＡＭへとロードするために、コントローラＲＯＭに記憶されている少量のブートコードがコントローラマイクロプロセッサによってまず実行される。次に、マイクロプロセッサはＲＡＭからのファームウエアの命令を実行する。というのは、この種のメモリではフラッシュメモリよりも非常に速い読み出しが可能であるからである。ＲＡＭはもちろん揮発性であるが、電源が切れても電源回復後には、ファームウエアは再びフラッシュメモリからＲＡＭへとロードされ、メモリシステムの動作が再開される。
【０００９】
このファームウエアのブートシステムは極めて良好に動作するが、フラッシュメモリを形成するにはチップ上にその他の回路を形成する場合とは異なる処理を用いなければならないので、コントローラ集積回路チップは高価である。したがって、製造コストを下げるには、ユーザデータを記憶するためにホストによるアクセスができないフラッシュメモリのセルアレイの指定ブロックにファームウエアを記憶することがこれまで示唆されてきた。システムの初期化がなされると、コントローラマイクロプロセッサはファームウエアをフラッシュメモリの指定ブロックからＲＡＭへとロードするためにＲＯＭのブートコードを実行する。このようにすると、ファームウエアをロードするためにわずかなコードしかＲＯＭに記憶されないので、これらのフラッシュブロックに再プログラムすることによって、やはりほぼすべてのファームウエアを変更および更新することが可能になる。
【特許文献１】米国特許第５，０７０，０３２号
【特許文献２】米国特許第５，０９５，３４４号
【特許文献３】米国特許第５，３１３，４２１号
【特許文献４】米国特許第５，３１５，５４１号
【特許文献５】米国特許第５，３４３，０６３号
【特許文献６】米国特許第５，６６１，０５３号
【特許文献７】米国特許第６，２２２，７６２号
【特許文献８】米国特許第５，５７０，３１５号
【特許文献９】米国特許第５，７７４，３９７号
【特許文献１０】米国特許第６，０４６，９３５号
【特許文献１１】米国特許第６，５２２，５８０号
【特許文献１２】米国特許出願第１０／２８０，３５２号
【特許文献１３】米国特許第５，０４３，９４０号
【特許文献１４】米国特許第５，１７２，３３８号
【特許文献１５】米国特許第５，９３０，１６７号
【特許文献１６】米国特許第６，４５６，５２８号
【特許文献１７】米国特許第５，５３２，９６２号
【特許文献１８】米国特許第６，１５１，２４６号
【特許文献１９】米国特許出願第１０／６７８，３４５号
【非特許文献１】チャンらの論文「真の単一トランジスタ酸化物−窒化物−酸化物ＥＥＰＲＯＭデバイス」，ＩＥＥＥ電子デバイスレターズ，ＥＤＬ−８巻３号，１９８７年３月，９３〜９５ページ
【発明の開示】
【００１０】
コントローラＲＡＭにロードされるファームウエアの完全性を保つことはもちろん極めて重要なことである。ロードされたファームウエアに僅か１ビットでもエラーがあれば、メモリシステムの動作に異常をきたし、まったく動作しなくなることさえある。このような異常動作または故障のその他の悪影響に加えて、ユーザデータがプログラミングまたは読み出しの際に破損したり、メモリから検索できなくなることさえある。ファームウエアまたはその別のコピーを再ロードすることによってエラーが事後修正された場合でも、修復不能な損傷がユーザデータに、或いはフラッシュメモリからそれを読み出す能力に既に生じていることがある。したがって、ファームウエアをフラッシュメモリの予備ブロックにプログラムする処理およびシステムの初期化時にそれをＲＡＭに転送する間の双方で、フラッシュメモリの他のブロックにユーザデータをプログラムし、または記憶するマイクロプロセッサの動作を制御するファームウエアの完全性を高めるための手順が講じられる。
【００１１】
動作ファームウエアの２つ以上のコピーがフラッシュメモリ内の異なる位置に記憶される。これらの位置は固定される必要はない。むしろ、各システムの最終製造ステップの１つとして、ファームウエアがメモリにプログラムされる時点でファームウエアを記憶するために各カードまたは組み込まれたメモリシステムの最適な予備メモリセルブロックを選択することができる。ファームウエアのコピーが記憶されるブロックのアドレスを有するマップも、製造中にメモリの幾つかの指定ブロックの１つにプログラムされる。ＲＯＭのブートコードによって、コントローラマイクロプロセッサは、アドレスマップを発見するまでこれらの幾つかの指定ブロックを順次アドレス指定する。次に、マップはコントローラＲＡＭへとコピーされ、ファームウエアの第１のコピーの始端が存在するフラッシュメモリブロックのアドレスがマイクロプロセッサによってマップから読み出され、次にそのアドレスによってブロックがアドレス指定され、第１のファームウエアコピーのＲＡＭ内へのコピーが開始される。プログラム可能なファームウエアアドレスマップを使用することによって、ＲＯＭブートコードまたはブート処理を複雑にすることなく、ファームウエアを異なるカードの異なるフラッシュメモリ位置に記憶することが可能になる。
【００１２】
通常のフラッシュメモリはユーザデータ用に複数の状態で動作されるが、ファームウエアを記憶するための予備ブロックは二進か、或いはユーザデータ用に使用される状態よりも少ない状態の数で動作されてもよい。すなわち、フラッシュメモリの大多数のメモリセルの記憶素子は２ビット以上のデータを記憶するが、予備ブロックの記憶素子は各々が記憶素子ごとに１ビット以上のデータという、より少ないビット数を記憶するように動作されてもよい。それによって異なる状態間のマージンが増し、ひいてはファームウエアのデータが障害、およびエラーを誘発することのあるその他の作用を受けにくくなる。このように信頼性が高まるのに加えて、より少ない状態数で記憶されたデータはより迅速に読み出し可能になる。それによって、予備ブロックに記憶されるデータ密度は低くなるが、比較的少ないブロックしか影響されない。したがって、通常はメモリシステムに及ぼす影響が全体として少なくなる。
【００１３】
ファームウエアデータは通常、公知の冗長コードアルゴリズムに基づいてデータから計算された誤り訂正符号（ＥＣＣ）と共にフラッシュメモリに記憶される。ＥＣＣは典型的に、ファームウエアデータの各セクタまたはページと共に記憶される。ファームウエアデータがフラッシュメモリの予備ブロックからコントローラにアップロードされると、データはＥＣＣでエラーチェックされる。１ビット以上のセクタにエラーがある場合には、エラーのあるビット数が、使用しようとする特定のＥＣＣアルゴリズムの能力内であれば、セクタのＥＣＣを使用してエラーを修正してもよい。あるいは、フラッシュメモリに記憶されている１つ以上の代わりのコピーからセクタが読み出されてもよい。第１のコピー内のエラー数がＥＣＣアルゴリズムの修正能力を超えている場合には、セクタは必ず別のファームウエアコピーから読み出される。セクタの代替コピーの全てがエラーを含む場合には、エラーの少ないコピーが修正され、これを使用することができる。ＥＣＣの計算はＲＯＭブートコードの制御下でのコントローラマイクロプロセッサによってではなく、コントローラの一部として備えられるハードウエア回路によって行われることが好ましい。しかし、修正可能なデータエラーが検出されると、そのときはマイクロプロセッサがＲＯＭブートコードの命令の実行によるエラー修正に関わるようになる。
【００１４】
読み出し中にファームウエアデータビットのエラーが検出された場合にはマージニング技術を利用してもよい。すなわち、ＥＣＣを用いてエラーがあると判定された場合には、同じデータが異なる基準レベルで再び読み出されてもよい。すなわち、１ビット以上のファームウエアの記憶レベルの何らかのエラーにマージンを与えるのである。読み出されたマージンは通常、ＥＣＣが修正能力以上の数のエラーを検出するとき、これに応じて利用される。あるいは、読み出されたマージンは、ＥＣＣがエラーを検出した後であるが、それを修正するためにＥＣＣを用いる前に、利用されてもよい。いずれの場合も、ＥＣＣはマージンのついた読み出しデータの妥当性を検証するために使用される。この方法によって妥当なデータの読み出しができない場合には、ファームウエアの第２のコピーが読み出される。
【００１５】
ファームウエアコードのコピーが記憶されていることを示すため、フラッシュメモリの予備セクタに「ファームウエア存在」フラグが設定されてもよい。このとき、ブートコードは、ブートコードを含む領域がアドレス指定される前にフラグが読み出されるようにする。関連するファームウエアコピーの存在をフラグが表示していない場合には、コピーを読み出そうとする動作は実施されない。判断が行われる際にロードされないように、適切に記憶されたファームウエアには「Ｄｏ  Ｎｏｔ  Ｌｏａｄ（ロードしない）」フラグを使用してもよい。これらの２つのフラグの組み合わせで、マイクロプロセッサによるフラッシュメモリからのファームウエアの読み出し、およびロードを試行するか否かが制御される。
【００１６】
本発明のその他の態様、利点および特徴は、添付図面と関連させて考慮されるべきであるその代表的な実施形態についての以下の説明に含まれる。本願明細書において参照される全ての特許、特許出願、論文およびその他の刊行物は、全ての目的のためにその全体が参照により本願明細書において援用されている。
【発明を実施するための最良の形態】
【００１７】
背景技術の欄で前に説明したフラッシュＥＥＰＲＯＭシステムは機能的に図１のように表すことができる。不揮発性メモリシステム１１は典型的に、不揮発メモリセルのアレイ１３とコントローラ１５の双方を含む。メモリセルアレイ１３は背景技術で前に説明した種類のものでもよく、或いはその他の種類の再プログラム可能な不揮発性メモリでもよい。コントローラは、メモリセルアレイ１３とインターフェイスする回路１７、マイクロプロセッサ１９、ランダムアクセスメモリ（ＲＡＭ）２１、読み出し専用メモリ（ＲＯＭ）２３、誤り訂正符号（ＥＣＣ）計算回路２５、およびホストインターフェイス回路２７を備える。メモリシステム１１はホストインターフェイス回路２７を経てホスト２９に接続されている。ホスト２９はパーソナルコンピュータ、デジタルカメラ、携帯情報端末、携帯電話、デジタルオーディオプレーヤー、またはこのような不揮発性メモリシステムを必要とするその他の電子システムでよい。メモリシステム１１はホスト内に組み込まれ、ひいてはホストシステムの一部をなしてもよく、或いはホストと電気的かつ機械的に出し入れ自在に接続されたカードの形式でもよい。
【００１８】
内部コントローラを備えるフラッシュメモリとして使用されるこのような出し入れ自在のカードには幾つかの既存の標準規格がある。このような標準規格の１つであるＰＣカード標準規格は３種類のＰＣカードの仕様を規定している。ＰＣカード標準規格はパーソナルコンピュータメモリカード国際協会（ＰＣＭＣＩＡ）の製品である。コンパクットフラッシュ（登録商標）カード（ＣＦカード）はＰＣカードと機能的に互換性があるが、ずっと小形である。さらに小形の不揮発性メモリカードは、マルチメディア（登録商標）カード（ＭＭＣ）である。ほぼ同サイズのＭＭＣの修正版は後のセキュアデジタル（ＳＤ）カードである。メモリカードとして使用するのに適したこれらの電子カード、またその他の電子カードには標準規格がある。これらの標準規格には、誰でも利用することができるものと、カードを利用するために設立された団体の会員が利用することができるものとがある。
【００１９】
動作時に、コントローラ１１は、データがプログラムされる論理アドレスと共に、ホスト２９からデータセクタを受信する。次に、コントローラはこれらのアドレスをメモリセルアレイ１３内の物理的ページのアドレスへとマッピングする。アレイ１３の物理的メモリマップの例が図２に示されている。メモリはブロック３１などの幾つかのブロックに区分され、各ブロックは一回の消去動作の一部として同時に消去されるメモリセルの最小単位である。同様に、各ブロックは、ブロック３１のページ３３、３５、３７、および３９などのメモリセルのページに区分されている。説明を簡略化するために、各ブロックに４ページだけがあるものとして示されているが、通常はずっと多くのページが使用される。各ページに複数のデータセクタを記憶し、より多くのページ数を有するようなより大きいブロックが趨勢となっている。
【００２０】
メモリセルアレイ１３は、図２に示されているように、多数のブロックに区分されている。これらのブロックのうちの幾つかのブロックがアレイ１３の動作を管理し、ホスト２９と通信するためにコントローラ１５によって使用されるファームウエア、パラメータ、およびその他のデータを記憶するための「予備ブロック」として指定されている。この例では、ブロック４１、４３、４５、４７、および４９が予備ブロックであることが示されている。これらのブロックは同じメモリシステムの異なるコピーに対し同一である必要はなく、条件の変化によって望ましい場合には単一のメモリシステムの動作中にダイナミックに再指定されることも可能である。コントローラ１５は予備ブロックへのホスト２９によるアクセスを許容せず、コントローラは、むしろシステムを動作させるためにこれらのブロック内に記憶されたデータを利用する。システムの残りのブロックはコントローラ１５がホスト２９によって供給されるユーザデータを記憶するために利用可能であるが、場合によっては幾つかのブロックは通常の使用が抑えられ、必要になればシステムの動作中に他のブロックの代替となる余剰ブロックとして指定される。コントローラは、ユーザデータの記憶用に利用可能なアレイの物理的アドレス空間に論理アドレスをホストからマップする。
【００２１】
１ブロックの容量を超えるファームウエアは必ずしも物理的に隣接するブロックに記憶される必要はないが、コントローラによる動作ファームウエアの記憶および利用を説明するため、ファームウエアの第１のコピーが隣接する予備ブロック４７と４９に記憶されるものとして示されている。ファームウエアの第２のコピーは予備ブロック４１と４３とに記憶される。ファームウエア、および動作パラメータなどのコントローラによって使用されるその他のデータはメモリシステムの動作にとって極めて重要なので、これらは、メモリシステムの使用中に時間の経過とともに第１のコピーが破損する場合の保証として２つのコピーに記憶される。ファームウエアファイルによって占められるブロックの数はもちろん、ファイルのサイズとブロックのデータ記憶容量に左右される。
【００２２】
電源投入時またはハードリセットに応答して生ずるようなシステムの初期化中に、ファームウエアコードの１つのコピーがフラッシュメモリ１３からコントローラのＲＡＭ２１へとロードされる。次に、マイクロプロセッサ１９がＲＡＭ２１からのファームウエアコードを実行する。ファームウエアコードをロードする際にマイクロプロセッサ１９に命令を発するために、ＲＯＭ２３内には少量のブートコードが備えられている。システムの初期化がなされると、マイクロプロセッサ１９は１つのファームウエアコピーおよびその他の必要な動作データをフラッシュメモリ１３の予備セクタからＲＡＭ２１へとロードするためにブートコードの命令を読み出し、実行する。その後、マイクロプロセッサ１９はメモリシステムの動作を制御するためにロードされたファームウエアコードの命令を実行する。通常の種類のＲＯＭ２３では、ブートコードは更新またはその他の変更が容易にはできず、さらにシステムコードの方は容易に再書き込み可能であるために、フラッシュメモリ１３に記憶されたファームウエアコード内にはできるだけ多くのシステムコードが配される。
【００２３】
ブートコードにファームウエアのフラッシュメモリアドレスおよび動作データを持久的に含めるのではなく、ブートコードによってマイクロプロセッサがまずこの情報を含むマップを含むフラッシュメモリ内のより小さいファイルへアクセスすることができるようにする。この例では、マップはフラッシュメモリの１ページに記憶される。このマップを幾つかのページのいずれかに記憶することができるように、ブートコードによってマイクロプロセッサが幾つかの指定ページに順次アクセスし、マップを発見するまでこのページからデータを読み出すようにする。この例が図２に示され、ページ５１、５３、５５、および５７が指定されている。指定されたページは、この例では、アレイの異なる位置に物理的に分散された幾つかのブロックの第１のページ（ページ０）である。コントローラがマップを正確に読み出すことができることが重要であるので、アレイ内のある位置が他の位置よりも好ましいことが判明していれば、マップデータはより好ましい位置にプログラムされる。１または数ギガバイトのユーザデータ記憶容量を有するメモリシステムには、可能なページ数として、例えば１０または１２の潜在的マップページを指定することができる。
【００２４】
マップページの一例に記憶されるデータが図３に示されている。フィールド６１はマップデータを格納するページを特定する一意的なシグネチャを含む。マイクロプロセッサがアクセスする必要のある幾つかの予備ファイル用のアドレスデータはマップページに含まれ、このような予備ファイル２つをファイル０および１とし、各ファイルのデータを図３に示す。各予備ファイルには、４つのデータフィールドが含まれる。予備ファイル０の場合、フィールド６３はファイルの識別子（ＩＤ）を含む。これによってファームウエアファイルであることを示すことができる。フィールド６５はページ数などのファイルの長さを特定する。予備ファイルの第１のコピーのフラッシュメモリ内のアドレスはフィールド６７に特定され、第２のコピーのアドレスはフィールド６９に特定される。これらのアドレスは一般に、ファイル長フィールド６５によって示されている幾つかの連続ページに記憶されたファイルの第１のページのアドレスとなる。予備ファイル１に対する同じデータ、および少なくとも初期化処理時にコントローラによってアクセスされる必要がある他のいずれかのデータもマップ内に含まれる。
【００２５】
ファームウエアをコントローラにアップロードする第１の実施形態
図４の流れ図は、ファームウエアコードをフラッシュメモリ１３からコントローラＲＡＭ２１へとロードするためのメモリシステム１１の初期化の例を示す。ステップ７１で示されているように、システムの電源がオン状態にされるか、或いは電源が投入されたシステムでハードリセットがなされると、この処理が開始される。次のステップ７３はコントローラの特定用途向け集積回路（ＡＳＩＣ）を初期化し、フラッシュメモリ１３に電力を投入し、メモリビジー信号をホストに送る。次に、ステップ７５で、ＲＯＭ２３内のブートコードが読み出され、マイクロプロセッサ１９によって実行される。
【００２６】
ステップ７５は、フラッシュメモリ内のマップページの位置を探し（図２を参照）、これを読み出した後、２つの１ビットフラグを含むようにマップ内で特定された予備ブロック内のファイルを読み出すステップを含む。これらのフラグの１つは「ＦＷ＿Ｐｒｅｓｅｎｔ（ファームウエア存在）」フラグであり、これはフラッシュメモリ内に記憶されたファームウエアコードがあるか否かを示す。フラッシュメモリに何もない場合には、このフラグによってコントローラはファームウエアコードを読み出す試行を回避することができる。第２の「Ｄｏ  Ｎｏｔ  Ｌｏａｄ」フラグは、ファームウエアがフラッシュメモリ内に存在する場合でも、ファームウエアをコントローラにロードしないことが望まれる場合に設定される。この第２のフラグは、例えばファームウエアコードなしで判断ルーチンが実行されている場合に設定される。しかし、このような動作が予測されない場合には、Ｄｏ  Ｎｏｔ  Ｌｏａｄフラグを使用する必要はない。これが使用される場合、別の選択肢として、フラグはレジスタまたはハードウエアフラグ内などのフラッシュメモリの外部に記憶されてもよい。双方のフラグが使用されるものと想定すると、次のステップ７７はそれらのフラグがファームウエアの存在を示しているのか、また設定されたＤｏ  Ｎｏｔ
Ｌｏａｄフラグが存在しないことを示しているかを判定する。そうである場合には、ステップ７９で開始される手順はファームウエアのロードへと進む。そうではない場合には、ステップ１０１で示されているように、コントローラは、ホストが処理の制御に介入するオプションを伴ってアイドルループに入る。
【００２７】
予備セクタに２つのフラグを２ビットのデータとして記憶する代わりに、これらの２ビットを設定するためのパッケージの外部に２つのピンを指定してもよい。例えば、これらのピンのうちの１つが接地されている場合には、そのピンによって表されるフラグが設定される。このような場合、ステップ７５および７７の一部としてこれらのピンの電気的状態の問い合わせが行われる。
【００２８】
ステップ７９で示されているように、ステップ７５でマップページから読み出された２つのコピーのアドレスを組み合わせ、第１のコピーを読み出す準備をすることを含め、コントローラ自体がファームウエアを読み出すためのセットアップをする。特定のメモリアレイの読み出し中に用いられる様々な電圧レベルなどの公称の読み出し条件を、予備ブロックからＦＷ＿Ｐｒｅｓｅｎｔフラグと同時に読み出すことができ（ステップ７５）、さらにステップ７９で読み出しセットアップのために利用することもできる。
【００２９】
ステップ８１で、第１のファームウエアコピーの第１のページが読み出される。この例では、各ページが１つのデータセクタを記憶するので、流れ図では読み出しの単位として「セクタ」という用語が用いられる。個々のページが２つ、４つまたはそれ以上のデータセクタを記憶するようになっている場合には、ページ内のすべてのデータセクタが同時に読み出される。しかし、図４の流れ図に示されているように、依然として一度に１つのデータセクタが読み出されてもよい。
【００３０】
読み出されたファームウエアデータは、フラッシュメモリから読み出された各データと基本的には同じく、コントローラのＥＣＣ回路２５へと送られる。ＥＣＣは各データセクタから計算され、セクタの一部としてオーバーヘッドデータとして記憶されるＥＣＣと比較される。記憶されるＥＣＣはデータのプログラミング中にデータから計算される。エラー修正がセクタレベルで行われる限り、エラー修正は、各ページに記憶されているデータセクタが１つであるのか、或いは複数であるのかに関わらず行われる。あるいは、単一のページ内の複数のホストセクタのデータに単一のＥＣＣが使用される場合には、ＥＣＣのチェックはページごとに一回だけ行われる。一方で、各データセクタごとに２つのＥＣＣを含め、１つはファームウエアデータ部分用にし、もう１つはデータＥＣＣおよび／またはその他の動作パラメータを含むオーバーヘッド部分用にすることも通例である。さらに別な選択肢として、単数または複数のファームウエアセクタに関連するオーバーヘッドデータがファームウエアデータとは異なるページまたはブロックに記憶されてもよいが、読み出しは順次、また互いに関連して行われる。
【００３１】
記載されている特定の例では、ステップ８３で、ＥＣＣ回路２５は読み出されたファームウエアからＥＣＣが計算されるようにし、またデータと共に読み出されたＥＣＣとの比較の結果として、ＥＣＣによってカバーされている読み出されたセクタまたはデータセクタの状態を示す数ビットの出力ビットを供給する。次に、ブートコードを実行するプロセッサ１９は状態ビットが読み出されるようにする。読み出されたデータにエラーがないことを状態ビットが示す場合には、ステップ８５で示されているように、次のページを読み出すためにページアドレスなどが更新される。ファームウエアファイルの第１のコピーを含む全てのページが未だ読み出されていない場合には、ステップは次のページを読み出すためにステップ７９に戻る。しかし、最新に読み出されたページが第１のファームウエアファイルのうちの最後のページである場合には、ステップは以下のようにステップ９５、９７および９９に進む。
【００３２】
しかし、ステップ８３でＥＣＣ回路２５からの状態ビットが、読み出された１ビットまたは複数ビットにエラーがあることを示す場合には、次にステップ８９でブートコードを実行することによって、可能ならば、コントローラ１５がＥＣＣを使用してエラー（単数または複数）を修正することが可能であるか否かが判定される。これについては後に説明する。使用可能である場合には、ステップ９１では、ブートコードを実行するマイクロプロセッサ１９によって状態ビットから、使用される特定のエラー修正アルゴリズムによってエラーの数と種類が修正可能なものであるか否かが判定される。修正可能である場合には、読み出されたデータはステップ９３でブートコードを実行することによって修正され、ステップはデータがエラーなく読み出された場合と同様にステップ８５に進む。しかし、ＥＣＣ回路２５によって生成された状態ビットから、ブートコードに含まれているエラー修正アルゴリズムを使用してもエラーが修正不能であることが判定された場合には、次にステップ１０５で次の順番のファームウエアコピーが特定される。典型的なＥＣＣアルゴリズムは複雑さに応じた所定数のビットエラーを特定可能であるが、修正可能なのはそれよりも少ない数のビットである。例えば、ファームウエアファイルの第１のコピー０のセクタデータが修正不能である場合には、次にファームウエアファイルの第２のコピー１の同じセクタが変わりに読み出され、使用される。ステップ１０７は読み出されていないファームウエアデータのコピーが残っているか否かを判定し、残っている場合には、ステップをステップ８１まで戻してファームウエアの第２のコピーの同じセクタで前述したステップの繰り返しをさせる。しかし、ファームウエアコードの双方の（またはある場合にはそれ以上の）コピーからそのセクタの読み出しが成功しなかった場合には、後述するようにステップ１０９に進む。
【００３３】
しかし、まずステップ８９に戻り、初期状態では通常のことであるが修正が可能ではなかった場合には、次のステップ１０３はＥＣＣエラーの存在を示すフラグを設定させる。次に、次のコピーの同じセクタがステップ１０５、１０７、８１およびその先によって前述したループ内で読み出される。ステップ１０３によって設定されたフラグは、１つまたは複数のビットエラーを含むファームウエアコピーのセクタと関連し、そのデータセクタに対する何らかの補修措置を講ずるため後に参照されるように、好ましくはセクタのオーバーヘッドの一部として、または他のどこかに記憶される。ファームウエアはアップロード処理中に設定されたこのような全てのフラグを探索するルーチンを含むことができるので、ファームウエアがコントローラに成功裏にロードされた後、フラッシュメモリに記憶されたエラーのあるファームウエアのデータセクタを直接修正するか、或いはエラーのあるデータの考えられる原因に対処する何らかの措置を講じてもよい。例えば、データを修正し、次に修正済みのデータを同じフラッシュメモリのページに再書き込みすることによって、フラグが設定されているファームウエアのデータセクタをその時点でスクラブまたは更新してもよい。幾つかの特定のスクラブ処理は、例えば米国特許第５，５３２，９６２号（特許文献１７）、第６，１５１，２４６号（特許文献１８）、および第６，２２２，７６２号（特許文献７）、および２００３年１０月３日に出願された米国特許出願第１０／６７８，３４５号（特許文献１９）に記載されている。セクタのデータはセクタデータＥＥＣを使用して、或いはプログラムされた状態の元の狭い範囲から移動して（または他の電荷蓄積素子とのフィールド結合により移動したと思われる）記憶された電荷レベルを補償するために、通常使用されているレベルとは異なる基準レベルで読み出す（「マージン読み出し」）ことによって修正してもよい。あるいは、ファームウエアの別のコピーから未修正のエラーのあるデータセクタを読み出し、かつ修正されたコピーに挿入してもよい。次に、修正済みのコピーがフラッシュメモリに、好ましくは新たな位置に再書き込みされるが、消去後に同じ位置に再書き込みされてもよい。
【００３４】
再びステップ８９に戻ると、この例では、最初は読み出されたエラーのあるデータの修正は不能にされる。１つのコピーからエラーのあるデータを修正するのではなく、フラッシュメモリに記憶されたエラーのないいずれかのコピーから特定のデータセクタを読み出すことが不可能であると判定されるまで、まず同じセクタが次のファームウエアコピーから順次読み出される。この判定は、所定のセクタを全てのファームウエアコピーからエラーなく読み出す試行が失敗した後にステップ１０７によって行われる。ループはステップ１０９、１１１、１１２、およびステップ８１に戻る１１３を含むが、次にセクタデータがエラーなく読み出され、ひいてはステップがステップ８３からステップ８５まで進むまで、セクタがファームウエアコピーから指定回数だけ一度に１つずつ順次再読み出しされるようなステップとなっている。ステップ１１２で示されているように、異なるマージン条件下で何回かの再試行を行ってもよい。
【００３５】
しかし、ステップ１１３での判定の結果、許容される再試行回数の最後の試行の後でこれが成功しなかった場合には、ステップ１１５でＥＣＣ修正を可能にし、これによって、同じセクタの次の読み出し後にエラー修正を行うことが可能になる。このため、修正可能なＥＣＣエラーが存在することがステップ８３で判定された場合、ステップは前述したようにステップ８９によってステップ９１および９３の経路を経るように指示される。修正不能のＥＣＣエラーが存在する場合には、ステップ１０５および１０７を経てデータセクタの次のコピーで同じことが再び試みられる。しかし、ファームウエアデータセクタの全てのコピーでＥＣＣ修正を伴う読み出しが失敗した場合には、ステップ１１１で、ステップはステップ１０１で示されているアイドルループ状態に置かれる。
【００３６】
要約すると、この実装例の場合、２つのファームウエアコピーがフラッシュメモリに記憶されると、双方のコピーにエラーがある所定のデータセクタはＥＣＣでデータを修正する試みをすることなく、ステップ１０９で設定された再試行の設定回数によって決められた回数まで各々読み出すことができる。その後、ＥＣＣでデータを修正することができるようにしつつ、各コピーからの所定のセクタの読み出しの最後の再試行を実施する。どのデータセクタも修正不能である場合だけ、ステップは失敗となる。
【００３７】
通常は好ましくはないが、別の選択肢としてステップ８９を常に修正可能に設定することができるが、同時にセクタ内のデータエラーに後で対処するためにステップ１０３でフラグが設定される。このような場合には、図４のステップは所定のデータセクタを各ファームウエアコピーから一度だけ読み出す。第１のコピーが読み出され、そのエラーはＥＣＣによる修正が試みられる。成功すれば、ステップ８５に達する。成功しない場合には、第２のファームウエアコピーの所定のセクタが読み出され、エラーがある場合には修正が試みられる。これらの双方とも成功しない場合には、ステップはステップ１０９に進む。
【００３８】
図４には特に示されていないが、マップページおよび予備ブロックのいずれかの部分を読み出すステップ７５は、好ましくは、ファームウエアコピーについて記載したのと同様に実行される。すなわち、１つまたは複数のＥＣＣがこのようなデータと共に記憶され、読み出し中に、読み出されたデータがビットエラーを含むか否かを判定するために使用される。エラーを含む場合には、また修正可能である場合には、ＥＣＣを使用してデータを修正してもよい。修正不能である場合には、データは場合によっては異なる読み出し条件で再読み出しされる。依然としてエラーがある場合には、再読み出しされたデータにＥＣＣを使用してもよい。いったん修正されると、エラーのあるマップページおよび／または予備ブロック部分は通常、フラッシュメモリ内の異なる位置に再書き込みされる。１つのコピーから良好なデータを得ることができない場合には、マップページのコピーの控えを保存してもよい。
【００３９】
図５を参照すると、図４に関連して記載されているステップの一部による、フラッシュメモリに記憶された双方のコピーからのファームウエアの読み出しの成功例が概念的に示されている。説明を簡略化するために、ファームウエアが８セクタの長さであると想定すると、コントローラＲＡＭ２１に読み込まれるファームウエアファイル１２１の８つのセクタが双方のファームウエアコピー１２３および１２５から取り出されることが示されている。セクタ０、１、２、４、５、および７は第１のファームウエアファイル１２３から来るが、セクタ３と６は第１のコピーから成功裏に読み出されることができなかったので、第２のファームウエアファイル１２５から取り出される。
【００４０】
図４のステップの流れ図、特にステップ８７に戻ると、図５のファイル１２１などのファームウエアファイルの読み出しが終わると、ステップはステップ９５に進む。ステップ９５の一部として、読み出されたファームウエアファイルのオーバーヘッドフィールド１２７および１２９（図５）がチェックされる。ブートコードは異なるメモリシステムで時間の経過と共に変更可能であるので、これらのフィールドの各々はファームウエアファイルの長さと、ＲＯＭ２３に記憶されたブートコードのバージョン名の双方を含む。読み出されたファイル１２１の実際の長さがフィールド１２７および１２９から読み出された値と比較される。ＲＯＭのブートコード・バージョンのフィールド１２７および１２９から読み出された名称もブートコード自体に含まれるバージョン名と比較される。ステップ９７で、これらの長さおよびブートコード名の比較の結果、双方とも是であると判定されると、ファームウエアファイル１２１（図５）がコントローラＲＡＭ２１（図１）にアップロードされ、ステップは完了する。しかし、ファームウエアファイルの長さまたはブートコードのバージョン名のどちらかの比較結果が否である場合には、ステップ１０１で示されているように、ステップはホストから何らかの別の命令を受けるまで停止する。
【００４１】
フラッシュメモリにファームウエアをダウンロード
図６は、図１および２のメモリシステム１１のフラッシュメモリ１３の予備セクタにファームウエアをプログラムする処理を示す。これは、通常コンピュータの形態のホストシステム２９を介して、典型的にはメモリシステムのメーカーによって製造の最終段階中、または以前製造されたカードのファームウエアの更新時に行われる。メモリシステムの購入者およびユーザは通常、ファームウエアコードをフラッシュメモリにロードすることはない。
【００４２】
図６を参照すると、ステップ１３１はダウンロード処理の開始を示している。ステップ１３３の間、ファームウエアデータを記憶する予備ブロックの候補である様々なフラッシュメモリブロックへとデータの異なる部分が書き込まれ、またそこから読み出される。このテストの結果、図２の一対のブロック４１、４３および４７、４９などの１つまたは複数のブロックのファームウエアコード記憶領域が各々選択される。プログラムされたテストデータをエラーなく読み出しすることができたブロックだけが選択される。さらに、記憶された電荷レベルが最適な範囲内にあるか否かを判定するために、記憶されたテストデータに補足的にテストを実施することもできる。さらに、テストデータのプログラミング後に、メモリシステムを様々な環境的ルーチンに置いて、記憶されたデータがその結果変化するか否かを判定することができる。
【００４３】
次のステップ１３５で、ホストコンピュータはダウンロードファームウエアをコントローラＲＡＭ２１にロードして、メモリ制御ファームウエアをフラッシュメモリ１３（図１および２）の選択された予備ブロックに書き込む命令を出す。次に、ステップ１３７で、フラッシュメモリにプログラムされる予定のファームウエアの一部として記憶されたＲＯＭブートコードの互換性表示と、ＲＯＭ２３に記憶されたブートコードのバージョン表示がホストによって読み出され、比較される。メモリシステム制御ファームウエアのダウンロードは、永久的にかつ再書き込み不能にＲＯＭ２３に記憶されたブートコードとの互換性がある場合だけ進行する。非互換性が認められた場合には通常、フラッシュメモリにロードされるシステムファームウエアコードのバージョンを既存のＲＯＭブートコードと互換性があるバージョンに変更することで修復が行われる。
【００４４】
次に、ステップ１３９で、ホストは、ファームウエア書き込みコマンドをコントローラ１５に送り、コントローラ１５はステップ１４１でＦＷ＿Ｐｒｅｓｅｎｔフラグをクリアすることでまず応答する。このフラグについては前述したとおりである。次に、ステップ１４３でファームウエアデータセクタ群がホストによってメモリシステムに伝送される。ステップ１４５で示されているように、ファームウエアコードを記憶するためにステップ１３３によって選択された２つの予備ブロック領域の１つが、ファームウエアコードの第１のコピーの受信用に指定される。次に、コントローラ１５はステップ１４７で示されているように、ホストから既に受信したファームウエアデータセクタを第１の選択された予備ブロック（単数または複数）へとプログラムする。ステップ１４９による判定でこのプログラムするステップが成功した場合には、コントローラは同じファームウエアデータセクタが第２の選択された予備ブロック（単数または複数）にプログラムされるようにする。ステップ１５１、１５３、および１４５を含む部分ループは第２の位置がアドレス指定されるようにし、同じデータセクタがステップ１４７によってそこにプログラムされる。
【００４５】
このデータセクタ群がフラッシュメモリの双方の位置にプログラムされると、ステップはステップ１５５に進み、プログラムされる必要のあるファームウエアのデータセクタがそれ以上あるか否かが判定される。ある場合には、ステップ１４３でホストによって別のデータセクタ群が送られ、これらは、ステップ１４５〜１５３が含まれているループを通じて同様にフラッシュメモリの双方の位置にプログラムされる。全てのファームウエアコードセクタがこのようにしてプログラムされたことがステップ１５５により判定された後、ステップ１５７で示されているように、ＦＷ＿Ｐｒｅｓｅｎｔフラグが設定され、ステップ１５９でダウンロード動作が完了する。
【００４６】
ステップ１４９で、セクタ群のプログラミングエラーが検出された場合には、ステップ１４７でのこれらのセクタのプログラミングは、ステップ１６１および１６３で示されているように、プリセットされた回数だけ繰り返される。その回数の試行でどのセクタ群のプログラミングの成功も達成されない場合には、ステップ１６５でプログラミング動作のエラーが記録され、ステップは終了する。
【００４７】
フラッシュメモリは背景技術の欄で前に説明したように電荷蓄積素子ごとに１ビット以上のデータを記憶するために多状態で動作されるが、電荷蓄積素子ごとにそれより少ない単数または複数のビット数のデータを記憶するように多状態システムの予備ブロックは動作可能である。例えば、電荷蓄積素子がユーザデータ用に８つの状態で動作される場合には、データは電荷蓄積素子ごとに４つの状態で予備ブロックに記憶されてもよい。同様に、ユーザデータが４つの状態で記憶される場合には、予備ブロックのデータは二進で記憶されることができる。このことは、メモリマップとファームウエアとを記憶する予備ブロックにとって特に有用である。より少数の状態が用いられる場合には各状態を定義する範囲が大きくなるので、より少数の状態で記憶されるデータは読み出しエラーが生じにくくなる。より少ない状態が各電荷蓄積素子に記憶される場合には、メモリトランジスタのしきい値電圧と電荷蓄積レベルとの範囲のマージンが高まり、範囲は大きくなる。もちろん、より少数の状態で動作されるこれらのブロックに記憶されるデータ量は少なくなるが、前述したメモリマップ、動作パラメータ、フラグおよびファームウエアを記憶する予備ブロックのこのような動作は、より少数の状態でメモリのわずかな部分しか動作する必要がないので、メモリの記憶容量にはさしたる影響を及ぼさない。
【００４８】
図７は、新規のブランクカードおよびファームウエアが更新されるカードの双方向けに、このようなシステムのメーカーがメモリカードの形式でファームウエアデータをフラッシュメモリシステムにプログラムする全体的な処理を示す。この処理には、ステップ１６５での図４のファームウエアのアップロード、およびステップ１６７での図６のファームウエアのダウンロードの双方を利用することが含まれている。最初にステップ１６９および１７１でカードがホストに接続されて、メモリカードが空白であるか否かが判定される。空白である場合には、ステップ１７３および１７５でメモリアレイがフォーマットされる。次に、図６に関連して前述したように、ファームウエアのコピーがカードのメモリアレイにプログラムされる。ステップ１７７でファームウエアが成功裏にカードにプログラムされたことが判定されると、処理は終了する。そこでカードは使用可能になる。
【００４９】
ステップ１７１でカードが空白ではないと判定されると、図４に関連して前述したように、フラッシュメモリに置かれたファームウエアがコントローラＲＡＭにロードされる。ステップ１７９でファームウエアのアップロードが失敗したことが判定されると、不具合の原因を判明するために原因分析機能１８１が実施される。図４では、処理がアイドルループ１０１に入ると不具合が存在するとみなされている。それに応じて、カードは破棄される。
【００５０】
しかし、ステップ１７９でファームウエアが適正にアップロードされたことが判定された場合には、カードの再フォーマットが必要であるのか（ステップ１８３）、或いはファームウエアのより新しいバージョンへのアップグレードが必要であるのか（ステップ１８５）のいずれかが判定されると、ファームウエアをステップ１６７の処理で再書き込みしてもよい。しかし、再フォーマットもファームウエアのアップグレードも必要ない場合には、ファームウエアがフラッシュメモリからコントローラＲＡＭに適正にロードされたことの確認により、処理は終了する。その時点でカードが使用可能であることが確認されたことになる。
【００５１】
ファームウエアをコントローラにアップロードする第２の実施形態
図８は、ＲＯＭブートコードによって制御し、フラッシュメモリ１３からコントローラ１５のＲＡＭ２１（図１）にファームウエアをアップロードする処理の第２の実施形態を示す。この処理は、図４に関連して前述した第１の実施形態と同様である。図４と同一であるか、或いは基本的に同一の図８のステップには同じ参照番号が付され、ここではこれ以上説明しない。２つの実施形態の差異は、読み出されたデータにエラーがあるとの判定に対する応答にある。
【００５２】
図８を参照すると、この実施形態のステップは、ＥＣＣを使用してデータエラーが検出されたというステップ８３での判定に応答し、前述したように後で使用するためにステップ１０３でフラグを設定するステップに直接進む。次のステップ１９１で、使用されるＥＣＣによってエラーが修正可能であるか否か、およびエラーが指定のビット数より少ないビット数（Ｎビット未満）を含むか否かが判定される。そうである場合には、データはステップ１９３でＥＣＣによって修正され、ステップはファームウエアデータの次のセクタの読み出しを継続する。この実施形態では、修正されるビット数が少なく、ＥＣＣが修正可能な読み出されたセクタのビット数未満である場合に限り、エラーのあるデータはステップのこのような初期段階で修正される。というのは、データの修正には修正されるビット数に関連する処理時間量がかかるからである。
【００５３】
したがって、ステップ１９１で修正不能であるか、或いは修正可能ではあるが、修正されるのがＮビット以上であると判定されると、次のステップ１９５がそのどちらであるのかを判定する。Ｎ以上のエラービットを修正可能である場合には、ステップ１９７がフラッシュメモリに記憶された１つまたは複数の他のファームウエアコピーから所定のセクタが読み出されたか否かを判定する。そうである場合には、ステップ１９３でＥＣＣを用いてデータが修正され、ステップはステップ８５を経て次の読み出されるデータセクタに進む。所定のセクタが未だ読み出されていないファームウエアコピーが残っている場合には、ステップ１９９は切り換わってステップ８１が他のコピーを読み出すようにする。
【００５４】
しかし、ステップ１９７でＮ以上のエラービットの修正が不能であると判定された場合には、ステップ２０１を利用して、所定のセクタが全てのファームウエアコピーから通常通り指定回数読み出されたかを判定することができる。否である場合には、ステップ１９９は別のファームウエアコピー内の所定のセクタをアドレス指定し、それがステップ８１で読み出される。全てのファームウエアコピーが既に指定回数だけ読み出されている場合には、データを読み出すために特別の努力が払われる。通常の読み出しの指定回数は２、３またはそれ以上にすることができるが、データの再読み出しには時間がかかり、同じ条件下で同じデータセクタを再度読み出しても、最初の読み出しによって所定の修正不能のエラーデータがあった後では適正なデータが得られる公算は高くはない。したがって、各ファームウエアコピーの指定の読み出し回数が１回として処理を実施することができ、その後、いずれも成功しない場合には特別の読み出しステップが講じられる。
【００５５】
特別の読み出し処理での最初のステップ２０３は、所定のファームウエアコピーから所定のデータセクタを読み出す１回以上の指定回数の試行が既に行われたか否かを判定することである。否である場合には、ステップ２１１によって特別の読み出しパラメータが設定され、セクタはステップ８１でこれらの異なるパラメータで再び読み出される。しかし、特別の読み出しパラメータで１回以上の指定回数だけ所定のデータセクタが読み出されても成功しない場合には、ステップ２０５はフラッシュメモリに記憶された他のファームウエアコピーの場合も同様であるかを判定する。そうである場合には、エラーのあるデータを読み出したり、或いは修正したりするそれ以上の技術がないので、２０７で示されているように、ファームウエアのアップロードは失敗したものとみなされる。しかし、未だ全てのファームウエアコピーが特別な方法で読み出されていない場合には、ステップ２０９によって特別な読み出しパラメータが設定され、次のステップ１９９は異なるファームウエアコピーの所定のセクタがステップ８１で読み出されるようにする。
【００５６】
特別の読み出し処理には、ステップ２０９および２１１でエラーのあるデータを読み出せそうな異なる読み出し条件を設定することが含まれる。マージングと呼ばれる１つの技術は、メモリセル電荷蓄積素子の各々の状態ごとの読み出し範囲を、データセクタの最初の通常の読み出し中に用いられる範囲よりも広げる。これには範囲間のマージンを縮小する作用があり、したがって読み出し処理に別のエラーを誘発することがある。しかし、データを通常通り読み出せない場合には、マージングによってそれぞれの範囲から外れたセルの状態が適正に読み出されるようにすることもできる。マージングを用いた読み出しが適正であるか否かのＥＣＣを用いることによる判定は、ステップ８３以降を経て、通常のデータ読み出しと同様に判定される。
【００５７】
結論
これまで本発明の様々な態様を例示的な実施形態に関連して説明してきたが、本発明は添付の特許請求の範囲の全範囲内においてその権利が保護されるべきであることが理解されよう。
【図面の簡単な説明】
【００５８】
【図１】本発明の様々な態様を実施することができる不揮発性メモリシステムのブロック図である。
【図２】マップを含む予備ファイルとファームウエアファイルとの記憶を示す図１のシステムの不揮発性メモリのアドレス空間を示す概略図である。
【図３】図１および２の不揮発性メモリに記憶されるマップファイルのデータコンテンツを示す。
【図４】システムの初期化時にファームウエアを不揮発性メモリからコントローラにアップロードするための図１のメモリシステムの動作の第１の実施形態を示す流れ図である。
【図５】図４の流れ図によって示された動作の１つの態様を示す。
【図６】ファームウエアをホストから図１の不揮発性メモリシステムにダウンロードする態様を示した流れ図である。
【図７】カードの製造中にファームウエアをインストールし、かつアップグレードするために行われる動作を示す流れ図である。
【図８】システムの初期化時にファームウエアを不揮発性メモリからコントローラにアップロードするための図１のメモリシステムの動作の第２の実施形態を示す流れ図である。
【図１】
2007518166.tif 000003
【図２】
2007518166.tif 000004
【図３】
2007518166.tif 000005
【図４】
2007518166.tif 000006
【図５】
2007518166.tif 000007
【図６】
2007518166.tif 000008
【図７】
2007518166.tif 000009
【図８】
2007518166.tif 000010
【国際調査報告】
2007518166.tif 000011
2007518166.tif 000012
2007518166.tif 000013