(57)【要約】【課題】効率良く欠陥領域を避けてデータを書き込むことが可能なデータ書き込み装置を提供すること。【解決手段】データ書き込み装置は、データ領域と冗長領域を有する物理ブロックを含む記憶領域により構成された記憶手段と、前記物理ブロックの前記データ領域に、データが分割されたデータブロックを書き込む書き込み手段とを備え、前記書き込み手段は、第１のデータブロックを第１の物理ブロックのデータ領域である第１のデータ領域に書き込み、前記データを読み出す際に第１のデータブロックの前に読み出されるべきデータブロックである第２のデータブロックを第２の物理ブロックのデータ領域である第２のデータ領域に書き込み、前記第２の物理ブロックの冗長領域に対して前記第１の物理ブロックを指し示す情報を書き込む。【選択図】図３
2011123830.tif 000002
【特許請求の範囲】
【請求項１】
データ領域と冗長領域を有する物理ブロックを含む記憶領域により構成された記憶手段と、
前記物理ブロックの前記データ領域に、データが分割されたデータブロックを書き込む書き込み手段と、
を備え、
前記書き込み手段は、第１のデータブロックを第１の物理ブロックのデータ領域である第１のデータ領域に書き込み、前記データを読み出す際に第１のデータブロックの前に読み出されるべきデータブロックである第２のデータブロックを第２の物理ブロックのデータ領域である第２のデータ領域に書き込み、前記第２の物理ブロックの冗長領域に対して前記第１の物理ブロックを指し示す情報を書き込むこと
を特徴とするデータ書き込み装置。
【請求項２】
前記書き込み手段は、前記第２の物理ブロックが正常ブロックではなく、第３の物理が正常ブロックであるとき、
前記第２のデータ領域に対して前記第２のデータブロックの書き込みは行わず、前記第３の物理ブロックのデータ領域である第３のデータ領域に対して前記第２のデータブロックを書き込み、前記第３の物理ブロックの冗長領域である第３の冗長領域に対して前記第１の物理ブロックを指し示す情報を書き込むこと
を特徴とする請求項１記載のデータ書き込み装置。
【請求項３】
前記書き込み手段は、前記物理ブロックにデータブロックを書き込む前に、書き込み先の物理ブロックに書き込まれているデータを消去してから前記書き込み先の物理ブロックに対してデータブロックの書き込みを行うこと
を特徴とする請求項１記載のデータ書き込み装置。
【請求項４】
前記書き込み手段は、前記第１のデータブロックが前記データのうち最後に読み出されるべきデータブロックであるとき、前記第１の物理ブロックの冗長領域である第１の冗長領域に対して前記第１のデータブロックが前記データのうち最後に読み出されるデータブロックであることを示す情報を書き込むこと
を特徴とする請求項１記載のデータ書き込み装置。
【請求項５】
前記書き込み手段は、前記データの内の最初に読み出されるべき第３のデータブロックを複数の物理ブロックのデータ領域に対して書き込み、前記複数の物理ブロックの冗長領域に次の読み出し先である第４の物理ブロックを指し示す情報を書き込むこと
を特徴とする請求項１記載のデータ書き込み装置。
【請求項６】
前記書き込み手段は、前記第１のデータ領域に対して第１のデータブロックの書き込みが終わった後に、前記第２の冗長領域に対して前記第１の物理ブロックを指し示す情報を書き込むこと
を特徴とする請求項１記載のデータ書き込み装置。
【請求項７】
前記書き込み手段は、前記第２の物理ブロックの冗長領域に対して書き込む前記第１の物理ブロックを指し示す情報として、前記第１の物理ブロックのアドレスを書き込むこと
を特徴とする請求項１記載のデータ書き込み装置。
【請求項８】
データ領域と冗長領域を有する物理ブロックを含む記憶領域により構成された記憶媒体の前記データ領域に、データが分割されたデータブロックを書き込むデータ書き込み方法であって、
第１のデータブロックを第１の物理ブロックのデータ領域である第１のデータ領域に書き込み、
前記データを読み出す際に第１のデータブロックの前に読み出されるべきデータブロックである第２のデータブロックを第２の物理ブロックのデータ領域である第２のデータ領域に書き込み、
前記第２の物理ブロックの冗長領域に対して前記第１の物理ブロックを指し示す情報を書き込むこと
を特徴とするデータ書き込み方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、NAND Flash等に対してプログラム等のデータを書き込むデータ書き込み装置及びデータ書き込み方法に関する。
【背景技術】
【０００２】
CPU（central processing unit）により制御される代表的な機器としてパーソナルコンピュータが挙げられる。近年では、映像機器のデジタル化に伴いデジタルＴＶ及びハードディスクレコーダなどもCPUにより動作が制御されている。CPUは、不揮発性メモリ上の欠陥領域を除く正常なデータ記憶領域に対してプログラムを記録し、また正常なデータ記憶領域からプログラムを読み出して、動作する。
【０００３】
このように、欠陥領域を除く正常なデータ記憶領域からプログラムを正確に読み出すためには、不揮発性メモリ上の欠陥領域を正しく管理する必要があり、不揮発性メモリ上の欠陥領域の管理方法について各種提案がなされている。例えば、セクタ＃０〜＃６３の全てをデータ記憶用のセクタとして扱い、セクタ＃０〜＃６３の最後尾のバイト領域Ｂ０−ｎ〜Ｂ６３−ｎにセクタの繋がりを示すポインタとして、次に繋がるセクタがある場合には、次に繋がるセクタの番号を格納し、次に繋がるセクタがない場合には、「０」を格納する技術が提案されている（特許文献１参照）。これにより、データ書き込み時に書き込みエラーが発生した場合においても、書き込みエラーが発生したデータと関わりを持たないデータが記憶されているデータ記憶領域に対するアクセスが不可能にならないようにすると共に、データ読み出し時におけるポインタ操作を単純化することができる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平１０−２４０６２７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上記のように、各セクタの最後尾の領域にセクタの繋がりを示すポインタを記録する場合では、例えば、第１セクタの最後尾の領域に第２セクタへの繋がりを示すポインタを記録したものの、第２セクタに対して正しくデータが書き込めない事態が生じ得る。このような事態が生じた場合、第１セクタの最後尾の領域に記録したポインタの修正等が必要となり、書き込み処理に関するデータの記録効率が悪くなってしまう。
【０００６】
本発明の目的は、効率良く欠陥領域を避けてデータを書き込むことが可能なデータ書き込み装置及びデータ書き込み方法を提供することにある。
【課題を解決するための手段】
【０００７】
本発明の一実施形態に係るデータ書き込み装置は、データ書き込み装置は、データ領域と冗長領域を有する物理ブロックを含む記憶領域により構成された記憶手段と、前記物理ブロックの前記データ領域に、データが分割されたデータブロックを書き込む書き込み手段とを備え、前記書き込み手段は、第１のデータブロックを第１の物理ブロックのデータ領域である第１のデータ領域に書き込み、前記データを読み出す際に第１のデータブロックの前に読み出されるべきデータブロックである第２のデータブロックを第２の物理ブロックのデータ領域である第２のデータ領域に書き込み、前記第２の物理ブロックの冗長領域に対して前記第１の物理ブロックを指し示す情報を書き込む。
【０００８】
本発明の一実施形態に係るデータ書き込み方法は、データ領域と冗長領域を有する物理ブロックを含む記憶領域により構成された記憶媒体の前記データ領域に、データが分割されたデータブロックを書き込むデータ書き込み方法であって、第１のデータブロックを第１の物理ブロックのデータ領域である第１のデータ領域に書き込み、前記データを読み出す際に第１のデータブロックの前に読み出されるべきデータブロックである第２のデータブロックを第２の物理ブロックのデータ領域である第２のデータ領域に書き込み、前記第２の物理ブロックの冗長領域に対して前記第１の物理ブロックを指し示す情報を書き込む。
【発明の効果】
【０００９】
本発明によれば、効率良く欠陥領域を避けてデータを書き込むことが可能なデータ書き込み装置及びデータ書き込み方法を提供できる。
【図面の簡単な説明】
【００１０】
【図１】本発明の一実施形態に係るプログラム実行装置（データ書き込み装置）の概略構成を示す図である。
【図２】プログラム（例えば起動プログラム）のロード処理の一例を示す概念図である。
【図３】プログラム（例えば起動プログラム）の書き込み処理の一例を示す概念図である。
【図４】最終データブロックの書き込み処理の別例を示す概念図である。
【図５】プログラム（例えば起動プログラム）のロード処理の一例を示すフローチャートである。
【図６】プログラム（例えば起動プログラム）の書き込み処理の一例を示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下、図面を参照し、本発明の実施形態について説明する。
【００１２】
図１は、本発明の一実施形態に係るプログラム実行装置（データ書き込み装置）の概略構成を示す図である。このプログラム実行装置は、パーソナルコンピュータ、デジタルＴＶ、ハードディスクレコーダなどに適用することができる。
【００１３】
図１に示すようにプログラム実行装置は、CPUなどで構成することが可能な制御部１、NOR Flash又はMask ROM (Read Only Memory)などの第１プログラムメモリ２、NAND Flashなどで構成することが可能な第２プログラムメモリ３、RAM (Random Access Memory)などで構成することが可能なメインメモリ４を備え、制御部１、第１プログラムメモリ２、第２プログラムメモリ３、メインメモリ４は、バス５を介して接続されている。
【００１４】
このプログラム実行装置に対して通電後、制御部１は、第１プログラムメモリ２上のプログラムを直接実行し、第２プログラムメモリ３上のプログラムをメインメモリ４にロードする。本実施形態では、第２プログラムメモリ３に対するプログラムの書き込み、及び第２プログラムメモリ３に書き込まれたプログラムのロードについて説明する。
【００１５】
説明を分かり易くするために、図２に示すように、第２プログラムメモリ３は、Ｍ個（３≦Ｍ、Ｍ：自然数）のブロックを含む記憶領域により構成されているものとする。制御部１は、記憶領域に含まれた物理ブロックＢ０から物理ブロックＢＭの中から順に複数個のデータブロックを読み出す。そのために、制御部１は、後にプログラムを書き込む際には物理ブロックＢＭから物理ブロックＢ０に対して順に複数個のデータブロックを書き込む。複数個のデータブロックは、プログラムを複数個に分割して生成されたデータであるとする。
【００１６】
図２は、第２プログラムメモリ４に書き込まれたプログラム（例えば起動プログラム）のロード処理の一例を示す概念図である。また、図５は、第２プログラムメモリ４に書き込まれたプログラム（例えば起動プログラム）のロード処理の一例を示すフローチャートである。
【００１７】
例えば、第２プログラムメモリ４は、ブロックアドレス０（以下、Blk Addr０と略記する）の物理ブロックＢ０、Blk Addr１の物理ブロックＢ１、Blk Addr２の物理ブロックＢ２、…、Blk Addrｍの物理ブロックＢｍ、…、Blk Addr（Ｍ−４）の物理ブロックＢ（Ｍ−４）、Blk Addr（Ｍ−３）の物理ブロックＢ（Ｍ−３）、Blk Addr（Ｍ−２）の物理ブロックＢ（Ｍ−２）、Blk Addr（Ｍ−１）の物理ブロックＢ（Ｍ−１）、Blk AddrＭの物理ブロックＢＭにより構成されている。
【００１８】
また、各物理ブロックは、データ領域と冗長領域を含む。即ち、物理ブロックＢ０は、データ領域Ｄ０と冗長領域Ｒ０を含み、物理ブロックＢ１はデータ領域Ｄ１と冗長領域Ｒ１を含み、物理ブロックＢ２はデータ領域Ｄ２と冗長領域Ｒ２を含み、…、物理ブロックＢｍはデータ領域Ｄｍと冗長領域Ｒｍを含み、…、物理ブロックＢ（Ｍ−４）はデータ領域Ｄ（Ｍ−４）と冗長領域Ｒ（Ｍ−４）を含み、物理ブロックＢ（Ｍ−３）はデータ領域Ｄ（Ｍ−３）と冗長領域Ｒ（Ｍ−３）を含み、物理ブロックＢ（Ｍ−２）はデータ領域Ｄ（Ｍ−２）と冗長領域Ｒ（Ｍ−２）を含み、物理ブロックＢ（Ｍ−１）はデータ領域Ｄ（Ｍ−１）と冗長領域Ｒ（Ｍ−１）を含み、物理ブロックＢＭはデータ領域ＤＭと冗長領域ＲＭを含む。
【００１９】
最初に、制御部１は、Blk Addr０の物理ブロックＢ０からデータを読み出す（ＳＴ５０１）。なお、本実施形態では、最初に、Blk Addr０の物理ブロックＢ０からデータを読み出すケースについて説明するが、最初に、Blk Addr０以外の物理ブロックからデータを読み出す制御であってもよい。
【００２０】
制御部１は、Blk Addr０の物理ブロックＢ０に含まれた冗長領域Ｒ０に書き込まれた、データ領域Ｄ０を管理するための情報である管理情報を読み出す。この管理情報には、例えば制御部１が物理ブロックＢ０を読み出した後の、次の読み出し先の物理ブロックを指し示す情報や、Blk Addr０の物理ブロックＢ０が不良ブロックであるか否かの情報等が含まれる。例えば、冗長領域Ｒ０に書き込まれた管理情報が、次の読み出し先を示す次の物理ブロック情報(Next Blk)であり（ＳＴ５０２、ＮＯ）、且つ次の物理ブロック情報がBlk Addr１を示す場合には、続いて、制御部１は、Blk Addr１の物理ブロックＢ１からデータを読み出す（ＳＴ５０３）。さらに、物理ブロックＢ１に含まれた冗長領域Ｒ１に書き込まれた管理情報（次の物理ブロック情報）がBlk Addr２を示す場合には（ＳＴ５０２、ＮＯ）、続いて、制御部１は、Blk Addr２の物理ブロックＢ２からデータを読み出す（ＳＴ５０３）。このようにして、制御部１は、冗長領域に書き込まれた管理情報（次の物理ブロック情報）を頼りにして、次々に物理ブロックからデータを読み出す。ここで、次の物理ブロック情報とは次の物理ブロックを指し示す情報であって、本実施形態において物理ブロックのアドレス情報を指す。しかし、これはあくまで例示であり、これに限定されず次の物理ブロックへのオフセット情報等により次の物理ブロック情報を示したとしてもよい。
【００２１】
例えば、物理ブロックＢ（Ｍ−３）に含まれた冗長領域Ｒ（Ｍ−３）に書き込まれた管理情報（次の物理ブロック情報）が、Blk Addr（Ｍ−１）を示す場合には（ＳＴ５０２、ＮＯ）、制御部１は、Blk Addr（Ｍ−１）の物理ブロックＢ（Ｍ−１）からデータを読み出す（ＳＴ５０３）。例えば、物理ブロックＢ（Ｍ−２）が不良ブロック（Bad Block）であれば、この物理ブロックＢ（Ｍ−２）を抜かして、物理ブロックＢ（Ｍ−１）からデータを読み出すことができる。さらに、補足すると、物理ブロックＢ（Ｍ−３）に含まれた冗長領域Ｒ（Ｍ−３）に書き込まれた管理情報（次の物理ブロック情報）が、Blk Addr（Ｍ−１）を示す場合には、物理ブロックＢ（Ｍ−２）に含まれた冗長領域Ｒ（Ｍ−２）に書き込まれた管理情報が、当該物理ブロックが不良ブロックであることを示す情報であるBad Block MARKを含んでいなくても、この物理ブロックＢ（Ｍ−２）を抜かして、物理ブロックＢ（Ｍ−１）からデータを読み出すことができる。
【００２２】
物理ブロックＢ（Ｍ−１）に含まれた冗長領域Ｒ（Ｍ−１）に書き込まれた管理情報（次の物理ブロック情報）が、Blk AddrＭを示す場合には（ＳＴ５０２、ＮＯ）、制御部１は、Blk AddrＭの物理ブロックＢＭからデータを読み出す（ＳＴ５０３）。制御部１は、冗長領域から、データの終端であることを示す情報が読み出されるまで、読み出し処理を継続する。例えば、物理ブロックＢＭに含まれた冗長領域ＲＭに書き込まれた管理情報が、次の物理ブロック情報ではなく、データの終端であることを示す情報であれば（ＳＴ５０２、ＹＥＳ）、制御部１は、一連のデータの読み出し処理を終了する。
【００２３】
図３は、第２プログラムメモリ４に対してプログラム（例えば起動プログラム）の書き込み処理の一例を示す概念図である。また、図６は、第２プログラムメモリ４に対してプログラム（例えば起動プログラム）の書き込み処理の一例を示すフローチャートである。
【００２４】
図３に示すように、起動プログラムが、第２プログラムメモリ４を構成する各ブロックのサイズに応じて分割され、複数個（Ｎ個）のデータブロックが生成される。つまり、起動プログラムが、各物理ブロックのデータ領域のサイズに応じて分割され、複数個（Ｎ個）のデータブロックが生成され、これら複数個（Ｎ個）のデータブロックが、複数個（Ｍ個）の物理ブロックの中に書き込まれる（ＳＴ６０１）。
【００２５】
制御部１は、起動プログラムから生成された複数個（Ｎ個）のデータブロックを、物理ブロックＢＭから物理ブロックＢ０の順に書き込む。なお、本実施形態では、最終端の物理ブロックＢＭからデータブロックを書き始めるケースについて説明するが、本発明は、最初に読み出される物理ブロック以外の物理ブロックから書き始めるものであれば最終端の物理ブロックＢＭからの書き始めに限定されるものではない。
【００２６】
最初に、制御部１は、Blk AddrＭの物理ブロックＢＭが不良ブロックでない場合（ＳＴ６０２、ＮＯ）（ＳＴ６０３、ＮＯ）、物理ブロックＢＭに含まれたデータ領域ＤＭに対して第１データブロック（Ｎ番目のデータブロック）を書き込み（ＳＴ６０４）、物理ブロックＢＭに含まれた冗長領域ＲＭに対して管理情報（データの終端であることを示す情報）を書き込む（ＳＴ６０５、ＹＥＳ）（ＳＴ６０７）。なお、第１データブロック（Ｎ番目のデータブロック）は、最後に読み出されるデータブロックである。
【００２７】
物理ブロックＢＭに対して正しくデータが書き込まれた場合（ＳＴ６０８、ＹＥＳ）、続いて、制御部１は、Blk AddrＭ（＝Last Ｍ）に対して正しくデータが書き込まれた旨の情報を保持し、Blk Addr（Ｍ−１）の物理ブロックＢ（Ｍ−１）に対する第２データブロック（（Ｎ−１）番目のデータブロック）の書き込み処理へ移行する（ＳＴ６０９）（ＳＴ６１０、ＮＯ）（ＳＴ６１２）。
【００２８】
制御部１は、Blk Addr（Ｍ−１）の物理ブロックＢ（Ｍ−１）が不良ブロックでない場合（ＳＴ６０２、ＮＯ）（ＳＴ６０３、ＮＯ）、物理ブロックＢ（Ｍ−１）に含まれたデータ領域Ｄ（Ｍ−１）に対して第２データブロック（（Ｎ−１）番目のデータブロック）を書き込み（ＳＴ６０４）、物理ブロックＢ（Ｍ−１）に含まれた冗長領域Ｒ（Ｍ−１）に対して管理情報（次の読み出し先を示す次の物理ブロック情報(Next Blk)）を書き込む（ＳＴ６０５、ＮＯ）（ＳＴ６０６）。ここでは、管理情報として、Blk AddrＭが書き込まれる。
【００２９】
物理ブロックＢ（Ｍ−１）に対して正しくデータが書き込まれた場合（ＳＴ６０８、ＹＥＳ）、続いて、制御部１は、Blk Addr（Ｍ−１）に対して正しくデータが書き込まれた旨の情報を保持し、Blk Addr（Ｍ−２）の物理ブロックＢ（Ｍ−２）に対する第３データブロック（（Ｎ−２）番目のデータブロック）の書き込み処理へ移行する（ＳＴ６０９）（ＳＴ６１０、ＮＯ）（ＳＴ６１２）。
【００３０】
例えば、物理ブロックＢ（Ｍ−２）が不良ブロック（Bad Block）である場合（ＳＴ６０２、ＮＯ）（ＳＴ６０３、ＹＥＳ）、制御部１は、Blk Addr（Ｍ−３）の物理ブロックＢ（Ｍ−３）に対する第３データブロック（（Ｎ−２）番目のデータブロック）の書き込み処理へ移行する（ＳＴ６１２）。或いは、物理ブロックＢ（Ｍ−２）に対するデータの書き込みに失敗した場合には（ＳＴ６０８、ＮＯ）、制御部１は、物理ブロックＢ（Ｍ−２）に含まれた冗長領域Ｒ（Ｍ−２）に対して管理情報（Bad Block MARK）を書き込み（ＳＴ６１１）、Blk Addr（Ｍ−３）の物理ブロックＢ（Ｍ−３）に対する第３データブロック（（Ｎ−２）番目のデータブロック）の書き込み処理へ移行する（ＳＴ６１２）。
【００３１】
続いて、制御部１は、Blk Addr（Ｍ−３）の物理ブロックＢ（Ｍ−３）が不良ブロックでない場合（ＳＴ６０２、ＮＯ）（ＳＴ６０３、ＮＯ）、物理ブロックＢ（Ｍ−３）に含まれたデータ領域Ｄ（Ｍ−３）に対して第３データブロック（（Ｎ−２）番目のデータブロック）を書き込み（ＳＴ６０４）、物理ブロックＢ（Ｍ−３）に含まれた冗長領域Ｒ（Ｍ−３）に対して管理情報（次の読み出し先を示す次の物理ブロック情報(Next Blk)）を書き込む（ＳＴ６０５、ＮＯ）（ＳＴ６０６）。ここでは、管理情報として、Blk Addr（Ｍ−１）が書き込まれる。
【００３２】
このようにして、制御部１は、欠陥ブロックを抜かして、次々に物理ブロックに対してデータを書き込む。
【００３３】
最終的に、制御部１は、Blk Addr０の物理ブロックＢ０に含まれたデータ領域Ｄ０に対して、複数個（Ｎ個）のデータブロックの内の一番最後に書き込まれるデータブロックである最終データブロックを書き込み、物理ブロックＢ０に含まれた冗長領域Ｒ０に対して管理情報（次の読み出し先を示す次の物理ブロック情報(Next Blk)）を書き込む（ＳＴ６１３）。なお、最終データブロックが、最初に読み出されるデータとなる。
【００３４】
また、上記説明では書き込み済みデータの消去に関する説明を省略したが、制御部１は、各物理ブロックの書き込み済みデータを消去してから、各物理ブロックに対してデータを書き込む。例えば、制御部１は、物理ブロックＢＭに含まれたデータ領域ＤＭの書き込み済みデータを消去してから、データ領域ＤＭに対して第１データブロックを書き込む。同様に、制御部１は、物理ブロックＢＭに含まれた冗長領域ＲＭの書き込み済みデータを消去してから、冗長領域ＲＭに対して管理情報を書き込む。
【００３５】
上記したように、読み出しの順序（図２及び図５）と逆の順序でデータブロックを書き込む。ここで例えば、読み出し順序と同じ順序でデータブロックを書き込むとした場合を考える。ある物理ブロックＢｍにデータブロックを書き込んだ後、当該物理ブロックＢｍの冗長領域Ｒｍに管理情報（次の読み出し先の物理ブロックＢ（ｍ＋１）を示す次のブロック情報）を書き込んだとすると、次に書き込もうとする（つまりは次に読み出される）物理ブロックＢ（ｍ＋１）が不良ブロックであるとき、物理ブロックＢ（ｍ＋１）に対してデータブロックは正しく書き込めないため、前の読み出し先の物理ブロックＢｍの冗長領域Ｒｍに書き込まれた管理情報は正しくない情報となり、データの信頼性が低下する。
【００３６】
この管理情報の不整合を解消するためには、次のような管理情報の書き換えが必要となる。例えば、上記したように、物理ブロックＢｍにデータブロックを書き込んだ後、物理ブロックＢ（ｍ＋１）に対して次のデータブロックが書き込めず、物理ブロックＢ（ｍ＋２）に対して次のデータブロックが書き込めたとする。この場合、物理ブロックＢｍの冗長領域Ｒｍには、正しくない管理情報（次の読み出し先の物理ブロックＢ（ｍ＋１）を示す次のブロック情報）が書き込まれているため、この正しくない管理情報（次の読み出し先の物理ブロックＢ（ｍ＋１）を示す次のブロック情報）を、正しい管理情報（次の読み出し先の物理ブロックＢ（ｍ＋２）を示す次のブロック情報）に書き直す必要があり、この処理を行ったとすると処理効率が悪い。またさらに、例えばNAND Flashメモリ等のような記憶媒体において、物理ブロック内の冗長領域の書き換えを行う場合には、データの消去は各物理ブロック単位で行われる。このため正しく書き込まれていたデータ領域のデータも消去して、再度書き込まなければならず、書き込み処理全体の効率が低減してしまう。
【００３７】
上述のように読み出し順序と同じ順序でデータブロックを書き込む場合には、書き込み先の物理ブロックに不良ブロックが含まれていると、データの信頼性が低下し、またこれを解消するための処理を行う必要が出てきてしまうため処理効率が悪い。
【００３８】
本実施形態においては、読み出しの順序（図２及び図５）と逆の順序でデータブロックを書き込むため、物理ブロックＢＭに対してデータブロックを正しく書き込むことができた後で、物理ブロックＢ（Ｍ−１）に含まれた冗長領域Ｒ（Ｍ−１）に対して管理情報（次の読み出し先を示すBlk AddrＭ）を書き込むこととなり、書き込み先の物理ブロックに不良ブロックが存在する場合であったとしても管理情報を書き直さずに済む。このため、上述の書き込み処理では、データの信頼性が低下することなく、効率よく欠陥領域を避けてデータを書き込むことができる。
【００３９】
読み出しの順序（図２及び図５）と同じ順序でデータを書き込み、且つ管理情報の書き直しを防ぐためには、次のようにデータを書き込むようにしてもよい。
【００４０】
最初に、制御部１は、Blk Addr０の物理ブロックＢ０に含まれたデータ領域Ｄ０に対して最終データブロック（最初に読み出されるデータブロック）を書き込み、続いて、制御部１は、Blk Addr１の物理ブロックＢ１に含まれたデータ領域Ｄ１に対して後続のデータブロックを書き込み、データ領域Ｄ１に対する後続のデータブロックの書き込みに成功したことを確認してから、物理ブロックＢ０に含まれた冗長領域Ｒ０に対して管理情報（次の読み出し先を示すBlk Addr１）を書き込む。
【００４１】
例えば、制御部１が、Blk Addr（Ｍ−３）の物理ブロックＢ（Ｍ−３）に含まれたデータ領域Ｄ（Ｍ−３）に対してデータブロックを書き込み、続いて、制御部１は、Blk Addr（Ｍ−２）の物理ブロックＢ（Ｍ−２）に含まれたデータ領域Ｄ（Ｍ−２）に対してデータブロックを書き込み、データ領域Ｄ（Ｍ−２）に対するデータブロックの書き込みに失敗した場合には、制御部１は、Blk Addr（Ｍ−１）の物理ブロックＢ（Ｍ−１）に含まれたデータ領域Ｄ（Ｍ−１）に対してデータブロックを書き込み、データ領域Ｄ（Ｍ−１）に対するデータブロックの書き込みに成功した場合には、物理ブロックＢ（Ｍ−３）に含まれた冗長領域Ｒ（Ｍ−３）に対して管理情報（次の読み出し先を示すBlk Addr（Ｍ−１））を書き込む。
【００４２】
以上により、読み出しの順序（図２及び図５）と同じ順序でデータを書き込んでも、管理情報の書き直しを防ぐことができる。
【００４３】
図４は、第２プログラムメモリ４に対する最終データブロックの書き込み処理の別例を示す概念図である。
【００４４】
Blk Addr０の物理ブロックＢ０からデータの読み出しを開始することが定められている場合であって、物理ブロックＢ０が不良ブロック（Bad Block）に該当してしまった場合、又は物理ブロックＢ０に対するデータの書き込みに失敗した場合には、制御部１は、第２プログラムメモリからデータを正しくロードすることが難しくなってしまう。
【００４５】
そこで、図４に示すように、最終データブロックを、２以上の物理ブロックに書き込む。本書き込み処理例では、最終データブロックを、４個の物理ブロックに多重書きするケースについて説明する。
【００４６】
例えば、Blk Addr４の物理ブロックＢ４に対して正しくデータが書き込まれた場合、制御部１は、Blk Addr３の物理ブロックＢ３に含まれたデータ領域Ｄ３に対して最終データブロックを書き込み、物理ブロックＢ３に含まれた冗長領域Ｒ３に対して管理情報（次の読み出し先を示す次の物理ブロック情報(Next Blk)）を書き込む。ここでは、管理情報として、Blk Addr４が書き込まれる。
【００４７】
さらに、制御部１は、Blk Addr２の物理ブロックＢ２に含まれたデータ領域Ｄ２に対しても最終データブロックを書き込み、物理ブロックＢ２に含まれた冗長領域Ｒ２に対して管理情報（次の読み出し先を示す次の物理ブロック情報(Next Blk)）を書き込む。ここでも、管理情報として、Blk Addr４が書き込まれる。
【００４８】
さらに、制御部１は、Blk Addr１の物理ブロックＢ１に含まれたデータ領域Ｄ１に対しても最終データブロックを書き込み、物理ブロックＢ１に含まれた冗長領域Ｒ１に対して管理情報（次の読み出し先を示す次の物理ブロック情報(Next Blk)）を書き込む。ここでも、管理情報として、Blk Addr４が書き込まれる。
【００４９】
さらに、制御部１は、Blk Addr０の物理ブロックＢ０に含まれたデータ領域Ｄ０に対しても最終データブロックを書き込み、物理ブロックＢ０に含まれた冗長領域Ｒ０に対して管理情報（次の読み出し先を示す次の物理ブロック情報(Next Blk)）を書き込む。ここでも、管理情報として、Blk Addr４が書き込まれる。
【００５０】
このように、制御部１は、最終データブロックを冗長的に書き込む。読み出し時には、制御部１は、物理ブロックＢ０、Ｂ１、Ｂ２、Ｂ３から読み出されたデータＤ０、Ｄ１、Ｄ２、Ｄ３を比較し、データＤ０、Ｄ１、Ｄ２、Ｄ３のうちの最も信頼性の高いデータを選択する。例えば、多数決を利用して、最も信頼性の高いデータを選択することができる。データＤ０とデータＤ１とが実質的に同一で、データＤ２がデータＤ０、Ｄ１、Ｄ３の何れとも実質的に同一ではなく、データＤ３がデータＤ０、Ｄ１、Ｄ２の何れとも実質的に同一でなければ、データＤ０又はデータＤ１を最も信頼性の高いデータとして選択することができる。これにより、読み出し時のエラー等を防止することができる。
【００５１】
本実施形態のプログラム実行装置は、上記したように、NAND Flashの各物理ブロックの冗長領域に管理情報（次の物理ブロック情報）を書き込む。これにより、NAND Flash の仮想アドレスと物理アドレスの対応付けのために（物理アドレスと論理アドレスとを変換するために）、NAND Flashのすべての物理ブロックのデータを読み取る必要がなくなるため（アドレス変換テーブルを作成する必要がなくなるため)、高速起動が可能となる（起動プログラムの高速読み出しが可能となる）。
【００５２】
また、NAND Flashを構成する複数の物理ブロックの中にデータ書き込み不能ブロックが存在する場合でも、つまりBad Block MARKさえ書き込むことができない書き込み不能ブロックが存在する場合でも、正常ブロックの冗長領域に書き込まれた管理情報（次の物理ブロック情報）を頼りにすれば、書き込み不能ブロックを抜かして、正常ブロックだけからデータを読み出すことができる。即ち、NAND Flashを構成する複数の物理ブロックの中に書き込み不能ブロックが存在しても、起動プログラムを正しく読み出すことができる。
【００５３】
なお、本願発明は、上記実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。また、各実施形態は可能な限り適宜組み合わせて実施してもよく、その場合組み合わせた効果が得られる。更に、上記実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適当な組み合わせにより種々の発明が抽出され得る。例えば、実施形態に示される全構成要件からいくつかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題が解決でき、発明の効果の欄で述べられている効果が得られる場合には、この構成要件が削除された構成が発明として抽出され得る。
【符号の説明】
【００５４】
１…制御部、２…第１プログラムメモリ、３…第２プログラムメモリ、４…メインメモリ、５…バス
【図１】
2011123830.tif 000003
【図２】
2011123830.tif 000004
【図３】
2011123830.tif 000005
【図４】
2011123830.tif 000006
【図５】
2011123830.tif 000007
【図６】
2011123830.tif 000008