(57)【要約】【課題】ＮＡＮＤ型フラッシュメモリを用いるときに、無効ブロックに対する代替ブロックの設定に用いる記憶手段の記憶容量を抑える。【解決手段】先頭アドレスが入力されてＮＡＮＤ型フラッシュメモリからビートコードを読み出す時には、無効ブロックのＬＵＴを作成すると、入力アドレスから最初のブロックアドレスを設定し、設定したブロックアドレスとＬＵＴの無効ブロックを比較して、設定されたブロックアドレスが無効ブロックであれば（ステップ１２０〜１３０）、無効ブロックと判断されたブロックアドレスに基づいて次のブロックアドレスを設定し（ステップ１３６）、設定したブロックアドレスが有効ブロックに対するものであれば、フラッシュメモリへの出力アドレスに設定する（ステップ１３２）。これにより、無効ブロックのみを格納したＬＵＴを用いたブートコードの読み出しが可能となる。【選択図】図６
2009087094.tif 000002
【特許請求の範囲】
【請求項１】
予め設定されたブロック単位の管理情報によって使用の可否が管理されて、ブロック単位でデータの書換え及び読み出しが行われると共に、データがブロックアドレスの昇順又は降順の順序で格納される不揮発性記憶媒体の、前記データの書換え及び読み出しを制御する記憶媒体制御装置であって、
管理情報から使用が不可とされた前記不揮発性記憶媒体の無効ブロックを特定する情報が記憶される記憶手段と、
前記不揮発性記憶媒体への前記データの書き込み又は読み出し要求が入力されたときに、対象ブロックの前記ブロックアドレスを前記順序にしたがって設定する設定手段と、
前記設定手段によって設定された前記対象ブロックと前記記憶手段に記憶された前記無効ブロックとを比較する比較手段と、
前記比較手段の比較結果からデータの書込み及び読み出しが可能な有効ブロックか前記無効ブロックかを判定する判定手段と、
前記判定手段によって前記無効ブロックと判定されたときに、予め設定された規則にしたがって決定されるブロックを対象ブロックに設定する代替設定手段と、
前記設定手段又は前記代替設定手段によって設定された前記対象ブロックに応じた前記不揮発性記憶媒体の前記ブロックに対して前記データの書き込み又は読み出しを制御する制御手段と、
を含むことを特徴とする記憶媒体制御装置。
【請求項２】
記憶手段に前記不揮発性記憶媒体にデータが格納される前記順序で所定数の前記無効ブロックを特定する情報を格納すると共に、前記判定手段の判定結果に基づいて、前記記憶手段に、前記順序に基づいた次の所定数の前記無効ブロックを特定する情報を格納する更新手段を、含むことを特徴とする請求項１に記載の記憶媒体制御装置。
【請求項３】
前記代替設定手段によって前記順序に沿った最終の前記無効ブロックに対する前記対象ブロックが設定された後は、前記制御手段が、前記設定手段で設定された前記対象ブロックに応じた前記不揮発性記憶媒体の前記ブロックに対して前記データの書き込み又は読み出しを制御する、ことを特徴とする請求項１又は請求項２に記載の記憶媒体制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＮＡＮＤ型フラッシュメモリ（Flash  Memory）などの不揮発性記憶媒体への情報の書き込み及び情報の読み出しを制御する記憶媒体制御装置に関する。
【背景技術】
【０００２】
各種の電子機器においては、不揮発性記憶媒体（不揮発性メモリ）で、記憶しているデータの書換えが可能なＮＯＲ型フラッシュメモリ（Flash  Memory）にブートプログラムなどの各種のプログラムが記憶され、例えば、装置起動時に不揮発性メモリに記憶されたブートプログラムが読み出されて、読み出されたブートプログラムによって起動処理が実行される。
【０００３】
近年、ブートプログラムなどの各種の処理プログラムの記憶用として、ＮＯＲ型フラッシュメモリに換えて、主としてデータストレージ用に用いられるＮＡＮＤ型フラッシュメモリの利用が検討されている。このＮＡＮＤ型フラッシュメモリでは、データの書き込み、読出しがブロック単位で行われることから、ＮＡＮＤ型フラッシュメモリを使用するシステムでは、ＮＡＮＤ型フラッシュメモリから読み出したブートプログラムなどの処理プログラムを、一旦、ＳＲＡＭなどのＲＡＭに格納し、このＲＡＭから読み出しながら処理が実行される。
【０００４】
ところで、ＮＡＮＤ型フラッシュメモリでは、データの読み出し及び書き込みがブロック単位で行われるため、そのブロックでいずれかのメモリセルが正常でないと、システムが適正に立ち上がらなくなる。
【０００５】
ここから、例えば、特許文献１では、予めメモリ内の複数のブロックに同一のブートプログラムを書込んでおくと共に読み出し専用の制御回路を設け、ＣＰＵからブートプログラムが要求されると、制御回路で読み出しブロックの良否を判定し、格納されているデータを無効とする不良ブロック（以下、無効ブロックとする）と判定されたときには、同じブートプログラムが格納されている他のブロックに対して良否判定を行ない、また、無効ブロックでなければ該当ブロックに格納しているブートプログラムを読み出して出力するように提案している。
【０００６】
また、特許文献２では、エラー訂正回路を設けると共にメモリに複数セットのブートアッププログラムを格納し、ブートアッププログラムが要求されると何れかのセットを選択し、選択したセットのブートアッププログラムをＲＡＭに転送し、このブートアッププログラムに対してエラー検出、エラー訂正を行い、エラー訂正ができないときには、他のセットのブートアッププログラムを順に選択するように提案している。
【特許文献１】特開２００５−２１５８２４号公報
【特許文献２】特開２００５−２７５６９７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
一方、フラッシュメモリでは、ブロックごとのステータス情報から、該当ブロックに格納されているデータを有効とするか無効とするかの判定が可能となる。ここから、無効ブロックを抽出して、無効ブロックに換えてデータを格納するブロックを設定する方法が考えられるが、このためには、無効ブロックと無効ブロックに変わる代替ブロックを示す変換テーブルが必要となる。
【０００８】
しかし、フラッシュメモリでは、無効ブロックが増加する可能性があり、変換テーブルを作成するためには、無効ブロックの増加を考慮して予め大きな記憶容量を確保する必要がある。
【０００９】
本発明は上記事実に鑑みてなされたものであり、無効ブロックに対する代替ブロックの設定に用いる記憶手段が少ない記憶容量で、不揮発性記憶媒体に対して、適正なデータの読み出し、書き込みが可能となる記憶媒体制御装置を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記目的を達成するために本発明は、予め設定されたブロック単位の管理情報によって使用の可否が管理されて、ブロック単位でデータの書換え及び読み出しが行われると共に、データがブロックアドレスの昇順又は降順の順序で格納される不揮発性記憶媒体の、前記データの書換え及び読み出しを制御する記憶媒体制御装置であって、管理情報から使用が不可とされた前記不揮発性記憶媒体の無効ブロックを特定する情報が記憶される記憶手段と、前記不揮発性記憶媒体への前記データの書き込み又は読み出し要求が入力されたときに、対象ブロックの前記ブロックアドレスを前記順序にしたがって設定する設定手段と、前記設定手段によって設定された前記対象ブロックと前記記憶手段に記憶された前記無効ブロックとを比較する比較手段と、前記比較手段の比較結果からデータの書込み及び読み出しが可能な有効ブロックか前記無効ブロックかを判定する判定手段と、前記判定手段によって前記無効ブロックと判定されたときに、予め設定された規則にしたがって決定されるブロックを対象ブロックに設定する代替設定手段と、前記設定手段又は前記代替設定手段によって設定された前記対象ブロックに応じた前記不揮発性記憶媒体の前記ブロックに対して前記データの書き込み又は読み出しを制御する制御手段と、を含むことを特徴とする。
【００１１】
請求項２に係る発明は、前記請求項１において、記憶手段に前記不揮発性記憶媒体にデータが格納される前記順序で所定数の前記無効ブロックを特定する情報を格納すると共に、前記判定手段の判定結果に基づいて、前記記憶手段に、前記順序に基づいた次の所定数の前記無効ブロックを特定する情報を格納する更新手段を、含むことを特徴とする。
【００１２】
請求項３に係る発明は、前記請求項１又は請求項２において、前記代替設定手段によって前記順序に沿った最終の前記無効ブロックに対する前記対象ブロックが設定された後は、前記制御手段が、前記設定手段で設定された前記対象ブロックに応じた前記不揮発性記憶媒体の前記ブロックに対して前記データの書き込み又は読み出しを制御する、ことを特徴とする。
【発明の効果】
【００１３】
以上説明したように請求項１の発明によれば、無効ブロックに対する代替ブロックを、予め設定した規則にしたがって設定するので、記憶手段に代替ブロックを特定する情報を記憶する必要が無く、記憶手段の記憶容量を抑えることができるという優れた効果が得られる。
【００１４】
請求項２の発明によれば、記憶手段に記憶する無効ブロックを特定する情報を、判定手段の判定結果に応じて更新するので、限られた記憶容量の記憶手段を用いることができる。
【００１５】
請求項３の発明によれば、最終の無効ブロックに対する対象ブロックを設定した後は、設定手段によって設定された対象ブロックに基づいたデータの書込み又は読み出しを行うので、不揮発性記憶媒体に対するデータの書込み、読み出し処理の迅速化を図ることができる。
【発明を実施するための最良の形態】
【００１６】
以下に、図面を参照しながら本発明の実施の形態を説明する。図１には、本実施の形態に係るシステムコントローラ１０の概略構成を示している。このシステムコントローラ１０は、各種の電子機器などに設けられて、電子機器の作動制御等を行う。
【００１７】
システムコントローラ１０は、ＣＰＵ１２及び、ＳＲＡＭ等を用いたＲＡＭ１４を含み、これらがコントロールバス、アドレスバス及びデータバス等によって構成されるバス１６によって接続されている。また、バス１６には、電子機器に備えられる被制御対象の部品が、例えば、各種のインターフェイスを介して接続される。
【００１８】
システムコントローラ１０では、起動時に、ＣＰＵ１２がブートコードを読込み、読み込んだブートコードに基づいた処理を実行することにより立ち上がる。また、システムコントローラ１０では、立ち上げ後にＣＰＵ１２が各種の処理プログラムを読み込んで、読み込んだ処理プログラムに基づいた処理を実行することにより電子機器の作動制御が行われる一般的構成となっている。
【００１９】
一方、システムコントローラ１０には、ＣＰＵ１２で実行される前記ブートコードや各種の処理プログラムを記憶する記憶媒体として、不揮発性メモリの一種であるＮＡＮＤ型フラッシュメモリ（以下、「フラッシュメモリ１８」とする）が設けられている。このフラッシュメモリ１８は、データの書き込み及び更新が可能となっていると共に、書込まれているデータが保存される。
【００２０】
また、システムコントローラ１０には、メモリコントローラ２０が設けられており、このメモリコントローラ２０によってフラッシュメモリ１８からのデータの読み出し及びフラッシュメモリ１８へのデータの書き込み（データの更新）が制御される。
【００２１】
フラッシュメモリ１８は、OneＮＡＮＤ型フラッシュメモリであっても良い。また、メモリコントローラ２０は、一つのＡＳＩＣ（Application  Specific  Integrated  Circuit）を用いて形成しても良いよく、また、メモリコントローラ２０は、フラッシュメモリ１８を含めて一つのＡＳＩＣによって形成するなどの任意の構成を適用することができる。
【００２２】
また、システムコントローラ１０は、メモリコントローラ２０がバス１６に接続され、フラッシュメモリ１８がメモリコントローラ２０を介してバス１６に接続されている。なお、フラッシュメモリ１８とメモリコントローラ２０の接続はこれに限らず、フラッシュメモリ１８とメモリコントローラ２０のそれぞれがバス１６に接続されて、フラッシュメモリ１８がバス１６を介してメモリコントローラ２０に接続されるなど公知の任意の構成を適用することができる。
【００２３】
システムコントローラ１０では、このフラッシュメモリ１８に、ブートコードを含むシステムコントローラ１０でのＣＰＵ１２の処理プログラムが格納されている。システムコントローラ１０に設けているＣＰＵ１２は、システム起動時に、メモリコントローラ２０を介してフラッシュメモリ１８に格納されているブートコードを読み込んで、このブートコードに基づいた処理を実行する。なお、以下では、一例として、ＣＰＵ１２が起動時に、フラッシュメモリ１８に格納しているブートコードを読み出すものとして説明する。
【００２４】
ＮＡＮＤ型フラッシュメモリを用いているフラッシュメモリ１８は、予め設定されたメモリ容量を一つのブロックとして、ブロック単位でのデータの読み出し、書き込みが行われる。すなわち、フラッシュメモリ１８は、記憶領域が多数のブロックに分割されており、個々のブロックが予め設定された一定の記憶容量（メモリ容量）となっており、フラッシュメモリ１８では、このブロック単位でデータの読み出し及び書き込みが行われる。
【００２５】
例えば、図２（Ａ）に示されるように、フラッシュメモリ１８は、記憶領域が多数のブロック（Block）ＢＬ（ブロックＢＬ０〜ＢＬＮ）によって構成されている。また、各ブロックＢＬは、複数のページ（Page）Ｐ（図２（Ｂ）参照）によって構成されており、例えば、一つのブロックＢＬからデータを読み出すときには、各ページＰに格納されているデータが順に読み出される。なお、図２（Ａ）に示されるフラッシュメモリ１８では、一例として一つのブロックＢＬが６４のページＰ（６４page）で構成されている。
【００２６】
図２（Ｂ）に示されるように、本実施の形態に適用したフラッシュメモリ１８では、各ページＰが、データが格納されるメインエリア２２と、メインエリア２２の管理情報が格納されるスペアエリア２４によって構成されている。また、フラッシュメモリ１８では、各ページＰのメインエリア２２とスペアエリア２４が所定数に分割され、分割されたメインエリア２２とスペアエリア２４によって一つのパーツが構成され、一つのページＰが、複数のパーツによって構成されている。すなわち、メインエリア２２を分割した一つをメインエリア２２Ａとし、スペアエリア２４を分割した一つをスペアエリア２４Ａとしたときに、一つのメインエリア２４Ａと一つのスペアエリア２４Ａが１組となって一つのパーツが構成されている。
【００２７】
図２（Ｂ）には、ページＰの構成の一例を示しており、このページＰでは、メインエリア２２Ａの記憶容量が５１２Byte（以下、Byte＝Ｂとする）とされ、スペアエリア２４Ａの記憶容量が１６Ｂとされており、４つのパーツで構成されている。したがって、図２（Ｂ）に示されるフラッシュメモリ１８では、一つのページＰが、２ＫＢ（５１２Ｂ×４）とのメインエリア２２と、６４Ｂ（１６Ｂ×４）のスペアエリア２４で構成されている（Ｐ＝（５１２Ｂ＋１６Ｂ）×４＝２ＫＢ＋６４Ｂ）。
【００２８】
図２（Ａ）に示されるように、フラッシュメモリ１８には、キャッシュメモリとするデータＲＡＭ２６が設けられている。このデータＲＡＭ２６は、１ページ分のデータが格納される容量（２ＫＢ＋６４Ｂ）が確保されている。
【００２９】
フラッシュメモリ１８では、メモリコントローラ２０からブロックＢＬが指定されてデータの読み出し要求が入力されると、該当ブロックＢＬからデータが１ページ分ずつ順にデータＲＡＭ２６に展開され、データＲＡＭ２６からメモリコントローラ２０を介して出力される。なお、本実施の形態に適用したフラッシュメモリ１８には、２つのデータＲＡＭ２６（データＲＡＭ２６Ａ、２６Ｂ）が設けられており、例えば、ページＰ（１ページ分）のデータがデータＲＡＭ２６Ａ、２６Ｂに交互に展開される。
【００３０】
一方、図２（Ｃ）には、一つのスペアエリア２４Ａの概略構成を示しており、フラッシュメモリ１８には、スペアエリア２４Ａに、一つのパーツ（メインエリア２２Ａとスペアエリア２４Ａ）に対する管理情報が格納されるようになっている。
【００３１】
すなわち、１６Ｂ（Byte）で構成されるスペアエリア２４Ａでは、８Ｂ目〜１０Ｂ目の３Byteには、スペアエリア２４Ａに対応するメインエリア２２ＡのＥＣＣコードが格納され、１１Ｂ目、１２Ｂ目の２Byteには、スペアエリア２４ＡのＥＣＣコードが格納されている。また、フラッシュメモリ１８では、スペアエリア２４Ａの２Ｂ目〜４Ｂ目の３Byte及び、１４Ｂ目、１５Ｂ目の２Byteがユーザーエリア（Usable  Area）となっており、実際にフラッシュメモリ１８を使用するときに、フラグなどの利用に割り当て可能となっている。
【００３２】
また、フラッシュメモリ１８では、スペアエリア２４Ａの先頭（０Ｂ目）及び、次のByte（１Ｂ目）の２Byte（以下、ステータスレジスタ２８とする）で、メインエリア２２Ａのデータが無効か否かを示す情報（以下、「ステータスデータＳＤ」とする）が格納される。これにより、フラッシュメモリ１８では、スペアエリア２４Ａのステータスレジスタ２８に格納されるステータスデータＳＤから、該当スペアエリア２４Ａに対応するメインエリア２４Ａを含むブロックＢＬが、データの有効なブロック（valid  Block、以下、有効ブロックという）か、データが無効なブロック（Invalid  Block、以下、無効ブロックという）かの認識が可能となっている。
【００３３】
すなわち、フラッシュメモリ１８では、初期化を行うときに、全てのbitのデータを「１」とするようにしており、これにより、通常は、ステータスレジスタ２８に格納されるステータスデータＳＤがＳＤ＝０ｘＦＦＦＦとなるが、データを無効とすべきブロック（無効ブロック）では、このステータスデータＳＤがＳＤ＝０ｘＦＦＦＦ以外の値となる。ここから、各スペアエリア２４Ａのステータスレジスタ２８の情報を確認することにより、該当スペアエリア２４Ａが含まれるブロックＢＬが有効ブロックか無効ブロックかの判定が可能となる。
【００３４】
ところで、図２（Ａ）に示されるように、本実施の形態に適用したフラッシュメモリ１８には、所定の記憶容量（本実施の形態では、一例として１ＫＢ）のブロック情報格納エリア（Block  Data  Area）３０が設けられており、このブロック情報格納エリア３０に、フラッシュメモリ１８内の無効ブロックを示すデータ（Invalid  Data、以下、無効ブロックデータという）が格納される。
【００３５】
本実施の形態では、無効なブロックＢＬを特定可能なデータを無効ブロックデータとして、このブロック情報格納エリア３０に格納するようにしており、ここでは、一例として無効ブロックの物理ブロックアドレス（フラッシュメモリ１８上のブロックアドレスＢadd）を用いている。また、本実施の形態では、ブロック情報格納エリア３０に格納される無効ブロックデータに、無効ブロックの数（格納されているブロックアドレスＢaddの数、以下、無効ブロック数Ｎとする）を含むようにしている。
【００３６】
図４（Ａ）には、ブロック情報格納エリア３０に格納されるデータの一例を示している。このブロック情報格納エリア３０には、無効ブロック数Ｎ（図３（Ａ）では、一例としてＮ＝１１）と共に、無効ブロック数Ｎに対応する各無効ブロックのブロックアドレスＢaddが予め設定された順序で格納される。
【００３７】
また、本実施の形態では、ブロック情報格納エリア３０に格納されるブロックアドレスＢaddの順序を、後述するフラッシュメモリ１８からデータを読み出すときのブロックＢＬの順序に対応しており、ここでは、一例として昇順としている。なお、このようなブロック情報格納エリア３０の記憶容量は、フラッシュメモリ１８の記憶容量（例えば、ブロックＢＬの数）に対して許容される不良ブロックの数のデータを格納可能であれば良い。
【００３８】
一方、図１に示されるように、メモリコントローラ２０には、アドレス変換部３２及び、アドレス変換部３２でアドレス変換に用いる変換テーブルＬＵＴ（Look  Up  Table）が形成されるＲＡＭ３４が設けられている。
【００３９】
ＣＰＵ１２は、例えば、フラッシュメモリ１８からデータを読み出すときに、データの先頭アドレス（例えば、論理アドレス）を指定する。アドレス変換部３２では、ＣＰＵ１２からメモリコントローラ２０に入力されるアドレスを、フラッシュメモリ１８上のブロックＢＬのブロックアドレスＢaddに変換し、変換したブロックアドレスＢaddを設定し、設定したブロックアドレスＢaddを出力アドレスとしてフラッシュメモリ１８へ出力する。
【００４０】
フラッシュメモリ１８は、ブロックアドレスＢaddが指定されてデータの読み出しが要求されると、指定されたブロックアドレスＢaddに対応するブロックＢＬから格納しているデータを順（ページP順）に出力する。
【００４１】
ここで、本実施の形態では、フラッシュメモリ１８にブートコードなどの連続するデータを複数のブロックＢＬに格納するとき及び格納されたデータを読み出すときのブロックＢＬの順序が設定されており、本実施の形態では、この順序の一例として昇順としている。
【００４２】
例えば、ブートコードを格納するときには、先頭のブロックＢＬ（ブロックアドレスＢaddが０ｘ００００）から昇順に格納される。これにより、ＣＰＵ１２がブートコードの先頭アドレス（論理アドレス）を指定することにより、メモリコントローラ２０は、先頭アドレスに対応するブロックＢＬのブロックアドレスＢadd（ここでは、Ｂadd＝０ｘ００００）を指定して、データの読み出しを開始する。
【００４３】
また、ＣＰＵ１２では、フラッシュメモリ１８から読み出すデータ量を把握しており、所定量のデータが読み出されると、例えば、読み出し完了をメモリコントローラ２０に指示する。これにより、メモリコントローラ２０がフラッシュメモリ１８からのデータの読み出しを終了する。なお、このようなＣＰＵ１２とメモリコントローラ２０との間のデータの読み出し制御は、公知の構成を適用することができ、ここでは詳細な説明を省略する。
【００４４】
一方、フラッシュメモリ１８には、データが無効となる無効ブロックが存在することがあり、無効ブロックが存在するときには、その無効ブロックを除いて、有効ブロックのみに、昇順でデータが格納される。例えば、ブロックアドレスＢadd＝０ｘ０００３のブロックＢＬが無効ブロックである時には、このブロックＢＬに格納されるデータが、次のブロックＢＬ（ブロックアドレスＢadd＝０ｘ０００４）に格納される。このときに、このブロックＢＬ（ブロックアドレスＢadd＝０ｘ０００４）に格納されるデータが次のブロックＢＬ（ブロックアドレスＢadd＝０ｘ０００５）に格納されが、このブロックＢＬが無効ブロックであれば、さらに、次のブロックＢＬ（ブロックアドレスＢadd＝０ｘ０００６）に格納される。
【００４５】
また、メモリコントローラ２０では、ＣＰＵ１２の起動に先立ってフラッシュメモリ１８のブロック情報格納エリア３０に格納されている無効ブロックデータを読み出してＲＡＭ３４に格納することにより、アドレス変換部３２で使用する変換テーブルを形成する。
【００４６】
図３に示されるように、ＲＡＭ３２には、ブロック情報格納エリア３０に格納されているデータから無効ブロック数Ｎが格納される。また、図３及び図４（Ｂ）〜図４（Ｄ）に示されるように、ＲＡＭ３４には、所定数（ブロック数Ｎｃ）のブロックアドレスＢaddが順に格納される。また、図４（Ｂ）〜図４（Ｄ）に示されるように、ＲＡＭ３４には、ブロック情報格納エリア３０に格納された順序（昇順）で、ブロック情報格納エリア３０に格納されているブロックアドレスＢaddが格納される。
【００４７】
本実施の形態では、一例としてＲＡＭ３４に格納するブロック数Ｎｃを５個（Ｎｃ＝５）としており、メモリコントローラ２０は、無効ブロック数Ｎが、ブロック数Ｎｃを超えていると（Ｎ＞Ｎｃ）、予め設定されたタイミングでＲＡＭ３４のデータの更新を行うようになっている。
【００４８】
これにより、図４（Ｂ）、図４（Ｃ）、図４（Ｄ）に示されるように、ＲＡＭ３４には、昇順でブロック数ＮｃずつのブロックアドレスＢaddが格納された変換テーブルＬＵＴが順に形成される。
【００４９】
図３には、ＲＡＭ３４に形成した変換テーブルを用いてアドレス変換を行うアドレス変換部３２の概略構成を示している。アドレス変換部３２は、ブロックアドレス設定部３６、比較部３８及び判定部４０を含んでいる。
【００５０】
ブロックアドレス設定部３６は、ＣＰＵ１２から入力されるアドレス（入力アドレス）に基づいて、データの読み出し及び格納を行う先頭のブロックアドレスＢaddを設定する。また、ブロックアドレス設定部３６は、予め設定された順序で次のブロックアドレスＢaddを順に設定する。なお、本実施の形態では、ブロックアドレスＢaddを昇順で設定するようにしており、ブロックアドレス設定部３６では、入力アドレスに応じて昇順でブロックアドレスＢaddを設定するようにしている。
【００５１】
比較部３８には、ブロックアドレス設定部３６で設定されたブロックアドレスＢaddが入力されると、このブロックアドレスＢaddとＲＡＭ３４（ＬＵＴ）に格納された無効ブロックのブロックアドレスＢaddと比較する。
【００５２】
判定部４０には、ブロックアドレス設定部３６で設定されたブロックアドレスＢaddと比較部３８の比較結果が入力される。ここで、判定部４０では、入力されたブロックアドレスＢaddに該当するブロックＢＬが、無効ブロックであるか否かを判定し、無効ブロックでないときには、入力されたブロックアドレスＢaddを、フラッシュメモリ１８への出力アドレスに設定すると共に、該当ブロックアドレスＢaddをブロックアドレス設定部３６へ戻す。
【００５３】
また、判定部４０では、入力されたブロックアドレスＢaddと同一のアドレスがＲＡＭ３４のＬＵＴに含まれていると、該当ブロックアドレスＢaddのブロックＢＬを無効ブロックと判定する。判定部４０では、入力されたブロックアドレスＢaddのブロックＢＬが無効ブロックであると判定すると、このブロックアドレスＢaddをフラッシュメモリ１８への出力アドレスに設定せず、ブロックアドレス設定部３６へ戻す。
【００５４】
ブロックアドレス設定部３６では、判定部４０からブロックアドレスＢaddが戻されると、次のブロックアドレスＢaddを設定する。このときに、ブロックアドレス設定部３６では、昇順でブロックアドレスＢadd（Ｂadd＝Ｂadd＋１）を設定するようにしている。
【００５５】
これにより、アドレス変換部３２では、ブロックアドレスＢaddが、無効ブロックが除かれて昇順に設定される。すなわち、アドレス変換部３２では、無効ブロックデータに基づいて無効ブロックを除き、有効ブロックのみを用いて出力アドレスを昇順に設定するようにしている。
【００５６】
一方、メモリコントローラ２０のアドレス変換部３２には、ＬＵＴ更新部４２が形成されている。ＬＵＴ更新部４２は、カウント部４４及び、ヒット数比較部４６を含んでいる。判定部４０では、ブロックアドレス設定部３６で設定されたブロックアドレスＢaddに該当するブロックＢＬが無効ブロックであると判定すると、判定結果をＬＵＴ更新部４２のカウント部４４へ出力する。
【００５７】
カウント部４４では、ブロックアドレスＢaddを昇順に設定したときに、無効ブロックと判定されたブロックＢＬの数（以下、ヒット数Ｈとする）をカウントする。また、カウント部４４では、一つのＬＵＴ上で判定された無効ブロックの数（以下、ヒット数ＨＬとする）をカウントする。ヒット数比較部４６では、ヒット数Ｈが無効ブロック数Ｎに達したか否か及び、ヒット数ＨＬが、ＬＵＴ内のブロック数Ｎｃに達したか否かを確認する。
【００５８】
ここで、ＬＵＴ更新部４２では、ヒット数比較部４６の比較結果からヒット数ＨＬがブッロク数Ｎｃに達すると（ＨＬ＝Ｎｃ）、ブロック情報格納部３０から新たなＮｃ個のデータを読み出してＲＡＭ３４に格納することにより、ＬＵＴの更新を行う。
【００５９】
また、アドレス変換部３２では、ＬＵＴ更新部４２のヒット数比較部４６の比較結果から、ヒット数Ｈが無効ブロック数Ｎに達すると（Ｈ＝Ｎ）、それ以降は、無効ブロックが存在しないと判断されるので、比較部３８での処理を終了し、ブッロクアドレス設定部３６で設定されたブロックアドレスＢaddを、フラッシュメモリ１８への出力アドレスに設定すると共に、該当ブロックアドレスＢaddに基づいて次のブロックアドレスＢaddを設定する。すなわち、比較部３８での処理をスルーして、ブロックアドレス設定部３６で設定されたブロックアドレスＢaddを、そのまま出力アドレスに設定するようにしている。
【００６０】
次に、本実施の形態の作用として、ＣＰＵ１２加らの入力アドレスに基づいたフラッシュメモリ１８からのデータの読み出しを例に、メモリコントローラ２０での処理を説明する。
【００６１】
図５には、ブロック情報格納エリア３０に格納される無効ブロックデータの作成及び更新処理の概略を示している。なお、無効ブロックデータの作成／更新は、フラッシュメモリ１８に格納するデータの更新時などの予め設定された公知のタイミングで実行される。
【００６２】
このフローチャートでは、最初のステップ１００で初期設定を行う。このときに、ブロックアドレスＢaddを初期値（フラッシュメモリ１８の先頭のブロックアドレス、Ｂadd＝０ｘ００００）に設定すると共に、無効ブロック数Ｎをリセット（Ｎ＝０）する。
【００６３】
この後、ステップ１０２では、ブロックアドレスＢaddで指定されるブロックＢＬのスペアエリア２２Ａ内のステータスレジスタ２８を確認し、このステータスレジスタ２８のデータ（ステータスデータＳＤ）が、メインエリア２２Ａ及びスペアエリア２４Ａが有効であることを示しているか否か判断する。すなわち、ステータスレジスタ２８に格納されているステータスデータＳＤが、ＳＤ＝０ｘＦＦＦＦであるか否かを確認する。
【００６４】
ここで、対象ブロックＢＬ内のメインエリア２２Ａ（メインエリア２２）及び、スペアエリア２４Ａ（スペアエリア２４）が有効であれば、ステップ１０２で肯定判定してステップ１０４へ移行する。このステップ１０４では、対象としているブロックＢＬが最終のブロックＢＬであるか否か、すなわち、対象としているブロックアドレスＢaddが、フラッシュメモリ１８内の最終のブロックＢＬを示すものであるか否かを確認する。
【００６５】
これにより、最終のブロックＢＬに達していないときには、ステップ１０４で否定判定して、対象とするブロックＢＬを昇順で次のブロックＢＬとするようにブロックアドレスＢaddを設定する。
【００６６】
一方、ブロックアドレスＢaddで示されるブロックＢＬ内の何れかのステータスデータＳＤがデータの無効（ＳＤ≠０ｘＦＦＦＦ）を示していると、ステップ１０２で否定判定されてステップ１０８へ移行する。
【００６７】
このステップ１０８では、無効ブロック数Ｎを更新し（Ｎ＝Ｎ＋１）、次のステップ１１０では、対象としているブロックＢＬのブロックアドレスＢaddを、ブロック情報格納エリア３０に格納する。このときに、各ブロックＢＬを、ブロックアドレスＢaddの昇順で無効ブロックか否かを判定することにより、ブロック情報格納エリア３０には、無効ブロックがブロックアドレスＢaddの昇順で格納される。
【００６８】
このようにして、昇順で全てのブロックＢＬに対してステータスデータＳＤを確認し、全てのブロックＢＬに対する確認が終了するとステップ１０４で肯定判定されてステップ１１２へ移行し、ステップ１１２では、無効ブロック数Ｎをブロック情報格納エリア３０の所定位置に格納する。
【００６９】
これにより、例えば、図４（Ａ）に示されるように、無効ブロックのブロックアドレスＢaddが昇順で格納され、かつ、無効ブロック数Nが格納された無効ブロックデータが得られる。
【００７０】
メモリコントローラ２０では、例えば、フラッシュメモリ１８からデータを読み出すときに、無効ブロックデータを用いてアドレス変換を行う。ここで、ブートコードの読み出しを例に、メモリコントローラ２０でのアドレス変換を説明する。なお、前記したように、フラッシュメモリ１８では、無効ブロックを除いてブロックアドレスＢaddの昇順でデータが格納されるようになっている。
【００７１】
図６には、このときのアドレス変換の概略を示し、図７には、アドレス変換に用いるＬＵＴの作成／更新処理の概略を示している。このシステムコントローラ１０の起動時に、ＣＰＵ１２が先頭アドレスを指定してブートコードを読み込むときに実行され、最初のステップ１２０では、ＲＡＭ３４上に無効ブロックを示すＬＵＴが作成されたか否かを確認する。
【００７２】
メモリコントローラ２０では、フラッシュメモリ１８からブートコードを読み出すときに、無効ブロックを示すＬＵＴをアドレス変換用としてＲＡＭ３４上に作成している。図７には、このＬＵＴの作成／更新処理を示している。
【００７３】
このフローチャートでは、最初のステップ１５０で、ブロック情報格納エリア３０に無効ブロックデータとして格納されている無効ブロック数Ｎを読込み、ＲＡＭ３４に格納する。また、ＲＡＭ３４では、ＬＵＴを作成するときに格納するデータ量がＮｃ個のブロックＢＬ分のブロックアドレスＢaddに設定されており、ここから、ステップ１５２では、最初のNc個のブロックアドレスＢaddを、ブロック情報格納エリア３０から読み出して、ＲＡＭ３４に格納する。これにより、図４（Ａ）に示されるブロック情報格納エリア３０に格納された無効ブロックデータから、ＲＡＭ３４に最初のＬＵＴが作成される（図４（Ｂ）参照）。
【００７４】
図６のフローチャートでは、ＲＡＭ３４上にＬＵＴが作成されるとステップ１２０で肯定判定してステップ１２２へ移行し、ヒット数Ｈ、ＨＬを初期値に設定する（Ｈ＝０、ＨＬ＝０）。また、ステップ１２４では、ＣＰＵ１２からの入力アドレスである先頭アドレスを読込み、ステップ１２６では、読み込んだ入力アドレスに基づいて、ブートコードが格納されている先頭のブロックＢＬのブロックアドレスＢaddを設定する。
【００７５】
この後、ステップ１２８では、設定したブロックアドレスＢaddとＬＵＴを比較し、ステップ１３０では、設定したブロックアドレスＢaddのブロックＢＬが無効ブロックであるか否かを確認する。すなわち、設定したブロックアドレスＢaddがＬＵＴに含まれているか否かを確認する。
【００７６】
ここで、設定したブロックアドレスＢaddがＬＵＴ上のデータに含まれていないときには、該当ブロックアドレスＢaddのブロックＢＬが有効ブロックであると判定（ステップ１３０で肯定判定）してステップ１３２へ移行する。このステップ１３２では、設定したブロックアドレスＢaddを出力アドレスに設定する。
【００７７】
メモリコントローラ２０では、このようにして設定した出力アドレスをフラッシュメモリ１８に出力することにより、該当ブロックＢＬのデータを読み出して、ＣＰＵ１２へ出力し、ＣＰＵ１２では、メモリコントローラ２０から出力されたデータ（ブートコード）に基づいた処理を実行する。
【００７８】
ステップ１３２で出力アドレスを設定すると、ステップ１３４では、データの読み出しが終了したか否かを確認する。このときに、データの読み出しが終了していなければ、ステップ１３４で否定判定してステップ１３６へ移行する。
【００７９】
フラッシュメモリ１８には、無効ブロックを除いてブロックＢＬの昇順でデータが格納されており、ここから、ステップ１３６では、昇順で次のブロックアドレスＢaddを設定する（Ｂadd＝Ｂadd＋１）。
【００８０】
また、ステップ１３８では、無効ブロックを検出したときにカウントアップするヒット数Ｈが、無効ブロック数Ｎより少ないか否か、すなわち、ヒット数Ｈが無効ブロック数Ｎに達したか否かを確認する。このときに、ヒット数Ｈが無効ブロック数Ｎに達していなければ、ステップ１３８で肯定判定してステップ１２８へ移行し、新たに設定したブロックアドレスＢaddに対応するブロックＢＬが無効ブロックか否かを確認する。
【００８１】
一方、ブロックアドレスＢaddに対応するブロックＢＬが無効ブロックであると、設定したブロックアドレスＢaddがＬＵＴのデータと一致する。これにより、ステップ１３０で肯定判定されてステップ１４０へ移行する。すなわち、ブロックアドレスＢaddを昇順で設定したときに、無効ブロックのブロックアドレスと一致（ヒット）すると、ステップ１４０へ移行する。
【００８２】
このステップ１４０では、ヒット数Ｈ及びヒット数ＨＬをカウントアップする（Ｈ＝Ｈ＋１、ＨＬ＝ＨＬ＋１）。また、次のステップ１４２では、ヒット数ＨＬが、ＬＵＴのブロック数Ｎｃより少ないか否か、すなわち、ヒット数ＨＬがブロック数Ｎｃに達したか否かを確認する。
【００８３】
このときに、ヒット数ＨＬがブロック数Ｎｃに達していなければ（ＨＬ＜Ｎｃ）、ステップ１４２で肯定判定してステップ１３６へ移行し、昇順で次のブロックアドレスＢaddを設定する。これにより、新たに設定されたブロックアドレスＢaddに対応するブロックＢＬが無効ブロックで無ければ、このブロックアドレスＢaddが出力アドレスに設定される。
【００８４】
これに対して、ヒット数ＨＬがブロック数Ｎｃに達すると（ＨＬ＝Ｎｃ）、ステップ１４２で肯定判定される。これにより、ステップ１４４へ移行し、ＬＵＴの更新を行うと共に、ヒット数ＨＬをリセット（ＨＬ＝０）する。
【００８５】
図７のフローチャートでは、ステップ１５４でフラッシュメモリ１８からのデータの読み出し処理が終了したか否かを確認し、また、ステップ１５６では、ＬＵＴの更新が指示されたか否かを確認している。
【００８６】
ここで、データの読み出しが終了する前にヒット数ＨＬがブロック数Ｎｃに達して、図６のステップ１４４でＬＵＴの更新が設定されると、図７のフローチャートでは、ステップ１５６で肯定判定してステップ１５８へ移行する。
【００８７】
このステップ１５８では、ブロック情報格納エリア３０から次のＮｃ個のデータを読み出してＲＡＭ３４に格納する。これにより、ＲＡＭ３４にＬＵＴとして格納されるデータが、図４（Ｂ）から図４（Ｃ）に更新される。
【００８８】
また、次にＬＵＴの更新が指示された時には、ＲＡＭ３４にＬＵＴとして格納されるデータが、図４（Ｃ）から図４（Ｄ）に更新される。このときに、ブロック情報格納エリア３０に残っているデータがＮｃ個に満たない場合、残ったデータのみ（この場合は１個）がブロック情報格納エリア３０から読み出されて、ＲＡＭ３４に格納される。
【００８９】
一方、図６に示されるフローチャートでは、ステップ１３８でヒット数Ｈが無効ブロック数Ｎより少ないか否か、すなわち、ヒット数Ｈが無効ブロック数Ｎに達してか否かを確認している。
【００９０】
メモリコントローラ２０では、昇順でブロックアドレスＢaddを設定しており、無効ブロックと判定されるごとにヒット数Ｈがカウントアップされる。これにより、最後の無効ブロックがヒットすると、ヒット数Ｈが無効ブロック数Ｎに達し、この後は、無効ブロックが存在しないことになる。
【００９１】
ここから、ヒット数Ｈが無効ブロック数Ｎに達した（Ｈ＝Ｎ）後は、ステップ１３８で否定判定され、ステップ１３２へ移行する。これにより、データの読み出しが終了するまでは、設定されたブロックアドレスＢaddが、そのまま出力アドレスに設定される。また、このフローチャートでは、ＣＰＵ１２が所定量のデータを読み込むことにより、ステップ１３４で肯定判定されて、フラッシュメモリ１８からのデータの読み出し処理が終了する。
【００９２】
このように、本実施の形態では、予め設定した規則を、ブロックアドレスＢaddの昇順として、無効ブロックを除いた昇順で、ブラッシュメモリ１８の各ブロックＢＬに昇順でデータを格納するようにしているため、無効ブロックに対する代替ブロックを含むＬＵＴが不要となる。これにより、無効ブロックを特定する情報のみを用いたＬＵＴを用いることができる、ＬＵＴを形成するための記憶容量を少なくすることができる。
【００９３】
また、本実施の形態では、予め設定した規則として適用している昇順で、無効ブロックを格納したＬＵＴを用い、ブロックアドレスＢaddの昇順で無効ブロックか否かを判定するようにしているので、無効ブロックの検出の進行に合わせてＬＵＴを更新することができる。これにより、限られた記憶領域でＬＵＴを作成することができる。
【００９４】
さらに、本実施の形態では、無効ブロックの数Ｎを保持し、無効ブロックのヒット数Ｈをカウントするようにしているので、ヒット数Ｈが無効ブロック数Ｎに達した後は、無効ブロックか否かの判定が不要となるので、迅速なアドレス設定が可能となる。
【００９５】
なお、以上説明した本実施の形態では、予め設定した規則として、ブロックアドレスＢaddの昇順を適用したが、これに限らず、本発明は、予め設定した規則として、無効ブロックから代替ブロックを一義的に特定することができるものであれば任意の構成を適用することができる。
【００９６】
すなわち、本実施の形態では、無効ブロックの代替ブロックとして、次のブロックアドレスＢaddのブロックＢＬを設定し、以降のブロックＢＬを順に繰り上げるようにしたが、これに限らず、フラッシュメモリ１８に、降順でデータを格納するようにしてもよい。
【００９７】
このときには、無効ブロックに対する代替ブロックを、降順で次のブロックアドレスＢaddに設定し、以降のブロックＢＬを順に繰り下げるようにすればよい。
【００９８】
また、昇順又は降順に限らず、例えば、フラッシュメモリ１８の先頭のブロックＢＬから昇順でデータを格納すると共に、無効ブロックが存在するときには、その無効ブロックに対する代替ブロックを最終のブロックＢＬから降順に設定するようにしてもよい。
【００９９】
さらに、無効ブロックに対する代替ブロックを、予め設定した演算式によって決定したブロックＢＬとするなど、予め設定した規則にしたがって、無効ブロックの対する代替ブロックが決定される構成であれば、任意の構成を適用することができる。
【０１００】
また、本実施の形態では、フラッシュメモリからのブートコードの読み出しを例に説明したが、各種の処理プログラムの読み出し、ブートコードや各種の処理プログラムのフラッシュメモリ１８への書込みに適用することもできる。
【０１０１】
さらに、以上説明した本実施の形態では、記憶媒体としてＮＡＮＤ型フラッシュメモリであるフラッシュメモリ１８を例に説明したが、本発明は、これに限らず、例えば、ハードディスドライブ（ＨＤＤ）など、データの書換え可能な不揮発性記憶媒体であり、かつ、ブロック単位でデータの管理が行われる任意の構成の記憶媒体に対するデータの管理及び制御に適用することができる。
【図面の簡単な説明】
【０１０２】
【図１】本実施の形態に係るシステムコントローラの概略構成図である。
【図２】（Ａ）はフラッシュメモリとメモリコントローラに設けられる記憶領域を示す概略図、（Ｂ）はフラッシュメモリのページの構成を示す概略図、（Ｃ）はスペアエリアの構成を示す概略図である。
【図３】メモリコントローラに形成されるアドレス変換部の概略構成図である。
【図４】（Ａ）はブロック情報格納エリアに格納される無効ブロックデータの一例を示す概略図、（Ｂ）から（Ｃ）のそれぞれは、メモリコントローラのＲＡＭに形成されるＬＵＴのデータの一例を示す概略図である。
【図５】ブロック情報格納エリアに格納される無効ブロックデータの作成の一例を示す流れ図である。
【図６】本発明に係るアドレス変換処理の一例を示す流れ図である。
【図７】ＬＵＴの作成／更新処理の一例を示す流れ図である。
【符号の説明】
【０１０３】
１０    システムコントローラ
１２    ＣＰＵ
１８    フラッシュメモリ（不揮発性記憶媒体）
２０    メモリコントローラ（記憶媒体制御装置）
２２、２２Ａ    メインエリア
２４、２４Ａ    スペアエリア
２８    ステータスレジスタ
３０    ブロック情報格納エリア
３２    アドレス変換部（制御手段）
３４    ＲＡＭ（記憶手段）
３６    ブロックアドレス設定部（設定手段、代替設定手段）
３８    比較部（比較手段）
４０    判定部（判定手段）
４２    ＬＵＴ更新部（更新手段）
４４    カウント部
４６    ヒット数比較部
【図１】
2009087094.tif 000003
【図２】
2009087094.tif 000004
【図３】
2009087094.tif 000005
【図４】
2009087094.tif 000006
【図５】
2009087094.tif 000007
【図６】
2009087094.tif 000008
【図７】
2009087094.tif 000009