(57)【要約】  第ｉ番目の分割データ列を格納する第ｉ番目の特定ブロックに読み出し処理(ST102〜ST111)を実行する(ST101)。第ｉ番目の分割データ列を正常に読み出すことができない場合、複数の通常ブロック群の各々に含まれる第ｉ番目の分割データ列を格納する第ｉ番目の通常ブロックに読み出し処理を順次実行する(ST114)。第ｉ番目の分割データ列を正常に読み出すことができた場合、ｐ個の分割データ列の読み出しが完了したか否かを判定する(ST112)。ｐ個の分割データ列の読み出しが完了していないと判定された場合、第ｉ番目の分割データ列の後に続く第ｉ＋１番目の分割データ列を格納する第ｉ＋１番目の特定ブロックに読み出し処理を実行する(ST115)。
2011001486.tif 000002
【特許請求の範囲】
【請求項１】
フラッシュメモリに格納されたデータ列をブロック単位で順次処理するデータ処理方法であって、
前記フラッシュメモリは、ｐ個（ｐ≧２）の特定ブロックと、複数の通常ブロック群とを含み、
前記複数の通常ブロック群は、それぞれ、ｐ個の通常ブロックを含み、
前記ｐ個の特定ブロックには、それぞれ、前記データ列をｐ個に分割して得られるｐ個の分割データ列が格納されており、
前記複数の通常ブロック群の各々に含まれるｐ個の通常ブロックには、それぞれ、前記ｐ個の特定ブロックに格納されたｐ個の分割データ列が複製されており、
前記特定ブロックの信頼性は、前記通常ブロックの信頼性よりも高く、
当該データ処理方法は、
第ｉ番目の分割データ列を格納する第ｉ番目（１≦ｉ≦ｎ）の特定ブロックに読み出し処理を実行するステップ（ａ）と、
前記ステップ（ａ）において前記第ｉ番目の分割データ列を正常に読み出すことができない場合に、前記複数の通常ブロック群の各々に含まれる前記第ｉ番目の分割データ列を格納する第ｉ番目の通常ブロックに前記読み出し処理を順次実行するステップ（ｂ）と、
前記ステップ（ａ）および前記ステップ（ｂ）のいずれか一方において前記第ｉ番目の分割データ列を正常に読み出すことができた場合に、前記ｐ個の分割データ列の読み出しが完了したか否かを判定するステップ（ｃ）と、
前記ステップ（ｃ）において前記ｐ個の分割データ列の読み出しが完了していないと判定された場合に、前記第ｉ番目の分割データ列の後に続く第ｉ＋１番目の分割データ列を格納する第ｉ＋１番目の特定ブロックに前記読み出し処理を実行するステップ（ｄ）とを備える
ことを特徴とするデータ処理方法。
【請求項２】
請求項１において、
前記ｐ個の特定ブロックおよび前記複数の通常ブロック群の各々に含まれるｐ個の通常ブロックは、それぞれ、当該ブロックが不良ブロックであるのか正常ブロックであるのかを識別するための不良ブロックマークを格納し、
前記読み出し処理は、
当該読み出し処理の対象となる対象ブロックに格納された不良ブロックマークを読み出し、前記不良ブロックマークに基づいて、前記対象ブロックが不良ブロックであるのか正常ブロックであるのかを判定するステップ（ｅ１）と、
前記ステップ（ｅ１）において前記対象ブロックが不良ブロックであると判定された場合に、前記対象ブロックから分割データ列を正常に読み出すことができないと判定するステップ（ｅ２）と、
前記ステップ（ｅ１）において前記対象ブロックが正常ブロックであると判定された場合に、前記対象ブロックに格納された分割データ列を読み出すステップ（ｅ３）とを含む
ことを特徴とするデータ処理方法。
【請求項３】
請求項２において、
前記ｐ個の特定ブロックおよび前記複数の通常ブロック群の各々に含まれるｐ個の通常ブロックは、それぞれ、当該ブロックに格納された分割データ列のエラー検出およびエラー訂正のために使用される誤り訂正符号を格納し、
前記ステップ（ｅ３）は、前記対象ブロックに格納された分割データ列を読み出すとともに前記対象ブロックに格納された誤り訂正符号を読み出し、
前記読み出し処理は、
前記ステップ（ｅ３）において読み出された誤り訂正符号に基づいて、前記ステップ（ｅ３）において読み出された分割データ列のエラー検出およびエラー訂正を実行するステップ（ｅ４）をさらに含む
ことを特徴とするデータ処理方法。
【請求項４】
請求項１において、
前記ステップ（ｃ）において前記ｐ個の分割データ列の読み出しが完了したと判定された場合に、前記ｐ個の分割データ列を、それぞれ、どのブロックから正常に読み出すことができたのかを示す履歴情報を不揮発性メモリに格納するステップ（ｆ）をさらに備える
ことを特徴とするデータ処理方法。
【請求項５】
請求項４において、
前記不揮発性メモリに前記履歴情報が格納されているか否かを判定するステップ（ｇ）と、
前記ステップ（ｇ）において前記履歴情報が格納されていると判定された場合に、前記履歴情報に基づいて、第ｉ番目の分割データ列を格納する第ｉ番目の特定ブロックおよび複数の第ｉ番目の通常ブロックのいずれか１つに前記読み出し処理を実行するステップ（ｈ）と、
前記ステップ（ｃ）において前記ｐ個の分割データ列の読み出しが完了していないと判定された場合に、前記不揮発性メモリに前記履歴情報が格納されているか否かを判定するステップ（ｉ）と、
前記ステップ（ｉ）において前記履歴情報が格納されていると判定された場合に、前記履歴情報に基づいて、第ｉ＋１番目の分割データ列を格納する第ｉ＋１番目の特定ブロックおよび複数の第ｉ＋１番目の通常ブロックのいずれか１つに前記読み出し処理を実行するステップ（ｊ）とをさらに備え、
前記ステップ（ａ）は、前記ステップ（ｇ）において前記履歴情報が格納されていないと判定された場合に実行され、
前記ステップ（ｂ）は、前記ステップ（ａ）および前記ステップ（ｈ）のうちいずれか一方において第ｉ番目の分割データ列を正常に読み出すことができない場合に実行され、
前記ステップ（ｃ）は、前記ステップ（ａ），前記ステップ（ｂ），および前記ステップ（ｈ）のいずれか１つにおいて前記第ｉ番目の分割データ列を正常に読み出すことができた場合に実行され、
前記ステップ（ｄ）は、前記ステップ（ｉ）において前記履歴情報が格納されていないと判定された場合に実行される
ことを特徴とするデータ処理方法。
【請求項６】
請求項１において、
前記ｐ個の分割データ列の各々について当該分割データ列を格納する特定ブロックおよび複数の通常ブロックのうち当該分割データ列を正常に読み出すことができないブロックの数を読出不可ブロック数として検出するステップ（ｋ）と、
前記ステップ（ｋ）において検出された読出不可ブロック数が予め定められた閾値よりも多いか否かを分割データ列毎に判定するステップ（ｌ）と、
前記ステップ（ｌ）において前記読出不可ブロック数が前記閾値よりも多いと判定された分割データ列を未使用ブロックに複製するステップ（ｍ）とをさらに備える
ことを特徴とするデータ処理方法。
【請求項７】
請求項１において、
前記データ列は、ＣＰＵを起動させるためのブートプログラムであり、
当該データ処理方法は、
前記ステップ（ａ）および前記ステップ（ｂ）のいずれか一方において正常に読み出された前記第ｉ番目の分割データ列をＲＡＭに転送するステップ（ｎ）と、
前記ステップ（ｃ）において前記ｐ個の分割データ列の読み出しが完了したと判定された場合に、前記ＲＡＭに転送されたｐ個の分割データ列を前記ブートプログラムとして前記ＣＰＵに実行させるステップ（ｏ）をさらに備える
ことを特徴とするデータ処理方法。
【請求項８】
フラッシュメモリに格納されたデータ列をブロック単位で順次処理する回路であって、
ＣＰＵと、
ＲＡＭとを備え、
前記フラッシュメモリは、ｐ個（ｐ≧２）の特定ブロックと、複数の通常ブロック群とを含み、
前記複数の通常ブロック群は、それぞれ、ｐ個の通常ブロックを含み、
前記ｐ個の特定ブロックには、それぞれ、前記データ列をｐ個に分割して得られるｐ個の分割データ列が格納されており、
前記複数の通常ブロック群の各々に含まれるｐ個の通常ブロックには、それぞれ、前記ｐ個の特定ブロックに格納されたｐ個の分割データ列が複製されており、
前記特定ブロックの信頼性は、前記通常ブロックの信頼性よりも高く、
前記ＣＰＵは、
第ｉ番目の分割データ列を格納する第ｉ番目（１≦ｉ≦ｎ）の特定ブロックに読み出し処理を実行し、
前記第ｉ番目の特定ブロックから前記第ｉ番目の分割データ列を正常に読み出すことができない場合に、前記複数の通常ブロック群の各々に含まれる前記第ｉ番目の分割データ列を格納する第ｉ番目の通常ブロックに前記読み出し処理を順次実行し、
前記第ｉ番目の特定ブロックおよび前記第ｉ番目の通常ブロックのいずれか一方から正常に読み出された前記第ｉ番目の分割データ列を前記ＲＡＭに転送し、
前記第ｉ番目の特定ブロックおよび前記第ｉ番目の通常ブロックのいずれか一方から前記第ｉ番目の分割データ列を正常に読み出すことができた場合に、前記ｐ個の分割データ列の読み出しが完了したか否かを判定し、
前記ｐ個の分割データ列の読み出しが完了していないと判定した場合に、前記第ｉ番目の分割データ列の後に続く第ｉ＋１番目の分割データ列を格納する第ｉ＋１番目の特定ブロックに前記読み出し処理を実行する
ことを特徴とする半導体集積回路。
【請求項９】
請求項８において、
前記データ列は、ブートプログラムであり、
前記ＣＰＵは、前記ｐ個の分割データ列の読み出しが完了したと判定した場合に、前記ＲＡＭに転送されたｐ個の分割データ列を前記ブートプログラムとして実行する
ことを特徴とする半導体集積回路。
【請求項１０】
請求項９において、
前記ＣＰＵに前記フラッシュメモリに格納されたデータ列をブロック単位で順次処理させるための起動開始プログラムを格納する不揮発性メモリをさらに備え、
前記ＣＰＵは、前記不揮発性メモリに格納された起動開始プログラムに従って動作する
ことを特徴とする半導体集積回路。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、フラッシュメモリに格納されたデータ列をブロック単位で順次処理する方法および半導体集積回路に関し、さらに詳しくは、データ読み出しの信頼性（正常なデータを読み出せる確率）を向上させる技術に関する。
【背景技術】
【０００２】
近年、多数の機能を１チップ上に集積したシステムＬＳＩは、様々な電子機器に使用されている。また、システムＬＳＩの内部または外部には、ブートプログラムなどの様々な処理プログラムやデータを記憶する不揮発性メモリが設けられる。このような不揮発性メモリとして、記憶データの書き換えが可能なフラッシュメモリが用いられることが多くなっている。ブートプログラムを格納するフラッシュメモリとして、ＮＯＲ型フラッシュメモリが使用されることが一般的に多い。しかし、最近では、ビット単価の安価なＮＡＮＤ型フラッシュメモリを使用する機会が増えてきている。ＮＡＮＤ型フラッシュメモリは、製造過程や使用過程において不良ブロックがランダムに発生することが知られている。そのため、ＮＡＮＤ型フラッシュメモリにブートプログラムを格納する場合、ブートプログラムが正常に記憶されていることを保証するために、ブートプログラムを格納するブロックが不良ブロックではないことを確認しなければならない。【０００３】
そこで、特許文献１には、不良ブロックに格納されたブートプログラムが実行されることを回避する技術が開示されている。特許文献１では、ＮＡＮＤ型フラッシュメモリの複数のブロックに同一のブートプログラム（プログラムデータ）が予め格納されている。そして、読み出されたプログラムデータが不良であるか否かを判定し、プログラムデータが不良であると判定された場合、不良であると判定されたプログラムデータを格納するブロックとは異なるブロックから、不良であると判定されたプログラムデータに対応するプログラムデータを読み出す。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００７−３０４７８１号公報（図５）
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ＮＡＮＤ型フラッシュメモリに含まれるブロックのいくつかは、出荷時に、ＮＡＮＤ型フラッシュメモリの製造メーカによって正常ブロック（データを正常に読み出すことができるブロック）であることが保証されている（以下、出荷時に製造メーカによって正常ブロックであることが保証されているブロックを“特定ブロック”と表記する）。しかしながら、特許文献１の半導体装置では、特定ブロックが読み出し処理の対象として優先的に選択されるとは限らず、特定ブロックよりも信頼性が劣る他のブロックが読み出し処理の対象として選択され続ける可能性がある。そのため、データ読み出しの信頼性（正常なデータが読み出される確率）を高めることが困難であった。なお、ＮＡＮＤ型フラッシュメモリがブートプログラムではない他のデータ列を格納している場合も、同様の課題が存在する。【０００６】
そこで、この発明は、データ読み出しの信頼性が高いデータ読み出し方法および半導体集積回路を提供することを目的とする。
【課題を解決するための手段】
【０００７】
この発明の１つの局面に従うと、データ処理方法は、フラッシュメモリに格納されたデータ列をブロック単位で順次処理するデータ処理方法であって、上記フラッシュメモリは、ｐ個（ｐ≧２）の特定ブロックと、複数の通常ブロック群とを含み、上記複数の通常ブロック群は、それぞれ、ｐ個の通常ブロックを含み、上記ｐ個の特定ブロックには、それぞれ、上記データ列をｐ個に分割して得られるｐ個の分割データ列が格納されており、上記複数の通常ブロック群の各々に含まれるｐ個の通常ブロックには、それぞれ、上記ｐ個の特定ブロックに格納されたｐ個の分割データ列が複製されており、上記特定ブロックの信頼性は、上記通常ブロックの信頼性よりも高く、上記データ処理方法は、第ｉ番目の分割データ列を格納する第ｉ番目（１≦ｉ≦ｎ）の特定ブロックに読み出し処理を実行するステップ（ａ）と、上記ステップ（ａ）において上記第ｉ番目の分割データ列を正常に読み出すことができない場合に、上記複数の通常ブロック群の各々に含まれる上記第ｉ番目の分割データ列を格納する第ｉ番目の通常ブロックに上記読み出し処理を順次実行するステップ（ｂ）と、上記ステップ（ａ）および上記ステップ（ｂ）のいずれか一方において上記第ｉ番目の分割データ列を正常に読み出すことができた場合に、上記ｐ個の分割データ列の読み出しが完了したか否かを判定するステップ（ｃ）と、上記ステップ（ｃ）において上記ｐ個の分割データ列の読み出しが完了していないと判定された場合に、上記第ｉ番目の分割データ列の後に続く第ｉ＋１番目の分割データ列を格納する第ｉ＋１番目の特定ブロックに上記読み出し処理を実行するステップ（ｄ）とを備える。上記データ処理方法では、通常ブロックよりも信頼性の高い特定ブロックを読み出し処理の対象として優先的に選択することにより、データ読み出しの信頼性（正常な分割データ列が読み出される確率）を高めることができる。【０００８】
なお、上記ｐ個の特定ブロックおよび上記複数の通常ブロック群の各々に含まれるｐ個の通常ブロックは、それぞれ、当該ブロックが不良ブロックであるのか正常ブロックであるのかを識別するための不良ブロックマークを格納し、上記読み出し処理は、当該読み出し処理の対象となる対象ブロックに格納された不良ブロックマークを読み出し、上記不良ブロックマークに基づいて、上記対象ブロックが不良ブロックであるのか正常ブロックであるのかを判定するステップ（ｅ１）と、上記ステップ（ｅ１）において上記対象ブロックが不良ブロックであると判定された場合に、上記対象ブロックから分割データ列を正常に読み出すことができないと判定するステップ（ｅ２）と、上記ステップ（ｅ１）において上記対象ブロックが正常ブロックであると判定された場合に、上記対象ブロックに格納された分割データ列を読み出すステップ（ｅ３）とを含んでいても良い。このように処理することにより、不良ページだけでなく不良ページである可能性が高いページも回避できるので、ページ単位で正常／不良を管理する場合よりも、データ読み出しの信頼性を高めることができる。【０００９】
また、上記ｐ個の特定ブロックおよび上記複数の通常ブロック群の各々に含まれるｐ個の通常ブロックは、それぞれ、当該ブロックに格納された分割データ列のエラー検出およびエラー訂正のために使用される誤り訂正符号を格納し、上記ステップ（ｅ３）は、上記対象ブロックに格納された分割データ列を読み出すとともに上記対象ブロックに格納された誤り訂正符号を読み出し、上記読み出し処理は、上記ステップ（ｅ３）において読み出された誤り訂正符号に基づいて、上記ステップ（ｅ３）において読み出された分割データ列のエラー検出およびエラー訂正を実行するステップ（ｅ４）をさらに含んでいても良い。【００１０】
なお、上記データ処理方法は、上記ステップ（ｃ）において上記ｐ個の分割データ列の読み出しが完了したと判定された場合に、上記ｐ個の分割データ列を、それぞれ、どのブロックから正常に読み出すことができたのかを示す履歴情報を不揮発性メモリに格納するステップ（ｆ）をさらに備えていても良い。上記データ処理方法では、次回のデータ処理において不揮発性メモリに格納された履歴情報を参照することにより、読出不可ブロック（分割データ列を正常に読み出すことができないブロック）へのアクセスを回避することができる。【００１１】
また、上記データ処理方法は、上記不揮発性メモリに上記履歴情報が格納されているか否かを判定するステップ（ｇ）と、上記ステップ（ｇ）において上記履歴情報が格納されていると判定された場合に、上記履歴情報に基づいて、第ｉ番目の分割データ列を格納する第ｉ番目の特定ブロックおよび複数の第ｉ番目の通常ブロックのいずれか１つに上記読み出し処理を実行するステップ（ｈ）と、上記ステップ（ｃ）において上記ｐ個の分割データ列の読み出しが完了していないと判定された場合に、上記不揮発性メモリに上記履歴情報が格納されているか否かを判定するステップ（ｉ）と、上記ステップ（ｉ）において上記履歴情報が格納されていると判定された場合に、上記履歴情報に基づいて、第ｉ＋１番目の分割データ列を格納する第ｉ＋１番目の特定ブロックおよび複数の第ｉ＋１番目の通常ブロックのいずれか１つに上記読み出し処理を実行するステップ（ｊ）とをさらに備え、上記ステップ（ａ）は、上記ステップ（ｇ）において上記履歴情報が格納されていないと判定された場合に実行され、上記ステップ（ｂ）は、上記ステップ（ａ）および上記ステップ（ｈ）のうちいずれか一方において第ｉ番目の分割データ列を正常に読み出すことができない場合に実行され、上記ステップ（ｃ）は、上記ステップ（ａ），上記ステップ（ｂ），および上記ステップ（ｈ）のいずれか１つにおいて上記第ｉ番目の分割データ列を正常に読み出すことができた場合に実行され、上記ステップ（ｄ）は、上記ステップ（ｉ）において上記履歴情報が格納されていないと判定された場合に実行されても良い。上記データ処理方法では、履歴情報に基づいて読出不可ブロックへのアクセスを回避することができる。【００１２】
また、上記データ処理方法は、上記ｐ個の分割データ列の各々について当該分割データ列を格納する特定ブロックおよび複数の通常ブロックのうち当該分割データ列を正常に読み出すことができないブロックの数を読出不可ブロック数として検出するステップ（ｋ）と、上記ステップ（ｋ）において検出された読出不可ブロック数が予め定められた閾値よりも多いか否かを分割データ列毎に判定するステップ（ｌ）と、上記ステップ（ｌ）において上記読出不可ブロック数が上記閾値よりも多いと判定された分割データ列を未使用ブロックに複製するステップ（ｍ）とをさらに備えていても良い。上記データ処理方法では、分割データ列の各々の読出不可ブロック数に応じて複製処理を実行することにより、データ列を正確に再構築できないという事態を回避することができる。【００１３】
なお、上記データ列は、ＣＰＵを起動させるためのブートプログラムであり、上記データ処理方法は、上記ステップ（ａ）および上記ステップ（ｂ）のいずれか一方において正常に読み出された上記第ｉ番目の分割データ列をＲＡＭに転送するステップ（ｎ）と、上記ステップ（ｃ）において上記ｐ個の分割データ列の読み出しが完了したと判定された場合に、上記ＲＡＭに転送されたｐ個の分割データ列を上記ブートプログラムとして上記ＣＰＵに実行させるステップ（ｏ）をさらに備えていても良い。上記データ処理方法では、正常な分割プログラムが読み出される確率が高くなることにより、ブートプログラムを正確に再構築できるので、不正なブートプログラムをＣＰＵが実行することによって半導体装置が誤作動してしまうことを抑制できる。【００１４】
この発明のもう１つの局面に従うと、半導体集積回路は、フラッシュメモリに格納されたデータ列をブロック単位で順次処理する回路であって、ＣＰＵと、ＲＡＭとを備え、上記フラッシュメモリは、ｐ個（ｐ≧２）の特定ブロックと、複数の通常ブロック群とを含み、上記複数の通常ブロック群は、それぞれ、ｐ個の通常ブロックを含み、上記ｐ個の特定ブロックには、それぞれ、上記データ列をｐ個に分割して得られるｐ個の分割データ列が格納されており、上記複数の通常ブロック群の各々に含まれるｐ個の通常ブロックには、それぞれ、上記ｐ個の特定ブロックに格納されたｐ個の分割データ列が複製されており、上記特定ブロックの信頼性は、上記通常ブロックの信頼性よりも高く、上記ＣＰＵは、第ｉ番目の分割データ列を格納する第ｉ番目（１≦ｉ≦ｎ）の特定ブロックに読み出し処理を実行し、上記第ｉ番目の特定ブロックから上記第ｉ番目の分割データ列を正常に読み出すことができない場合に、上記複数の通常ブロック群の各々に含まれる上記第ｉ番目の分割データ列を格納する第ｉ番目の通常ブロックに上記読み出し処理を順次実行し、上記第ｉ番目の特定ブロックおよび上記第ｉ番目の通常ブロックのいずれか一方から正常に読み出された上記第ｉ番目の分割データ列を上記ＲＡＭに転送し、上記第ｉ番目の特定ブロックおよび上記第ｉ番目の通常ブロックのいずれか一方から上記第ｉ番目の分割データ列を正常に読み出すことができた場合に、上記ｐ個の分割データ列の読み出しが完了したか否かを判定し、上記ｐ個の分割データ列の読み出しが完了していないと判定した場合に、上記第ｉ番目の分割データ列の後に続く第ｉ＋１番目の分割データ列を格納する第ｉ＋１番目の特定ブロックに上記読み出し処理を実行する。上記半導体集積回路では、通常ブロックよりも信頼性の高い特定ブロックを読み出し処理の対象として優先的に選択することにより、データ読み出しの信頼性（正常な分割データ列が読み出される確率）を高めることができる。【００１５】
なお、上記データ列は、ブートプログラムであり、上記ＣＰＵは、上記ｐ個の分割データ列の読み出しが完了したと判定した場合に、上記ＲＡＭに転送されたｐ個の分割データ列を上記ブートプログラムとして実行しても良い。【００１６】
また、上記半導体集積回路は、上記ＣＰＵに上記フラッシュメモリに格納されたデータ列をブロック単位で順次処理させるための起動開始プログラムを格納する不揮発性メモリをさらに備え、上記ＣＰＵは、上記不揮発性メモリに格納された起動開始プログラムに従って動作しても良い。
【発明の効果】
【００１７】
以上のように、通常ブロックよりも信頼性の高い特定ブロックを読み出し処理の対象として優先的に選択することにより、データ読み出しの信頼性（正常な分割データ列が読み出される確率）を高めることができる。
【図面の簡単な説明】
【００１８】
【図１】図１は、実施形態１による半導体装置の構成例を示す図である。
【図２】図２は、図１に示したＮＡＮＤ型フラッシュメモリの構造例を示す図である。
【図３】図３は、図１に示したＮＡＮＤ型フラッシュメモリにおけるブートプログラムの格納についてについて説明するための図である。
【図４】図４は、図１に示した半導体装置の起動処理について説明するための図である。
【図５】図５は、ブートプログラム読み出し処理について説明するための図である。
【図６】図６は、実施形態２による半導体装置の構成例を示す図である。
【図７】図７は、図６に示したＮＡＮＤ型フラッシュメモリにおける読出不可ブロックについて説明するための図である。
【図８】図８は、ブート履歴情報について説明するための図である。
【図９】図９は、図６に示した半導体装置の起動処理について説明するための図である。
【図１０】図１０は、図６に示した半導体装置の起動処理について説明するための図である。
【図１１】図１１は、実施形態３による半導体装置の構成例を示す図である。
【図１２】図１２は、図１１に示した半導体装置における複製処理について説明するための図である。
【図１３】図１３は、図１１に示した半導体装置における複製処理の具体例について説明するための図である。
【図１４】図１４は、図１１に示した半導体装置における複製処理の別の具体例について説明するための図である。
【発明を実施するための形態】
【００１９】
以下、この発明の実施の形態を図面を参照して詳しく説明する。なお、図中同一または相当部分には同一の符号を付しその説明は繰り返さない。
【００２０】
（実施形態１）
図１は、実施形態１による半導体装置の構成例を示す。この半導体装置は、ＮＡＮＤ型フラッシュメモリ１０と、システムＬＳＩ１１（半導体集積回路）とを備える。ＮＡＮＤ型フラッシュメモリ１０は、システムＬＳＩ１１の外部に設けられる。システムＬＳＩ１１では、各種回路が同一の半導体チップ上に集積されている。
【００２１】
〔ＮＡＮＤ型フラッシュメモリ〕
ＮＡＮＤ型フラッシュメモリ１０は、半導体装置を起動するためのブートプログラムを含む各種の処理プログラムやデータを格納する。
【００２２】
図２のように、ＮＡＮＤ型フラッシュメモリ１０は、複数のブロックＢ０，Ｂ１，…，Ｂｎ（ｎ≧２）を含み、ブロックＢ０，Ｂ１，…，Ｂｎの各々は、複数のページＰ０，Ｐ１，…，Ｐｍ（ｍ≧２）を含む。ブロックＢ０，Ｂ１，…，Ｂｎには、それぞれ、固有のブロック番号（０，１，…，ｎ）が割り当てられ、ページＰ０，Ｐ１，…，Ｐｍには、それぞれ、固有のページ番号（０，１，…，ｍ）が割り当てられる。ＮＡＮＤ型フラッシュメモリ１０へのアクセスの際、まず、アクセス先のブロック番号が指定され、さらに、アクセス先のページ番号が指定される。これにより、ページ単位でデータの読み出しや書き込みが行われる。
【００２３】
さらに、ページＰ０，Ｐ１，…，Ｐｍの各々は、データ領域と、冗長領域とを含む。冗長領域は、誤り訂正符号(ECC:Error Correcting Code)などの管理情報を格納する。誤り訂正符号は、データ領域に格納されたデータのエラー検出およびエラー訂正のために使用される。また、第１番目のページＰ０の冗長領域には、不良ブロックマークが格納される。不良ブロックマークは、ページＰ０を含むブロックが不良ブロック（データを正常に読み出すことができないブロック）であるのか正常ブロック（データを正常に読み出すことができるブロック）であるのかを識別するための情報であり、不良ブロックマークの値を参照することによって、不良ブロックであるのか正常ブロックであるのかを判別できる。
【００２４】
また、ＮＡＮＤ型フラッシュメモリ１０に含まれるブロックＢ０，Ｂ１，…，Ｂｎのいくつかは、出荷時に、ＮＡＮＤ型フラッシュメモリの製造メーカによって正常ブロックであることが保証されている。以下の説明では、ブロックＢ０，Ｂ１，…，Ｂｎのうち、出荷時に製造メーカによって正常ブロックであることが保証されているブロックを“特定ブロック”と表記し、その他のブロックを“通常ブロック”と表記する。つまり、特定ブロックの信頼性（正常なデータを読み出せる確率）は、通常ブロックの信頼性よりも高い。
【００２５】
〔ブートプログラムの格納〕
次に、図３を参照して、図１に示したＮＡＮＤ型フラッシュメモリ１０におけるブートプログラムの格納について説明する。ここでは、３個のブロックＢ０，Ｂ１，Ｂ２を“特定ブロック”とし、その他のブロックＢ３，Ｂ４，…，Ｂｎを“通常ブロック”とする。
【００２６】
３個の特定ブロックＢ０，Ｂ１，Ｂ２には、それぞれ、１つのブートプログラムを３個の分割して得られる３個の分割プログラムＤ１，Ｄ２，Ｄ３が格納されている。また、通常ブロックＢ３，Ｂ４，Ｂ５には、それぞれ、特定ブロックＢ０，Ｂ１，Ｂ２に格納された分割プログラムＤ１，Ｄ２，Ｄ３が複製されている。これと同様に、通常ブロックＢ６，Ｂ７，Ｂ８および通常ブロックＢ９，Ｂ１０，Ｂ１１にも、それぞれ、特定ブロックＢ０，Ｂ１，Ｂ２に格納された分割プログラムＤ１，Ｄ２，Ｄ３が複製されている。なお、通常ブロックＢ１２，…，Ｂｎは、分割プログラムＤ１，Ｄ２，Ｄ３を格納していない未使用ブロックである。
【００２７】
ここで、通常ブロックＢ３，Ｂ４，Ｂ５，通常ブロックＢ６，Ｂ７，Ｂ８，および通常ブロックＢ９，Ｂ１０，Ｂ１１が、それぞれ、通常ブロック群ＢＧ１，ＢＧ２，ＢＧ３に含まれていると考えると、通常ブロック群ＢＧ１，ＢＧ２，ＢＧ３の各々に含まれる第１番目の通常ブロック（通常ブロックＢ３，Ｂ６，Ｂ９）は、第１番目の分割プログラムＤ１を格納し、第２番目の通常ブロック（通常ブロックＢ４，Ｂ７，Ｂ１０）は、第２番目の分割プログラムＤ２を格納し、第３番目の通常ブロック（通常ブロックＢ５，Ｂ８，Ｂ１１）は、第３番目の分割プログラムＤ３を格納していることになる。
【００２８】
〔システムＬＳＩ〕
図１に戻って、システムＬＳＩ１１は、ＣＰＵ１０１と、ＲＯＭ１０２と、ＲＡＭ１０３と、フラッシュメモリコントローラ１０４と、バスコントローラ１０５とを備える。
【００２９】
ＣＰＵ１０１は、バスコントローラ１０５を通じて、ＲＯＭ１０２，ＲＡＭ１０３，およびフラッシュメモリコントローラ１０４に接続されている。ＲＯＭ１０２は、ランダムアクセス可能な不揮発性メモリであり、起動開始プログラムを格納する。ＲＡＭ１０３は、ランダムアクセス可能な不揮発性メモリであり、ＮＡＮＤ型フラッシュメモリ１０に格納されているブートプログラムの転送先のメモリ（ＮＡＮＤ型フラッシュメモリ１０から転送されたブートプログラムを格納するためのメモリ）である。
【００３０】
フラッシュメモリコントローラ１０４は、ＮＡＮＤ型フラッシュメモリ１０の読み出しを制御する回路であり、ＣＰＵ１０１によるＮＡＮＤ型フラッシュメモリ１０のブロック番号およびページ番号の指定に応答して、ＮＡＮＤ型フラッシュメモリ１０から分割プログラムをページ単位で読み出すととともにページに格納された誤り訂正符号を読み出し、誤り訂正符号に基づいて１ページ分の分割プログラムにエラー検出およびエラー訂正を実行する。
【００３１】
バスコントローラ１０５は、ＣＰＵ１０１，ＲＯＭ１０２，ＲＡＭ１０３，およびフラッシュメモリコントローラ１０４を相互にバスで接続しており、ＣＰＵ１０１によるＲＯＭ１０２，ＲＡＭ１０３，およびフラッシュメモリコントローラ１０４に対するアクセスの調停を行う。
【００３２】
システムＬＳＩ１１のリセットが解除された後、ＣＰＵ１０１は、ＲＯＭ１０２にアクセスし、ＲＯＭ１０２に格納された起動開始プログラムを実行する。起動開始プログラムは、ＣＰＵ１０１にＮＡＮＤ型フラッシュメモリ１０に格納されたブートプログラムをブロック単位で順次処理させて、ＮＡＮＤ型フラッシュメモリ１０に格納されたブートプログラムをＲＡＭ１０３に転送させた後に、ＲＡＭ１０３に格納されたブートプログラムをＣＰＵ１０１に実行させるためのプログラムである。
【００３３】
〔動作〕
次に、図４を参照して、図１に示した半導体装置の起動処理について説明する。ＣＰＵ１０１は、システムＬＳＩ１１のリセットが解除されると、ＲＯＭ１０２に格納された起動開始プログラムに従って、以下の動作を実行する。
【００３４】
《ステップＳＴ１０１》
まず、ＣＰＵ１０１は、ＮＡＮＤ型フラッシュメモリ１０のうち第１番目の特定ブロックＢ０のブロック番号“０”と特定ブロックＢ０に含まれる第１番目のページＰ０のページ番号“０”とを指定する。このようにして、第１番目の特定ブロックＢ０が対象ブロック（読み出し処理の対象）として選択される。
【００３５】
《ステップＳＴ１０２》
次に、フラッシュメモリコントローラ１０４は、ＣＰＵ１０１によって指定されたブロック番号およびページ番号に基づいて、対象ブロックに含まれる第１番目のページＰ０の冗長領域から不良ブロックマークを読み出す。
【００３６】
《ステップＳＴ１０３》
次に、ＣＰＵ１０１は、フラッシュメモリコントローラ１０４によって読み出された不良ブロックマークの値に基づいて、対象ブロックが正常ブロックであるか不良ブロックであるかを判定する。対象ブロックが正常ブロックである場合には、ステップＳＴ１０４へ進む。一方、対象ブロックが不良ブロックである場合、ＣＰＵ１０１は、対象ブロックから分割プログラムを正常に読み出すことができないと判定し、ステップＳＴ１１４へ進む。
【００３７】
《ステップＳＴ１０４》
次に、フラッシュメモリコントローラ１０４は、ＣＰＵ１０１による制御に応答して、対象ブロックの第１番目のページＰ０（すなわち、先頭ページ）から分割プログラムを読み出すとともに、第１番目のページＰ０の冗長領域から誤り訂正符号を読み出す。このようにして、１ページ分の分割プログラムが読み出される。
【００３８】
《ステップＳＴ１０５》
次に、フラッシュメモリコントローラ１０４は、誤り訂正符号に基づいて、１ページ分の分割プログラムにエラー検出を実行する。
【００３９】
《ステップＳＴ１０６》
次に、フラッシュメモリコントローラ１０４は、１ページ分の分割プログラムに訂正不可能なエラーが含まれているか否かを判定する。訂正不可能なエラーが含まれていない場合には、ステップＳＴ１０７へ進む。一方、訂正不可能なエラーが含まれている場合、ＣＰＵ１０１は、対象ブロックから分割プログラムを正常に読み出すことができないと判定し、ステップＳＴ１１４へ進む。
【００４０】
《ステップＳＴ１０７》
次に、フラッシュメモリコントローラ１０４は、１ページ分の分割プログラムに訂正可能なエラーが含まれているか否かを判定する。訂正可能なエラーが含まれている場合には、ステップＳＴ１０８へ進む。一方、訂正可能なエラーが含まれていない場合には、ステップＳＴ１０９へ進む。
【００４１】
《ステップＳＴ１０８》
次に、フラッシュメモリコントローラ１０４は、１ページ分の分割プログラムに存在する訂正可能なエラーに対してエラー訂正を実行する。
【００４２】
《ステップＳＴ１０９》
次に、フラッシュメモリコントローラ１０４は、ＣＰＵ１０１による制御に応答して、１ページ分の分割プログラムをＲＡＭ１０３に転送する。
【００４３】
《ステップＳＴ１１０》
次に、ＣＰＵ１０１は、対象ブロックの読み出しが完了したか否か（対象ブロックから１ブロック分の分割プログラムを読み出したか否か）を判定する。対象ブロックの読み出しが完了していない場合には、ステップＳＴ１１１へ進み、対象ブロックの読み出しが完了した場合には、ステップＳＴ１１２へ進む。
【００４４】
《ステップＳＴ１１１》
次に、ＣＰＵ１０１は、対象ブロックの次のページのページ番号を指定する。フラッシュメモリコントローラ１０４は、ＣＰＵ１０１による制御に応答して、対象ブロックの次のページに格納された分割プログラムを読み出す。次に、ステップＳＴ１０５へ進む。このように、対象ブロックから分割プログラムがページ単位で読み出されて処理される。
【００４５】
《ステップＳＴ１１２》
一方、ステップＳＴ１１０において対象ブロックの読み出しが完了していると判定された場合、ＣＰＵ１０１は、ブートプログラムの読み出しが完了したか否か（１つのブートプログラムを構成する３個の分割プログラムＤ１，Ｄ２，Ｄ３の読み出しが完了したか否か）を判定する。ブートプログラムの読み出しが完了している場合には、ステップＳＴ１１３へ進み、ブートプログラムの読み出しが完了していない場合には、ステップＳＴ１１５へ進む。
【００４６】
《ステップＳＴ１１３》
次に、ＣＰＵ１０１は、ＲＡＭ１０３に格納されたブートプログラム（分割プログラムＤ１，Ｄ２，Ｄ３によって再構築されたブートプログラム）に従って、半導体装置を起動させる。
【００４７】
《ステップＳＴ１１４》
一方、ステップＳＴ１０３またはＳＴ１０６において対象ブロックから分割プログラムを正常に読み出すことができないと判定された場合（ステップＳＴ１０３において対象ブロックが不良ブロックであると判定された場合、または、ステップＳＴ１０６において訂正不可能なエラーが含まれていると判定された場合）、ＣＰＵ１０１は、現在の対象ブロックに格納されている分割プログラムと同一の分割プログラムを格納する通常ブロックを次の対象ブロックとして選択する。次に、ステップＳＴ１０２へ進む。例えば、図３の場合、ＣＰＵ１０１は、特定ブロックＢ０を現在の対象ブロックとして選択している場合は、通常ブロックＢ３を次の対象ブロックとして選択し、通常ブロックＢ３を現在の対象ブロックとして選択している場合は、通常ブロックＢ６を次の対象ブロックとして選択する。このように、通常ブロック群ＢＧ１，ＢＧ２，ＢＧ３の順番で、同一プログラムを格納する通常ブロックＢ３，Ｂ６，Ｂ９が対象ブロックとして選択される。なお、現在の対象ブロックに格納された分割プログラムと同一の分割プログラムを格納する通常ブロックのいずれからも分割プログラムを正常に読み出すことができない場合、ＣＰＵ１０１は、ＮＡＮＤ型フラッシュメモリ１０に対する読み出し処理を終了する。この場合、半導体装置は、起動されないことになる。例えば、図３の場合、特定ブロックＢ０から分割プログラムＤ１を正常に読み出せず、通常ブロックＢ３，Ｂ６，Ｂ９のいずれからも分割プログラムを正常に読み出せない場合には、ＣＰＵ１０１は、ＮＡＮＤ型フラッシュメモリ１０に対する読み出し処理を終了する。
【００４８】
《ステップＳＴ１１５》
また、ステップＳＴ１１２において、ブートプログラムの読み出しが完了していないと判定された場合、ＣＰＵ１０１は、後続の分割プログラム（現在の対象ブロックから読み出された分割プログラムの後に続く分割プログラム）を格納する特定ブロックを次の対象ブロックとして選択する。次に、ステップＳＴ１０２へ進む。例えば、図３の場合、ＣＰＵ１０１は、特定ブロックＢ０を現在の対象ブロックとして選択している場合は、特定ブロックＢ１を次の対象ブロックとして選択し、通常ブロックＢ４を現在の対象ブロックとして選択している場合は、特定ブロックＢ２を次の対象ブロックとして選択する。
【００４９】
〔ブートプログラム読み出し処理〕
次に、図５を参照して、ブートプログラム読み出し処理について説明する。ここでは、特定ブロックＢ０，Ｂ２，通常ブロックＢ３，Ｂ５，Ｂ８は、読出不可ブロック（分割プログラムを正常に読み出すことができないブロック）であるものとする。
【００５０】
まず、ＣＰＵ１０１は、第１番目の分割プログラムＤ１を格納する第１番目の特定ブロックＢ０を対象ブロックとして選択し、特定ブロックＢ０に読み出し処理（ＳＴ１０２〜ＳＴ１１１）を実行する。
【００５１】
次に、ＣＰＵ１０１は、特定ブロックＢ０から分割プログラムＤ１を正常に読み出すことができないので、分割プログラムＤ１を格納する通常ブロックＢ３を次の対象ブロックとして選択し、通常ブロックＢ３に読み出し処理を実行する。次に、ＣＰＵ１０１は、特定ブロックＢ３からも分割プログラムＤ１を正常に読み出すことができないので、分割プログラムＤ１を格納する通常ブロックＢ６を次の対象ブロックとして選択し、通常ブロックＢ６に読み出し処理を実行する。このように、ＣＰＵ１０１は、第１番目の特定ブロックＢ１から第１番目の分割プログラムＤ１を正常に読む出すことができない場合、通常ブロック群ＢＧ１，ＢＧ２，ＢＧ３の順番で、通常ブロック群ＢＧ１，ＢＧ２，ＢＧ３の各々に含まれる第１番目の通常ブロックＢ３，Ｂ６，Ｂ９に読み出し処理を実行する。
【００５２】
次に、ＣＰＵ１０１は、通常ブロックＢ６から分割プログラムＤ１を正常に読み出し、３個の分割プログラムＤ１，Ｄ２，Ｄ３の読み出しを完了したか否かを判定する。ここでは、分割プログラムＤ２，Ｄ３の読み出しが完了していないので、ＣＰＵ１０１は、第１番目の分割プログラムＤ１の後に続く第２番目の分割プログラムＤ２を格納する第２番目の特定ブロックＢ１を次の対象ブロックとして選択し、特定ブロックＢ１に読み出し処理を実行する。
【００５３】
次に、ＣＰＵ１０１は、特定ブロックＢ１から分割プログラムＤ２を正常に読み出し、分割プログラムＤ１，Ｄ２，Ｄ３の読み出しを完了したか否かを判定する。ここでは、分割プログラムＤ３の読み出しが完了していないので、ＣＰＵ１０１は、第２番目の分割プログラムＤ２の後に続く第３番目の分割プログラムＤ３を格納する第３番目の特定ブロックＢ２を次の対象ブロックとして選択し、特定ブロックＢ２に読み出し処理を実行する。
【００５４】
次に、ＣＰＵ１０１は、特定ブロックＢ２から分割プログラムＤ３を正常に読み出すことができないので、分割プログラムＤ３を格納する通常ブロックＢ５（通常ブロック群ＢＧ１に含まれる第３番目の通常ブロック）を次の対象ブロックとして選択し、通常ブロックＢ５に読み出し処理を実行する。次に、ＣＰＵ１０１は、通常ブロックＢ５，Ｂ８のいずれからも分割プログラムを正常に読み出すことができないので、通常ブロックＢ１１（通常ブロック群ＢＧ３に含まれる第３番目の通常ブロック）を対象ブロックとして選択し、通常ブロックＢ１１に読み出し処理を実行する。
【００５５】
次に、ＣＰＵ１０１は、通常ブロックＢ１１から分割プログラムＤ２を正常に読み出し、分割プログラムＤ１，Ｄ２，Ｄ３の読み出しを完了したか否かを判定する。ここでは、分割プログラムＤ１，Ｄ２，Ｄ３の読み出しが完了しているので、ＣＰＵ１０１は、ＲＡＭ１０３に転送されたブートプログラム（分割プログラムＤ１，Ｄ２，Ｄ３）に従って半導体装置を起動させる。
【００５６】
以上のように、通常ブロックよりも信頼性の高い特定ブロックを読み出し処理の対象として優先的に選択することにより、データ読み出しの信頼性（正常な分割プログラムが読み出される確率）を高めることができる。また、正常な分割プログラムが読み出される確率が高くなることにより、ブートプログラムを正確に再構築できるので、不正なブートプログラムをＣＰＵ１０１が実行することによって半導体装置が誤作動してしまうことを抑制できる。そのため、半導体装置を安定的に起動させることができる。
【００５７】
また、特許文献１の半導体装置では、ＮＡＮＤ型フラッシュメモリのブロック単位ではなくページ単位で不良データを回避しているので、不良ページ（データを正常に読み出すことができないページ）を含むブロックは、不良ブロックとして管理されていない。例えば、あるブロックが不良ページを含んでいたとしても、そのブロックは不良ブロックとして管理されず、そのブロックに含まれる他のページからデータを正常に読み出すことができるものとして管理されている。そのため、不良ページを含むブロックを“不良ブロック”として使用しないように管理することができない。また、あるページが不良ページである場合、そのページの近傍に位置する他のページも不良ページである可能性が高い。すなわち、あるブロックが不良ページを含んでいる場合、そのブロックに含まれる他のページも不良ページである可能性が高い。図１に示した半導体装置では、ブロック単位で正常／不良を管理することにより、不良ページだけでなく不良ページである可能性が高いページも回避できるので、ページ単位で正常／不良を管理する場合よりも、データ読み出しの信頼性を高めることができる。
【００５８】
（実施形態２）
図６は、実施形態２による半導体装置の構成例を示す。この半導体装置は、図１に示した半導体装置の構成に加えて、不揮発性メモリ２０を備える。なお、不揮発性メモリ２０は、システムＬＳＩ１１の内部に設けられても良いし、システムＬＳＩの外部に設けられても良い。
【００５９】
ＮＡＮＤ型フラッシュメモリ１０では、使用過程において読出不可ブロックがランダムに増加する。そのため、読出不可ブロックを回避せずにＮＡＮＤ型フラッシュメモリ１０にアクセスした場合、読出不可ブロックの増加に伴って半導体装置の起動時間が増加してしまう可能性がある。図６に示した半導体装置では、ブート履歴情報（分割プログラムＤ１，Ｄ２，Ｄ３を、それぞれ、どのブロックから正常に読み出すことができたのかを示す情報）を不揮発性メモリ２０に格納する処理と、ブート履歴情報に基づいて読出不可ブロックへのアクセスを回避しながらブートプログラムをＮＡＮＤ型フラッシュメモリ１０からブロック単位で順次読み出す処理とが実行される。
【００６０】
〔ブート履歴情報〕
ブート履歴情報には、分割プログラムＤ１，Ｄ２，Ｄ３を正常に読み出すことができたブロックのブロック番号が示されていても良い。例えば、図７のように、特定ブロックＢ０，Ｂ２，通常ブロックＢ３，Ｂ５，Ｂ８が読出不可ブロックである場合、分割プログラムＤ１，Ｄ２，Ｄ３は、それぞれ、通常ブロックＢ６，特定ブロックＢ１，通常ブロックＢ１１から正常に読み出すことができる。したがって、図８のように、ブート履歴情報において、分割プログラムＤ１，Ｄ２，Ｄ３に、通常ブロックＢ６，特定ブロックＢ１，通常ブロックＢ１１のブロック番号（６，１，１１）がそれぞれ対応付けられる。
【００６１】
また、ブート履歴情報には、分割プログラムＤ１，Ｄ２，Ｄ３の各々の読出不可ブロック数（その分割プログラムを正常に読み出すことができないブロックの数）が示されていても良い。また、ＣＰＵ１０１は、分割プログラムＤ１，Ｄ２，Ｄ３の各々の読出不可ブロック数に基づいて、分割プログラムＤ１，Ｄ２，Ｄ３を正常に読み出すことができたブロックを検出できる。例えば、図７のように、特定ブロックＢ０，Ｂ２，通常ブロックＢ３，Ｂ５，Ｂ８が読出不可ブロックである場合、分割プログラムＤ１，Ｄ２，Ｄ３に、読出不可ブロック数（２，０，３）がそれぞれ対応付けられる。この場合、ＣＰＵ１０１は、分割プログラムＤ１の読出不可ブロック数“２”を参照して、分割プログラムＤ１を格納する特定ブロックＢ０および通常ブロックＢ３，Ｂ６，Ｂ９のうち第１番目に読み出し処理が実行される特定ブロックＢ０と第２番目に読み出し処理が実行される通常ブロックＢ３とが読出不可ブロックであり、第３番目に読み出し処理が実行される通常ブロックＢ６から分割プログラムＤ１を正常に読み出せることを認識できる。
【００６２】
〔動作〕
次に、図９，図１０を参照して、図６に示した半導体装置の起動処理について説明する。ＣＰＵ１０１は、システムＬＳＩ１１のリセットが解除されると、ＲＯＭ１０２に格納された起動開始プログラムに従って、以下の動作を実行する。ここでは、図４に示したステップＳＴ１０１〜ＳＴ１１５に加えて、以下のステップＳＴ２０１〜ＳＴ２０５が実行される。
【００６３】
《ステップＳＴ２０１》
まず、ＣＰＵ１０１は、不揮発性メモリ２０にアクセスし、不揮発性メモリ２０にブート履歴情報が格納されているか否かを判定する。ブート履歴情報が格納されている場合には、ステップＳＴ２０２へ進み、ブート履歴情報が格納されていない場合には、ステップＳＴ１０１へ進む。
【００６４】
《ステップＳＴ２０２》
次に、ＣＰＵ１０１は、不揮発性メモリ２０に格納されたブート履歴情報を読み出し、第１番目の分割プログラムＤ１を格納する特定ブロックＢ０，通常ブロックＢ３，Ｂ６，Ｂ９のうちブート履歴情報に示されたブロックを対象ブロックとして選択する。例えば、図８のようなブート履歴情報を読み出した場合、ＣＰＵ１０１は、特定ブロックＢ０ではなく、通常ブロックＢ６を対象ブロックとして選択する。次に、ステップＳＴ１０２へ進む。
【００６５】
このように、ＣＰＵ１０１は、ブート履歴情報が格納されている場合には、ブート履歴情報に示されたブロックからアクセスを開始し、ブート履歴情報が格納されていない場合には、特定ブロックからアクセスを開始する。
【００６６】
《ステップＳＴ２０３》
ステップＳＴ１１２においてブートプログラムの読み出しが完了していると判定された場合、ＣＰＵ１０１は、ステップＳＴ１０３，ＳＴ１０６の判定結果に基づいて、ブート履歴情報を作成し、ブート履歴情報を不揮発性メモリ２０に格納する。このブート履歴情報は、今回の起動処理において、分割プログラムＤ１，Ｄ２，Ｄ３を、それぞれ、どのブロックから正常に読み出すことができたのかを示している。ステップＳＴ１１３へ進む。例えば、ＣＰＵ１０１は、ステップＳＴ１０３，ＳＴ１０６のいずれか一方において対象ブロックから分割プログラムを正常に読み出すことができないと判定された場合、その対象ブロックを“読出不可ブロック”と判定し、ステップＳＴ１０３，ＳＴ１０６のいずれにおいても対象ブロックから分割プログラムを正常に読み出すことができないと判定されなかった場合、その対象ブロックを“読出可能ブロック（分割プログラムを正常に読み出すことができたブロック）”と判定し、これらの判定結果に基づいてブート履歴情報を作成する。
【００６７】
《ステップＳＴ２０４》
一方、ステップＳＴ１１２においてブートプログラムの読み出しが完了していないと判定された場合、ＣＰＵ１０１は、不揮発性メモリ２０にアクセスし、不揮発性メモリ２０にブート履歴情報が格納されているか否かを判定する。ブート履歴情報が格納されている場合には、ステップＳＴ２０５へ進み、ブート履歴情報が格納されていない場合、ステップＳＴ１１５へ進む。
【００６８】
《ステップＳＴ２０５》
次に、ＣＰＵ１０１は、不揮発性メモリ２０に格納されたブート履歴情報を読み出し、後続の分割プログラムを格納する特定ブロックおよび通常ブロックのうちブート履歴情報に示されたブロックを次の対象ブロックとして選択する。次に、ステップＳＴ１０２へ進む。
【００６９】
このように、ＣＰＵ１０１は、ブート履歴情報が格納されている場合には、ブート履歴情報に示されたブロックを次の対象ブロックとして選択し、ブート履歴情報が格納されていない場合には、後続の分割プログラムを格納する特定ブロックを次の対象ブロックとして選択する。
【００７０】
以上のように、ブート履歴情報に基づいてＮＡＮＤ型フラッシュメモリにアクセスすることにより、読出不可ブロックへのアクセスを回避することができるので、読出不可ブロックの増加に伴う半導体装置の起動時間の増加を抑制できる。
【００７１】
（実施の形態３）
図１１は、実施形態３による半導体装置の構成例を示す。この半導体装置は、図６に示したシステムＬＳＩ１１に代えて、システムＬＳＩ３１を備える。システムＬＳＩ３１は、図１に示したシステムＬＳＩ１１の構成に加えて、ブロック複製判定回路３０１を備える。ブロック複製判定回路３０１は、分割プログラムＤ１，Ｄ２，Ｄ３の各々の読出不可ブロック数と予め設定された閾値との比較や、複製要求信号（分割プログラムＤ１，Ｄ２，Ｄ３を未使用ブロックに複製することを要求するための信号）の出力などを実行する。
【００７２】
例えば、ＮＡＮＤ型フラッシュメモリ１０において、図７のように、分割プログラムＤ３を格納する４個のブロック（特定ブロックＢ２，通常ブロックＢ５，Ｂ８，Ｂ１１）のうち３個のブロックが読出不可ブロックである場合、通常ブロックＢ１１が読出不可ブロックになってしまうと、分割プログラムＤ３を正常に読み出すことができないため、ブートプログラムを正確に再構築できなくなり、その結果、半導体装置を起動できなくなってしまう。図１１に示した半導体装置では、分割プログラムＤ１，Ｄ２，Ｄ３の各々の読出不可ブロック数に応じて、ＮＡＮＤ型フラッシュメモリ１０の未使用ブロックに分割プログラムＤ１，Ｄ２，Ｄ３を複製する処理（複製処理）が実行される。
【００７３】
〔動作〕
次に、図１２を参照して、図１１に示した半導体装置における複製処理について説明する。
【００７４】
《ステップＳＴ３０１》
ＣＰＵ１０１は、分割プログラムＤ１，Ｄ２，Ｄ３の各々の読出不可ブロック数を検出する。例えば、ブート履歴情報に分割プログラムＤ１，Ｄ２，Ｄ３の各々の読出不可ブロック数が示されている場合、ＣＰＵ１０１は、不揮発性メモリ２０にアクセスし、不揮発性メモリ２０に格納されたブート履歴情報を読み出し、ブート履歴情報から分割プログラムＤ１，Ｄ２，Ｄ３の各々の読出不可ブロック数を検出する。なお、ＣＰＵ１０１は、図４に示した半導体装置の起動処理（ＳＴ１０１〜ＳＴ１１５）を実行することによって、分割プログラムＤ１，Ｄ２，Ｄ３の各々の読出不可ブロック数を検出しても良い。
【００７５】
《ステップＳＴ３０２》
次に、ブロック複製判定回路３０１は、ステップＳＴ３０１において検出された分割プログラムＤ１，Ｄ２，Ｄ３の各々の読出不可ブロック数と予め定められた閾値とを比較する。そして、ブロック複製判定回路３０１は、分割プログラム毎に読出不可ブロック数が閾値よりも多いか否かを判定する。
【００７６】
《ステップＳＴ３０３》
次に、ブロック複製判定回路３０１は、分割プログラムＤ１，Ｄ２，Ｄ３の中に読出不可ブロック数が閾値よりも多いと判定された分割プログラムが存在するか否かを判定する。そのような分割プログラムが存在する場合には、ステップＳＴ３０４へ進み、そのような分割プログラムが存在しない場合には、複製処理を終了する。
【００７７】
《ステップＳＴ３０４》
次に、ブロック複製判定回路３０１は、ＣＰＵ１０１に複製要求信号を出力する。ＣＰＵ１０１は、複製要求信号に応答して、ＮＡＮＤ型フラッシュメモリ１０に含まれる未使用ブロックのブロック番号と未使用ブロックに含まれる第１番目のページＰ０のページ番号“０”とを指定する。このようにして、未使用ブロックを複製先ブロックとして選択する。
【００７８】
《ステップＳＴ３０５》
次に、フラッシュメモリコントローラ１０４は、ＣＰＵ１０１によって指定されたブロック番号およびページ番号に基づいて、複製先ブロックに含まれる第１番目のページＰ０の冗長領域から不良ブロックマークを読み出す。
【００７９】
《ステップＳＴ３０６》
次に、ＣＰＵ１０１は、フラッシュメモリコントローラ１０４によって読み出された不良ブロックマークの値に基づいて、複製先ブロックが正常ブロックであるか不良ブロックであるかを判定する。複製先ブロックが正常ブロックである場合には、ステップＳＴ３０７へ進み、複製先ブロックが不良ブロックである場合には、ステップＳＴ３０８へ進む。
【００８０】
《ステップＳＴ３０７》
次に、フラッシュメモリコントローラ１０４は、ＣＰＵ１０１による制御に応答して、読出可能ブロック（分割プログラムを正常に読み出すことができたブロック）に格納された分割プログラムを読み出し、読み出した分割プログラムを複製先ブロックに複製する。例えば、フラッシュメモリコントローラ１０４は、ステップＳＴ３０３において読出不可ブロック数が閾値よりも多いと判定された分割プログラムを格納する読出可能ブロックから分割プログラムを読み出し、その分割プログラムを複製先ブロックに複製しても良い。
【００８１】
《ステップＳＴ３０８》
一方、ステップＳＴ３０６において複製先ブロックが不良ブロックであると判定された場合、ＣＰＵ１０１は、ＮＡＮＤ型フラッシュメモリに含まれる別の未使用ブロック（現在の複製先ブロックとは異なる未使用ブロック）を次の複製先ブロックとして選択する。次に、ステップＳＴ３０５へ進む。
【００８２】
なお、１つのブートプログラムを構成する分割プログラムＤ１，Ｄ２，Ｄ３の全てを複製しても良い。この場合、ＣＰＵ１０１は、ステップＳＴ３０７の後に、分割プログラムＤ１，Ｄ２，Ｄ３のうち複製されていない分割プログラムが残っているか否かを判定する。複製されていない分割プログラムが残っている場合には、ステップＳＴ３０４〜ＳＴ３０８を実行し、複製されていない分割プログラムが残っていない場合には、複製処理を終了する。例えば、図１３のように、ＣＰＵ１０１が、３個の未使用の通常ブロックＢ１２，Ｂ１３，Ｂ１４を３個の複製先ブロックとして選択し、フラッシュメモリコントローラ１０４が、通常ブロックＢ６，特定ブロックＢ１，通常ブロックＢ１１から分割プログラムＤ１，Ｄ２，Ｄ３を読み出し、読み出した分割プログラムＤ１，Ｄ２，Ｄ３を通常ブロックＢ１２，Ｂ１３，Ｂ１４に複製しても良い。
【００８３】
また、読出不可ブロック数が閾値よりも多いと判定された分割プログラムのみを複製しても良い。例えば、図１４のように、分割プログラムＤ１，Ｄ２，Ｄ３の読出不可ブロック数が、それぞれ、２，０，３であり、閾値が“２”である場合、ＣＰＵ１０１が、未使用の通常ブロックＢ１２を複製先ブロックとして選択し、フラッシュメモリコントローラ１０４が、通常ブロックＢ１１から分割プログラムＤ３を読み出し、読み出した分割プログラムＤ３を通常ブロックＢ１２に複製しても良い。
【００８４】
以上のように、分割プログラムＤ１，Ｄ２，Ｄ３の各々の読出不可ブロック数に応じて複製処理を実行することにより、ブートプログラムを正確に再構築できなくなって半導体装置を起動できないという事態を回避することができる。
【００８５】
なお、以上の各実施形態において、特定ブロックの個数、通常ブロック群の個数、通常ブロック群に含まれる通常ブロックの個数、ブートプログラムの分割数は、上記の例に限定されない。また、半導体装置の起動処理を例に挙げて説明したが、ＮＡＮＤ型フラッシュメモリ１０は、ブートプログラムではない他のデータ列を格納するものであっても良い。すなわち、ＮＡＮＤ型フラッシュメモリ１０が、ｐ個（ｐ≧２）の特定ブロックと、２以上の通常ブロック群とを含み、２以上の通常ブロック群が、それぞれ、ｐ個の通常ブロックを含んでいても良い。また、ｐ個の特定ブロックに、それぞれ、データ列をｐ個に分割して得られるｐ個の分割データ列が格納され、２以上の通常ブロック群の各々に含まれるｐ個の通常ブロックに、それぞれ、ｐ個の特定ブロックに格納されたｐ個の分割データ列が複製されていても良い。
【産業上の利用可能性】
【００８６】
以上のように、上述のデータ処理方法および半導体集積回路は、データ読み出しの信頼性が高いので、ＮＡＮＤ型フラッシュメモリからブートプログラムを読み出し、ブートプログラムに従って起動する半導体装置などに有用である。
【符号の説明】
【００８７】
１０    ＮＡＮＤ型フラッシュメモリ
１１，３１    システムＬＳＩ
１０１    ＣＰＵ
１０２    ＲＯＭ
１０３    ＲＡＭ
１０４    フラッシュメモリコントローラ
１０５    バスコントローラ
２０    不揮発性メモリ
３０１    ブロック複製判定回路
【図１】
2011001486.tif 000003
【図２】
2011001486.tif 000004
【図３】
2011001486.tif 000005
【図４】
2011001486.tif 000006
【図５】
2011001486.tif 000007
【図６】
2011001486.tif 000008
【図７】
2011001486.tif 000009
【図８】
2011001486.tif 000010
【図９】
2011001486.tif 000011
【図１０】
2011001486.tif 000012
【図１１】
2011001486.tif 000013
【図１２】
2011001486.tif 000014
【図１３】
2011001486.tif 000015
【図１４】
2011001486.tif 000016
【国際調査報告】
2011001486.tif 000017
2011001486.tif 000018