(57)【要約】【課題】  装置を簡単かつ安価に構築すること。【解決手段】  先頭正常ブロック対格納位置検出手段２ａは、同一のデータを格納する２個のブロックを検出すると該データを不良ブロック制御情報と判定し、不良ブロック制御情報読み出し手段２ｂは、検出した格納位置から上記不良ブロック制御情報を読み出し、正常情報ローディング手段２ｃは、読み出した不良ブロック制御情報に基づいて所定のプログラムをフラッシュメモリ（記憶部）２からＲＡＭ３に転送する。【選択図】        図１
2005157649.tif 000002
【特許請求の範囲】
【請求項１】
不良ブロックを含む記憶部から、データの読み出しを制御する不良ブロック制御情報に基づいて所定のプログラムが読み出され、該プログラムが一旦ＲＡＭにローディングされた後、このＲＡＭにローディングされたプログラムに基づいてＣＰＵが、後に続く処理を実行する記憶データアクセス装置であって、
同一のデータを格納する２個のブロックを検出すると該データを前記不良ブロック制御情報と判定する不良ブロック制御情報格納位置検出手段と、検出した前記格納位置から前記不良ブロック制御情報を読み出す不良ブロック制御情報読み出し手段と、前記読み出した不良ブロック制御情報に基づいて前記所定のプログラムを前記記憶部から前記ＲＡＭに転送する正常情報ローディング手段とを含む記憶部制御回路とを備えることを特徴とする記憶データアクセス装置。
【請求項２】
請求項１に記載の記憶データアクセス装置において、
前記同一のデータを格納する２個のブロックは、
前記記憶部内にある２ブロック連続して正常な正常ブロック対であって最先頭の正常ブロック対であることを特徴とする記憶データアクセス装置。
【請求項３】
請求項１に記載の記憶データアクセス装置において、
前記同一のデータを格納する２個のブロックは、
前記記憶部内にある所定数量の不良ブロックのみを挟み込んで連続する２個の正常ブロックの内で最先頭に位置する先頭正常ブロック集合であることを特徴とする記憶データアクセス装置。
【請求項４】
不良ブロックを含む第一の記憶部から、データの読み出しを制御する不良ブロック制御情報に基づいて所定のプログラムが読み出され、該プログラムが一旦ＲＡＭにローディングされた後、このＲＡＭにローディングされたプログラムに基づいてＣＰＵが、後に続く処理を実行する記憶データアクセス装置であって、
前記不良ブロック制御情報を格納する第二の記憶部と、
前記第二の記憶部から前記不良ブロック制御情報を読み出す不良ブロック制御情報読み出し手段と、前記読み出した不良ブロック制御情報に基づいて前記所定のプログラムを前記第一の記憶部から前記ＲＡＭに転送する正常情報ローディング手段とを含む記憶部制御回路とを備えることを特徴とする記憶データアクセス装置。
【請求項５】
不良ブロックを含む記憶部から、データの読み出しを制御する不良ブロック制御情報に基づいて所定のプログラムが読み出され、一旦ＲＡＭにローディングされた後、このＲＡＭにローディングされたプログラムに基づいてＣＰＵが、後に続く処理を実行する記憶データアクセス装置であって、
前記記憶部内にある先頭の正常ブロックが格納するデータの全てが２個連続する同一データ対であることを検出すると、該データ対を構成するデータの一方を前記不良ブロック制御情報と判定する不良ブロック制御情報格納位置検出手段と、検出した前記格納位置から前記不良ブロック制御情報を読み出す不良ブロック制御情報読み出し手段と、前記読み出した不良ブロック制御情報に基づいて前記所定のプログラムを前記記憶部から前記ＲＡＭに転送する正常情報ローディング手段とを含む記憶部制御回路とを備えることを特徴とする記憶データアクセス装置。
【請求項６】
不良ブロックを含む記憶部から、データの読み出しを制御する不良ブロック制御情報に基づいて所定のプログラムが読み出され、一旦ＲＡＭにローディングされた後、このＲＡＭにローディングされたプログラムに基づいてＣＰＵが、後に続く処理を実行する記憶データアクセス装置であって、
前記記憶部内にある先頭のブロックが格納するデータから所定の復号規則に基づいて不良ブロック制御情報を読み出す不良ブロック制御情報読み出し手段と、前記読み出した不良ブロック制御情報に基づいて前記所定のプログラムを前記記憶部から前記ＲＡＭに転送する正常情報ローディング手段とを含む記憶部制御回路とを備えることを特徴とする記憶データアクセス装置。
【請求項７】
請求項６に記載の記憶データアクセス装置において、
前記復号規則は、
１個のデータ領域内に格納されている１を表すビットの数量が所定数以上の場合にデータ値を１とし、１を表すビットの数量が所定数未満の場合にデータ値を０とすることを特徴とする記憶データアクセス装置。
【請求項８】
請求項２又は請求項３に記載の記憶データアクセス装置において、
予めシステム制御情報を格納するシステム制御情報格納手段を有する着脱可能なＲＯＭと、
前記不良ブロック制御情報に基づいて前記記憶部内の正常ブロックに既に格納されている情報の全てを消去する正常ブロック消去手段と、前記ＲＯＭから所定のプログラムを読み出して前記消去された正常ブロックに格納する正常情報格納手段と、前記正常情報格納手段によって所定のプログラムが格納された後に前記記憶部の先頭不良ブロックを確認する先頭不良ブロック確認手段とを含むＣＰＵ装置とを更に備えることを特徴とする記憶データアクセス装置。
【請求項９】
請求項８に記載の記憶データアクセス装置において、
前記システム制御情報は、
前記ＣＰＵ装置の動作を立ち上げるためのｂｏｏｔプログラムと、
正常情報格納手段によって前記正常ブロックに格納されるダウンロードプログラムとが含まれることを特徴とする記憶データアクセス装置。
【請求項１０】
請求項８又は請求項９に記載の記憶データアクセス装置において、
前記ＣＰＵ装置は、
前記記憶部がプログラム未格納品である場合において、前記記憶部の不良ブロックを検出し、不良ブロックの初期化処理を行う不良ブロック初期化手段を更に備えることを特徴とする記憶データアクセス装置。
【請求項１１】
請求項８又は請求項９に記載の記憶データアクセス装置において、
前記正常情報格納手段は、
前記ＣＰＵ装置が前記正常ブロック消去手段によって前記正常ブロックの全てを消去した後に、連続する正常ブロック対であって先頭のブロック対を検出する先頭正常ブロック対作成位置検出部と、
該先頭正常ブロック対作成位置検出部が検出した前記先頭のブロック対に前記ＲＯＭから読み出された同一データを書き込む先頭正常ブロック対データ書き込み部とを備えることを特徴とする記憶データアクセス装置。
【請求項１２】
請求項８又は請求項９に記載の記憶データアクセス装置において、
前記正常情報格納手段は、
前記ＣＰＵ装置が前記正常ブロック消去手段によって前記正常ブロックの全てを消去した後に所定数量の不良ブロックのみを挟み込んで連続する２個の正常ブロックを検出する先頭正常ブロック集合作成位置検出部と、
該先頭正常ブロック集合作成位置検出部が検出した前記先頭正常ブロック集合に前記ＲＯＭから読み出された同一データを書き込む先頭正常ブロック集合データ書き込み部とを備えることを特徴とする記憶データアクセス装置。
【請求項１３】
請求項９に記載の記憶データアクセス装置において、
前記不良ブロック初期化手段は、
前記記憶部とは異なる他の記憶部に前記記憶部の不良ブロック制御情報を書き込む不良ブロック制御情報書き込み部をさらに備えることを特徴とする記憶データアクセス装置。
【請求項１４】
請求項１乃至請求項１３の何れか１項に記載の記憶データアクセス装置において、
不良ブロック制御情報には、前記所定の記憶部に備える全ブロックの数を表す全ブロック数情報と、
前記全ブロックの先頭から順番に正常ブロックと不良ブロックとに区別する符号列からなる不良ブロック情報とを含むことを特徴とする記憶データアクセス装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電源投入後、記憶部から予め格納されているプログラムを読み出して一旦ＲＡＭにローディングした後、このＲＡＭにローディングされたプログラムに従って処理を行うシステムに於ける、記憶データアクセス装置に関する。
【背景技術】
【０００２】
電源投入後、記憶部から予め格納されているプログラムを読み出して一旦ＲＡＭにローディングした後、このＲＡＭにローディングされたプログラムに従って処理を行うシステムでは、記憶部（特にフラッシュメモリ）に含まれている正常ブロックと不良ブロックとを扱うために、以下のような装置が採用されていた。
【０００３】
上記システムは、記憶部（特にフラッシュメモリ）と、フラッシュメモリコントローラと、ＲＯＭ（リードオンリーメモリ）とＲＯＭコントローラと、ＲＡＭ（ランダムアクセスメモリ）とＲＡＭコントローラと、ＣＰＵ装置とを備えている。フラッシュメモリには正常ブロックと不良ブロックとが含まれている。この正常ブロックと不良ブロックとの情報は他の記憶部（例えばＲＯＭ）に予め格納されている。
【０００４】
ＣＰＵ装置は、ＲＯＭコントローラを介してＲＯＭからｂｏｏｔプログラムを読み出す。ここでｂｏｏｔプログラムとは、電源を入れてソフトウェアを起動するためのプログラムを言う。ＣＰＵ装置は、ｂｏｏｔプログラムに従って動作を開始する。他の記憶部（例えばＲＯＭ）に予め格納されている不良ブロック情報を読み込む。不良ブロック情報に従い、正常ブロックのデータをＲＡＭに展開する。全ての正常ブロックのデータをＲＡＭに展開した後、このＲＡＭに展開されたプログラムに従ってシステムの制御を開始する。
【０００５】
上記従来の技術では、フラッシュメモリとは別の記憶部（例えばＲＯＭ）に、フラッシュメモリからＲＡＭにデータをローディングするためのプログラムを格納し、更に、フラッシュメモリとは別の記憶部（例えばＲＯＭ）にフラッシュメモリの不良ブロックと正常ブロックとを識別する情報を格納しておく必要があった。
【特許文献１】特開平５−２２７２４８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
解決しようとする問題点は、フラッシュメモリとは別の記憶部（例えばＲＯＭ）に、フラッシュメモリからＲＡＭにデータをローディングするためのプログラムを格納し、更に、フラッシュメモリとは別の記憶部（例えばＲＯＭ）にフラッシュメモリの不良ブロックと正常ブロックとを識別する情報を格納しておく必要が有り、システムの安価な構築が困難であった点である。
【課題を解決するための手段】
【０００７】
不良ブロックを含む記憶部から、データの読み出しを制御する不良ブロック制御情報に基づいて所定のプログラムが読み出され、該プログラムが一旦ＲＡＭにローディングされた後、このＲＡＭにローディングされたプログラムに基づいてＣＰＵが、後に続く処理を実行する記憶データアクセス装置に於いて、同一のデータを格納する２個のブロックを検出すると該データを上記不良ブロック制御情報と判定する不良ブロック制御情報格納位置検出手段と、検出した上記格納位置から上記不良ブロック制御情報を読み出す不良ブロック制御情報読み出し手段と、上記読み出した不良ブロック制御情報に基づいて上記所定のプログラムを上記記憶部から上記ＲＡＭに転送する正常情報ローディング手段とを含む記憶部制御回路とを備えることを最も大きな特徴とする。
【発明の効果】
【０００８】
ｂｏｏｔプログラムを用意し、更に、フラッシュメモリとは別の記憶部にフラッシュメモリの不良ブロックと正常ブロックとを識別する情報を用意する必要がなくなり、装置の構成が簡単になり安価に構築することが出来るという効果を得る。
【発明を実施するための最良の形態】
【０００９】
２ブロック連続して正常なブロック対であって最先頭の正常ブロック対の各々に不良ブロック制御情報を含む同一情報をシステム電源ＯＮ前に予めフラッシュメモリに格納しておく。システム電源ＯＮ後にこのブロック対を検出して不良ブロック制御情報を読み出す。以後読み出した不良ブロック制御情報に基づいて正常なブロックのみから情報を読み出してＲＡＭに転送する。従って、システムの構築及び制御方法が容易になる。
【実施例１】
【００１０】
図１は、実施例１の構成のブロック図である。
図１より、実施例１の記憶データアクセス装置は、フラッシュメモリ１と、フラッシュメモリコントローラ２と、ＲＡＭ３と、ＲＡＭコントローラ４と、ＣＰＵ装置５と、システムバス６とを備える。
【００１１】
フラッシュメモリ１は、ＣＰＵ装置５を動作させるためのプログラムが予め格納されている記憶部であり通常ナンドメモリが用いられる。フラッシュメモリ１は複数のブロックから構成され、この複数のブロックには正常ブロックと不良ブロックとが含まれている。記憶データアクセス装置では、不良ブロックを正確に認識して排除し、正常ブロックのみから情報を読み出すことが不可欠となる。
【００１２】
かかる目的を達成するための不良ブロック制御情報が予め格納されている部分でもある。本実施例では、先頭正常ブロック対の各々に不良ブロック制御情報を含む同一情報がシステム電源ＯＮ前に予め格納される先頭正常ブロック対格納手段１ａを備えている。ここで先頭正常ブロック対とは２ブロック連続して正常なブロック対であって最先頭の正常ブロック対を言う。
【００１３】
フラッシュメモリコントローラ２は、上記フラッシュメモリ１とシステムバス６との間に配置され、ＣＰＵ装置５を動作させるためのプログラムをフラッシュメモリ１からＲＡＭ３へ転送する制御ブロックである。
【００１４】
かかる目的を達成するためにシステム電源ＯＮ後に上記先頭正常ブロック対を検出するための先頭正常ブロック対格納位置検出手段２ａと、検出された先頭正常ブロック対から上記不良ブロック制御情報を読み出す不良ブロック制御情報読み出し手段２ｂと、上記不良ブロック制御情報に基づいて正常情報のみをフラッシュメモリ１からＲＡＭ３へ転送する正常情報ローディング手段２ｃとを備える。
【００１５】
ＲＡＭ３は、システム電源ＯＮ後にフラッシュメモリ１からＣＰＵ装置５を動作させるためのプログラムを受け入れて格納する部分である。以後そのプログラムがＣＰＵ装置５によって読み出されるプログラムとなる。
ＲＡＭコントローラ４は、ＲＡＭ３とシステムバス６との間に配置され、ＣＰＵ装置５やフラッシュメモリ１等とＲＡＭ３を接続して情報の授受を制御する制御ブロックである。
【００１６】
実施例１の動作について説明する。
実施例１の動作の詳細について説明する前に動作説明に必要な基本概念について説明する。
図２は、実施例１の動作説明の基本概念説明図（その１）である。
図２の（ａ）は、複数のブロックから構成されるフラッシュメモリ１（図１）の内容を説明する図である。ブロックＮｏは、説明のために設けた番号である。ここに示されている不良ブロックと正常ブロックとの配置は一例に過ぎない。
【００１７】
図２の（ｂ）は、先頭正常ブロック対の検出原理を説明する図である。フラッシュメモリコントローラ２（図１）は、ブロックＮｏ１とブロックＮｏ２の内容を順次比較してブロックＮｏ１とブロックＮｏ２の内容が異なる場合にはブロックＮｏ１とブロックＮｏ２とで構成されるブロック対は先頭の正常ブロック対ではないと判断する。同様にブロックＮｏ２とブロックＮｏ３の内容を順次比較する。ブロックＮｏ２とブロックＮｏ３の内容が異なる場合はブロックＮｏ２とブロックＮｏ３は先頭の正常ブロック対ではないと判断する。
【００１８】
続いてブロックＮｏ３とブロックＮｏ４の内容を順次比較する。ブロックＮｏ３とブロックＮｏ４の内容が等しい場合はブロックＮｏ３とブロックＮｏ４とは先頭正常ブロック対であると判断する。このブロックＮｏ４とブロックＮｏ３には、予め不良ブロック制御情報が格納されている。
【００１９】
図３は、実施例１の動作説明の基本概念説明図（その２）である。
図３（ａ）は、複数のブロックからなるフラッシュメモリ１（図１）のブロック間のデータを比較する説明図であり、図３（ｂ）は、先頭正常ブロック対のデータ配置を説明する図である。
【００２０】
図３（ａ）に示すようにブロックＮｏ３の最初のデータｄｏは直後に続くブロックＮｏ４の最初のデータｄｎと比較される。次にブロックＮｏ３のデータｄ１とブロックＮｏ４のデータｄｎ＋１、ブロックＮｏ３のデータｄ２とブロックＮｏ４のデータｄｎ＋２が比較される。以下同様にしてブロックＮｏ３の最後のデータｄｎ−１とブロックＮｏ４の最後のデータｄ２ｎ−１まで比較される。全ての比較においてデータが等しい場合に、ブロックＮｏ３とブロックＮｏ４とは先頭正常ブロック対であると判断される。
【００２１】
図３（ｂ）に示すようにブロックＮｏ４及びブロックＮｏ３の最初のデータｄｎとデータｄｎ＋１には、フラッシュメモリ１（図１）を構成する全ブロックの個数が格納されている。次にデータｄｎ＋２とデータｄｎ＋３には全ブロックにわたる不良ブロックであるか正常ブロックであるかのデータが格納されている。通常正常ブロックは符号１で表され、不良ブロックは符号０で表される。この符号がブロックの順番に従う符号列となって格納されている。以後全ブロックの個数の情報を全ブロック数情報、ブロックの順番に表されている符号列を不良ブロック情報と記すこととする。従って、上記不良ブロック制御情報にはブロック数情報と不良ブロック情報とが含まれることとなる。
【００２２】
以上で実施例１の動作説明に必要な基本概念についての説明を終了したので、実施例１の動作の詳細についてフローチャートを用いて説明する。
図４は、実施例１のフローチャートである。
図５は、実施例１のフラッシュメモリコントローラのブロック図である。
【００２３】
図４のステップＳ（１）０からステップＳ（１）１１に従って、必要に応じて図５を一部引用しながら説明する。
ステップＳ（１）０
フラッシュメモリ１の先頭正常ブロック対にシステム電源ＯＮ前に上記全ブロック数情報と不良ブロック情報が予め格納される。このステップは、先頭正常ブロック対格納手段に該当する。実施例１の動作の前提となるステップであり、動作開始の予備ステップである。以後システム電源がＯＮされ動作が開始される。
【００２４】
ステップＳ（１）１
既に説明した図２（ａ）の比較対照としてブロックＮｏ１がＢＮｏ１としてＢｌｏｃｋＡＤＲ（１）１５にロードされる。
ステップＳ（１）２
同様にして直後に続くブロックとしてブロックＮｏ２がＮＢＮｏ（ＢＮｏ＋１）としてＢｌｏｃｋＡＤＲ（２）１１にロードされる。
【００２５】
ステップＳ（１）３
ＢＮｏのデータとＮＢＮｏのデータが比較され全て一致したときはステップＳ（１）５へ跳び、１個でも一致しないときは次へ進む。
ステップＳ（１）４
ＢＮｏが１インクリメントされてステップＳ（１）２へ戻る。
以上のステップを繰り返しながら先頭正常ブロック対の位置が検出されるとステップＳ（１）５へ抜ける。ステップＳ（１）１からステップＳ（１）４に至る繰り返しステップが先頭正常ブロック対格納位置検出手段に該当する。
【００２６】
ステップＳ（１）５
ＢＮｏへＮＢＮｏが移される。
ステップＳ（１）６
ＢＮｏのブロックから全ブロック数情報と不良ブロック情報が読み出され全ブロック数情報がＢｌｏｃｋＣＮＴ２５へ、不良ブロック情報がＳｈｉｆｔＲＥＧ２４へ、それぞれ取り込まれる。ステップＳ（１）５とステップＳ（１）６が不良ブロック制御情報読み出し手段に該当する。
【００２７】
ステップＳ（１）７
ＳｈｉｆｔＲＥＧ２４（図５）が１ビットシフトされる。
ステップＳ（１）８
ＳｈｉｆｔＲＥＧ２４（図５）から符号０（不良ブロック）が出力された場合はステップＳ（１）１０へ跳び、符号１（正常ブロック）が出力された場合には次へ進む。
ステップＳ（１）９
ＢＮｏのブロックのデータを読み出してシステムバス６及びＲＡＭコントローラ３（図１）を通ってＲＡＭ３（図１）に書き込まれる。
【００２８】
ステップＳ（１）１０
ＢｌｏｃｋＣＮＴ２５が１ディクリメントされる。更に、ＢＮｏが１インクリメントされてＢＮｏ＋１となる。
ステップＳ（１）１１
ＢｌｏｃｋＣＮＴ２５（図５）が０でなければステップＳ（１）７へ戻ってステップＳ（１）７からステップＳ（１）１１までを繰り返し、ＢｌｏｃｋＣＮＴ２５（図５）が０になったときフローを終了し、ＣＰＵ装置５（図１）はＲＡＭ３（図１）へのアクセスを開始する。ステップＳ（１）７からステップＳ（１）１１までのステップが正常情報ローディング手段に該当する。
【００２９】
次にタイムチャートと上記図５を用いて実施例１の動作について説明する。
図６は、実施例１のタイムチャート（その１）である。
図７は、実施例１のタイムチャート（その２）である。
図８は、実施例１のタイムチャート（その３）である。
図６と図７は最上段から順番に時刻、リセット、ＢｌｏｃｋＡＤＲ（１）（ＢＮｏに該当する）１５（図５）、ＢｌｏｃｋＡＤＲ（２）１１（図５）（ＮＢＮｏに該当する）、ＡＤＲＣＮＴ（１）１３（図５）、Ｄａｔａ、ＤａｔａＲＥＧ（１）（図５）、ＤａｔａＲＥＧ（２）（図５）、ＣＭＰ（１）２３（図５）、ＣＭＰ（２）１２（図５）、の状態を表している。
図８は、最上段から順番に時刻、ＢｌｏｃｋＡＤＲ（１）（ＢＮｏに該当する）１５（図５）、ＢｌｏｃｋＡＤＲ（２）１１（図５）（ＮＢＮｏに該当する）、ＡＤＲＣＮＴ（１）１３（図５）、Ｄａｔａ、ＤａｔａＲＥＧ（１）（図５）、ＡＤＲＣＮＴ（３）２６（図５）、ＣＭＰ（２）１２（図５）、ＳｈｉｆｔＲＥＧ２４（図５）、ＢｌｏｃｋＣＮＴ２５（図５）、の状態を表している。
【００３０】
時刻ｔ１〜時刻ｔ３
システム電源ＯＮ後にシステム全体がリセットされる。
時刻ｔ４
ＢｌｏｃｋＡＤＲ（１）（ＢＮｏに該当する）１５にはブロック１のデータの先頭アドレス０がロードされる。この状態はステップＳ（１）１に該当する。ＢｌｏｃｋＳｉｚｅＲＥＧ１９にはフラッシュメモリのサイズｎが初期値としてロードされる。制御回路２７はＡＤＤ１８を稼働させてＢｌｏｃｋＡＤＲ（１）１５の値０とＢｌｏｃｋＳｉｚｅＲＥＧ１９の値ｎとを加算した値ｎをＢｌｏｃｋＡＤＲ（２）（ＮＢＮｏに該当する）１１にロードする。即ち、この値はブロック２のデータの先頭アドレスとなる。同時に制御回路２７は、ＭＵＸ（２）１６とＡＤＲＣＮＴ（１）１３を稼働させてフラッシュアクセス制御２０を介してフラッシュメモリ１からｄ０のデータをシステムバス６上へ読み出す（Ｄａｔａ）。
【００３１】
時刻ｔ５
制御回路２７は、ｄ０のデータをＤａｔａＲＥＧ（１）２１にラッチする。同時にＭＵＸ（２）を稼働してＡＤＤ１８の出力ｎを出力させ、フラッシュアクセス制御２０を介してフラッシュメモリ１からｄｎをシステムバス６上へ読み出す（Ｄａｔａ）。
【００３２】
時刻ｔ６
制御回路２７は、ｄｎのデータをＤａｔａＲＥＧ（２）２２にラッチする。次のデータを取り出すためにＡＤＲＣＮＴ（１）を１インクリメントし、同時にＭＵＸ（２）を稼働してＡＤＤ１８の出力１を出力させ、フラッシュアクセス制御２０を介してフラッシュメモリ１からｄ１のデータをシステムバス６上へ読み出す（Ｄａｔａ）。
【００３３】
時刻ｔ７
制御回路２７は、ＣＭＰ（１）２３を稼働させてＤａｔａＲＥＧ（１）２１にラッチされているｄ０のデータとＤａｔａＲＥＧ（２）２２にラッチされているｄｎのデータとを比較する。ｄ０のデータとｄｎのデータとが等しい場合にＣＭＰ（１）２３は１を出力し、等しくない場合には０を出力する。ここでは等しいと仮定して１を出力する。同時にシステムバス６上のｄ１のデータをＤａｔａＲＥＧ（１）にラッチする。更に、次のデータを取り出すためにＡＤＲＣＮＴ（１）と、ＭＵＸ（２）を稼働してＡＤＤ１８の出力ｎ＋１を出力させ、フラッシュアクセス制御２０を介してフラッシュメモリ１からｄｎ＋１のデータをシステムバス６上に読み出す（Ｄａｔａ）。
【００３４】
時刻ｔ８
制御回路２７は、ｄｎ＋１のデータをＤａｔａＲＥＧ（２）にラッチする。次のデータを取り出すためにＡＤＲＣＮＴ（１）を１インクリメントして２とし、同時にＭＵＸ（２）を稼働して２を出力させ、フラッシュアクセス制御２０を介してフラッシュメモリ１からｄ２のデータをシステムバス上へ読み出す（Ｄａｔａ）。
【００３５】
時刻ｔ９
制御回路２７は、ＣＭＰ（１）２３を稼働させてＤａｔａＲＥＧ（１）２１にラッチされているｄ１のデータとＤａｔａＲＥＧ（２）２２にラッチされているｄｎ＋１のデータとを比較する。ｄ１のデータとｄｎ＋１のデータとが等しい場合にＣＭＰ（１）２３は１を出力し、等しくない場合には０を出力する。ここでは等しいと仮定して１を出力する。同時にシステムバス６上のｄ２のデータをＤａｔａＲＥＧ（１）２１にラッチする。更に、次のデータを取り出すためにＡＤＲＣＮＴ（１）とＭＵＸ（２）を稼働してＡＤＤ１８からｎ＋２を出力させ、フラッシュアクセス制御２０を介してｄｎ＋２のデータをフラッシュメモリ１からシステムバス上へ読み出す（Ｄａｔａ）。
【００３６】
時刻ｔ１０
制御回路２７は、ｄｎ＋２のデータをＤａｔａＲＥＧ（２）にラッチする。次のデータを取り出すためにＡＤＲＣＮＴ（１）を１インクリメントして３とし（以下図示しない）、同時にＭＵＸ（２）を稼働して３を出力させ、フラッシュアクセス制御２０を介してフラッシュメモリ１からｄ３のデータをシステムバス上へ読み出す（Ｄａｔａ）。
【００３７】
同様の動作を続けて所定の時間経過した後の時刻ｔ１５に至る。  時刻ｔ１５
制御回路２７は、ＣＭＰ（１）２３を稼働させてＤａｔａＲＥＧ（１）２１にラッチされているｄｉのデータとＤａｔａＲＥＧ（２）２２にラッチされているｄｎ＋ｉのデータとを比較する。ｄｉのデータｄｎ＋ｉのデータとが等しい場合にＣＭＰ（１）２３は１を出力し、等しくない場合には０を出力する。ここでは等しくないと仮定して０を出力する。制御回路２７は、次のブロック対の比較をするため次のブロックをロードし（ステップＳ（１）４（図４））、ＢｌｏｃｋＡＤＲ（１）に次のブロックのデータの先頭アドレスｎをロードする。同時にＢｌｏｃｋＡＤＲ（２）に直後に続くブロックのデータの先頭アドレス２ｎをロードする（ステップＳ（１）２（図４））。
【００３８】
時刻ｔ１６
ブロック２（先頭アドレスｎ）とブロック３（先頭アドレス２ｎ）のデータ比較が開始される。以下、時刻ｔ１６から時刻ｔ２３まで上記時刻ｔ４〜時刻ｔ１４と同様に進んだ後時刻ｔ２４に至る。
【００３９】
時刻ｔ２４
制御回路２７は、ＣＭＰ（１）２３を稼働させてＤａｔａＲＥＧ（１）２１にラッチされているｄｎ＋ｊのデータとＤａｔａＲＥＧ（２）２２にラッチされているｄ２ｎ＋ｊのデータとを比較する。ｄｎ＋ｊのデータとｄ２ｎ＋ｊのデータとが等しい場合にＣＭＰ（１）２３は１を出力し、等しくない場合には０を出力する。ここでは等しくないと仮定して０を出力する。以後図７へ続く。
【００４０】
時刻ｔ２５
制御回路２７は、次のブロック対の比較するため次のブロックをロードし（ステップＳ（１）４（図４））、ＢｌｏｃｋＡＤＲ（１）に次のブロックのデータの先頭アドレス２ｎをロードする。同時にＢｌｏｃｋＡＤＲ（２）に直後に続くブロックのデータの先頭アドレス３ｎをロードする（ステップＳ（１）２（図４））。時刻ｔ２６〜時刻ｔ３１と進んだ後時刻ｔ３３に至る。
【００４１】
時刻ｔ３３（図７）
制御回路２７は、ＣＭＰ（１）２３を稼働させてＤａｔａＲＥＧ（１）２１にラッチされているｄ３ｎ−１のデータとＤａｔａＲＥＧ（２）２２にラッチされているｄ４ｎ−１のデータとを比較する。ｄ３ｎ−１のデータとｄ４ｎ−１のデータとが等しい場合にＣＭＰ（１）２３は１を出力し、等しくない場合には０を出力する。ここでは等しいと仮定して１を出力する。又制御回路２７はＣＭＰ２を稼働させてＡＤＲＣＮＴ（１）１３の出力とＢｌｏｃｋＡＤＲ（２）１１の値とを比較させる。ＣＭＰ２双方の値が等しい場合は０を、等しくない場合には１を出力する。ここでは双方３ｎと等しくなっているので０を出力している。この時データ比較したブロック対のデータは全て等しいと判断される。制御回路２７はＢｌｏｃｋＡＤＲ（２）１１に保持されている３ｎをＢｌｏｃｋＡＤＲ（１）１５にロードし（ステップＳ（１）５）ＢｌｏｃｋＡＤＲ（２）１１に直後に続くブロックのデータの先頭値４ｎをロードする。以後図８へ続く。
【００４２】
時刻ｔ４０
制御回路２７はＭＵＸ（２）を稼働してＡＤＲＣＮＴ（１）１３の値３ｎを出力させ、フラッシュアクセス制御２０を介してフラッシュメモリ１からｄ３ｎのデータをシステムバス６上へ読み出す（Ｄａｔａ）。
【００４３】
時刻ｔ４１
制御回路２７は、ｄ３ｎのデータをＤａｔａＲＥＧ（１）２１にラッチする。同時にＡＤＲＣＮＴ（１）の値を１インクリメントし、３ｎ＋１とする。更に、ＭＵＸ（２）１６を稼働させてＡＤＲＣＮＴ（１）の値３ｎ＋１を出力させてｄ３ｎ＋１のデータをシステムバス６６上へ読み出す（Ｄａｔａ）。
【００４４】
時刻ｔ４２
制御回路２７は、ｄ３ｎ＋１のデータをＤａｔａＲＥＧ（１）２１にラッチする。同時にＡＤＲＣＮＴ（１）の値を１インクリメントし、３ｎ＋２とする。更に、ＭＵＸ（２）１６を稼働させてＡＤＲＣＮＴ（１）の値３ｎ＋２を出力させてｄ３ｎ＋２のデータをシステムバス６上へ読み出す（Ｄａｔａ）。
【００４５】
時刻ｔ４３
制御回路２７は、ｄ３ｎ＋２のデータをＤａｔａＲＥＧ（１）２１にラッチする。同時にＡＤＲＣＮＴ（１）の値を１インクリメントし、３ｎ＋３とする。更に、ＭＵＸ（２）１６を稼働させてＡＤＲＣＮＴ（１）の値３ｎ＋３を出力させてｄ３ｎ＋３のデータをシステムバス６上へ読み出す（Ｄａｔａ）。このときＢｌｏｃｋＣＮＴ２５はデータｄ３ｎとデータｄ３ｎ＋１を合わせた値ｍを保持する。このデータｄ３ｎとデータｄ３ｎ＋１には上記全ブロック数情報が記載されている（図３の（ｂ））。
【００４６】
時刻ｔ４４
ＤａｔａＲＥＧ（１）２１にラッチされているｄ３ｎ＋２のデータをＳｈｉｆｔＲＥＧ２４に転送し、更にｄ３ｎ＋３のデータをＤａｔａＲＥＧ（１）２１にラッチする。
【００４７】
時刻ｔ４５
制御回路２７は、ｄ３ｎ＋３のデータをＳｈｉｆｔＲＥＧ２４に転送する。データｄ３ｎ＋２とデータｄ３ｎ＋３には上記不良ブロック情報が記載されている（図３の（ｂ））。
上記、時刻ｔ４３、時刻ｔ４４及び時刻ｔ４４において不良ブロック制御情報の読み出しが実行される（ステップＳ（１）６）。
【００４８】
時刻ｔ４６
制御回路２７はＡＤＲＣＮＴ（１）１３の値を１インクリメントして３ｎ＋４とする。ＭＵＸ（２）を稼働してＡＤＲＣＮＴ（１）１３の値３ｎ＋４を出力させ、フラッシュアクセス制御２０を介してフラッシュメモリ１からｄ３ｎ＋４のデータをシステムバス６上へ読み出す（Ｄａｔａ）。
【００４９】
時刻ｔ４７
制御回路２７はｄ３ｎ＋４のデータをＤａｔａＲＥＧ（１）２１にラッチする。このとき制御回路２７はＳｈｉｆｔＲＥＧ２４の出力（不良ブロック情報）を読み取って０ならば不良ブロック、１ならば正常ブロックであると判断する。ここでは１が出力される。１が出力されると制御回路２７はＡＤＲＣＮＴ（３）２６にＲＡＭ３（図１）のアドレスを示す所定の初期値をロードし（ここでは０）システムバス６及びＲＡＭコントローラ４（図１）を介してＲＡＭ３（図１）にｄ３ｎ＋４のデータを書き込む。以下同様にして時刻ｔ５０までＲＡＭ３（図１）へのデータ書き込みが行われる。
【００５０】
時刻ｔ５１
ＢｌｏｃｋＡＤＲ（２）１１の値とＡＤＲＣＮＴ（１）１３のカウント数が等しくなるとＣＭＰ（２）１２の値が０になる。
時刻ｔ５２
制御回路２７は、ＢｌｏｃｋＣＮＴ２５を１ディクリメントする。同時にＡＤＲＣＮＴ（１）１３の値をそのまま４ｎに保持し、ＭＵＸ（２）を稼働してＡＤＲＣＮＴ（１）１３の値４ｎを出力させ、フラッシュアクセス制御２０を介してフラッシュメモリ１からｄ４ｎのデータをシステムバス６上へ読み出す（Ｄａｔａ）。
【００５１】
時刻ｔ５３
制御回路２７はｄ４ｎのデータをＤａｔａＲＥＧ（１）２１にラッチする。このとき制御回路２７はＳｈｉｆｔＲＥＧ２４の出力（不良ブロック情報）を読み取って０ならば不良ブロック、１ならば正常ブロックであると判断する。ここでは１が出力されると仮定する。１が出力されると制御回路２７はＡＤＲＣＮＴ（３）２６にＲＡＭ３（図１）のアドレスを示す所定の初期値をロードし（ここではｎ−６）システムバス６及びＲＡＭコントローラ４（図１）を介してＲＡＭ３（図１）にｄ４ｎのデータを書き込む。以下同様にして時刻ｔ５６までＲＡＭ３（図１）へのデータ書き込みが行われる。
【００５２】
時刻ｔ５７
ＢｌｏｃｋＡＤＲ（２）１１の値とＡＤＲＣＮＴ（１）１３のカウント数が等しくなるとＣＭＰ（２）１２の値が０になる。
時刻ｔ５８
制御回路２７は、ＢｌｏｃｋＣＮＴ２５を１ディクリメントする。このときＳｈｉｆｔＲＥＧ２４の出力が０になったと仮定する。即ち後に続くブロックが不良ブロックであったと仮定する。このとき制御回路２７は、データ読み出しは行わないで次のブロックへ進む。
【００５３】
時刻ｔ５９
制御回路２７は、ＢｌｏｃｋＣＮＴ２５を更に１ディクリメントする。同時にＡＤＲＣＮＴ（１）１３の値を６ｎにロードし、ＭＵＸ（２）を稼働してＡＤＲＣＮＴ（１）１３の値６ｎを出力させ、フラッシュアクセス制御２０を介してフラッシュメモリ１からｄ６ｎのデータをシステムバス６上へ読み出す（Ｄａｔａ）。
【００５４】
時刻ｔ６０
このとき制御回路２７はＳｈｉｆｔＲＥＧ２４の出力（不良ブロック情報）を読み取って０ならば不良ブロック、１ならば正常ブロックであると判断する。ここでは１が出力されると仮定する。１が出力されると制御回路２７はＡＤＲＣＮＴ（３）２６にＲＡＭ３（図１）のアドレスを示す所定の初期値をロードし（ここでは２ｎ−６）システムバス６及びＲＡＭコントローラ４（図１）を介してＲＡＭ３（図１）にｄ６ｎのデータを書き込む。以下同様にして時刻ｔ６３までＲＡＭ３（図１）へのデータ書き込みが行われる。
【００５５】
時刻ｔ６４
ＢｌｏｃｋＡＤＲ（２）１１の値とＡＤＲＣＮＴ（１）１３のカウント数が等しくなるとＣＭＰ（２）１２の値が０になる。
時刻ｔ６５
制御回路２７は、ＢｌｏｃｋＣＮＴ２５を１ディクリメントする。このときＢｌｏｃｋＣＮＴ２５の値が０になったとする。この段階で正常情報のローディングが終了する（ステップＳ（１７）〜ステップＳ（１）１１（図４））。
以後ＣＰＵ装置５（図１）からＲＡＭ３（図１）へのアクセスが開始される。
【００５６】
以上の説明は、所定の記憶部をフラッシュメモリ（通常ナンド型）に限定して説明した。その理由はナンド型のフラッシュメモリには多数の不良ブロックが含まれている確率が大きいからに他ならない。従って、本発明の適用範囲が、フラッシュメモリに限定されるものではない。他の型の記憶部に適用させることも勿論可能である。
【００５７】
以上説明した実施例１の記憶データアクセス装置では先頭正常ブロック対格納手段、即ち、フラッシュメモリの最初の正常ブロック対に不良ブロック制御情報を含めた同じデータを予め書き込んでおき、システム電源ＯＮ後に、この先頭正常ブロック対を検出して不良ブロック制御情報を読み出す。その結果ｂｏｏｔプログラムを用意し、更に、フラッシュメモリとは別の記憶部にフラッシュメモリの不良ブロックと正常ブロックとを識別する情報を用意する必要がなくなり、装置の構成が簡単になり安価に構築することが可能になる。
【実施例２】
【００５８】
本実施例では、不良ブロック制御情報をシステム電源ＯＮ以前に予めＥＥＰＲＯＭに格納しておく。但し、制御の主体は、実施例１と同様にフラッシュメモリコントローラでありＣＰＵ装置は特に関与しない。かかる目的を実行するために本実施例は以下のように構成される。
【００５９】
図９は、実施例２の構成のブロック図である。
図９より、実施例２の記憶データアクセス装置は、フラッシュメモリ３０と、フラッシュメモリコントローラ３１と、ＲＡＭ３と、ＲＡＭコントローラ４と、ＣＰＵ装置５と、システムバス６と、ＥＥＰＲＯＭ３２とＥＥＰＲＯＭコントローラ３３とを備える。
【００６０】
フラッシュメモリ３０は、実施例１のフラッシュメモリ１（図１）と異なり先頭正常ブロック対格納手段１ａ（図１）を備えていない。その他の構成は実施例１のフラッシュメモリ１（図１）と同様である。
【００６１】
フラッシュメモリコントローラ２は、上記フラッシュメモリ１とシステムバス６との間に配置され、ＣＰＵ装置５を動作させるためのプログラムをフラッシュメモリ１からＲＡＭ３へ転送する制御ブロックである。
【００６２】
かかる目的を達成するためにシステム電源ＯＮ後に後記正常ブロック検出手段３１ａを備える。更に、この検出した情報に基づいて正常ブロックに格納されている情報のみをフラッシュメモリ３０からＲＡＭ３へ転送する正常情報ローディング手段３１ｃを備える。
【００６３】
ＥＥＰＲＯＭ３２は、ユーザによるプログラムの書き込み消去可能なＲＯＭである。上記フラッシュメモリ３０に備える全ブロックの数を表す全ブロック数情報と、全ブロックの先頭から順番に正常ブロックと不良ブロックとに区別する符号列からなる不良ブロック制御情報を予めシステム電源をＯＮする前に格納しておく不良ブロック制御情報格納手段を備える部分である。
【００６４】
ＥＥＰＲＯＭコントローラ３３は、上記ＥＥＰＲＯＭ３２とシステムバス６との間に配置され、ＣＰＵ装置５の動作開始に必要とされるプログラムをフラッシュメモリコントローラ３１がＥＥＰＲＯＭ３２から読み出すことを可能にする部分である。
他の構成部分は実施例１と同様なので説明を割愛する。
【００６５】
実施例２の動作について説明する。
実施例２の動作の詳細について説明する前に動作説明に必要な基本概念について説明する。
図１０は、実施例２の動作説明の基本概念説明図である。
図１０の（ａ）は、複数のブロックから構成されるフラッシュメモリ３０（図９）の内容を説明する図である。ブロックＮｏは、説明のために設けた番号である。ここに示されている不良ブロックと正常ブロックとの配置は一例に過ぎない。
【００６６】
図１０（ｂ）は、ＥＥＰＲＯＭ内のデータ配置図である。
図１０（ｂ）に示すように最初のデータｄｎとデータｄｎ＋１には、フラッシュメモリ３０（図９）を構成する全ブロックの個数が格納されている。次にデータｄｎ＋２と後に続く数個のデータｄｎ＋３、…には全ブロックにわたる不良ブロックであるか正常ブロックであるかのデータが格納されている。通常正常ブロックは符号１で表され、不良ブロックは符号０で表される。この符号がブロックの順番に従う符号列となって格納されている。以後全ブロックの個数の情報を全ブロック数情報と、ブロックの順番に表されている符号列を不良ブロック情報と記すこととする。従って、上記不良ブロック制御情報には全ブロック数情報と不良ブロック情報とが含まれることとなる。このＥＥＰＲＯＭは、不良ブロック制御情報を格納するために特に設けられたものでなく、ＣＰＵ装置５の演算処理等を実行するために設けられている記憶素子である。
【００６７】
以上で実施例２の動作説明に必要な基本概念についての説明を終了したので、実施例の動作の詳細についてフローチャートを用いて説明する。
図１１は、実施例２のフローチャートである。
図１２は、実施例２のフラッシュメモリコントローラのブロック図である。
【００６８】
図１１のステップＳ（２）０からステップＳ（２）１２に従って、必要に応じて図１２を一部引用しながら説明する。
ステップＳ（１）０
ＥＥＰＲＯＭ３２に上記図１０で説明した配置に従って上記全ブロック数情報と不良ブロック情報が予め格納される。このステップは不良ブロック制御情報格納手段に該当する。実施例２の動作の前提となるステップであり、動作開始の予備ステップである。以後システム電源がＯＮされ動作が開始される。
【００６９】
ステップＳ（２）１
制御回路３４は、ＥＥＰＲＯＭ３２から全ブロック数情報を読み出してＢｌｏｃｋＣＮＴ２５にロードする。
ステップＳ（２）２
制御回路３４は、ＥＥＰＲＯＭ３２から全ブロック数情報を読み出してＢｌｏｃｋＣＮＴ２５にロードした後、ＢｌｏｃｋＣＮＴ２５の値を調べ、ＢｌｏｃｋＣＮＴ＝０の場合にはＲＡＭ４（図９）に書き込むべきデータが全て書き込まれたものと判断してフローを終了する。ＢｌｏｃｋＣＮＴ≠０の場合には次へ進む。
【００７０】
ステップＳ（２）３
制御回路３４は、ＢｌｏｃｋＣＮＴ２５を１ディクリメントする。
ステップＳ（２）４
制御回路３４はＢｌｏｃｋＡＤＲ（１）１５の値をＡＤＲＣＮＴ（１）１３にロードする。
ステップＳ（２）５
制御回路３４は、ＢｌｏｃｋＳｉｚｅＲＥＧ１９の値ｎとＢｌｏｃｋＡＤＲ（１）１５の値とを加算した結果をＢｌｏｃｋＡＤＲ（１）１５にロードする。従ってＢｌｏｃｋＡＤＲ（１）１５には常に次のブロックの先頭アドレスがロードされることになる。
【００７１】
ステップＳ（２）６
制御回路３４は、ＳｈｉｆｔＲＥＧ２４の値が空かどうかを調べ、空でない場合にはステップＳ（２）８へ跳び、空の場合にはステップＳ（２）７へ進む。
ステップＳ（２）７
制御回路３４はＥＥＰＲＯＭ３２から不良ブロック情報を所定量読み出してＳｈｉｆｔＲＥＧ２４にロードする。
【００７２】
ステップＳ（２）８
制御回路３４は、ＳｈｉｆｔＲＥＧ２４の値を１ビットシフトさせる。ＳｈｉｆｔＲＥＧ２４の出力する値が０の場合にはフラッシュメモリ３０（図１２）の該当するブロックが不良ブロックであると判断してステップＳ（２）２へ戻る。ＳｈｉｆｔＲＥＧ２４の出力する値が１の場合にはフラッシュメモリ３０（図１２）の該当するブロックが正常ブロックであると判断してステップＳ（２）１０へ進む。ここでステップＳ（２）１〜ステップＳ（２）９までが正常ブロック検出手段に該当する。
【００７３】
ステップＳ（２）１０
制御回路３４は、ＡＤＲＣＮＴ（１）１３が示しているアドレスのデータをフラッシュメモリ３０から読み出してＤａｔａＲＥＧ（１）にラッチさせる。次の読み出しに備えるためにＡＤＲＣＮＴ（１）１３を１インクリメントする。
【００７４】
ステップＳ（２）１１
制御回路３４は、ＤａｔａＲＥＧ（１）にラッチされているデータをＡＤＲＣＮＴ（３）２６が示しているＲＡＭ４（図１）のアドレスに書き込む。次の読み出しに備えるためにＡＤＲＣＮＴ（３）２６を１インクリメントする。ＡＤＲＣＮＴ（３）２６には、システム電源がＯＮされたときに所定の初期値がロードされている。
【００７５】
ステップＳ（２）１２
制御回路３４は、ＢｌｏｃｋＡＤＲ（１）１１の値とＡＤＲＣＮＴ（１）１３の値が等しいかどうかを調べる。等しくなければステップＳ（２）１０へ戻ってＲＡＭ４（図１）への書き込みを続け、等しくなったときにステップＳ（２）２を経てフローを終了する。
上記ステップＳ（２）１０〜ステップＳ（２）１２が正常情報ローディング手段に該当する。
【００７６】
次にタイムチャートと上記図１２を用いて実施例２の動作について説明する。
図１３は、実施例２のタイムチャート（その１）である。  図１４は、実施例２のタイムチャート（その２）である。
図１３及び図１４は最上段から順番に時刻、リセット、ＢｌｏｃｋＡＤＲ（１）１５（図１２）、ＢｌｏｃｋＳｉｚｅＲＥＧ１９（図１２）、ＡＤＤ１８（図１２）出力、ＡＤＲＣＮＴ（１）１３（図１２）、ＣＭＰ（２）１２（図１２）出力、ＢｌｏｃｋＣＮＴ２５（図１２）、ＳｈｉｆｔＲＥＧ２４（図１２）、ＤａｔａＲＥＧ（１）（図１２）、ＡＤＲＣＮＴ（３）２６（図１２）、の状態を表している。
【００７７】
時刻ｔ２００
システム電源がＯＮされるとシステム全体がリセットされる。
時刻ｔ２０２
ＢｌｏｃｋＡＤＲ（１）１５は０に、ＢｌｏｃｋＳｉｚｅＲＥＧ１９はｎに、ＡＤＲＣＮＴ（３）２６は０に初期設定される。
時刻ｔ２０４
制御回路３４は、ＥＥＰＲＯＭ３２から全ブロック数情報ｍを読み込んでＢｌｏｃｋＣＮＴ２５にロードする。
【００７８】
時刻ｔ２０６
制御回路３４は、ＢｌｏｃｋＣＮＴ２５を１ディクリメントする。
時刻ｔ２０７
制御回路３４は、ＢｌｏｃｋＡＤＲ（１）１５の値（ここでは０）をＡＤＲＣＮＴ（１）１３にロードする。
時刻ｔ２０８
制御回路３４は、次のブロックの先頭のアドレスを示すＡＤＤ１８の出力の値（ここではｎ）をＢｌｏｃｋＡＤＲ（１）１５にロードする。
時刻ｔ２０９
制御回路３４は、ＳｈｉｆｔＲＥＧ２４が空かどうかを判断する（図示なし）。
【００７９】
時刻ｔ２１０
制御回路３４は、上記時刻ｔ２０９でＳｈｉｆｔＲＥＧ２４が空なのでＥＥＰＲＯＭ３２から不良ブロック情報をＳｈｉｆｔＲＥＧ２４にロードする（図示なし）。
時刻ｔ２１１
制御回路３４は、ＳｈｉｆｔＲＥＧ２４に不良ブロック情報が取り込まれたので、その出力を読み取る。ここでは０（不良ブロック）を出力している。
時刻ｔ２１６
制御回路３４は、現在ＢｌｏｃｋＡＤＲ（１）１５が表示しているブロック（先頭アドレスｎ）が不良ブロックなので、正常ブロックを検出すべく次のブロック（先頭アドレス２ｎ）へ進んで時刻ｔ２０８から時刻ｔ２１１までと同様のプロセスを繰り返す。
【００８０】
時刻ｔ２２４
制御回路３４は、次のブロック（先頭アドレス２ｎ）もＳｈｉｆｔＲＥＧ２４が０（不良ブロック）を出力しているので、再度同様のプロセスを繰り返し、後に続くブロック（先頭アドレス３ｎ）へ進んで時刻ｔ２０８から時刻ｔ２１１までのプロセスを繰り返す。
時刻ｔ２２７
制御回路３４は、後に続くブロック（先頭アドレス２ｎ）へ進んでＳｈｉｆｔＲＥＧ２４が１（正常ブロック）を出力しているのを検出する。即ち、ここでは図１１のステップＳ（２）１〜ステップＳ（２）９を３回繰り返して正常ブロック検出手段を終了したことになる。
以後、図１４へ進む。
【００８１】
時刻ｔ２２９
先頭アドレス３ｎのブロックのデータ読み出しが開始される。制御回路３４は、ＤａｔａＲＥＧ（１）２１にｄ２ｎのデータをラッチする。更に、ＡＤＲＣＮＴ（１）１３のカウントを１インクリメントして２ｎ＋１とする。
【００８２】
時刻ｔ２３０
制御回路３４は、ＤａｔａＲＥＧ（１）２１にラッチされているｄ２ｎのデータをＡＤＲＣＮＴ（３）２６の指定するＲＡＭ４（図９）のアドレス（ここでは０）に書き込む。更に、ＡＤＲＣＮＴ（３）２６のカウントを１インクリメントする。
【００８３】
時刻ｔ２３１
制御回路３４は、ＢｌｏｃｋＡＤＲ（１）１５の値とＡＤＲＣＮＴ（１）１３の値とを比較する（ステップＳ（２）１２（図１１））。ここではＢｌｏｃｋＡＤＲ（１）１５の値が３ｎでありＡＤＲＣＮＴ（１）１３の値が２ｎ＋１なので一致していないので同様の動作が繰り返され、以下時刻ｔ２４４までフラッシュメモリ３０からＲＡＭ４（図９）へデータ転送が繰り返される。
【００８４】
時刻ｔ２４５
制御回路３４は、ＢｌｏｃｋＡＤＲ（１）１５の値が３ｎでありＡＤＲＣＮＴ（１）１３の値が３ｎとなり一致したことを検出する。この時点で３番目のブロックの全データがフラッシュメモリ３０からＲＡＭ４（図９）へデータ転送されたことになる。以上で正常情報ローディング手段が終了する。以下、時刻ｔ２０２以降と同じ手順で次のブロックのデータ読み出しがなされる。
【００８５】
以上説明した実施例２の記憶データアクセス装置では不良ブロック制御情報格納手段、即ち、ＥＥＰＲＯＭに全ブロック数情報、不良ブロック情報を予め書き込んでおくのでフラッシュメモリの正常ブロックを有効に活用できることになる。更に、システム電源ＯＮ後に、この不良ブロック制御情報を読み出すことによってフラッシュメモリ内の正常ブロックの情報を即座に取得することができるので、実施例１の先頭正常ブロック検出手段のような特別手段を必要としなくなり制御方法が簡単になるという効果を得る。
【実施例３】
【００８６】
本実施例は、実施例１の拡張例である。実施例１にプラスして着脱可能なＲＯＭモジュールを備える。このＲＯＭモジュールが実装されていないときには実施例１として動作する。一方ＲＯＭモジュールが実装されているときは、制御の主体がフラッシュメモリコントローラからＣＰＵ装置へ移る。かかる目的を達成するために本実施例は以下のように構成される。
【００８７】
図１５は、実施例３の構成のブロック図（その１）である。
図１５より、実施例３の記憶データアクセス装置は、フラッシュメモリ１と、ＲＡＭ３と、ＲＡＭコントローラ４と、システムバス６と、フラッシュメモリコントローラ４０と、ＲＯＭモジュール４１と、コネクタ４２と、ＲＯＭコントローラ４３と、ＣＰＵ装置５０とを備える。
【００８８】
フラッシュメモリコントローラ４０は、上記フラッシュメモリ１とシステムバス６との間に配置され、後記ＲＯＭモジュール４１が実装されていない場合には実施例１のフラッシュメモリコントローラ２と全く同様の役割を分担し、ＲＯＭモジュール４１が実装されている場合にはＣＰＵ装置５０の制御に基づいてフラッシュメモリ１にプログラムの書き込み及び読み出しを行う制御ブロックである。
【００８９】
ＲＯＭモジュール４１は、ｂｏｏｔプログラムとダウンロードプログラムからなるシステム制御情報が予め格納されるシステム制御情報格納手段を備えるリードオンリーメモリである。着脱可能なようにモジュール化されている。
ＲＯＭコントローラ４３はＲＯＭモジュール４１をシステムバス６に接続して情報の授受を制御する制御ブロックである。
コネクタ４２は、ＲＯＭモジュール４１とＲＯＭコントローラ４３とを着脱するコネクタである。
【００９０】
ＣＰＵ装置５０は、システム全体を制御する演算装置である。特に本実施例では、システム電源ＯＮ後にフラッシュメモリ１から不良ブロック情報を読み出す不良ブロック制御情報取り込み手段５０ａと、上記不良ブロック制御情報に基づいてフラッシュメモリ１の正常ブロックに既に格納されている情報の全てを消去する正常ブロック情報消去手段５０ｂと、上記ＲＯＭモジュール４１から所定のプログラムを読み出して上記情報を消去された正常ブロックに格納する正常情報格納手段５０ｃと、この正常情報格納手段５０ｃによって所定のプログラムが格納された後にフラッシュメモリ１の先頭不良ブロックを確認する先頭不良ブロック確認手段５０ｄと、上記記憶部がプログラム未格納品である場合において、上記記憶部の不良ブロックを検出し、不良ブロックの初期化処理を行う不良ブロック初期化手段５０ｅとを含んでいる。
他の構成部分は実施例１と同様なので説明を割愛する。
【００９１】
上記ＲＯＭモジュール４１とＲＯＭコントローラ４３との接続状態について他の図を用いて説明する。
図１６は、実施例３の構成のブロック図（その２）である。
ＲＯＭモジュール４１とＲＯＭコントローラ４３間の制御信号４９は、抵抗４８を介して接地されている。また制御信号４９は、ＲＯＭモジュール４１の内部で電源に接続されている。従って、ＲＯＭモジュール４１がコネクタ４２に接続されている場合には制御信号４９は１に保持され、接続されていない場合には０に保持される。その結果ＲＯＭコントローラ４３は、制御信号４９によってＲＯＭモジュール４１の実装を検出できる。この検出結果はＣＰＵ装置５０（図１５）へ送られる。      
【００９２】
実施例３の動作について説明する。
実施例３の動作の詳細について説明する前に動作説明に必要な基本概念について説明する。
図１７は、実施例３の動作説明の基本概念説明図である。
図１７（ａ）は、ＲＯＭモジュール４１に格納されているプログラム構成説明図である。図に示すようにＲＯＭモジュール４１内部にはｂｏｏｔプログラム４１−１とダウンロードプログラム４１−２が格納されている。ここでｂｏｏｔプログラム４１−１とは、ＣＰＵ装置５０の動作を立ち上げるためのプログラムであり、ダウンロードプログラム４１−２とは、正常情報格納手段によって正常ブロックに格納されるプログラムである。
【００９３】
図１７（ｂ）は、複数のブロックから構成されるフラッシュメモリ１（図１５）の内容を説明する図である。ブロックＮｏは、説明のために設けた番号である。ここに示されている不良ブロックと正常ブロックとの配置は一例に過ぎない。
図１７（ｃ）は、図１７（ｂ）で表されるフラッシュメモリへダウンロードプログラム４１−２が書き込まれる状態を示す概念図である。図に示すように先頭正常ブロック対（ブロック２とブロック３）には同一データが書き込まれる。このデータには不良ブロック制御情報が含まれる。
【００９４】
以上で実施例３の動作説明に必要な基本概念についての説明を終了したので、他の図を用いて実施例の動作の詳細についてフローチャートを用いて説明する。
図１８は、実施例３のフローチャートである。
図１９は、実施例３のフラッシュメモリコントローラのブロック図である。
【００９５】
図１８のステップＳ（３）１からステップＳ（３）８に従って、必要に応じて図１９を一部引用しながら説明する。
尚、このフローチャートは本実施例の動作の概要を示すものであり、このフローチャートの重要プロセスについては後に再度詳細に説明する。
ステップＳ（３）０
ＲＯＭモジュール４１にｂｏｏｔプログラムとダウンロードプログラムが予め格納される。このステップは、システム制御情報格納手段に該当する。実施例３の動作の前提となるステップであり、動作開始の予備ステップである。以後システム電源がＯＮされ動作が開始される。
【００９６】
ステップＳ（３）１
ＣＰＵ装置５０は、システムにＲＯＭモジュール４１が実装されているかどうかを判断する。ＲＯＭモジュール４１が実装されていない場合にはステップＳ（３）８へ跳んで、以下実施例１と同様のステップを通ってシステム動作が開始される。実装されている場合には次へ進む。
【００９７】
ステップＳ（３）２
ＣＰＵ装置５０は、ＲＯＭモジュール４１に格納されているｂｏｏｔプログラム４１−１に従ってダウンロード動作を開始する。
ステップＳ（３）３
ＣＰＵ装置５０は、フラッシュメモリ１の所定の部分を読み出して、プログラムが格納されているかどうかを判断する。プログラムが格納されていない場合（空の場合）にはステップＳ（３）９を通ってステップＳ（３）６へ進み、格納されている場合にはステップＳ（３）４へ進む。ステップＳ（３）９の詳細については後に他のフローチャートを用いて説明する。
【００９８】
ステップＳ（３）４
ＣＰＵ装置５０は、フラッシュメモリ１から不良ブロック制御情報を読み出す。このプロセスが不良ブロック制御情報取り込み手段に該当する。
このステップの詳細については後に他のフローチャートを用いて説明する。
【００９９】
ステップＳ（３）５
ＣＰＵ装置５０は、不良ブロック制御情報に基づいてフラッシュメモリ１の正常ブロックに格納されている情報の全てを消去する。このプロセスが正常ブロック消去手段に該当する。このステップの詳細については後に他のフローチャートを用いて説明する。
【０１００】
ステップＳ（３）６
ＣＰＵ装置５０は、ＲＯＭモジュール４１に予め格納されているダウンロードプログラム４１−２を読み出して上記図１７の概念に従ってフラッシュメモリ１の正常ブロックに格納する。このプロセスが正常情報格納手段に該当する。このステップの詳細については後に他のフローチャートを用いて説明する。
【０１０１】
ステップＳ（３）７
ＣＰＵ装置５０は、ダウンロードプログラム４１−２をフラッシュメモリ１に全て格納した後、先頭不良ブロックを確認してフローを終了する。このプロセスが先頭不良ブロック確認手段に該当する。このステップの詳細については後に他のフローチャートを用いて説明する。
【０１０２】
次に重要プロセスの動作について個々に他のフローチャートを用いて詳細に説明する。
図２０は、不良ブロック制御情報取り込み手段のフローチャート（その１）である。上記ステップＳ（３）４の詳細フローチャートである。
図２０のステップＳ（３）４−１からステップＳ（３）４−４に従って説明する。
ステップＳ（３）４−１
ＣＰＵ装置５０は、ＢＮｏをブロックＮｏ１にロードする。
【０１０３】
ステップＳ（３）４−２
ＣＰＵ装置５０は、ＢＮｏ＋１とＢＮｏのデータを比較する。データが１個でも異なればステップＳ（３）４−３で次のブロックをロードしてステップＳ（３）４−２へ戻る。全てのデータが等しいときはステップＳ（３）４−４へ進む。
ステップＳ（３）４−４
ＣＰＵ装置５０は、ＢＮｏにロードされているブロックの所定の位置に格納されている不良ブロック制御情報を読み出してフローを終了する。
【０１０４】
図２１は、正常ブロック消去手段のフローチャートである。上記ステップＳ（３）５の詳細フローチャートである。
図２１のステップＳ（３）５−１からステップＳ（３）５−７に従って説明する。
ステップＳ（３）５−１
ＣＰＵ装置５０は、ＢＮｏをブロックＮｏ１にロードする。  ステップＳ（３）５−２
ＣＰＵ装置５０は、上記ステップＳ（３）４で読み出した不良ブロック制御情報に基づいてＢＮｏにロードされているブロックが不良ブロックであるかどうかを判断する。不良ブロックであるときはステップＳ（３）５−６へ跳び、正常ブロックであるときは次へ進む。
【０１０５】
ステップＳ（３）５−３
ＣＰＵ装置５０はＢＮｏにロードされているブロックに格納されているデータの全てを消去する。
ステップＳ（３）５−４
ＣＰＵ装置５０はＢＮｏにロードされているブロックのデータを読み込むかあるいは又フラッシュメモリ１のステータスを確認する等してデータの消去が正常に終了したかどうかを判断する。正常に消去されているときはステップＳ（３）５−５へ跳び、正常に消去されていないときは次へ進む。
【０１０６】
ステップＳ（３）５−５
ＣＰＵ装置５０はＢＮｏにロードされているブロックを不良ブロックとして不良ブロック制御情報を更新する。
ステップＳ（３）５−６  ＣＰＵ装置５０はＢＮｏにロードされているブロックが最後のブロックであるかどうかを判断する。最後のブロックでない場合はステップＳ（３）５−７で次のブロックへ進んだ後ステップＳ（３）５−２へ戻って同じ処理を繰り返す。最後のブロックであるときはフローを終了する。
【０１０７】
図２２は、正常情報格納手段のフローチャート（その１）である。上記ステップＳ（３）６の詳細フローチャートである。
図２２のステップＳ（３）６−１からステップＳ（３）６−１５に従って説明する。
ステップＳ（３）６−１
ＣＰＵ装置５０は、ＢＮｏに０を設定する。
【０１０８】
ステップＳ（３）６−２
ＣＰＵ装置５０は、ＢＮｏで示されるブロックＮｏを１インクリメントする。
ステップＳ（３）６−３
ＣＰＵ装置５０は、ＢＮｏで示されるブロックが不良ブロックであるかどうかを判断する。不良ブロックである場合にはステップＳ（３）６−２へ戻って次のブロックへ進む。不良ブロックでない場合には次のステップへ進む。
【０１０９】
ステップＳ（３）６−４
ＣＰＵ装置５０は、ＢＮｏ＋１で示されるブロックが不良ブロックであるかどうかを判断する。不良ブロックである場合にはステップＳ（３）６−２へ戻って次のブロックへ進む。不良ブロックでない場合には次のステップへ進む。
ステップＳ（３）６−５
ＣＰＵ装置５０は、ＢＮｏにロードされているブロックを先頭正常ブロック対としてＢＢＮｏへ登録する。ステップＳ（３）６−１〜ステップＳ（３）６−５までのプロセスが先頭正常ブロック対作成位置検出部に該当する。
【０１１０】
ステップＳ（３）６−６
ＣＰＵ装置５０は、ＲＯＭモジュール４１に格納されているダウンロードプログラム４１−２においてフラッシュメモリ１に未書き込みのデータを読み出してＢＮｏにロードされているブロックに書き込む。同様に、このデータと同じデータをＢＮｏ＋１にロードされているブロックに書き込む。このプロセスが先頭正常ブロック対データ書き込み部に該当する。
【０１１１】
ステップＳ（３）６−７
ＣＰＵ装置５０は、ＢＮｏを１インクリメントする。
ステップＳ（３）６−８
ＣＰＵ装置５０は、更に、ＢＮｏを１インクリメントする。
ステップＳ（３）６−９
ＣＰＵ装置５０は、ＢＮｏにロードされているブロックが不良ブロックであるかどうかを判断する。不良ブロックである場合には  ステップＳ（３）６−８に戻って次のブロックへ進む。不良ブロックでない場合には次のステップへ進む。
【０１１２】
ステップＳ（３）６−１０
ＣＰＵ装置５０は、ＲＯＭモジュール４１に格納されているダウンロードプログラム４１−２においてフラッシュメモリ１に未書き込みのデータを読み出してＢＮｏに書き込む。
ステップＳ（３）６−１１
ＣＰＵ装置５０はＢＮｏロードされているブロックに書き込まれているデータを読み込むかあるいは又フラッシュメモリ１のステータスを確認する等してデータの書き込みが正常に終了したかどうかを判断する。データの書き込みが正常に終了した場合にステップＳ（３）６−１３へ跳び、正常に終了していない場合にステップＳ（３）６−１２へ進む。
【０１１３】
ステップＳ（３）６−１２
ＣＰＵ装置５０は、ＢＮｏにロードされているブロックを不良ブロックとして不良ブロック情報を更新すると共に、このブロックに書き込まれたダウンロードプログラムは未書き込みとしてステップＳ（３）６−８へ戻って次のブロックへ進む。
ステップＳ（３）６−１２
ＣＰＵ装置５０は、ダウンロードプログラムの全てがフラッシュメモリ１に書き込まれたかどうかを判断する。全てがフラッシュメモリ１に書き込まれたと判断した場合にはステップＳ（３）６−１４へ進み、まだ書き込まれていないと判断した場合にはステップＳ（３）６−８へ戻って次のブロックへ進む。
【０１１４】
ステップＳ（３）６−１２
ＣＰＵ装置５０は、先頭正常ブロック対となるＢＢＮｏにロードされているブロックとＢＢＮｏ＋１にロードされているブロックの所定の領域にフラッシュメモリの全ブロックの個数を格納する。
ステップＳ（３）６−１２
ＣＰＵ装置５０は、先頭正常ブロック対となるＢＢＮｏにロードされているブロックとＢＢＮｏ＋１にロードされているブロックの所定の領域にフラッシュメモリの不良ブロック情報を格納してフローを終了する。
【０１１５】
図２３は、不良ブロック初期化のフローチャート（その１）である。上記ステップＳ（３）９の詳細フローチャートである。
この処理は、フラッシュメモリ１にプログラムが未書き込みの場合にフラッシュメモリ１をチェックして初期化するための動作を表している。
図２３のステップＳ（３）９−１からステップＳ（３）９−１５に従って説明する。
ステップＳ（３）９−１
ＣＰＵ装置５０は、ＢＮｏに０を設定する。
【０１１６】
ステップＳ（３）９−２
ＣＰＵ装置５０は、ＢＮｏを１インクリメントする。
ステップＳ（３）９−３
ＣＰＵ装置５０は、ＢＮｏにロードされているブロックのデータを読み出し、データの全てがＦＦであるかどうかを確認する。全てがＦＦでない場合には次のステップへ進む。全てがＦＦである場合には正常ブロックと判断してステップＳ（３）９−５へ跳ぶ。
【０１１７】
ステップＳ（３）９−４
ＣＰＵ装置５０は、ＢＮｏにロードされているブロックは不良ブロックと判断して、このブロックＮｏを不良ブロック情報へ登録する。
ステップＳ（３）９−５
ＣＰＵ装置５０は、ＢＮｏにロードされているブロックが最後のブロックかどうかを判断し、最後のブロックでない場合にはステップＳ（３）９−２へ戻って次のブロックへ進む。最後のブロックである場合には次のステップへ進む。以上のプロセスによって不良ブロック情報が生成されていることに留意すべきである。但し、フラッシュメモリ１は、未書き込みの場合には正常ブロックには全てＦＦが書き込まれているものとする。
【０１１８】
ステップＳ（３）９−６
ＣＰＵ装置５０は、初期値としてＢＮｏに０を書き込む。
ステップＳ（３）９−７
ＣＰＵ装置５０は、ＢＮｏを１インクリメントする。
ステップＳ（３）９−８
ＣＰＵ装置５０は、上記不良ブロック情報に基づいてＢＮｏにロードされているブロックが不良ブロックかどうかを判断する。不良ブロックである場合にはステップＳ（３）９−７へ戻って次のブロックへ進む。不良ブロックでない（正常ブロック）である場合には次のステップへ進む。
【０１１９】
ステップＳ（３）９−９
ＣＰＵ装置５０は、上記不良ブロック情報に基づいてＢＮｏ＋１にロードされているブロックが不良ブロックかどうかを判断する。不良ブロックである場合にはステップＳ（３）９−７へ戻って次のブロックへ進む。不良ブロックでない（正常ブロック）である場合には次のステップへ進む。
【０１２０】
ステップＳ（３）９−１０
上記ステップＳ（３）９−８とステップＳ（３）９−９を通過したことによりＢＮｏにロードされているブロックとＢＮｏ＋１にロードされているブロック対は先頭正常ブロック対であると判断されるので、ＢＮｏにロードされているブロックのブロックＮｏをＢＢＮｏに保持する。以下の点に留意すべきである。即ち、ステップＳ（３）９−６からステップＳ（３）９−１０のプロセスで先頭正常ブロック対を検出したことになる。
【０１２１】
ステップＳ（３）９−１１
ＣＰＵ装置５０は、ＢＮｏを０に設定するとともにｄｕｍｍｙＤａｔａ（ダミーデータ）に０Ｆを設定する。
ステップＳ（３）９−１２
ＣＰＵ装置５０は、ＢＮｏを１インクリメントするとともにｄｕｍｍｙＤａｔａ（ダミーデータ）に反転（インバート）データＦ０を設定する。
【０１２２】
ステップＳ（３）９−１３
ＣＰＵ装置５０は、ＢＮｏがＢＢＮｏが等しいかどうかを判断する。等しくなければステップＳ（３）９−１４でＢＮｏで示されるブロックに格納されているデータを消去し、更にステップＳ（３）９−１５でＢＮｏで示されるブロックの全ての領域にｄｕｍｍｙＤａｔａ（ダミーデータ）を書き込んでステップＳ（３）９−１２へ戻る。ＢＮｏがＢＢＮｏが等しくなればフローを終了する。
ここで以下の点に留意すべきである。即ち、上記ステップＳ（３）９−１０で先頭正常ブロック対が、検出される。この位置を明確にしておくためにステップＳ（３）９−１１以降でｄｕｍｍｙＤａｔａの挿入がなされている。
【０１２３】
図２４は、先頭不良ブロック確認手段のフローチャート（その１）である。上記ステップＳ（３）７の詳細フローチャートである。
図２４のステップＳ（３）７−１からステップＳ（３）７−５に従って説明する。
ステップＳ（３）７−１
ＣＰＵ装置５０は、図２１のステップＳ（３）６−５で検出したＢＢＮｏで示される先頭正常ブロックのＮｏをポインタＢＰに格納する。  ステップＳ（３）７−２
ＣＰＵ装置５０は、ポインタＢＰが０かどうかを確認する。０の場合には図示しない表示装置等表示してフローを終了する。０でない場合には、次のステップへ進む。
【０１２４】
ステップＳ（３）７−３
ＣＰＵ装置５０は、ポインタＢＰの示すブロックのデータとポインタＢＰ＋１の示すデータとを比較する。双方のデータが等しくないときはステップＳ（３）７−４でポインタＢＰを１ディクリメントしてステップＳ（３）７−２へ戻る。双方のデータが等しいときには、先頭正常ブロックの前にある不良ブロックへの初期化が失敗しており、フラッシュメモリ不良と判断してフローを終了する。
【０１２５】
以上の説明では図１６に示すようにＲＯＭモジュール４１が実装されているかどうかの判断はＲＯＭコントローラ４３が制御信号４９を受け入れて行っていた。しかし本発明は、この例に限定されるものではない。その一例について図を用いて説明する。  図２５は、実施例３の構成のブロック図（その３）である。  図１６と図２５との差異のみについて説明する。
図２５では、制御信号４９が、ＡＮＤ回路を介してフラッシュメモリ１のライトプロテクト信号に接続される。従って、ＲＯＭコントローラ４３が実装されていないときにはフラッシュメモリ１は書き込み不可能となる。
【０１２６】
以上説明した実施例３の記憶データアクセス装置ではｂｏｏｔプログラムと不良ブロック制御情報とを含むシステム制御情報を格納する着脱可能なＲＯＭモジュールを備えることによって実施例１の効果に加えて次の効果を有する。  （１）フラッシュメモリへのプログラムの自動書き込みがシステム電源をＯＮするだけで容易に実行可能になる。
（２）ＲＯＭモジュールを着脱可能にしたことによってフラッシュメモリへのプログラムの自動書き込みが必要な場合のみ実装すればよいので安価なシステムの構築が可能になる。
（３）プログラム書き込み完了を表示装置などによって容易に利用者に知らせることが可能になる。
（４）プログラムの書き込みと同時にフラッシュメモリ自体をチェックすることも可能になる。
（５）ＲＯＭモジュールの着脱を検出する制御信号をＡＮＤ回路を介してフラッシュメモリのライトイネーブルに接続することによってプログラムのバグや不本意な書き込みを防止することも可能になる。
【実施例４】
【０１２７】
本実施例は実施例３の拡張例である。即ち、不良ブロック初期化手段に記憶部（フラッシュメモリ）とは異なる他の記憶部（ＥＥＰＲＯＭ）に上記記憶部の不良ブロック制御情報を書き込む不良ブロック制御情報書き込み部をさらに含ませることによって、何らかの事情によってフラッシュメモリに格納されている不良ブロック制御情報が失われてもシステム電源を再投入することでＥＥＰＲＯＭに格納されている不良ブロック制御情報に従ってダウンロードプログラムを正しくフラッシュメモリに書き込むことが可能になる。かかる目的を達成するために本実施例は以下のように構成される。
【０１２８】
図２６は、実施例４の構成のブロック図である。
図２６より、実施例１の記憶データアクセス装置は、フラッシュメモリ１と、ＲＡＭ３と、ＲＡＭコントローラ４と、システムバス６と、フラッシュメモリコントローラ４０と、ＲＯＭコントローラ４３と、ＲＯＭモジュール５１と、コネクタ５２と、ＥＥＰＲＯＭコントローラ５３と、ＣＰＵ装置５５とを備える。
【０１２９】
ＲＯＭモジュール５１は、ｂｏｏｔプログラムとダウンロードプログラムからなるシステム制御情報が予め格納されるシステム制御情報格納手段を備えるリードオンリーメモリであり、本実施例では更にＥＥＰＲＯＭ５４を備えている。このＥＥＰＲＯＭ５４には不良ブロック初期化処理中に不良ブロック制御情報が書き込まれる。これらは一体となって着脱可能なようにモジュール化されている。
【０１３０】
ＥＥＰＲＯＭコントローラ５３はＥＥＰＲＯＭ５４をシステムバス６に接続して情報の授受を制御する制御ブロックである。
コネクタ５２は、ＲＯＭモジュール５１とＲＯＭコントローラ４３及びＥＥＰＲＯＭコントローラ５３とを着脱するコネクタである。
【０１３１】
ＣＰＵ装置５５は、システム全体を制御する演算装置である。特に本実施例では、不良ブロック初期化手段５０ｅが、上記記憶部（フラッシュメモリ１）とは異なる他の記憶部（ＥＥＰＲＯＭ５４）に上記記憶部（フラッシュメモリ１）の不良ブロック制御情報を書き込む不良ブロック制御情報書き込み部５０ｆをさらに含んでいる。
他の構成部分は実施例１と同様なので説明を割愛する。
【０１３２】
実施例４の動作について説明する。
図２７は、実施例４のフローチャートである。
図２７のステップＳ（４）１からステップＳ（４）１４に従って説明する。実施例３のフローチャート（図１８〜図２３）と類似しているので一部引用して説明する。
【０１３３】
ステップＳ（４）０（＝ステップＳ（３）０）
ＲＯＭモジュール５１にｂｏｏｔプログラムとダウンロードプログラムが予め格納される。このステップは、システム制御情報格納手段に該当する。実施例４の動作の前提となるステップであり、動作開始の予備ステップである。以後システム電源がＯＮされ動作が開始される。
【０１３４】
ステップＳ（４）１（＝ステップＳ（３）１）
ＣＰＵ装置５５は、システムにＲＯＭモジュール５１が実装されているかどうかを判断する。ＲＯＭモジュール５１が実装されていない場合にはステップＳ（４）１４へ跳んで、以下実施例１と同様のステップを通ってシステム動作が開始される。実装されている場合には次へ進む。
【０１３５】
ステップＳ（４）２（＝ステップＳ（３）２）
ＣＰＵ装置５５は、ＲＯＭモジュール５１に格納されているｂｏｏｔプログラムに従ってダウンロード動作を開始する。
ステップＳ（４）３
ＣＰＵ装置５５は、ＥＥＰＲＯＭ５４の所定の領域に格納されている不良ブロック制御情報が有効かどうかを読み取る。有効な場合にはステップＳ（４）４へ進み、有効でない場合はステップＳ（４）５へ進む。この不良ブロック制御情報と有効かどうかの情報は後に説明する不良ブロックの初期化処理のプロセスで既に書き込まれている。
【０１３６】
ステップＳ（４）４
ＣＰＵ装置５５は、ＥＥＰＲＯＭ５４に格納されている不良ブロック制御情報を読み出して以降の処理に使用するためステップＳ（４）１０へ跳ぶ。
ステップＳ（４）５（＝ステップＳ（３）３）
ＣＰＵ装置５５は、フラッシュメモリ１の所定の部分を読み出して、プログラムが格納されているかどうかを判断する。プログラムが格納されていない場合（空の場合）にはステップＳ（４）６を通ってステップＳ（４）１０へ進み、格納されている場合にはステップＳ（４）７へ進む。
【０１３７】
ステップＳ（４）６
ＣＰＵ装置５５は、フラッシュメモリ１の不良ブロックを検出して不良ブロック制御情報としてＥＥＰＲＯＭ５４に書き込み不良ブロックの初期化を行う。このステップの詳細については後に他のフローチャートを用いて説明する。
ステップＳ（４）７（＝ステップＳ（３）４）
ＣＰＵ装置５５は、フラッシュメモリ１から不良ブロック制御情報を読み出す。このプロセスが不良ブロック制御情報取り込み手段に該当する。
このステップの詳細については実施例３のステップＳ（３）４（図１９）と全く同様なので説明を割愛する。
【０１３８】
ステップＳ（４）８
ＣＰＵ装置５５は、不良ブロック制御情報をＥＥＰＲＯＭ５４へ書き込む。
ステップＳ（４）９
ＣＰＵ装置５５は、ＥＥＰＲＯＭ５４へ書き込まれている不良ブロック制御情報が有効であることを示す情報をＥＥＰＲＯＭ５４へ書き込む。
【０１３９】
ステップＳ（４）１０（＝ステップＳ（３）５）
ＣＰＵ装置５５は、不良ブロック制御情報に基づいてフラッシュメモリ１の正常ブロックに格納されている情報の全てを消去する。このプロセスが正常ブロック消去手段に該当する。このステップの詳細については実施例３のステップＳ（３）５（図２０）と全く同様なので説明を割愛する。
【０１４０】
ステップＳ（４）１１（＝ステップＳ（３）６）
ＣＰＵ装置５５は、ＲＯＭモジュール５１に予め格納されているダウンロードプログラムを読み出してフラッシュメモリ１の正常ブロックに格納する。このプロセスが正常情報格納手段に該当する。このステップの詳細については実施例３のステップＳ（３）６（図２１）と全く同様なので説明を割愛する。
【０１４１】
ステップＳ（４）１２（＝ステップＳ（３）７）
ＣＰＵ装置５５は、ダウンロードプログラムをフラッシュメモリ１に全て格納した後、先頭不良ブロックを確認する。このプロセスが先頭不良ブロック確認手段に該当する。このステップの詳細については実施例３のステップＳ（３）７（図２３）と全く同様なので説明を割愛する。
ステップＳ（４）１３
ＣＰＵ装置５５は、上記ＥＥＰＲＯＭ５４へ書き込まれている不良ブロック制御情報が有効であることを示す情報をクリアしてフローを終了する。
【０１４２】
図２８は、不良ブロック初期化のフローチャート（その２）である。上記ステップＳ（４）６の詳細フローチャートである。
この処理は、フラッシュメモリ１にプログラムが未書き込みの場合にフラッシュメモリ１をチェックして初期化するための動作を表している。  図２８のステップＳ（４）６−１からステップＳ（４）６−１７に従って説明する。このプロセスは実施例３のフローチャート（図１８〜図２４）と類似しているので一部引用して説明する。
【０１４３】
ステップＳ（４）６−１（＝ステップＳ（３）９−１）
ＣＰＵ装置５５は、ＢＮｏに０を設定する。
ステップＳ（４）６−２（＝ステップＳ（３）９−２）
ＣＰＵ装置５５は、ＢＮｏを１インクリメントする。
ステップＳ（４）６−３（＝ステップＳ（３）９−３）
ＣＰＵ装置５５は、ＢＮｏにロードされているブロックのデータを読み出し、データの全てがＦＦであるかどうかを確認する。全てがＦＦでない場合には次のステップへ進む。全てがＦＦである場合には正常ブロックと判断してステップＳ（４）６−５へ跳ぶ。
【０１４４】
ステップＳ（４）６−４（＝ステップＳ（３）９−４）
ＣＰＵ装置５５は、ＢＮｏにロードされているブロックは不良ブロックと判断して、このブロックＮｏを不良ブロック情報へ登録する。
ステップＳ（４）９−５
ＣＰＵ装置５５は、ＢＮｏにロードされているブロックが最後のブロックかどうかを判断し、最後のブロックでない場合にはステップＳ（４）６−２へ戻って次のブロックへ進む。最後のブロックである場合には次のステップへ進む。以上のプロセスによって不良ブロック制御情報が生成されていることに留意すべきである。但し、フラッシュメモリ１は、未書き込みの場合には正常ブロックには全てＦＦが書き込まれているものとする。
【０１４５】
ステップＳ（４）６−６  ＣＰＵ装置５５は、不良ブロック制御情報をＥＥＰＲＯＭ５４へ書き込む。
ステップＳ（４）６−７
ＣＰＵ装置５５は、ＥＥＰＲＯＭ５４へ書き込まれている情報が有効であることを示す情報をＥＥＰＲＯＭ５４へ書き込む。ステップＳ（４）６−６とステップＳ（４）６−７が不良ブロック制御情報に該当する。
【０１４６】
ステップＳ（４）６−８（＝ステップＳ（３）９−６）
ＣＰＵ装置５５は、初期値としてＢＮｏに０を書き込む。
ステップＳ（４）６−９（＝ステップＳ（３）９−７）
ＣＰＵ装置５５は、ＢＮｏを１インクリメントする。
ステップＳ（４）６−１０（＝ステップＳ（３）９−８）
ＣＰＵ装置５５は、上記不良ブロック情報に基づいてＢＮｏにロードされているブロックが不良ブロックかどうかを判断する。不良ブロックである場合にはステップＳ（４）６−９へ戻って次のブロックへ進む。不良ブロックでない（正常ブロック）場合には次のステップへ進む。
【０１４７】
ステップＳ（４）６−１１（＝ステップＳ（３）９−９）
ＣＰＵ装置５５は、上記不良ブロック情報に基づいてＢＮｏ＋１にロードされているブロックが不良ブロックかどうかを判断する。不良ブロックである場合にはステップＳ（４）６−９へ戻って次のブロックへ進む。不良ブロックでない（正常ブロック）場合には次のステップへ進む。
【０１４８】
ステップＳ（４）６−１２（ステップＳ（３）９−１０）
上記ステップＳ（４）６−１０とステップＳ（４）６−１１を通過したことによりＢＮｏにロードされているブロックとＢＮｏ＋１にロードされているブロック対は先頭正常ブロック対であると判断されるので、ＢＮｏにロードされているブロックのブロックＮｏをＢＢＮｏに保持する。以下の点に留意すべきである。即ち、ステップＳ（４）６−８からステップＳ（４）６−１２のプロセスで先頭正常ブロック対を検出したことになる。
【０１４９】
ステップＳ（４）６−１３
ＣＰＵ装置５５は、ＢＮｏを０に設定するとともにｄｕｍｍｙＤａｔａ（ダミーデータ）に０Ｆを設定する。
ステップＳ（４）６−１４
ＣＰＵ装置５５は、ＢＮｏを１インクリメントするとともにｄｕｍｍｙＤａｔａ（ダミーデータ）に反転（インバート）データＦ０を設定する。
【０１５０】
ステップＳ（４）６−１５
ＣＰＵ装置５５は、ＢＮｏがＢＢＮｏが等しいかどうかを判断する。等しくなければステップＳ（４）６−１６で、ＢＮｏで示されるブロックに格納されているデータを消去し、更にステップＳ（４）６−１７でＢＮｏで示されるブロックの全ての領域にｄｕｍｍｙＤａｔａ（ダミーデータ）を書き込んでステップＳ（４）６−１４へ戻る。ＢＮｏがＢＢＮｏが等しくなればフローを終了する。
ここで以下の点に留意すべきである。即ち、上記ステップＳ（４）６−１２で先頭正常ブロック対が、検出される。この位置を明確にしておくためにステップＳ（４）６−１３以降でｄｕｍｍｙＤａｔａの挿入がなされている。
【０１５１】
以上説明した実施例４の記憶データアクセス装置では不良ブロック制御情報書き込み部、即ち、記憶部（フラッシュメモリ）の不良ブロック初期化手段に記憶部（フラッシュメモリ）とは異なる他の記憶部（ＥＥＰＲＯＭ）に上記記憶部の不良ブロック制御情報を書き込む不良ブロック制御情報書き込み部をさらに含ませることによって、何らかの事情によってフラッシュメモリに格納されている不良ブロック制御情報が失われてもシステム電源を再投入することでＥＥＰＲＯＭに格納されている不良ブロック制御情報に従ってダウンロードプログラムを正しくフラッシュメモリに書き込むことが可能になる。
【実施例５】
【０１５２】
本実施例は、実施例１の拡張例である。実施例１では所定の記憶部（フラッシュメモリ）内にある２ブロック連続して正常な先頭の正常ブロック対の各々に不良ブロック制御情報を含む同一情報をシステム電源ＯＮ前に予め格納しておく先頭正常ブロック対格納手段を含むことが前提であった。一方、本実施例では所定の記憶部（フラッシュメモリ）内にある所定数量の不良ブロックのみを挟み込んで連続する２個の正常ブロックの内で最先頭に位置する先頭正常ブロック集合の各々に不良ブロック制御情報を含む同一情報を前記システム電源投入前に予め格納しておく先頭正常ブロック集合格納手段を含むことが前提となる。かかる前提を許容するために本実施例は以下のように構成される。
【０１５３】
図２９は、実施例５の構成のブロック図である。
図２９より、実施例５の記憶データアクセス装置は、ＲＡＭ３と、ＲＡＭコントローラ４と、ＣＰＵ装置５と、システムバス６とフラッシュメモリ６１と、フラッシュメモリコントローラ６２と、を備える。
【０１５４】
フラッシュメモリ６１は、ＣＰＵ装置５を動作させるためのプログラムが予め格納されている記憶部である。フラッシュメモリ１は複数のブロックから構成され、この複数のブロックには正常ブロックと不良ブロックとが含まれている。記憶データアクセス装置では、不良ブロックを正確に認識して排除し、正常ブロックのみから情報を読み出すことが不可欠となる。
【０１５５】
かかる目的を達成するための不良ブロック制御情報が予め格納されている部分でもある。本実施例では、先頭正常ブロック集合の各々に不良ブロック制御情報を含む同一情報をシステム電源投入前に予め格納される先頭正常ブロック集合格納手段６１ａを備えている。ここで先頭正常ブロック集合とは所定の記憶部内（フラッシュメモリ）にある所定数量（一例として３個と定める）の不良ブロックのみを挟み込んで連続する２個の正常ブロックの内で最先頭に位置するものを言う。この２個の正常ブロックの間に他の正常ブロックが含まれることは認められないものとする。
【０１５６】
フラッシュメモリコントローラ６２は、上記フラッシュメモリ６１とシステムバス６との間に配置され、ＣＰＵ装置５を動作させるためのプログラムをフラッシュメモリ１からＲＡＭ３へ転送する制御ブロックである。
かかる目的を達成するためにシステム電源ＯＮ後に上記先頭正常ブロック集合を検出するための先頭正常ブロック集合検出手段６２ａと、検出された先頭正常ブロック集合から上記不良ブロック制御情報を読み出す不良ブロック制御情報読み出し手段６２ｂと、上記不良ブロック制御情報に基づいて正常ブロックに格納されている情報のみをフラッシュメモリ６１からＲＡＭ３へ転送する正常情報ローディング手段６２ｃとを備える。
他の構成部分は実施例１と同様なので説明を割愛する。
【０１５７】
実施例５の動作について説明する。
実施例５の動作の詳細について説明する前に動作説明に必要な基本概念について説明する。
図３０は、実施例５の動作説明の基本概念説明図である。
図３０の（ａ）は、複数のブロックから構成されるフラッシュメモリ１（図２８）の内容を説明する図である。ブロックＮｏは、説明のために設けた番号である。ここに示されている不良ブロックと正常ブロックとの配置は一例に過ぎない。
【０１５８】
図３０の（ｂ）は、先頭の正常ブロック集合の検出原理を説明する図である。フラッシュメモリコントローラ６２（図２９）は、図３０の（ａ）において、ブロックＮｏ１を固定してブロックＮｏ１に格納されているデータとブロックＮｏ２〜ブロックＮｏ５に格納されているデータとを順次比較するがデータは一致しない。次にブロックＮｏ２とブロックＮｏ３を比較するがデータは一致しない。更にブロックＮｏ２とブロックＮｏ４を比較するとデータが一致する。従ってブロックＮｏ２とブロックＮｏ４とを先頭正常ブロック集合とし、この２個の正常ブロックに不良ブロック制御情報が格納される。不良ブロック制御情報には、上記所定の記憶部に備える全ブロックの数を表す全ブロック数情報と、上記全ブロックの先頭から順番に正常ブロックと不良ブロックとに区別する符号列からなる不良ブロック情報とを含むものとする。
【０１５９】
以上で実施例５の動作説明に必要な基本概念についての説明を終了したので、他の図を用いて実施例の動作の詳細についてフローチャートを用いて説明する。
図３１は、実施例５のフローチャートである。
図３２は、実施例５のフラッシュメモリコントローラのブロック図である。
【０１６０】
図３１のステップＳ（５）０からステップＳ（５）１４に従って、必要に応じて図３２を一部引用しながら説明する。
ステップＳ（５）０
フラッシュメモリ６１に先頭正常ブロック集合に上記全ブロック数情報と不良ブロック情報が予め格納される。このステップは、先頭正常ブロック集合格納手段に該当する。実施例５の動作の前提となるステップであり、動作開始の予備ステップである。以後システム電源がＯＮされ動作が開始される。
【０１６１】
ステップＳ（５）１
既に説明した図３０（ｂ）の比較対照としてブロックＮｏ１がＢＮｏ１としてＢｌｏｃｋＡＤＲ（１）１５にロードされる。
ステップＳ（５）２
同様にして直後に続くブロックとしてブロックＮｏ２がＮＢＮｏ（ＢＮｏ＋１）として、ＢｌｏｃｋＡＤＲ（２）１１にロードされる。
【０１６２】
ステップＳ（５）３
ブロック比較回数４（一例）がＢＣに設定される。
ステップＳ（５）４
ＢＮｏのデータとＮＢＮｏのデータが比較され全て一致したときはステップＳ（５）８へ跳び、１個でも一致しないときは次へ進む。
ステップＳ（５）５
ＮＢＮｏが１インクリメントされ、ＢＣが１ディクリメントされて次へ進む。
【０１６３】
ステップＳ（５）６
ＢＣが０の場合はステップＳ（５）４へ戻って次のブロックへ進む。
ステップＳ（５）７
ＢＮｏが１インクリメントされてステップＳ（１）２へ戻る。
以上のステップを繰り返しながら先頭正常ブロック集合が検出されるとステップＳ（５）８へ抜ける。ステップＳ（５）１からステップＳ（５）７に至る繰り返しステップが先頭正常ブロック集合検出手段に該当する。
【０１６４】
ステップＳ（５）８
ＢＮｏへＮＢＮｏが移される。
ステップＳ（５）９
ＢＮｏのブロックから全ブロック数情報と不良ブロック情報が読み出され全ブロック数情報がＢｌｏｃｋＣＮＴ２５へ、不良ブロック情報がＳｈｉｆｔＲＥＧ２４へ、それぞれ取り込まれる。ステップＳ（５）８とステップＳ（５）９が不良ブロック制御情報読み出し手段に該当する。
【０１６５】
ステップＳ（５）１０
ＳｈｉｆｔＲＥＧ２４が１ビットシフトされる。
ステップＳ（５）１１
ＳｈｉｆｔＲＥＧ２４から符号０（不良ブロック）が出力された場合はステップＳ（５）１３へ跳び、符号１（正常ブロック）が出力された場合には次へ進む。
ステップＳ（５）１２
ＢＮｏのブロックのデータを読み出してシステムバス６及びＲＡＭコントローラ３を通ってＲＡＭ３（図２９）に書き込まれる。
【０１６６】
ステップＳ（５）１３
ＢｌｏｃｋＣＮＴ２５が１ディクリメントされる。更に、ＢＮｏが１インクリメントされてＢＮｏ＋１となる。
ステップＳ（５）１４
ＢｌｏｃｋＣＮＴ２５が０でなければステップＳ（５）１０へ戻ってステップＳ（５）１０からステップＳ（５）１４までを繰り返す。ＢｌｏｃｋＣＮＴ２５が０になったときフローを終了し、ＣＰＵ装置５（図２９）はＲＡＭ３（図２９）へのアクセスを開始する。ステップＳ（５）１０からステップＳ（５）１４までのステップが正常情報ローディング手段に該当する。
【０１６７】
次にタイムチャートと上記図３２を用いて実施例５の動作について説明する。
図３３は、実施例５のタイムチャートである。
図３３は、最上段から順番に時刻、リセット、ＢｌｏｃｋＡＤＲ（１）（ＢＮｏに該当する）１５（図３２）、ＢｌｏｃｋＡＤＲ（２）（ＮＢＮｏに該当する）、１１（図３２）、ＡＤＲＲＥＧ１７１（図３２）、ＡＤＲＣＮＴ（１）１３（図３１）、ＣＭＰ（１）２３（図３２）、ＣＭＰ（２）１２（図３２）、ＣＮＴ１７３（図３２）（ＢＣに該当）の状態を表している。
【０１６８】
時刻ｔ３００〜時刻ｔ３０２
システム電源ＯＮ後にシステム全体がリセットされる。
時刻ｔ３０３
ＢｌｏｃｋＡＤＲ（１）（ＢＮｏに該当する）１５、にはブロック１のデータの先頭アドレス０がロードされる。この状態はステップＳ（５）１に該当する。ＢｌｏｃｋＳｉｚｅＲＥＧ１９にはフラッシュメモリのサイズｎが初期値としてロードされる。制御回路２７はＡＤＤ１８を稼働させてＢｌｏｃｋＡＤＲ（１）１５の値０とＢｌｏｃｋＳｉｚｅＲＥＧ１９の値ｎとを加算した値ｎをＢｌｏｃｋＡＤＲ（２）（ＮＢＮｏに該当する）１１にロードする。即ち、この値はブロック２のデータの先頭アドレスとなる。同時に制御回路２７は、ＭＵＸ（２）１６とＡＤＲＣＮＴ（１）１３を稼働させてフラッシュアクセス制御２０を介してフラッシュメモリ１からのデータｄ０をシステムバス６上へ読み出す。以下順次データを読み出して比較する。時刻ｔ３１１まではブロック１のデータｄ０〜とブロック２のデータｄｎ〜が等しいとする。従って、ＣＭＰ（２３）が１を出力している。
【０１６９】
時刻ｔ３１２
制御回路１７４は、ＣＭＰ（１）２３を稼働させてＤａｔａＲＥＧ（１）２１にラッチされているｄｉのデータ（ブロック１のデータ）とＤａｔａＲＥＧ（２）２２にラッチされているｄｎ＋ｉのデータ（ブロック２のデータ）とを比較する。ｄｉのデータとｄｎ＋ｉのデータとが等しい場合にＣＭＰ（１）２３は１を出力し、等しくない場合には０を出力するので、ここでは等しくないと仮定して０を出力する。
【０１７０】
時刻ｔ３１３
制御回路１７４は、ブロック１のデータとブロック３のデータとを比較をするためＡＤＲＲＥＧ１７１にブロック３のデータの先頭アドレス２ｎをロードする。同時にＣＮＴ１７３を１ディクリメントして３にする。以下同様にデータ比較を続ける。時刻ｔ３２１までは一致しているものと仮定する。
【０１７１】
時刻ｔ３２２
制御回路１７４は、ＣＭＰ（１）２３を稼働させてＤａｔａＲＥＧ（１）２１にラッチされているｄｊのデータ（ブロック１のデータ）とＤａｔａＲＥＧ（２）２２にラッチされているｄ２ｎ＋ｊのデータ（ブロック３のデータ）とを比較する。ｄｊのデータとｄ２ｎ＋ｊのデータとが等しい場合にＣＭＰ（１）２３は１を出力し、等しくない場合には０を出力する。ここでは等しくないと仮定して０を出力する。
【０１７２】
時刻ｔ３２３〜時刻ｔ３２９
以下同様にしてブロック１のデータとブロック３及びブロック４のデータを比較する。ここでもブロック１のデータとブロック３及びブロック４のデータは一致しないと仮定する。更に、続けてブロック１のデータとブロック５のデータを比較する。
【０１７３】
時刻ｔ３３０
ＣＮＴ１７３が０になるので制御回路１７４は、ＢｌｏｃｋＡＤＲ（２）１１をＢｌｏｃｋＡＤＲ（１）１５へロードする。以下時刻ｔ３００以降の動作が繰り返される。
このようにして図３１のステップＳ（５）１〜ステップＳ（５）７に示す先頭正常ブロック集合検出手段が実行される。ステップＳ（５）８以降は、実施例１のタイムチャート（その３）と同様なので説明を割愛する。
【０１７４】
以上説明した実施例５の記憶データアクセス装置ではフラッシュメモリの第一のブロック１とそれに続く所定の数の第二のブロックのデータを比較し、データが一致しない場合には第一のブロックを第一のブロックに続く次のブロックとして同様の比較を行うことにより、正常なブロックと正常なブロックの間に不良ブロックがあっても正常なブロックを検出することが可能であり正常なブロックが連続する必要がないので、連続しない正常ブロックを不良ブロックとする必要がないのでフラッシュメモリを有効に活用できる。
【実施例６】
【０１７５】
本実施例は、上記実施例３の拡張例である。ブロック構成は実施例３と全く同様であり制御方法が異なる。即ち、実施例３では所定の記憶部（フラッシュメモリ）内にある２ブロック連続して正常な先頭の正常ブロック対の各々に不良ブロック制御情報を含む同一情報をシステム電源投入前に予め格納しておく先頭正常ブロック対格納手段を含むことが前提であった。一方、本実施例では所定の記憶部（フラッシュメモリ）内にある所定数量の不良ブロックのみを挟み込んで連続する２個の正常ブロックの内で最先頭に位置する先頭正常ブロック集合の各々に各々に不良ブロック制御情報を含む同一情報を前記システム電源投入前に予め格納しておく先頭正常ブロック集合格納手段を含むことが前提となる。
【０１７６】
実施例３と異なる部分フローチャートについて以下に説明する。  図３４は、不良ブロック制御情報取り込み手段のフローチャート（その２）である。
実施例３のステップＳ（３）４の詳細フローチャートに該当する部分である。
図３４のステップＳ（６）１からステップＳ（６）７に従って説明する。
【０１７７】
ステップＳ（６）１
ＣＰＵ装置５０は、第一のブロックの番号を示すＢＮｏに１をロードする。
ステップＳ（６）２
ＣＰＵ装置５０は、第二のブロックの番号を示すＮＢＮｏにＢＮｏ＋１をロードしブロックカウントＢＣに４をロードする。
ステップＳ（６）３
ＢＮｏ＋１とＮＢＮｏのデータを比較する。データが一致すればステップＳ（６）７へ進み、データが１個でも異なればステップＳ（６）４へ進む。
【０１７８】
ステップＳ（６）４
ＣＰＵ装置５０は、第二のブロック番号ＮＢＮｏを１インクリメントすると共にＢＣを１ディクリメントする。
ステップＳ（６）５
ＣＰＵ装置５０は、ＢＣが０でなければステップＳ（６）２へ戻って同じ動作を繰り返し、ＢＣが０になったときは次へ進む。
【０１７９】
ステップＳ（６）６
ＣＰＵ装置５０は、第一のブロック番号を更新するためにＢＮｏを１インクリメントしてステップＳ（６）２へ戻る。
ステップＳ（６）７
ＢＮｏのブロックの所定の領域に格納されている不良ブロック制御情報を読み出してフローを終了する。
【０１８０】
図３５は、正常情報格納手段のフローチャート（その２）である。
図３６は、正常情報格納手段のフローチャート（その３）である。
実施例３のステップＳ（３）６に該当する部分である。
図３５のステップＳ（６）１１からステップＳ（６）１９、及び図３６のステップＳ（６）２０からステップＳ（６）２７に従って説明する。
ステップＳ（６）１１
ＣＰＵ装置５０は、ＢＮｏに０を設定する。
【０１８１】
ステップＳ（６）１２
ＣＰＵ装置５０は、ＢＮｏで示されるブロックＮｏを１インクリメントする。
ステップＳ（６）１３
ＣＰＵ装置５０は、ＢＮｏで示されるブロックが不良ブロックであるかどうかを判断する。不良ブロックである場合にはステップＳ（６）１２へ戻って次のブロックへ進む。不良ブロックでない場合には次のステップへ進む。
【０１８２】
ステップＳ（６）１４
ＣＰＵ装置５０は、第一のブロック番号を表すＢＮｏに次のブロック番号であるＢＮｏ＋１をロードすると共にブロックカウンタＢＣに４をロードする。
ステップＳ（６）１５
ＢＮｏ＋１で示されるブロックが不良ブロックであるかどうかを判断する。不良ブロックでない場合にはステップＳ（６）１８へ進み、不良ブロックである場合には次へ進む。
【０１８３】
ステップＳ（６）１６
ＣＰＵ装置５０は、第二のブロックの番号をインクリメントすると共にＢＣをディクリメントする。
ステップＳ（６）１７
ＣＰＵ装置５０は、ＢＣが０かどうかを確認し、０でない場合にはステップＳ（６）１５へ戻り、０の場合には第一のブロックの番号を更新するためにステップＳ（６）１２へ戻る。ここまでのステップが先頭正常ブロック集合作成位置検出部に該当する。
【０１８４】
ステップＳ（６）１９
ＣＰＵ装置５０は、ＲＯＭモジュール４１に格納されているダウンロードプログラムにおいてフラッシュメモリ１に未書き込みのデータを読み出してＢＮｏにロードされているブロックに書き込む。同様に、このデータと同じデータをＢＮｏ＋１にロードされているブロックに書き込む。このプロセスが先頭正常ブロック集合書き込み部に該当する。以下図３６へ進む。
【０１８５】
ステップＳ（６）２０
ＣＰＵ装置５０は、更に、ＢＮｏを１インクリメントする。
ステップＳ（６）２１
ＣＰＵ装置５０は、ＢＮｏにロードされているブロックが不良ブロックであるかどうかを判断する。不良ブロックである場合には  ステップＳ（６）２１に戻って次のブロックへ進む。不良ブロックでない場合には次のステップへ進む。
【０１８６】
ステップＳ（６）２２
ＣＰＵ装置５０は、ＲＯＭモジュール４１に格納されているダウンロードプログラム４１−２においてフラッシュメモリ１に未書き込みのデータを読み出してＢＮｏに書き込む。
ステップＳ（６）２３  ＣＰＵ装置５０はＢＮｏロードされているブロックに書き込まれているデータを読み込むかあるいは又フラッシュメモリ１のステータスを確認する等してデータの書き込みが正常に終了したかどうかを判断する。データの書き込みが正常に終了した場合にステップＳ（６）２５へ跳び、正常に終了していない場合は次へ進む。
【０１８７】
ステップＳ（６）２４
ＣＰＵ装置５０は、ＢＮｏにロードされているブロックを不良ブロックとして不良ブロック情報を更新すると共に、このブロックに書き込まれたダウンロードプログラムは未書き込みとしてステップＳ（６）２０へ戻って次のブロックへ進む。
【０１８８】
ステップＳ（６）２５
ＣＰＵ装置５０は、ダウンロードプログラムの全てがフラッシュメモリ１に書き込まれたかどうかを判断する。全てがフラッシュメモリ１に書き込まれたと判断した場合にはステップＳ（６）２０へ進み、まだ書き込まれていないと判断した場合にはステップＳ（６）２０へ戻って次のブロックへ進む。
【０１８９】
ステップＳ（６）２６
ＣＰＵ装置５０は、先頭正常ブロック対となるＢＢＮｏにロードされているブロックとＢＢＮｏ＋１にロードされているブロックの所定の領域にフラッシュメモリの全ブロックの個数を格納する。
ステップＳ（６）２７
ＣＰＵ装置５０は、先頭正常ブロック対となるＢＢＮｏにロードされているブロックとＢＢＮｏ＋１にロードされているブロックの所定の領域にフラッシュメモリの不良ブロック情報を格納してフローを終了する。
【０１９０】
図３７は、先頭不良ブロック確認手段のフローチャート（その２）である。実施例３のステップＳ（３）７に該当する部分である。
図３７のステップＳ（６）３１からステップＳ（６）３９に従って説明する。
ステップＳ（６）３１
ＣＰＵ装置５０は、第二のブロックの番号を示すＮＢＮｏをＮＢＢＮｏにロードする。
ステップＳ（６）３２
ＣＰＵ装置５０は、第一のブロックの番号を示すＢＮｏに１をロードする。
【０１９１】
ステップＳ（６）３３
ＣＰＵ装置５０は、第二のブロックの番号を示すＮＢＮｏにＢＮｏ＋１をロードしブロックカウントＢＣに４をロードする。
ステップＳ（６）３４
ＣＰＵ装置５０は、ＢＮｏ＋１とＮＢＮｏのデータを比較する。データが一致すればステップＳ（６）３８へ進み、データが１個でも異なればステップＳ（６）３５へ進む。
【０１９２】
ステップＳ（６）３５
ＣＰＵ装置５０は、第二のブロック番号ＮＢＮｏを１インクリメントすると共にＢＣを１ディクリメントする。
ステップＳ（６）３６
ＣＰＵ装置５０は、ＢＣが０でなければステップＳ（６）２へ戻って同じ動作を繰り返し、ＢＣが０になったときは次へ進む。
【０１９３】
ステップＳ（６）３７
ＣＰＵ装置５０は、第一のブロック番号を更新するためにＢＮｏを１インクリメントしてステップＳ（６）３３へ戻る。
ステップＳ（６）３８
ＣＰＵ装置５０は、ＢＮｏ＝ＢＢＮｏとＮＢＮｏ＝ＮＢＢＮｏが成立しているかどうかを調べる。成立している場合にはフローを終了し成立していない場合には次へ進む。
ステップＳ（６）３９
先頭正常ブロックの前にある不良ブロックへの初期化が失敗しており、フラッシュメモリ不良と判断してフローを終了する。
【０１９４】
図３８は、不良ブロック初期化のフローチャート（その３）である。
図３９は、不良ブロック初期化のフローチャート（その４）である。
実施例３のステップＳ（３）９に該当する部分である。
この処理は、フラッシュメモリ１にプログラムが未書き込みの場合にフラッシュメモリ１をチェックして初期化するための動作を表している。
図３８のステップＳ（６）４１からステップＳ（６）５８、及び図３９のステップＳ（６）５９からステップＳ（６）６２に従って説明する。
ステップＳ（６）４１
ＣＰＵ装置５０は、ＢＮｏに０を設定する。
【０１９５】
ステップＳ（６）４２
ＣＰＵ装置５０は、ＢＮｏを１インクリメントする。
ステップＳ（６）４３
ＣＰＵ装置５０は、ＢＮｏにロードされているブロックのデータを読み出し、データの全てがＦＦであるかどうかを確認する。全てがＦＦでない場合には次のステップへ進む。全てがＦＦである場合には正常ブロックと判断してステップＳ（６）４５へ跳ぶ。
【０１９６】
ステップＳ（６）４４
ＣＰＵ装置５０は、ＢＮｏにロードされているブロックは不良ブロックと判断して、このブロックＮｏを不良ブロック情報へ登録する。
ステップＳ（６）４５
ＣＰＵ装置５０は、ＢＮｏにロードされているブロックが最後のブロックかどうかを判断し、最後のブロックでない場合にはステップＳ（６）４２へ戻って次のブロックへ進む。最後のブロックである場合には次のステップへ進む。以上のプロセスによって不良ブロック情報が生成されていることに留意すべきである。但し、フラッシュメモリ１は、未書き込みの場合には正常ブロックには全てＦＦが書き込まれているものとする。
【０１９７】
ステップＳ（６）４６
ＣＰＵ装置５０は、初期値としてＢＮｏに０を書き込む。
ステップＳ（６）４７
ＣＰＵ装置５０は、ＢＮｏを１インクリメントする。
ステップＳ（６）４８
ＣＰＵ装置５０は、上記不良ブロック情報に基づいてＢＮｏにロードされているブロックが不良ブロックかどうかを判断する。不良ブロックである場合にはステップＳ（６）４７へ戻って次のブロックへ進む。不良ブロックでない（正常ブロック）場合には次のステップへ進む。
【０１９８】
ステップＳ（６）４９
ＣＰＵ装置５０は、第一のブロック番号を表すＢＮｏの次のブロック番号であるＢＮｏ＋１をロードすると共にブロックカウンタＢＣに４をロードする。
ステップＳ（６）５０
ＣＰＵ装置５０は、ＢＮｏ＋１で示されるブロックが不良ブロックであるかどうかを判断する。不良ブロックでない場合にはステップＳ（６）５３へ進み、不良ブロックである場合には次へ進む。
【０１９９】
ステップＳ（６）５１
ＣＰＵ装置５０は、第二のブロックの番号をインクリメントすると共にＢＣをディクリメントする。
ステップＳ（６）５２
ＣＰＵ装置５０は、ＢＣが０かどうかを確認し、０でない場合にはステップＳ（６）５０へ戻り、０の場合には第一のブロックの番号を更新するためにステップＳ（６）４７へ戻る。
【０２００】
ステップＳ（６）５３
上記ステップＳ（６）６８とステップＳ（６）５０を通過したことによりＢＮｏにロードされているブロックとＢＮｏ＋１にロードされているブロック対は先頭正常ブロック集合であると判断されるので、ＢＮｏにロードされているブロックのブロックＮｏをＢＢＮｏに保持する。以下の点に留意すべきである。即ち、上記プロセスによって先頭正常ブロック集合を検出したことになる。
【０２０１】
ステップＳ（６）５４  ＣＰＵ装置５０は、ＢＮｏを０に設定するとともにｄｕｍｍｙＤａｔａ（ダミーデータ）に０Ｆを設定する。
ステップＳ（６）５５
ＣＰＵ装置５０は、ＢＮｏを１インクリメントするとともにｄｕｍｍｙＤａｔａ（ダミーデータ）にｄｕｍｍｙＤａｔａ０１を加算する。
【０２０２】
ステップＳ（６）５６
ＣＰＵ装置５０は、ＢＮｏがＢＢＮｏが等しいかどうかを判断する。もし等しければステップＳ（６）５９（図３９）へ進む。等しくなければ次のステップへ進む。
ステップＳ（６）５７
ＢＮｏに格納されているデータを消去し、更にステップＳ（６）５８でＢＮｏで示されるブロックの全ての領域にｄｕｍｍｙＤａｔａ（ダミーデータ）を書き込んでステップＳ（６）５５へ戻る。
ステップＳ（６）５９（図３９）
ＣＰＵ装置５０は、ＢＮｏを１インクリメントするとともにｄｕｍｍｙＤａｔａ（ダミーデータ）０１を加算する。
【０２０３】
ステップＳ（６）６０
ＣＰＵ装置５０は、ＢＮｏとＮＢＮｏを比較して等しい場合には初期化処理を終了する。
ステップＳ（６）６１
ＢＮｏに格納されているデータを消去し、更にステップＳ（６）６２でＢＮｏで示されるブロックの全ての領域にｄｕｍｍｙＤａｔａ（ダミーデータ）を書き込んでステップＳ（６）５９へ戻る。
ここで以下の点に留意すべきである。即ち、上記ステップＳ（６）５３で先頭正常ブロック集合が、検出される。この位置を明確にしておくためにステップＳ（６）５５以降でｄｕｍｍｙＤａｔａの挿入がなされている。      
【０２０４】
以上説明した実施例６の記憶データアクセス装置では実施例３の効果に加えて、更に、フラッシュメモリの第一のブロック１とそれに続く所定の数の第二のブロックのデータを比較し、データが一致しない場合には第一のブロックを第一のブロックに続く次のブロックとして同様の比較を行うことにより、正常なブロックと正常なブロックの間に不良ブロックがあっても正常なブロックを検出することが可能であり正常なブロックが連続する必要がないので、連続しない正常ブロックを不良ブロックとする必要がなくなるためフラッシュメモリを有効に活用できる。
【実施例７】
【０２０５】
本実施例は、先頭正常ブロック対（実施例１）に換えて上記所定の記憶部（フラッシュメモリ）内にある先頭の正常ブロック内に同一データが２個連続する同一データ対のみを予め格納する先頭ブロック内同一データ対格納手段を備える点において、実施例１と異なる。
図４０は、実施例７の構成のブロック図である。
図４０より、実施例７の記憶データアクセス装置は、フラッシュメモリ７１と、フラッシュメモリコントローラ７２と、ＲＡＭ３と、ＲＡＭコントローラ４と、ＣＰＵ装置５と、システムバス６とを備える。
【０２０６】
フラッシュメモリ７１は、ＣＰＵ装置５を動作させるためのプログラムが予め格納されている記憶部である。フラッシュメモリ７１は複数のブロックから構成され、この複数のブロックには正常ブロックと不良ブロックとが含まれている。記憶データアクセス装置では、不良ブロックを正確に認識して排除し、正常ブロックのみから情報を読み出すことが不可欠となる。
【０２０７】
かかる目的を達成するための不良ブロック制御情報が予め格納されている部分でもある。本実施例では、先頭の正常ブロック内に同一データが２個連続する同一データ対のみを予め格納する先頭正常ブロック内同一データ対格納手段７１ａを備える。その同一データ対の各々に不良ブロック制御情報が含まれている。
フラッシュメモリコントローラ７２は、上記フラッシュメモリ７１とシステムバス６との間に配置され、ＣＰＵ装置５を動作させるためのプログラムをフラッシュメモリ１からＲＡＭ３へ転送する制御ブロックである。
【０２０８】
かかる目的を達成するためにシステム電源ＯＮ後に上記先頭正常ブロックを検出するための先頭正常ブロック検出手段７２ａと、検出された同一データ対から上記不良ブロック制御情報を読み出す不良ブロック制御情報読み出し手段７２ｂと、上記不良ブロック制御情報に基づいて正常情報のみをフラッシュメモリ１からＲＡＭ３へ転送する正常情報ローディング手段７２ｃとを備える。
その他の構成部分は実施例１と同様なので説明を割愛する。
【０２０９】
実施例７の動作について説明する。
図４１は、実施例７のフローチャートである。
図４２は、実施例７のフラッシュメモリコントローラのブロック図である。
図４１のステップＳ（７）０からステップＳ（７）１０に従って、必要に応じて図４１を一部引用しながら説明する。
【０２１０】
ステップＳ（７）０
フラッシュメモリ１の先頭正常ブロック内同一データ対に上記全ブロック数情報と不良ブロック情報が予め格納される。このステップは、先頭正常ブロック内同一データ対格納手段に該当する。実施例７の動作の前提となるステップであり、動作開始の予備ステップである。以後システム電源がＯＮされ動作が開始される。
【０２１１】
ステップＳ（７）１
ブロックＮｏ１がＢＮｏ１としてＢｌｏｃｋＡＤＲ（１）１５にロードされる。
ステップＳ（７）２
同様にして直後に続くブロックとしてブロックＮｏ２がＮＢＮｏ（ＢＮｏ＋１）にＢｌｏｃｋＡＤＲ（２）１１としてロードされる。
【０２１２】
ステップＳ（７）３
ＢＮｏブロック内の連続するデータ対に格納されているデータが等しいかどうか比較される。即ち、ｄ０のデータとｄ１のデータが等しいかどうか、続いてｄ２のデータとｄ３のデータが等しいかどうか…以下同様に比較される。ＢＮｏ内のデータ対が比較され全て一致したときはステップＳ（７）５へ跳び、１個でも一致しないときは次へ進む。
【０２１３】
ステップＳ（７）４
ＢＮｏが１インクリメントされてステップＳ（７）２へ戻る。
以上のステップを繰り返しながら先頭正常ブロックが検出されるとステップＳ（７）５へ抜ける。ステップＳ（７）１からステップＳ（７）４に至る繰り返しステップが先頭正常ブロック検出手段に該当する。
【０２１４】
ステップＳ（７）５
ＢＮｏのブロックから全ブロック数情報と不良ブロック情報が読み出され全ブロック数情報がＢｌｏｃｋＣＮＴ２５へ、不良ブロック情報がＳｈｉｆｔＲＥＧ２４へ、それぞれ取り込まれる。ステップＳ（７）５が不良ブロック制御情報読み出し手段に該当する。ここで留意すべき点は以下の通りである。
読み取るべき情報は同一データ対に格納されているのでデータは、一つおきに読み出されなければならない。
【０２１５】
ステップＳ（７）６
ＳｈｉｆｔＲＥＧ２４が１ビットシフトされる。
ステップＳ（７）７
ＳｈｉｆｔＲＥＧ２４から符号０（不良ブロック）が出力された場合はステップＳ（７）９へ跳び、符号１（正常ブロック）が出力された場合には次へ進む。
ステップＳ（７）８
ＢＮｏのブロックのデータを読み出してシステムバス６及びＲＡＭコントローラ３（図４０）を通ってＲＡＭ３（図４０）に書き込まれる。ここで留意すべき点は以下の通りである。
先頭正常ブロックのみでは読み取るべき情報が、同一データ対に格納されているのでデータは、一つおきに読み出されなければならない。
【０２１６】
ステップＳ（７）９
ＢｌｏｃｋＣＮＴ２５が１ディクリメントされる。更に、ＢＮｏが１インクリメントされてＢＮｏ＋１となる。
ステップＳ（７）１０
ＢｌｏｃｋＣＮＴ２５が０でなければステップＳ（７）６へ戻ってステップＳ（７）６からステップＳ（７）１０までを繰り返し、ＢｌｏｃｋＣＮＴ２５が０になったときフローを終了し、ＣＰＵ装置５（図４０）はＲＡＭ３（図４０）へのアクセスを開始する。ステップＳ（７）６からステップＳ（７）１０までのステップが正常情報ローディング手段に該当する。
【０２１７】
次にタイムチャートと上記図４２を用いて実施例７の動作について説明する。
図４３は、実施例７のタイムチャート（その１）である。
図４４は、実施例７のタイムチャート（その２）である。
図４５は、実施例７のタイムチャート（その３）である。
図４３と図４４は最上段から順番に時刻、リセット、ＢｌｏｃｋＡＤＲ（１）（ＢＮｏに該当する）１５（図４２）、ＢｌｏｃｋＡＤＲ（２）１１（図４２）（ＮＢＮｏに該当する）、ＡＤＲＣＮＴ（１）１３（図４２）、Ｄａｔａ、ＤａｔａＲＥＧ（１）（図４２）、ＤａｔａＲＥＧ（２）（図４２）、ＣＭＰ（１）２３（図４２）、ＣＭＰ（２）１２（図４２）、の状態を表している。
【０２１８】
図４５は、最上段から順番に時刻、リセット、ＢｌｏｃｋＡＤＲ（１）（ＢＮｏに該当する）１５（図４２）、ＢｌｏｃｋＡＤＲ（２）１１（図４２）（ＮＢＮｏに該当する）、ＡＤＲＣＮＴ（１）１３（図４２）、Ｄａｔａ、ＤａｔａＲＥＧ（１）（図４２）、ＡＤＲＣＮＴ（３）２６（図４２）、ＣＭＰ（２）１２（図４２）、ＳｈｉｆｔＲＥＧ２４（図４２）、ＢｌｏｃｋＣＮＴ２５（図４２）、の状態を表している。
【０２１９】
時刻ｔ４００〜時刻ｔ４０２
システム電源ＯＮ後にシステム全体がリセットされる。
時刻ｔ４０３
ＢｌｏｃｋＡＤＲ（１）（ＢＮｏに該当する）１５、にはブロック１のデータの先頭アドレス０がロードされる。この状態はステップＳ（７）１に該当する。ＢｌｏｃｋＳｉｚｅＲＥＧ１９にはフラッシュメモリのサイズｎが初期値としてロードされる。制御回路２００はＡＤＤ１８を稼働させてＢｌｏｃｋＡＤＲ（１）１５の値０とＢｌｏｃｋＳｉｚｅＲＥＧ１９の値ｎとを加算した値ｎをＢｌｏｃｋＡＤＲ（２）（ＮＢＮｏに該当する）１１にロードする。即ち、この値はブロック２のデータの先頭アドレスとなる。同時に制御回路２００は、ＭＵＸ（２）１６とＡＤＲＣＮＴ（１）１３を稼働させてフラッシュアクセス制御２０を介してフラッシュメモリ１からｄ０のデータをシステムバス６上へ読み出す（Ｄａｔａ）。
【０２２０】
時刻ｔ４０４
制御回路２００は、ｄ０のデータをＤａｔａＲＥＧ（１）２１にラッチする。同時にＡＤＤ１８を１インクリメントしＭＵＸ（２）を稼働してＡＤＤ１８の出力１を出力させ、フラッシュアクセス制御２０を介してフラッシュメモリ１からｄ１をシステムバス６上へ読み出す（Ｄａｔａ）。
【０２２１】
時刻ｔ４０５
制御回路２００は、ｄ１のデータをＤａｔａＲＥＧ（２）２２にラッチする。次のデータを取り出すためにＡＤＲＣＮＴ（１）を１インクリメントし、同時にＭＵＸ（２）を稼働してＡＤＤ１８の出力２を出力させ、フラッシュアクセス制御２０を介してフラッシュメモリ１からｄ２のデータをシステムバス６上へ読み出す（Ｄａｔａ）。
【０２２２】
時刻ｔ４０６
制御回路２００は、ＣＭＰ（１）２３を稼働させてＤａｔａＲＥＧ（１）２１にラッチされているｄ０のデータとＤａｔａＲＥＧ（２）２２にラッチされているｄ１のデータとを比較する。ｄ０のデータとｄ１のデータとが等しい場合にＣＭＰ（１）２３は１を出力し、等しくない場合には０を出力する。ここでは等しいと仮定して１を出力する。同時にシステムバス６上のｄ２のデータをＤａｔａＲＥＧ（１）にラッチする。更に、次のデータを取り出すためにＡＤＲＣＮＴ（１）を１インクリメントし、同時にＭＵＸ（２）を稼働してＡＤＤ１８の出力３を出力させ、フラッシュアクセス制御２０を介してフラッシュメモリ１からｄ３のデータをシステムバス６上に読み出す（Ｄａｔａ）。
【０２２３】
時刻ｔ４０７
制御回路２００は、ｄ３のデータをＤａｔａＲＥＧ（２）にラッチする。次のデータを取り出すためにＡＤＲＣＮＴ（１）を１インクリメントして４とし、同時にＭＵＸ（２）を稼働して４を出力させ、フラッシュアクセス制御２０を介してフラッシュメモリ１からｄ４のデータをシステムバス上へ読み出す（Ｄａｔａ）。
【０２２４】
時刻ｔ４０８
制御回路２００は、ＣＭＰ（１）２３を稼働させてＤａｔａＲＥＧ（１）２１にラッチされているｄ２のデータとＤａｔａＲＥＧ（２）２２にラッチされているｄ３のデータとを比較する。ｄ２のデータとｄ３のデータとが等しい場合にＣＭＰ（１）２３は１を出力し、等しくない場合には０を出力する。ここでは等しいと仮定して１を出力する。同時にシステムバス６上のｄ４のデータをＤａｔａＲＥＧ（１）２１にラッチする。更に、次のデータを取り出すためにＡＤＲＣＮＴ（１）とＭＵＸ（２）を稼働してＡＤＤ１８から５を出力させ、フラッシュアクセス制御２０を介してｄ５のデータをフラッシュメモリ１からシステムバス上へ読み出す（Ｄａｔａ）。
【０２２５】
時刻ｔ４０９
制御回路２００は、ｄ５のデータをＤａｔａＲＥＧ（２）にラッチする。次のデータを取り出すためにＡＤＲＣＮＴ（１）を１インクリメントして６とし、同時にＭＵＸ（２）を稼働して３を出力させ、フラッシュアクセス制御２０を介してフラッシュメモリ１からｄ５のデータをシステムバス上へ読み出す（Ｄａｔａ）。
【０２２６】
同様の動作を続けて所定の時間経過した後の時刻ｔ４１３に至る。
時刻ｔ４１３
制御回路２００は、ＣＭＰ（１）２３を稼働させてＤａｔａＲＥＧ（１）２１にラッチされているｄｉのデータとＤａｔａＲＥＧ（２）２２にラッチされているｄｉ＋１のデータとを比較する。ｄｉのデータとｄｉ＋１のデータとが等しい場合にＣＭＰ（１）２３は１を出力し、等しくない場合には０を出力する。ここでは等しくないと仮定して０を出力する。
【０２２７】
時刻ｔ４１５
制御回路２００は、次のブロック内での同一データ対の比較をするため次のブロックをロードし（ステップＳ（７）４（図４１））、ＢｌｏｃｋＡＤＲ（１）に次のブロックのデータの先頭アドレスｎをロードする。同時にＢｌｏｃｋＡＤＲ（２）に直後に続くブロックのデータの先頭アドレス２ｎをロードする（ステップＳ（７）２（図４１））。ブロック２（先頭アドレスｎ）のデータ対でのデータ比較が開始される。
【０２２８】
時刻ｔ４２３
上記時刻ｔ４１６〜時刻ｔ４２２までは時刻ｔ４０４以降と同様に進んだ後、時刻ｔ４２３で制御回路２００は、ＣＭＰ（１）２３を稼働させてＤａｔａＲＥＧ（１）２１にラッチされているｄｎ＋ｊのデータとＤａｔａＲＥＧ（２）２２にラッチされているｄｎ＋ｊ＋１のデータとを比較する。ｄｎ＋ｊのデータとｄｎ＋ｊ＋１のデータとが等しい場合にＣＭＰ（１）２３は１を出力し、等しくない場合には０を出力する。ここでは等しくないと仮定して０を出力する。以下図４４へ進む。
【０２２９】
時刻ｔ４２５
制御回路２００は、次のブロック対の比較するため次のブロックをロードし（ステップＳ（７）４（図４１））、ＢｌｏｃｋＡＤＲ（１）に次のブロックのデータの先頭アドレス２ｎをロードする。同時にＢｌｏｃｋＡＤＲ（２）に直後に続くブロックのデータの先頭アドレス３ｎをロードする（ステップＳ（７）２（図４１））。
【０２３０】
時刻ｔ４３３
上記時刻ｔ４２６〜時刻ｔ４３２と進んだ後、時刻ｔ４３３に至る。制御回路２００は、ＣＭＰ（１）２３を稼働させてＤａｔａＲＥＧ（１）２１にラッチされているｄ３ｎ−２のデータとＤａｔａＲＥＧ（２）２２にラッチされているｄ３ｎ−１のデータとを比較する。ｄ３ｎ−２のデータとｄ３ｎ−１のデータとが等しい場合にＣＭＰ（１）２３は１を出力し、等しくない場合には０を出力する。ここでは等しいと仮定して１を出力する。又制御回路２００はＣＭＰ２を稼働させてＡＤＲＣＮＴ（１）１５の出力とＢｌｏｃｋＡＤＲ（２）１１の値とを比較させる。ＣＭＰ２双方の値が等しい場合は０を、等しくない場合には１を出力する。ここでは双方３ｎと等しくなっているので０を出力している。この時データ比較したブロック対のデータは全て等しいと判断される。
以下図４５へ続く。
【０２３１】
時刻ｔ４４０〜時刻ｔ４４３
制御回路２００はＢｌｏｃｋＡＤＲ（１）１５に保持されているアドレス２ｎをＡＤＲＣＮＴ（１）１３にロードすると共にＡＤＲＣＮＴ（２）１４にロードし、ＭＵＸ（２）１６をＡＤＲＣＮＴ（１）１３の値が出力されるように設定する。同時にアドレス３ｎから始まるデータを順次フラッシュメモリ７１（図３８）から読み出すと共にＡＤＲＣＮＴ（１）１３とＡＤＲＣＮＴ（２）１４をインクリメントし、読み出したデータを一つおきにＤａｔａＲＥＧ（１）２１にラッチされる。ＤａｔａＲＥＧ（１）２１に保持されたデータはＢｌｏｃｋＣＮＴ２５にカウントされる。
【０２３２】
時刻ｔ４４４
制御回路２００は、時刻ｔ４４０から時刻ｔ４４３までの間に不良ブロック制御データの全ブロック数情報を読み出してＢｌｏｃｋＣＮＴ２５に格納する。
時刻ｔ４４９
制御回路２００は、時刻ｔ４４５から時刻ｔ４４９までの間に不良ブロック制御データの不良ブロック情報を読み出してＳｈｉｆｔＲＥＧ２４に格納する。
【０２３３】
時刻ｔ４５０
制御回路２００は、不良ブロック制御情報の読み出しが終わったので、後に続くデータを一つおきに読み出してＲＡＭ３（図３８）へ書き込む。
時刻ｔ４５７
制御回路２００は、ＣＭＰ２を稼働させてＡＤＲＣＮＴ（１）１５の出力とＢｌｏｃｋＡＤＲ（２）１１の値とを比較させる。ＣＭＰ２双方の値が等しい場合は０を、等しくない場合には１を出力する。ここでは双方３ｎと等しいので０を出力する。
【０２３４】
時刻ｔ４５８
制御回路２００は、ＳｈｉｆｔＲＥＧ２４の値を１シフトする。ＳｈｉｆｔＲＥＧ２４の出力が１であれば次のブロックは正常ブロックであると判断して読み取りを開始し、出力が０であれば次のブロックは不良ブロックであると判断して次のブロックに進む（ステップＳ（７）８（図４１））。ここでは出力が１と仮定して読み取り及びＲＡＭ３（図４１）への書き込みを開始する。同時にＢｌｏｃｋＣＮＴを１ディクリメントしてｍ−１とする（ステップＳ（７）９（図４１））。以下ＢｌｏｃｋＣＮＴが０になるまで同様の動作を繰り返し、ＢｌｏｃｋＣＮＴが０になったときに動作を完了する。但し以後のブロックには同一データ対は格納されていないのでデータ一つおきに読み出す操作は必要とせず、全てのデータが読み出される。
【０２３５】
以上説明したようにフラッシュメモリの最初の正常ブロック内に同一データ対を予め備えることによって先頭正常ブロック検出を高速化することが可能になり、システムの高速化を図ることができる。
【実施例８】
【０２３６】
本実施例では実施例１の先頭の正常ブロック対に換えて先頭ブロック（正常ブロックに限らず不良ブロックをも含む）に所定の規則に基づいて符号化された不良ブロック制御情報をシステム電源のＯＮ前に予め格納しておく。この所定の規則に基づいて符号化された不良ブロック制御情報に基づいて処理を進行する。かかる目的を達成するために本実施例は、以下のように構成される。
【０２３７】
図４６は、実施例８の構成のブロック図である。
図４６より、実施例８の記憶データアクセス装置は、フラッシュメモリ８１と、フラッシュメモリコントローラ８２と、ＲＡＭ３と、ＲＡＭコントローラ４と、ＣＰＵ装置５と、システムバス６とを備える。
【０２３８】
フラッシュメモリ８１は、ＣＰＵ装置５を動作させるためのプログラムが予め格納されている記憶部であり通常ナンドメモリが用いられる。フラッシュメモリ８１は複数のブロックから構成され、この複数のブロックには正常ブロックと不良ブロックとが含まれている。記憶データアクセス装置では、不良ブロックを正確に認識して排除し、正常ブロックのみから情報を読み出すことが不可欠となる。
【０２３９】
かかる目的を達成するための不良ブロック制御情報が予め格納されている部分でもある。本実施例では、システム電源のＯＮ前に先頭のブロック内に所定の規則に基づいて符号化されたデータを予め格納する先頭ブロック内符号化データ格納手段８１ａを備えている。ここで言う先頭ブロックには正常ブロックのみではなく不良ブロックをも含まれる。所定の規則については動作の項で詳細に説明する。
フラッシュメモリコントローラ８２は、上記フラッシュメモリ８１とシステムバス６との間に配置され、ＣＰＵ装置５を動作させるためのプログラムをフラッシュメモリ８１からＲＡＭ３へ転送する制御ブロックである。
【０２４０】
かかる目的を達成するためにシステム電源ＯＮ後に上記先頭ブロック内から符号化データを読み出して復号化するデータ復号化手段８２ａと、復号化されたデータから不良ブロック制御情報を読み出す不良ブロック制御情報読み出し手段８２ｂと、上記不良ブロック制御情報に基づいて正常情報のみをフラッシュメモリ８１からＲＡＭ３へ転送する正常情報ローディング手段８２ｃとを備える。
その他の構成部分は実施例１と同様なので説明を割愛する。
【０２４１】
実施例８の動作について説明する。
実施例１の動作の詳細について説明する前に動作説明に必要な基本概念について説明する。
図４７は、実施例８の動作説明の基本概念説明図である。
図４７の（ａ）は、複数のブロックから構成されるフラッシュメモリ８１（図４６）の内容を説明する図である。ブロックＮｏは、説明のために設けた番号である。本実施例ではブロックＮｏ１が先頭ブロックになる。この場合にブロックＮｏ１は、正常ブロックのみに限らず不良ブロックであっても良い。
【０２４２】
図４７の（ｂ）は、符号化の規則についての説明図である。図４７の（ａ）ｄ０〜ｄｎ−１のデータ領域が例えば８ビットで構成されているものとする。この場合に一例として１を表すビット数が４以上の場合を１とし、１を表すビット数が４未満の場合を０と定める。その場合に１を表すビットが出現する位置は規則に無関係であり、又１を表すビット以外のビットには０を表すビットは基より欠落している（図中×印）場合をも含むものとする。従って、図のａ〜ｅまでがデータ１でありｆ〜ｈまでの３個はデータ０と定まる。
【０２４３】
以上で実施例８の動作説明に必要な基本概念についての説明を終了したので、実施例８の動作の詳細についてフローチャートを用いて説明する。
図４８は、実施例８のフローチャートである。
図４９は、実施例８のフラッシュメモリコントローラのブロック図である。
【０２４４】
図４８のステップＳ（８）１からステップＳ（８）５に従って、必要に応じて図４９を一部引用しながら説明する。動作説明の前提として以下の前提を定める（一例）。
（１）全ブロック数情報が格納されているデータ領域を図４７（ａ）に示すようにｄ０、ｄ１、ｄ２の３領域とする。
（２）不良ブロック情報が格納されているデータ領域と、図４７（ａ）に示すようにｄ３〜ｄｉまでのｉ−２領域とする。
（３）１を表すビット数が４個以上の符号化データを復号化されたデータ１とする。但し、ここではデータ領域を８ビットとしている。
【０２４５】
ステップＳ（８）０
フラッシュメモリ１にシステム電源ＯＮ前に先頭ブロックの所定の領域に符号化された全ブロック数情報と不良ブロック情報が予め格納される。このステップは、先頭ブロック内符号化データ格納手段に該当する。実施例８の動作の前提となるステップであり、動作開始の予備ステップである。以後システム電源がＯＮされ動作が開始される。
【０２４６】
ステップＳ（８）１
制御回路２１０は、ＡＤＲＣＮＴ（１）１３と、ＤａｔａＲＥＧ（１）を制御してブロックＮｏ１（図４７）のｄ０から順次格納されている符号化データを読み込む。
ステップＳ（８）２
制御回路２１０は、ビット比較器２１１を制御して、読み込んだ符号化データの１をカウントする。
【０２４７】
ステップＳ（８）３
制御回路２１０は、ビット比較器２１１を制御して１を表すビットの数４以上の場合はステップＳ（８）４−１へ進み、１を表すビットの数４未満の場合はステップＳ（８）４−２へ進む。
ステップＳ（８）４−１
ビット比較器２１１はビット１を出力する。このデータを受け入れた制御回路２１０は、上記前提（１）の場合にはＢｌｏｃｋＣＮＴ２５へ出力し上記前提（２）の場合にはＳｈｉｆｔＲＥＧ２４へ出力する。
【０２４８】
ステップＳ（８）４−２
ビット比較器２１１はビット０を出力する。このデータを受け入れた制御回路２１０は、上記前提（１）の場合にはＢｌｏｃｋＣＮＴ２５へ出力し上記前提（２）の場合にはＳｈｉｆｔＲＥＧ２４へ出力する。
【０２４９】
ステップＳ（８）５
制御回路２１０は、ＤａｔａＲＥＧ（１）が所定数量のデータを読み込み終了したかどうかを判断し、所定数量読み込んでいない場合にはステップＳ（８）１へ戻って所定数量（前提条件ではｄ０〜ｄｉまでのｉ＋１個）読み込んだ後に実施例１のステップＳ（１）６（図４）へ進む。以下実施例１のステップＳ（１）１１まで進んでフローを終了する。
上記ステップＳ（８）１〜ステップＳ（８）５までのプロセスがデータ復号化手段に該当する。
以上の動作説明は、上記前提条件に基づいて説明したが、本発明は、この前提条件に限定されるものではない。
【０２５０】
以上説明したように、本実施例では、正当ブロックであるか不良ブロックであるかに関わらず先頭ブロックに符号化した不良ブロック制御情報を格納するので、制御方法が簡単になり又メモリの有効利用にも繋がる。更に簡単な符号化方式を採用しているので復号化も簡単になり、余分な制御手段を追加する必要がない。以上の結果、システム構成が簡単になり安価に構築することが可能になる。
【産業上の利用可能性】
【０２５１】
上記説明では、本発明による記憶データアクセス装置のアクセス対象をフラッシュメモリのみに限定して説明したが、アクセス対象は、この例に限定されるものではない。即ち、フラッシュメモリのみ成らず、不良ブロックを含む確立の高いＬＳＩなどを対象にすると効果的に活用することが可能になる。
【図面の簡単な説明】
【０２５２】
【図１】実施例１の構成のブロック図である。
【図２】実施例１の動作説明の基本概念説明図（その１）である。
【図３】実施例１の動作説明の基本概念説明図（その２）である。
【図４】実施例１のフローチャートである。
【図５】実施例１のフラッシュメモリコントローラのブロック図である。
【図６】実施例１のタイムチャート（その１）である。
【図７】実施例１のタイムチャート（その２）である。
【図８】実施例１のタイムチャート（その３）である。
【図９】実施例２の構成のブロック図である。
【図１０】実施例２の動作説明の基本概念説明図である。
【図１１】実施例２のフローチャートである。
【図１２】実施例２のフラッシュメモリコントローラのブロック図である。
【図１３】実施例２のタイムチャート（その１）である。
【図１４】実施例２のタイムチャート（その２）である。
【図１５】実施例３の構成のブロック図（その１）である。
【図１６】実施例３の構成のブロック図（その２）である。
【図１７】実施例３の動作説明の基本概念説明図である。
【図１８】実施例３のフローチャートである。
【図１９】実施例３のフラッシュメモリコントローラのブロック図である。
【図２０】不良ブロック制御情報取り込み手段のフローチャート（その１）である。
【図２１】正常ブロック消去手段のフローチャートである。
【図２２】正常情報格納手段のフローチャート（その１）である。
【図２３】不良ブロック初期化のフローチャート（その１）である。
【図２４】先頭不良ブロック確認手段のフローチャート（その１）である。
【図２５】実施例３の構成のブロック図（その３）である。
【図２６】実施例４の構成のブロック図である。
【図２７】実施例４のフローチャートである。
【図２８】不良ブロック初期化のフローチャート（その２）である。
【図２９】実施例５の構成のブロック図である。
【図３０】実施例５の動作説明の基本概念説明図である。
【図３１】実施例５のフローチャートである。
【図３２】実施例５のフラッシュメモリコントローラのブロック図である。
【図３３】実施例５のタイムチャートである。
【図３４】不良ブロック制御情報取り込み手段のフローチャート（その２）である。
【図３５】正常情報格納手段のフローチャート（その２）である。
【図３６】正常情報格納手段のフローチャート（その３）である。
【図３７】先頭不良ブロック確認手段のフローチャート（その２）である。
【図３８】不良ブロック初期化のフローチャート（その３）である。
【図３９】不良ブロック初期化のフローチャート（その４）である。
【図４０】実施例７の構成のブロック図である。
【図４１】実施例７のフローチャートである。
【図４２】実施例７のフラッシュメモリコントローラのブロック図である。
【図４３】実施例７のタイムチャート（その１）である。
【図４４】実施例７のタイムチャート（その２）である。
【図４５】実施例７のタイムチャート（その３）である。
【図４６】実施例８の構成のブロック図である。
【図４７】実施例８の動作説明の基本概念説明図である。
【図４８】実施例８のフローチャートである。
【図４９】実施例８のフラッシュメモリコントローラのブロック図である。
【符号の説明】
【０２５３】
１  フラッシュメモリ（記憶部）
２  フラッシュメモリコントローラ
３  ＲＡＭ
４  ＲＡＭコントローラ
５  ＣＰＵ装置
６  システムバス
１ａ  先頭正常ブロック対格納手段
２ａ  先頭正常ブロック対格納位置検出手段（不良ブロック制御情報格納位置検出手段）
２ｂ  不良ブロック制御情報読み出し手段
２ｃ  正常情報ローディング手段
【図１】
2005157649.tif 000003
【図２】
2005157649.tif 000004
【図３】
2005157649.tif 000005
【図４】
2005157649.tif 000006
【図５】
2005157649.tif 000007
【図６】
2005157649.tif 000008
【図７】
2005157649.tif 000009
【図８】
2005157649.tif 000010
【図９】
2005157649.tif 000011
【図１０】
2005157649.tif 000012
【図１１】
2005157649.tif 000013
【図１２】
2005157649.tif 000014
【図１３】
2005157649.tif 000015
【図１４】
2005157649.tif 000016
【図１５】
2005157649.tif 000017
【図１６】
2005157649.tif 000018
【図１７】
2005157649.tif 000019
【図１８】
2005157649.tif 000020
【図１９】
2005157649.tif 000021
【図２０】
2005157649.tif 000022
【図２１】
2005157649.tif 000023
【図２２】
2005157649.tif 000024
【図２３】
2005157649.tif 000025
【図２４】
2005157649.tif 000026
【図２５】
2005157649.tif 000027
【図２６】
2005157649.tif 000028
【図２７】
2005157649.tif 000029
【図２８】
2005157649.tif 000030
【図２９】
2005157649.tif 000031
【図３０】
2005157649.tif 000032
【図３１】
2005157649.tif 000033
【図３２】
2005157649.tif 000034
【図３３】
2005157649.tif 000035
【図３４】
2005157649.tif 000036
【図３５】
2005157649.tif 000037
【図３６】
2005157649.tif 000038
【図３７】
2005157649.tif 000039
【図３８】
2005157649.tif 000040
【図３９】
2005157649.tif 000041
【図４０】
2005157649.tif 000042
【図４１】
2005157649.tif 000043
【図４２】
2005157649.tif 000044
【図４３】
2005157649.tif 000045
【図４４】
2005157649.tif 000046
【図４５】
2005157649.tif 000047
【図４６】
2005157649.tif 000048
【図４７】
2005157649.tif 000049
【図４８】
2005157649.tif 000050
【図４９】
2005157649.tif 000051