(57)【要約】【課題】  メインプログラムをＮＡＮＤ型フラッシュメモリに格納する情報処理装置において、ブートストラッププログラムをＮＯＲ型フラッシュメモリに格納すると、システムのコストが高くなる。【解決手段】  電源投入後、転送装置１４は、第１の記憶装置１１に格納された、第１の誤り検査符号１１４付きのブートストラッププログラム１１１を検出し、誤り検出／訂正処理を施して第２の記憶装置１２に転送する。転送が正常に完了した場合、ＣＰＵ１０は、第２の記憶装置１２上のブートストラッププログラム１１１を実行することにより、第２の誤り検査符号１１５付きのメインプログラム１１２に誤り検出／訂正処理を施して第３の記憶装置１３に転送し、第３の記憶装置１３上のメインプログラム１１２に分岐する。これにより、ＮＯＲ型フラッシュメモリを使用せずに、システムブートを行える。【選択図】  図１
2005190201.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性の記憶装置に格納されたプログラムを用いてシステムブートを行う情報処理装置であって、
ＣＰＵと、
前記ＣＰＵによって実行されるプログラムとして、第１の検査符号付きのブートストラッププログラムと、前記第１の検査符号とは異なる方法で求めた第２の検査符号付きのメインプログラムとを格納する不揮発性の第１の記憶装置と、
前記第１の記憶装置に格納されたプログラムを読み出す転送装置であって、システムブート時に、前記ブートストラッププログラムを前記第１の記憶装置から読み出し、前記第１の検査符号に基づく誤り検出／訂正処理を施して、前記第２の記憶装置に転送する転送装置と、
前記第１の記憶装置から読み出したプログラムを格納する揮発性の第２の記憶装置と、
前記ブートストラッププログラムの転送が完了するまで、前記ＣＰＵの動作を抑制するＣＰＵ制御装置とを備えた、情報処理装置。
【請求項２】
前記ＣＰＵは、前記ＣＰＵ制御装置による抑制が解除されると、前記第２の記憶装置に格納されたブートストラッププログラムに従い、前記第１の記憶装置に格納されたメインプログラムを前記第２の記憶装置に転送し、前記第２の検査符号に基づく誤り検出／訂正処理を施すことを特徴とする、請求項１に記載の情報処理装置。
【請求項３】
前記転送装置は、
前記ブートストラッププログラムの転送を制御する転送制御部と、
転送中の前記ブートストラッププログラムに対して、前記第１の検査符号に基づく誤り検出／訂正処理を施す誤り処理部と、
前記ブートストラッププログラムの転送が完了した時点で、前記誤り処理部が訂正不可能な誤りを検出していない場合に、転送完了を前記ＣＰＵ制御装置に通知する通知部とを含む、請求項１に記載の情報処理装置。
【請求項４】
前記ＣＰＵ制御装置は、前記ブートストラッププログラムの転送が完了するまで、前記ＣＰＵに対するクロック信号の供給を抑制することを特徴とする、請求項１に記載の情報処理装置。
【請求項５】
前記ＣＰＵ制御装置は、前記ブートストラッププログラムの転送が完了するまで、前記ＣＰＵにリセット信号を供給することを特徴とする、請求項１に記載の情報処理装置。
【請求項６】
前記ＣＰＵ制御装置は、前記ブートストラッププログラムの転送が完了するまで、前記ＣＰＵの前記第２の記憶装置に対するアクセスを許可しないことを特徴とする、請求項１に記載の情報処理装置。
【請求項７】
前記ＣＰＵ制御装置は、前記ブートストラッププログラムの転送が完了するまでは前記転送装置を優先し、前記ブートストラッププログラムの転送が完了した後は前記ＣＰＵを優先して、前記第２の記憶装置に接続されたバスのアクセス権を調停することを特徴とする、請求項６に記載の情報処理装置。
【請求項８】
前記ＣＰＵ制御装置は、前記ブートストラッププログラムの転送が失敗した場合には、前記ＣＰＵの動作を抑制し続けることを特徴とする、請求項１に記載の情報処理装置。
【請求項９】
前記第１の記憶装置は、正常ブロックと不良ブロックとに識別された複数のブロックを含み、
前記ブートストラッププログラムと、前記メインプログラムと、前記メインプログラムの前記第１の記憶装置における格納位置を表す格納位置情報とが、前記第１の記憶装置の正常ブロックに格納されていることを特徴とする、請求項１に記載の情報処理装置。
【請求項１０】
前記ブートストラッププログラムは、前記格納位置情報と、前記第２の誤り検出符号に基づく誤り検出／訂正処理を行う誤り処理プログラムとを含み、
前記ＣＰＵは、前記ＣＰＵ制御装置による抑制が解除されると、前記第１の検査符号に基づく誤り検出／訂正処理後の前記格納位置情報に基づき、前記第１の記憶装置に格納されたメインプログラムを前記転送装置を介して前記第２の記憶装置に転送し、前記第１の検査符号に基づく誤り検出／訂正処理後の前記誤り処理プログラムに従い、前記第２の記憶装置に格納されたメインプログラムに対して誤り検出／訂正処理を施すことを特徴とする、請求項９に記載の情報処理装置。
【請求項１１】
前記第１の記憶装置は、前記第１の検査符号付きの前記格納位置情報を格納し、
前記転送装置は、前記第１の記憶装置から読み出した格納位置情報に対しても、前記第１の検査符号に基づく誤り検出／訂正処理を行い、
前記ブートストラッププログラムは、前記格納位置情報の前記第１の記憶装置における格納アドレスと、前記第２の誤り検出符号に基づく誤り検出／訂正処理を行う誤り処理プログラムとを含み、
前記ＣＰＵは、前記ＣＰＵ制御装置による抑制が解除されると、前記第１の検査符号に基づく誤り検出／訂正処理後の前記格納アドレスを用いて、前記第１の記憶装置に格納された格納位置情報を前記転送装置を介して前記第２の記憶装置に転送し、前記第１の検査符号に基づく誤り検出／訂正処理後の前記格納位置情報に基づき、前記第１の記憶装置に格納されたメインプログラムを前記転送装置を介して前記第２の記憶装置に転送し、前記第１の検査符号に基づく誤り検出／訂正処理後の前記誤り処理プログラムに従い、前記第２の記憶装置に格納されたメインプログラムに対して誤り検出／訂正処理を施すことを特徴とする、請求項９に記載の情報処理装置。
【請求項１２】
前記ブートストラッププログラムは、前記第１の記憶装置の正常ブロックに所定サイズに分割された形式で格納され、
前記転送装置は、前記ブートストラッププログラムを前記所定サイズに分けて前記第１の記憶装置から読み出し、前記第１の検査符号に基づく誤り検出／訂正処理を施して、前記第２の記憶装置に転送することを特徴とする、請求項９に記載の情報処理装置。
【請求項１３】
前記転送装置は、前記第１の記憶装置から読み出した前記所定サイズのデータに前記第１の検査符号に基づく誤り検出／訂正処理を施した結果、訂正不可能な誤りを検出した場合には、当該データを含むブロックの次の正常ブロックから、次に処理すべきデータを読み出すことを特徴とする、請求項１２に記載の情報処理装置。
【請求項１４】
前記ブートストラッププログラムは、前記第１の記憶装置の正常ブロックに、前記所定サイズに分割され、かつ、分割後の各データに照合コードを付与した形式で格納され、
前記転送装置は、前記照合コードの正解データを保持し、前記第１の記憶装置から読み出した前記所定サイズのデータに前記正解データと同じ照合コードが付与されている場合に、読み出したデータを前記第２の記憶装置に転送することを特徴とする、請求項１２に記載の情報処理装置。
【請求項１５】
前記転送装置は、与えられたデータを用いて前記正解データを変更できるように構成されていることを特徴とする、請求項１４に記載の情報処理装置。
【請求項１６】
前記転送装置は、
前記ブートストラッププログラムの転送を制御する転送制御部と、
転送中の前記ブートストラッププログラムに対して、前記第１の検査符号に基づく誤り検出／訂正処理を施す第１の誤り処理部と、
前記第１の記憶装置から読み出したメインプログラムに対して、前記第２の検査符号に基づく誤り検出／訂正処理のうち少なくとも一部の処理を施す第２の誤り処理部と、
前記ブートストラッププログラムの転送が完了した時点で、前記第１の誤り処理部が訂正不可能な誤りを検出していない場合に、転送完了を前記ＣＰＵ制御装置に通知する通知部とを含む、請求項１に記載の情報処理装置。
【請求項１７】
前記第２の誤り処理部は、前記第１の記憶装置から読み出したメインプログラムについて、前記第２の検査符号に基づくシンドロームを計算し、
前記ＣＰＵは、前記第２の記憶装置に格納されたブートストラッププログラムに従い、前記第２の誤り処理部で計算されたシンドロームを用いて、前記第１の記憶装置から読み出したメインプログラムに対して、前記第２の検査符号に基づく誤り検出／訂正処理のうち残余の処理を施すことを特徴とする、請求項１６に記載の情報処理装置。
【請求項１８】
前記転送装置は、前記通知部が転送完了を通知したときに、前記第１の記憶装置から読み出したプログラムに対して処理を行う主体を、前記第１の誤り処理部から前記第２の誤り処理部に切り替えることを特徴とする、請求項１６に記載の情報処理装置。
【請求項１９】
前記転送装置は、前記ＣＰＵからの制御に従い、前記第１の記憶装置から読み出したプログラムに対して処理を行う主体を、前記第１の誤り処理部から前記第２の誤り処理部に切り替えることを特徴とする、請求項１６に記載の情報処理装置。
【請求項２０】
前記転送装置は、前記第２の誤り処理部が訂正不可能な誤りを検出したときには、転送失敗を前記ＣＰＵに通知し、
前記ＣＰＵは、転送失敗の通知を受けたときには異常処理を行うことを特徴とする、請求項１６に記載の情報処理装置。
【請求項２１】
前記転送制御部は、前記ブートストラッププログラムを転送することに加えて、前記ＣＰＵからの制御に従い、前記第１の記憶装置に格納されたメインプログラムを所定サイズに分けて読み出し、前記第２の記憶装置に転送することを特徴とする、請求項１に記載の情報処理装置。
【請求項２２】
不揮発性の記憶装置に格納されたプログラムを用いてシステムブートを行う情報処理装置であって、
ＣＰＵと、
前記ＣＰＵによって実行されるプログラムとして、第１の検査符号付きのブートストラッププログラムと、前記第１の検査符号とは異なる方法で求めた第２の検査符号付きのメインプログラムとを格納する不揮発性の第１の記憶装置と、
前記第１の記憶装置に格納されたプログラムを読み出す転送装置と、
前記第１の記憶装置から読み出したプログラムを格納する揮発性の第２の記憶装置とを備え、
前記転送装置は、前記ブートストラッププログラムを前記第１の記憶装置から読み出し、前記第１の検査符号に基づく誤り検出／訂正処理を施して内部に蓄積し、前記ＣＰＵからの読み出し要求に応じて、蓄積した前記ブートストラッププログラムを出力し、
前記ＣＰＵは、システムブート時に、前記転送装置に蓄積されたブートストラッププログラムに従って動作することを特徴とする、情報処理装置。
【請求項２３】
前記ブートストラッププログラムは、前記第２の誤り検出符号に基づく誤り検出／訂正処理を行う誤り処理プログラムを含み、
前記ＣＰＵは、システムブート時に、前記転送装置に蓄積されたブートストラッププログラムに従って、前記第１の記憶装置から読み出したメインプログラムに対して、前記第２の検査符号に基づく誤り検出／訂正処理を施すことを特徴とする、請求項２２に記載の情報処理装置。
【請求項２４】
複数のデータに基づき、不良ブロックを含む記憶装置に書き込むためのＲＯＭイメージを生成するＲＯＭイメージ生成装置であって、
書き込み対象の記憶装置に含まれる不良ブロックの位置情報を保持する不良ブロック情報保持部と、
入力データの種類に応じた検査符号の種類を管理する符号情報管理部と、
入力データを、入力データの種類に応じた検査符号を付与できる形式に変換するイメージ整形部と、
前記不良ブロック情報保持部に保持された位置情報を参照して、前記イメージ整形部で整形された複数のデータを不良ブロックの位置を避けて１つのデータに合成し、合成後のデータに対して、入力データの種類に応じた検査符号を付与する書き込みイメージ生成部とを備えた、ＲＯＭイメージ生成装置。
【請求項２５】
照合コードを保持する照合コード保持部をさらに備え、
前記イメージ整形部は、入力データに対して前記照合コード保持部に保持された照合コードを付与することを特徴とする、請求項２４に記載のＲＯＭイメージ生成装置。
【請求項２６】
前記記憶装置について、不良ブロックの位置を検索して前記位置情報を求める処理と、前記書き込みイメージ生成部で生成されたデータを書き込む処理とを行うメモリ制御部をさらに備えた、請求項２４に記載のＲＯＭイメージ生成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＮＡＮＤ型フラッシュメモリのように、不良ブロックを含み、読み出し後に誤り検出／訂正処理を必要とする記憶装置に格納されたプログラムを用いてシステムブートを行う情報処理装置に関する。
【背景技術】
【０００２】
フラッシュメモリは、大きくＮＯＲ型とＮＡＮＤ型に分類される。ＮＯＲ型フラッシュメモリは、１バイト単位でランダムアクセスできるという長所を有する一方で、ＮＡＮＤ型フラッシュメモリに比べて高価で集積度が低いという短所を有している。これに対して、ＮＡＮＤ型フラッシュメモリは、一定の割合以下であれば、不良ブロックを含むことが容認されたメモリである。このため、ＮＡＮＤ型フラッシュメモリに読み書きを行うときには、不良ブロックの位置を管理しながら読み書きを行う必要がある。ＮＡＮＤ型フラッシュメモリは、シーケンシャルにしかアクセスできず、読み出し後に誤り検出／訂正処理を必要とするという短所を有する一方で、ＮＯＲ型フラッシュメモリに比べて安価で集積度が高いという長所を有している。
【０００３】
ＮＡＮＤ型フラッシュメモリのように、不良ブロックを含み、読み出し後に誤り検出／訂正処理を必要とする記憶装置（以下、低信頼性メモリという）に格納されたプログラムを実行するために、従来から、次のような方法が行われてきた。従来の方法では、低信頼性メモリに加えて、マスクＲＯＭやＮＯＲ型フラッシュメモリのように、不良ブロックを含まず、誤り検出／訂正処理を必要としない記憶装置（以下、高信頼性メモリという）が使用される。低信頼性メモリには、誤り検査符号を付与したメインプログラムが格納され、高信頼性メモリには、メインプログラムの転送機能を含んだ初期プログラムが格納される。システムのＣＰＵは、リセット解除後、高信頼性メモリに格納された初期プログラムに従い、メインプログラムを低信頼性メモリからＲＡＭに転送する。メインプログラムの転送が完了した後、ＣＰＵは、ＲＡＭ上のメインプログラムに分岐し、その後はＲＡＭ上のメインプログラムを実行する。
【０００４】
また、初期プログラムはそれほど高速に実行する必要がないため、低速な記憶装置に格納されていてもよいという観点から、初期プログラムを格納するために高信頼性メモリを使用せず、ＮＡＮＤ型フラッシュメモリに格納された初期プログラムを用いてシステムブートを行う方法も知られている（例えば、特許文献１参照。）。この方法では、ＮＡＮＤ型フラッシュメモリに格納された初期プログラムは、電源投入時に、転送回路によってスタティックＲＡＭなどに転送される。
【特許文献１】特開２００２−５５８２２号公報（第６頁、第６図）
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記文献に記載された方法では、ブートストラッププログラムやドライバなどを含む初期プログラムをスタティックＲＡＭなどに転送する際に、誤り検出／訂正処理は行われていない。このため、読み出した初期プログラムが誤っていた場合には、システムブートを正常に行えなくなる。また、スタティックＲＡＭは他の記憶装置よりも高価であるため、初期プログラムのサイズが大きくなると、システム全体のコストが高くなる。
【０００６】
それ故に、本発明は、初期プログラムを格納するために高信頼性メモリを使用することなく、システムブートを安定的に行える情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の第１の情報処理装置は、不揮発性の記憶装置に格納されたプログラムを用いてシステムブートを行う情報処理装置であって、ＣＰＵと、ＣＰＵによって実行されるプログラムとして、第１の検査符号付きのブートストラッププログラムと、第１の検査符号とは異なる方法で求めた第２の検査符号付きのメインプログラムとを格納する不揮発性の第１の記憶装置と、第１の記憶装置に格納されたプログラムを読み出す転送装置であって、システムブート時に、ブートストラッププログラムを第１の記憶装置から読み出し、第１の検査符号に基づく誤り検出／訂正処理を施して、第２の記憶装置に転送する転送装置と、第１の記憶装置から読み出したプログラムを格納する揮発性の第２の記憶装置と、ブートストラッププログラムの転送が完了するまで、ＣＰＵの動作を抑制するＣＰＵ制御装置とを備える。
このように構成することで、初期プログラムを格納するためにＲＯＭなどの高信頼性メモリを使用することなく、ＮＡＮＤ型フラッシュメモリなどの低信頼性メモリに格納された検査符号付きのプログラムを用いて、システムブートを安定的に行うことができる。
【０００８】
この場合、ＣＰＵは、ＣＰＵ制御装置による抑制が解除されると、第２の記憶装置に格納されたブートストラッププログラムに従い、第１の記憶装置に格納されたメインプログラムを第２の記憶装置に転送し、第２の検査符号に基づく誤り検出／訂正処理を施してもよい。
このように構成することで、誤り検出／訂正処理後のブートストラッププログラムに従い、メインプログラムに対してソフトウェアによる複雑な誤り検出／訂正処理を施すことができる。
【０００９】
また、転送装置は、ブートストラッププログラムの転送を制御する転送制御部と、転送中のブートストラッププログラムに対して、第１の検査符号に基づく誤り検出／訂正処理を施す誤り処理部と、ブートストラッププログラムの転送が完了した時点で、誤り処理部が訂正不可能な誤りを検出していない場合に、転送完了をＣＰＵ制御装置に通知する通知部とを含んでいてもよい。
このように構成することで、初期プログラムを格納するために高信頼性メモリを使用することなく、低信頼性メモリに格納された検査符号付きのプログラムを用いて、システムブートを安定的に行うことができる。
【００１０】
また、ＣＰＵ制御装置は、ブートストラッププログラムの転送が完了するまで、ＣＰＵに対するクロック信号の供給を抑制してもよく、あるいは、ＣＰＵにリセット信号を供給してもよい。
このように構成することで、少量のハードウェアでＣＰＵの動作を抑制することができる。
【００１１】
また、ＣＰＵ制御装置は、ブートストラッププログラムの転送が完了するまで、ＣＰＵの第２の記憶装置に対するアクセスを許可しないことしてもよく、より好ましくは、ブートストラッププログラムの転送が完了するまでは転送装置を優先し、ブートストラッププログラムの転送が完了した後はＣＰＵを優先して、第２の記憶装置に接続されたバスのアクセス権を調停してもよい。
このように構成することで、第２の記憶装置のアクセス制御回路にわずかな変更を加えることにより、ＣＰＵの動作を抑制することができる。
【００１２】
また、ＣＰＵ制御装置は、ブートストラッププログラムの転送が失敗した場合には、ＣＰＵの動作を抑制し続けてもよい。
このように構成することで、システムブートに失敗した場合に、システムが暴走することを防止することができる。
【００１３】
また、第１の記憶装置は、正常ブロックと不良ブロックとに識別された複数のブロックを含み、ブートストラッププログラムと、メインプログラムと、メインプログラムの第１の記憶装置における格納位置を表す格納位置情報とが、第１の記憶装置の正常ブロックに格納されていてもよい。
このように構成することで、ＮＡＮＤ型フラッシュメモリのように、正常ブロックと不良ブロックを含む低信頼性メモリを用いて、低信頼性メモリに格納されたプログラムを用いてシステムブートを行う情報処理装置を得ることができる。
【００１４】
特に、ブートストラッププログラムは、格納位置情報と、第２の誤り検出符号に基づく誤り検出／訂正処理を行う誤り処理プログラムとを含み、ＣＰＵは、ＣＰＵ制御装置による抑制が解除されると、第１の検査符号に基づく誤り検出／訂正処理後の格納位置情報に基づき、第１の記憶装置に格納されたメインプログラムを転送装置を介して第２の記憶装置に転送し、第１の検査符号に基づく誤り検出／訂正処理後の誤り処理プログラムに従い、第２の記憶装置に格納されたメインプログラムに対して誤り検出／訂正処理を施してもよい。
このように構成することで、正しい格納位置からメインプログラムを読み出し、読み出したメインプログラムに対してソフトウェアによる複雑な誤り検出／訂正処理を施すことができる。
【００１５】
あるいは、第１の記憶装置は、第１の検査符号付きの格納位置情報を格納し、転送装置は、第１の記憶装置から読み出した格納位置情報に対しても、第１の検査符号に基づく誤り検出／訂正処理を行い、ブートストラッププログラムは、格納位置情報の第１の記憶装置における格納アドレスと、第２の誤り検出符号に基づく誤り検出／訂正処理を行う誤り処理プログラムとを含み、ＣＰＵは、ＣＰＵ制御装置による抑制が解除されると、第１の検査符号に基づく誤り検出／訂正処理後の格納アドレスを用いて、第１の記憶装置に格納された格納位置情報を転送装置を介して第２の記憶装置に転送し、第１の検査符号に基づく誤り検出／訂正処理後の格納位置情報に基づき、第１の記憶装置に格納されたメインプログラムを転送装置を介して第２の記憶装置に転送し、第１の検査符号に基づく誤り検出／訂正処理後の誤り処理プログラムに従い、第２の記憶装置に格納されたメインプログラムに対して誤り検出／訂正処理を施してもよい。
このように構成することで、ブートストラッププログラムのサイズを小さくするとともに、正しい格納位置からメインプログラムを読み出し、読み出したメインプログラムに対してソフトウェアによる複雑な誤り検出／訂正処理を施すことができる。
【００１６】
また、ブートストラッププログラムは、第１の記憶装置の正常ブロックに所定サイズに分割された形式で格納され、転送装置は、ブートストラッププログラムを所定サイズに分けて第１の記憶装置から読み出し、第１の検査符号に基づく誤り検出／訂正処理を施して、第２の記憶装置に転送してもよい。
このように構成することで、所定サイズに分けたデータに対して、第１の検査符号として、好適な誤り検出／訂正能力を有する検査符号を付与することができる。
【００１７】
特に、転送装置は、第１の記憶装置から読み出した所定サイズのデータに第１の検査符号に基づく誤り検出／訂正処理を施した結果、訂正不可能な誤りを検出した場合には、当該データを含むブロックの次の正常ブロックから、次に処理すべきデータを読み出してもよい。
このように構成することで、不良ブロックを含む第１の記憶装置に格納されたブートストラッププログラムを正しく検出することができる。
【００１８】
あるいは、ブートストラッププログラムは、第１の記憶装置の正常ブロックに、所定サイズに分割され、かつ、分割後の各データに照合コードを付与した形式で格納され、転送装置は、照合コードの正解データを保持し、第１の記憶装置から読み出した所定サイズのデータに正解データと同じ照合コードが付与されている場合に、読み出したデータを第２の記憶装置に転送してもよい。
このように構成することで、不良ブロックを正常ブロックと誤認識する問題を解決し、不良ブロックを含む第１の記憶装置に格納されたブートストラッププログラムを高速に検出することができる。
【００１９】
より好ましくは、転送装置は、与えられたデータを用いて正解データを変更できるように構成されていてもよい。
このように構成することで、ＣＰＵのリビジョンやシステム構成などが異なる場合でも、第１の記憶装置からＣＰＵのリビジョンやシステム構成などに応じてブートストラッププログラムを選択し、システムブートを正しく行うことができる。
【００２０】
また、転送装置は、ブートストラッププログラムの転送を制御する転送制御部と、転送中のブートストラッププログラムに対して、第１の検査符号に基づく誤り検出／訂正処理を施す第１の誤り処理部と、第１の記憶装置から読み出したメインプログラムに対して、第２の検査符号に基づく誤り検出／訂正処理のうち少なくとも一部の処理を施す第２の誤り処理部と、ブートストラッププログラムの転送が完了した時点で、第１の誤り処理部が訂正不可能な誤りを検出していない場合に、転送完了をＣＰＵ制御装置に通知する通知部とを含んでいてもよい。
このように構成することで、メインプログラムに対する誤り検出／訂正処理を高速に行い、システムブートを高速に行うことができる。
【００２１】
特に、第２の誤り処理部は、第１の記憶装置から読み出したメインプログラムについて、第２の検査符号に基づくシンドロームを計算し、ＣＰＵは、第２の記憶装置に格納されたブートストラッププログラムに従い、第２の誤り処理部で計算されたシンドロームを用いて、第１の記憶装置から読み出したメインプログラムに対して、第２の検査符号に基づく誤り検出／訂正処理のうち残余の処理を施してもよい。
このように構成することで、少量のハードウェアを用いて、メインプログラムに対する誤り検出／訂正処理を高速化することができる。
【００２２】
あるいは、転送装置は、通知部が転送完了を通知したときに、第１の記憶装置から読み出したプログラムに対して処理を行う主体を、第１の誤り処理部から第２の誤り処理部に切り替えてもよい。
このように構成することで、ブートストラッププログラムの転送が完了したときに、転送装置における誤り検出／訂正処理の内容を自動的に切り替えることができる。
【００２３】
あるいは、転送装置は、ＣＰＵからの制御に従い、第１の記憶装置から読み出したプログラムに対して処理を行う主体を、第１の誤り処理部から第２の誤り処理部に切り替えてもよい。
このように構成することで、ＣＰＵによるソフトウェア処理で、転送装置における誤り検出／訂正処理の内容を切り替えることができる。
【００２４】
あるいは、転送装置は、第２の誤り処理部が訂正不可能な誤りを検出したときには、転送失敗をＣＰＵに通知し、ＣＰＵは、転送失敗の通知を受けたときには異常処理を行うこととしてもよい。
このように構成することで、システムブートに失敗した場合に、システムを異常終了させ、回復不可能なエラーが発生したことをユーザに通知することができる。
【００２５】
また、転送制御部は、ブートストラッププログラムを転送することに加えて、ＣＰＵからの制御に従い、第１の記憶装置に格納されたメインプログラムを所定サイズに分けて読み出し、第２の記憶装置に転送してもよい。
このように構成することで、ブートストラッププログラムのサイズを小さくするとともに、ＣＰＵの負荷を軽減し、システムブートを高速に行うことができる。
【００２６】
本発明の第２の情報処理装置は、不揮発性の記憶装置に格納されたプログラムを用いてシステムブートを行う情報処理装置であって、ＣＰＵと、ＣＰＵによって実行されるプログラムとして、第１の検査符号付きのブートストラッププログラムと、第１の検査符号とは異なる方法で求めた第２の検査符号付きのメインプログラムとを格納する不揮発性の第１の記憶装置と、第１の記憶装置に格納されたプログラムを読み出す転送装置と、第１の記憶装置から読み出したプログラムを格納する揮発性の第２の記憶装置とを備え、転送装置は、ブートストラッププログラムを第１の記憶装置から読み出し、第１の検査符号に基づく誤り検出／訂正処理を施して内部に蓄積し、ＣＰＵからの読み出し要求に応じて、蓄積したブートストラッププログラムを出力し、ＣＰＵは、システムブート時に、転送装置に蓄積されたブートストラッププログラムに従って動作することを特徴とする。
このように構成することで、初期プログラムを格納するためにＲＯＭなどの高信頼性メモリを使用することなく、ＮＡＮＤ型フラッシュメモリなどの低信頼性メモリに格納された検査符号付きのプログラムを用いて、システムブートを安定的に行うことができる。これに加えて、ブートストラッププログラムを格納するために、メモリ領域を確保する必要がなくなる。
【００２７】
この場合、ブートストラッププログラムは、第２の誤り検出符号に基づく誤り検出／訂正処理を行う誤り処理プログラムを含み、ＣＰＵは、システムブート時に、転送装置に蓄積されたブートストラッププログラムに従って、第１の記憶装置から読み出したメインプログラムに対して、第２の検査符号に基づく誤り検出／訂正処理を施してもよい。
このように構成することで、誤り検出／訂正処理後のブートストラッププログラムに従い、メインプログラムに対してソフトウェアによる複雑な誤り検出／訂正処理を施すことができる。
【００２８】
本発明の第３のＲＯＭイメージ生成装置は、複数のデータに基づき、不良ブロックを含む記憶装置に書き込むためのＲＯＭイメージを生成するＲＯＭイメージ生成装置であって、書き込み対象の記憶装置に含まれる不良ブロックの位置情報を保持する不良ブロック情報保持部と、入力データの種類に応じた検査符号の種類を管理する符号情報管理部と、入力データを、入力データの種類に応じた検査符号を付与できる形式に変換するイメージ整形部と、不良ブロック情報保持部に保持された位置情報を参照して、イメージ整形部で整形された複数のデータを不良ブロックの位置を避けて１つのデータに合成し、合成後のデータに対して、入力データの種類に応じた検査符号を付与する書き込みイメージ生成部とを備える。
このように構成することで、本発明の第１または第２の情報処理装置に含まれる第１の記憶装置として使用されるメモリに書き込むためのＲＯＭイメージを生成することができる。また、データの種類に応じた検査符号が付与され、不良ブロックの位置にデータが配置されていないＲＯＭイメージを生成することができる。
【００２９】
この場合、ＲＯＭイメージ生成装置は、照合コードを保持する照合コード保持部をさらに備え、イメージ整形部は、入力データに対して照合コード保持部に保持された照合コードを付与してもよい。
このように構成することで、照合コードを有するＲＯＭイメージを生成することができる。
【００３０】
また、ＲＯＭイメージ生成装置は、記憶装置について、不良ブロックの位置を検索して位置情報を求める処理と、書き込みイメージ生成部で生成されたデータを書き込む処理とを行うメモリ制御部をさらに備えていてもよい。
このように構成することで、実際のメモリに対してＲＯＭイメージを書き込むＲＯＭイメージ生成装置を得ることができる。
【発明の効果】
【００３１】
本発明の情報処理装置によれば、初期プログラムを格納するためにＲＯＭなどの高信頼性メモリを使用することなく、ＮＡＮＤ型フラッシュメモリなどの低信頼性メモリに格納された検査符号付きのプログラムを用いて、システムブートを安定的に行うことができる。また、本発明のＲＯＭイメージ生成装置によれば、情報処理装置に含まれる第１の記憶装置として使用されるメモリに書き込むためのＲＯＭイメージを生成することができる。
【発明を実施するための最良の形態】
【００３２】
以下、図面を参照して、本発明の各実施形態を説明する。なお、各実施形態の構成要素のうち、先に述べた実施形態と同一の構成要素については、同一の参照符号を付して、説明を省略する。
【００３３】
（第１の実施形態）
図１は、本発明の第１の実施形態に係る情報処理装置の構成を示す図である。図１に示す情報処理装置１は、ＣＰＵ１０と、第１〜第３の記憶装置１１〜１３と、転送装置１４と、ＣＰＵ制御装置１５とを備えている。
【００３４】
ＣＰＵ１０は、情報処理装置１のメインＣＰＵである。ＣＰＵ１０が実行するプログラムは、電源投入前の初期状態では、すべて第１の記憶装置１１に格納されている。初期状態における第２および第３の記憶装置１２、１３の内容は、不定である。第１〜第３の記憶装置１１〜１３は、データバス１６ａ〜ｃによって相互に接続されている。電源が投入されると、第１の記憶装置１１に格納されたプログラムは、第２および第３の記憶装置１２、１３に転送される。より詳細には、第１の記憶装置１１には初期状態で、初期設定動作を司るブートストラッププログラム（Bootstrap Program ：以下、ＢＳＰと略称する）１１１と、メインプログラム１１２とが格納されており、第２の記憶装置１２にはＢＳＰ１１１が転送され、第３の記憶装置１３にはメインプログラム１１２が転送される。ＣＰＵ制御装置１５は、ＢＳＰ１１１の転送が完了するまで、ＣＰＵ１０による命令フェッチを抑制する。
【００３５】
第１の記憶装置１１は、メモリとして正常な機能を果たさない不良ブロックを含み、読み出し時には誤り検出／訂正処理を必要とする、不揮発性の記憶装置を用いて構成される。以下では、第１の記憶装置１１は、ＮＡＮＤ型フラッシュメモリであるとする。図２は、ＮＡＮＤ型フラッシュメモリにおけるブロックとページの関係を示す図である。図２に示すように、ＮＡＮＤ型フラッシュメモリの記憶領域は複数のブロックに分割され、各ブロックはさらに複数のページに分割される。例えば、あるＮＡＮＤ型フラッシュメモリでは、１ブロックは８ページで、１ページは５１２バイトのデータと１６バイトの誤り検査符号とを合わせた５２８バイトで構成される。なお、ブロックサイズおよびページサイズは、ＮＡＮＤ型フラッシュメモリの種類によっては、８ページおよび５２８バイト以外の値となることもある。第１の記憶装置１１は不良ブロックを含むので、第１の記憶装置１１に読み書きを行うときには、不良ブロックを避けて読み書きを行う必要がある。
【００３６】
図１に示すように、第１の記憶装置１１には、不良ブロック１１０以外のブロックに、ＢＳＰ１１１と、メインプログラム１１２と、不良ブロック情報テーブル１１３と、第１〜第３の誤り検査符号１１４〜１１６とが格納される。ＢＳＰ１１１には、少なくとも、システムブートを行うためのコンフィギュレーションと、第１の記憶装置１１に格納されたメインプログラム１１２を第３の記憶装置１３に転送するためのメインプログラム転送ルーチンとが含まれている（後述する図８を参照）。メインプログラム１１２は、システムブート完了後にＣＰＵ１０が実行するプログラムである。なお、一般に情報処理装置では、メインプログラム１１２のサイズは、ＢＳＰ１１１よりも大きい。不良ブロック情報テーブル１１３は、不良ブロックの位置を示すテーブルである（後述する図４を参照）。第１〜第３の誤り検査符号１１４〜１１６は、それぞれ、ＢＳＰ１１１、メインプログラム１１２、および不良ブロック情報テーブル１１３に付与された誤り検査符号である。以下に示すように、第１および第３の誤り検査符号１１４、１１６は同じ方法で計算され、第２の誤り検査符号１１５はこれとは異なる方法で計算される。
【００３７】
図３は、ＢＳＰ１１１と第１の誤り検査符号１１４のフォーマットを示す図である。図３において、Ｄ［ｉ］は情報ビットを表し、Ｐ［ｉ］は誤り検査符号を表す（ただし、ｉは非負の整数。以下、同じ）。図３に示すように、各アドレスの下位４ビットにはＢＳＰ１１１が格納され、上位４ビットには第１の誤り検査符号１１４が格納される。より詳細には、ＢＳＰ１１１は、先頭から４ビットずつに分割され、アドレスの昇順に各アドレスの下位４ビットに格納される。また、分割後の４ビットに基づき、４ビットの第１の誤り検査符号１１４が計算され（計算方法は後述）、アドレスの昇順に各アドレスの上位４ビットに格納される。ＢＳＰ１１１と第１の誤り検査符号１１４は、各４ビット、計８ビット単位で処理される。
【００３８】
図４は、不良ブロック情報テーブル１１３と第３の誤り検査符号１１６のフォーマットを示す図である。図４において、各アドレスの下位４ビットの値０および１は情報ビットを表し、Ｐ［ｉ］は誤り検査符号を表す。各アドレスの下位４ビットには不良ブロック情報テーブル１１３が格納され、上位４ビットには第３の誤り検査符号１１６が格納される。より詳細には、不良ブロック情報テーブル１１３には、第１の記憶装置１１に含まれる各ブロックが正常か不良かを示す情報が、１ブロックあたり１ビットで格納されている。不良ブロック情報テーブル１１３は先頭から４ビットずつに分割され、アドレスの昇順に各アドレスの下位４ビットに格納される。また、ＢＳＰ１１１と同じ計算方法で、分割後の４ビットに基づき、４ビットの第３の誤り検査符号１１６が計算され、アドレスの昇順に各アドレスの上位４ビットに格納される。
【００３９】
例えば、第１の記憶装置１１として、容量が２５６Ｍバイトで、ブロックサイズが１６ＫバイトのＮＡＮＤ型フラッシュメモリを使用した場合、総ブロック数は１６Ｋ個となる。この場合、第１の記憶装置１１のいずれかの正常ブロックには、第３の誤り検査符号１１６を格納する領域を含めて、１６Ｋビットの２倍、すなわち４Ｋバイトの領域が確保され、確保された４Ｋバイトの記憶領域には、不良ブロック情報テーブル１１３と第３の誤り検査符号１１６が格納される。不良ブロック情報テーブル１１３には、正常ブロックであれば値０、不良ブロックであれば値１が格納されるとすると、図４に示す不良ブロック情報テーブル１１３からは、第１の記憶装置１１の５番目および１２番目のブロックが不良ブロックであることが分かる。
【００４０】
ＮＡＮＤ型フラッシュメモリには、その種類に応じて、推奨の符号化方式が定められている。例えば、上述した１ページが５１２バイトのデータと１６バイトの誤り検査符号とで構成されているＮＡＮＤ型フラッシュメモリについては、少なくとも、５１２バイトのデータについて１ビット誤り訂正と２ビット誤り検出を行えるように符号化することが推奨されている。そこで、メインプログラム１１２は、先頭から５１２バイトごとに分割され、分割後の５１２バイトについて、ＮＡＮＤ型フラッシュメモリについて推奨されている符号化方式で求めた第２の誤り検査符号１１５（１６バイト）が付与される。
【００４１】
なお、第１の記憶装置１１に含まれるブロックが正常か不良かは、第１の記憶装置１１に書き込みを行う前に、第１の記憶装置１１に所定の方法でアクセスすることにより、知ることができる。第１の記憶装置１１に書き込みを行うときには、不良ブロックには書き込みを行わず、正常ブロックにのみ書き込みを行う必要がある。以下、ＢＳＰ１１１は、第１の記憶装置１１に含まれる正常ブロックのうちブロック番号が最も小さい１個以上の連続したブロックに、先頭ページから詰めて格納され、メインプログラム１１２は、第１の記憶装置１１に含まれる正常ブロックのうちＢＳＰ１１１が格納されているブロックより後の１個以上の連続したブロックに、先頭ページから詰めて格納されるものとする。
【００４２】
第２の記憶装置１２は、特別な初期設定を行うことなく、ＣＰＵ１０と転送装置１４の双方からアクセスできる揮発性のメモリである。上述したように、第２の記憶装置にはＢＳＰ１１１が転送されるので、第２の記憶装置１２にはＢＳＰ１１１のサイズより大きい容量を有するメモリが使用される。なお、ＣＰＵ１０が第２の記憶装置１２上のＢＳＰ１１１の実行を完了すると、第２の記憶装置１２はその役割を失う。したがって、情報処理装置１は、第２の記憶装置１２として専用のメモリを備えることに代えて、システムＬＳＩに既に内蔵されているスタティックＲＡＭなどを第２の記憶装置１２として使用してもよい。また、以下では説明の便宜上、第２および第３の記憶装置１２、１３を別々の記憶装置として説明するが、第２および第３の記憶装置１２、１３は１個の記憶装置の内部に確保された別々の記憶領域であってもよい。この場合、システムブートが完了した後は、第２の記憶装置１２のために確保された記憶領域は、例えばワーク用の記憶領域として使用することができる。
【００４３】
第３の記憶装置１３にはメインプログラム１１２が転送されるので、第３の記憶装置１３には、第２の記憶装置１２に比べて大きな容量を有するメモリが使用される。このため、第３の記憶装置１３には、ランダムアクセス可能で、ビット単価ができるだけ揮発性の記憶装置を使用することが望ましく、例えばＳＤＲＡＭが使用される。
【００４４】
転送装置１４は、図１に示すように、転送制御部１４１と、誤り処理部１４２と、通知部１４３とを含んでいる。転送制御部１４１は、第１の記憶装置１１に格納されているＢＳＰ１１１を第２の記憶装置１２に自動的に転送する機能と、ＣＰＵ１０からの制御に従い、第１の記憶装置１１に格納されているメインプログラム１１２を読み出す機能とを有する。誤り処理部１４２は、ＢＳＰ１１１が第１の記憶装置１１から第２の記憶装置１２に転送されるときに、転送されるＢＳＰ１１１に対して、第１の誤り検査符号１１４に基づく誤り検出／訂正処理を行う。通知部１４３は、ＢＳＰ１１１の転送が正常に完了したときに、その旨を示す転送完了通知信号１４４をＣＰＵ制御装置１５に出力する。
【００４５】
ＣＰＵ制御装置１５は、通知部１４３から出力された転送完了通知信号１４４に基づき、ＣＰＵ起動制御信号１５１を出力する。図５および図６は、ＣＰＵ制御装置１５の構成例を示す図である。図５に示す構成では、転送完了通知信号１４４がアクティブになるまで、ＣＰＵ制御装置１５はＣＰＵ１０のクロック信号をマスクしており、ＣＰＵ１０は停止している。転送完了通知信号１４４がアクティブになると、ＣＰＵ制御装置１５はクロック信号のマスクを解除し、ＣＰＵ１０は動作を開始する。図６に示す構成では、転送完了通知信号１４４がアクティブになるまで、ＣＰＵ制御装置１５はＣＰＵ１０のリセット信号をそのまま通過させており、ＣＰＵ１０は停止している。転送完了通知信号１４４がアクティブになると、ＣＰＵ制御装置１５はリセット信号をマスクし、ＣＰＵ１０は動作を開始する。このようなＣＰＵ制御装置１５の作用により、転送完了通知信号１４４がアクティブになるまで、ＣＰＵ１０による命令フェッチは抑制される。
【００４６】
以下、転送装置１４の詳細を説明する。転送装置１４は、電源が投入されると、第１の記憶装置１１におけるＢＳＰ１１１の格納位置を求め、求めた格納位置からＢＳＰ１１１を１ページずつ順に読み出して第２の記憶装置１２に転送する。より詳細には、電源が投入されると、転送制御部１４１は、第１の記憶装置１１の先頭から順に記憶内容を読み出す。誤り処理部１４２は、図３に示す８ビットの処理単位ごとに、誤り検出／訂正処理を行う。転送制御部１４１は、誤り検出／訂正処理後の４ビットのＢＳＰ１１１を所定の転送単位にパッキングし、第２の記憶装置１２に転送する。この際、第２の記憶装置１２内のデータの転送先は、電源投入後にＣＰＵ１０が最初に命令をフェッチするアドレスを先頭として、順次更新される。本実施形態では、転送装置１４の転送単位を１６ビットとし、ＣＰＵ１０が最初に命令をフェッチするアドレスを第２の記憶装置１２の先頭アドレスとする。
【００４７】
ここで、誤り処理部１４２における誤り検出／訂正処理について説明する。そもそも、ＢＳＰ１１１に付与される第１の誤り検査符号１１４は、第１の記憶装置１１の推奨仕様を満たす符号であれば、いかなる符号であってもよい。例えば、上述した１ページが５１２バイトのデータと１６バイトの誤り検査符号とで構成されているＮＡＮＤ型フラッシュメモリについては、５１２バイトのデータについて１ビット誤り訂正と２ビット誤り検出を行えるように符号化することが推奨されている。この場合、第１の誤り検査符号１１４として、５１２バイト以下の情報ビットに対して１ビット誤り訂正と２ビット誤り検出が可能な符号を選べば、最低限の要求を満たすことができる。
【００４８】
本実施形態では、第１の記憶装置１１により多くの欠陥が含まれている場合でも正しくシステムブートを行えるように、第１の誤り検査符号１１４には、より誤り検出／訂正処理能力の高い符号を使用する。具体的には、第１の誤り検査符号１１４は、次式（１）に示すように、ＢＳＰ１１１に基づき生成行列Ｇを用いて計算される。なお、以下では、Ｄ［０］〜Ｄ［３］は４ビットずつに分割されたＢＳＰ１１１を、Ｐ［０］〜Ｐ［３］はＤ［０］〜Ｄ［３］に付与される第１の誤り検査符号を表し、行列演算における加算は排他的論理和であるとする。
【数１】
2005190201.tif 000003
【００４９】
上式（１）によって得られた符号［Ｄ［０］ Ｄ［１］ Ｄ［２］ Ｄ［３］ Ｐ［０］ Ｐ［１］ Ｐ［２］ Ｐ［３］］のシンドローム［Ｘ［０］ Ｘ［１］ Ｘ［２］ Ｘ［３］］は、次式（２）に示すように、検査行列Ｈを用いて計算される。
【数２】
2005190201.tif 000004
【００５０】
次に、誤り処理部１４２は、求めたＸ［３］〜Ｘ［０］に応じて、以下に示す処理を行う。ただし、Ｘ［３］＝α、Ｘ［２］＝β、Ｘ［１］＝γ、Ｘ［０］＝δであるとき、Ｘ＝｛αβγδ｝と表記する。
（ア）Ｘ＝｛００００｝のとき：誤りなしと判断し、誤り訂正を行わない。
（イ）Ｘ＝｛０１０１｝のとき：Ｄ［０］が誤りと判断し、Ｄ［０］を反転させる。
（ウ）Ｘ＝｛０１１０｝のとき：Ｄ［１］が誤りと判断し、Ｄ［１］を反転させる。
（エ）Ｘ＝｛１００１｝のとき：Ｄ［２］が誤りと判断し、Ｄ［２］を反転させる。
（オ）Ｘ＝｛１０１０｝のとき：Ｄ［３］が誤りと判断し、Ｄ［３］を反転させる。
（カ）Ｘ＝｛０００１｝のとき：Ｐ［０］が誤りと判断し、誤り訂正を行わない。
（キ）Ｘ＝｛００１０｝のとき：Ｐ［１］が誤りと判断し、誤り訂正を行わない。
（ク）Ｘ＝｛０１００｝のとき：Ｐ［２］が誤りと判断し、誤り訂正を行わない。
（ケ）Ｘ＝｛１０００｝のとき：Ｐ［３］が誤りと判断し、誤り訂正を行わない。
このうち（イ）〜（オ）の場合は、情報ビットに発生した１ビット誤りを訂正する場合であり、（カ）〜（ケ）の場合は、誤り検査符号が１ビット誤っているだけなので、情報ビットを訂正しない場合である。また、Ｘが上記以外の値をとる場合、誤り処理部１４２は、訂正不可能な誤りが発生したと判断する。なお、ここで説明した第１の誤り検査符号１１４の計算方法は一例であり、これ以外の計算方法を使用してもよいことは言うまでもない。
【００５１】
図７は、電源投入後の転送制御部１４１の動作を示すフローチャートである。転送制御部１４１は、図７に示す手順に従い、第１の記憶装置１１におけるＢＳＰ１１１の格納位置を求め、求めた格納位置からＢＳＰ１１１を１ページずつ順に読み出して第２の記憶装置１２に転送する。なお、ここでは、ＢＳＰ１１１のサイズは１ブロック以下であるとする。また、変数Ｂは読み出しブロック番号を表し、変数Ｐは読み出しページ番号を表す。
【００５２】
転送制御部１４１は、電源が投入されると、まずＢとＰを０に初期化する（ステップＳ１０１）。これにより、第１の記憶装置１１内の読み出し位置が、先頭ブロック内の先頭ページに設定される。次に、転送制御部１４１は、第１の記憶装置１１のＢ番目のブロックのＰ番目のページを読み出し、第２の記憶装置１２の所定のアドレスに転送する（ステップＳ１０２）。このとき、誤り処理部１４２は、転送されるページを所定の処理単位（ここでは、８ビット）に分割し、各処理単位ごとに誤り検出／訂正処理を行う。誤り処理部１４２は、各処理単位に訂正可能な誤りが含まれていれば、これを訂正し、各処理単位に訂正不可能な誤り（訂正能力を超えた誤り）が含まれていれば、その旨を内部に記憶する。
【００５３】
次に、転送制御部１４１は、ＰがＢＳＰ１１１のページ数（以下、Ｍとする）より小さいか否かを判定する（ステップＳ１０３）。判定結果がＹＥＳである場合には、転送制御部１４１は、Ｐに１を加算し（ステップＳ１０６）、ステップＳ１０２に進む。これにより、ステップＳ１０２における転送は、連続してＭ回実行される。ステップＳ１０３の判定結果がＮＯである場合には、転送制御部１４１は、ステップＳ１０２におけるＭページの転送において、訂正不可能な誤りを検出したか否かを判定する（ステップＳ１０４）。判定結果がＮＯである場合には、転送制御部１４１は、ＢＳＰ１１１の転送は成功したとみなして、処理を終了する。この場合、通知部１４３は、ＣＰＵ制御装置１５に転送完了通知信号１４４を出力する。
【００５４】
ステップＳ１０４の判定結果がＹＥＳである場合には、転送制御部１４１は、Ｂが検索対象となるブロックの個数（以下、Ｎとする）より小さいか否かを判定する（ステップＳ１０５）。判定結果がＮＯである場合には、転送制御部１４１は、ＢＳＰ１１１の転送に失敗したとみなして、処理を終了する。ステップＳ１０５の判定結果がＹＥＳである場合には、転送制御部１４１は、Ｂに１を加算し、Ｐに０を設定して（ステップＳ１０７）、ステップＳ１０２に進む。このようにして、転送制御部１４１は、最大Ｎ個のブロックについてＢＳＰ１１１を探索する。なお、上記ＭおよびＮの値は、転送装置１４で固定されていてもよく、スイッチなどを用いて変更できることとしてもよい。
【００５５】
ＣＰＵ制御装置１５は、通知部１４３から転送完了通知信号１４４を受けると、ＢＳＰ１１１の転送が正常に完了したと認識し、ＣＰＵ１０が動作可能となるようにＣＰＵ起動制御信号１５１を変化させる。これに伴い、ＣＰＵ１０は、第２の記憶装置１２から命令フェッチを開始する。これに対して、ＢＳＰ１１１の転送が正常に完了しなかった場合は、転送完了通知信号１４４は出力されず、ＣＰＵ起動制御信号１５１も変化せず、ＣＰＵ１０は第２の記憶装置１２から命令フェッチを開始しない。なお、ＣＰＵ制御装置１５を用いてＣＰＵ１０による命令フェッチを制御する方法には、ＣＰＵ１０に供給されるクロック信号を制御する方法（図５）や、ＣＰＵ１０に供給されるリセット信号を制御する方法（図６）などが挙げられる。
【００５６】
以下、ＢＳＰ１１１の詳細を説明する。ＢＳＰ１１１には、システムのコンフィギュレーションを行うためのデータと、メインプログラム転送ルーチンと、不良ブロック情報テーブル１１３（あるいは、不良ブロック情報テーブル１１３へのポインタ）が含まれる。メインプログラム１１２は第１の記憶装置１１の正常ブロックに格納されるので、不良ブロック情報テーブル１１３は、メインプログラム１１２の第１の記憶装置１１における格納位置を表す格納位置情報とも言える。
【００５７】
図８は、ＢＳＰ１１１の構成を示す図である。図８（ａ）に示すＢＳＰ１１１は、コンフィギュレーション部１１７と、メインプログラム転送部１１８と、不良ブロック情報テーブルポインタ１１９とを含む。コンフィギュレーション部１１７には、バスコントローラに設定するデータなど、システムの基本コンフィギュレーションを行うときに必要なデータが含まれる。コンフィギュレーション部１１７に含まれるデータに基づき、第３の記憶装置１３にアクセスするためのメモリコントローラの設定などが行われる。メインプログラム転送部１１８には、第２の誤り検出符号１１５に基づく誤り検出／訂正処理を行う誤り処理プログラムを含んだメインプログラム転送ルーチンが含まれる。不良ブロック情報テーブルポインタ１１９には、不良ブロック情報テーブル１１３の先頭アドレスが含まれる。
【００５８】
あるいは、ＢＳＰ１１１は、図８（ｂ）に示すように、不良ブロック情報テーブルポインタ１１９に代えて、不良ブロック情報テーブル１１３を含んでいてもよい。図８（ｂ）に示す構成を採用した場合、ＢＳＰ１１１のサイズは、図８（ａ）に示す構成を採用した場合より大きくなる。しかし、ＢＳＰ１１１の転送が完了した後は、ＣＰＵ１０は、不良ブロック情報テーブル１１３にアクセスするときには、第１の記憶装置１１ではなく、第２の記憶装置１２にアクセスすれば済む。このため、図８（ｂ）に示す構成を採用した場合、メインプログラム１１２を第３の記憶装置１３に転送する処理を高速に行うことができる。
【００５９】
図９は、ＣＰＵ１０によるブートストラップ処理を示すフローチャートである。ＢＳＰ１１１の転送が完了し、転送完了通知信号１４４が出力された後、ＣＰＵ１０は、第２の記憶装置１２上のＢＳＰ１１１を実行することにより、図９に示す処理を行う。図９では、変数Ｂは読み出しブロック番号を表し、変数Ｐは読み出しページ番号を表す。
【００６０】
ＢＳＰ１１１の転送が完了すると、ＣＰＵ１０は、まず、ＢＳＰ１１１のシステムコンフィギュレーション部１１７に格納されたデータを用いて、システムコンフィギュレーションを行う（ステップＳ２０１）。ステップＳ２０１では、例えば、第３の記憶装置１３にアクセスするために、メモリインターフェイス回路などに各種のパラメータが設定される。
【００６１】
次に、ＣＰＵ１０は、ＢＳＰ１１１から不良ブロック情報テーブルポインタ１１９を読み出し、これを用いて、不良ブロック情報テーブル１１３を第１の記憶装置１１から第３の記憶装置１３にコピーする（ステップＳ２０２）。このとき、転送装置１４の誤り処理部１４２は、第１の記憶装置１１から読み出した不良ブロック情報テーブル１１３に対して、第１の誤り検出符号１１４に基づく誤り検出／訂正処理を行う。なお、図８（ｂ）に示すＢＳＰ１１１を採用した場合には、不良ブロック情報テーブル１１３はこの時点で既に第２の記憶装置１２に格納されているので、ステップＳ２０２の処理は行われない。次に、ＣＰＵ１０は、ＢＳＰ１１１を含むブロックの番号をＢに設定する（ステップＳ２０３）。
【００６２】
次に、ＣＰＵ１０は、第３の記憶装置１３上の不良ブロック情報テーブルを参照して、次の正常ブロックの番号を求めてＢに設定し（ステップＳ２０４）、Ｐに０を設定する（ステップＳ２０５）。次に、ＣＰＵ１０は、コピー関数を呼び出すことにより、第１の記憶装置１１のＢ番目のブロックのＰ番目のページを第３の記憶装置１３の所定のアドレスにコピーする（ステップＳ２０６）。次に、ＣＰＵ１０は、誤り検出／訂正処理を行う前段階として、ステップＳ２０６でコピーしたページについて、シンドロームを計算する（ステップＳ２０７）。次に、ＣＰＵ１０は、ステップＳ２０７で計算されたシンドロームに基づき、ソフトウェアによる誤り検出／訂正処理を行う（ステップＳ２０８）。ステップＳ２０８の処理により、読み出したページに含まれていた訂正可能な誤りは訂正される。
【００６３】
次に、ＣＰＵ１０は、ステップＳ２０８における誤り検出／訂正処理で訂正不可能な誤り（訂正能力を超えた誤り）を発見したか否かを判定する（ステップＳ２０９）。判定結果がＮＯである場合、ＣＰＵ１０は、Ｐが１ブロックのページ数より小さいか否かを判定する（ステップＳ２１０）。判定結果がＹＥＳである場合、ＣＰＵ１０は、Ｐに１を加算して（ステップＳ２１２）、ステップＳ２０６に進む。ステップＳ２１０における判定結果がＮＯである場合、ＣＰＵ１０は、ＢがＢＳＰ１１１のブロック数より小さいか否かを判定する（ステップＳ２１１）。判定結果がＹＥＳである場合、ＣＰＵ１０は、Ｂに１を加算し、Ｐに０を設定して（ステップＳ２１３）、ステップＳ２０４に進む。
【００６４】
ステップＳ２１１における判定結果がＮＯである場合、ＣＰＵ１０は、メインプログラム１１２の転送に成功したとみなす。この場合、ＣＰＵ１０は、第３の記憶装置１３上のメインプログラム１１２に分岐する。これに対して、ステップＳ２０９における判定結果がＹＥＳである場合、ＣＰＵ１０は、メインプログラム１１２の転送に失敗したとみなす。この場合、ＣＰＵ１０は、何も処理を行わず、無限ループに入る。
【００６５】
このようにＣＰＵ１０は、第２の記憶装置１２上のＢＳＰ１１１を実行することにより、第１の記憶装置１１の正常ブロックに格納されているメインプログラム１１２を第３の記憶装置に転送した後、メインプログラム１１２の転送に成功した場合には、第３の記憶装置１３上のメインプログラム１１２を実行し、メインプログラム１１２の転送に失敗した場合には、動作を停止する。
【００６６】
以上に示すように、情報処理装置１によれば、初期プログラムを格納するためにＲＯＭなどの高信頼性メモリを使用することなく、ＮＡＮＤ型フラッシュメモリなどの低信頼性メモリに格納された検査符号付きのプログラムを用いて、システムブートを安定的に行うことができる。また、第２の記憶装置に格納されたブートストラッププログラムに従い、第１の記憶装置に格納されたメインプログラムを第２の記憶装置に転送し、第２の検査符号に基づく誤り検出／訂正処理を施すことにより、メインプログラムに対して、ソフトウェアによる複雑な誤り検出／訂正処理を施すことができる。
【００６７】
なお、情報処理装置１では、ＣＰＵ制御装置１５を用いてＣＰＵ１０による命令フェッチを制御することとしたが、図１０に示す情報処理装置２のように、データバス１６ａの調停装置２０を用いてＣＰＵ１０による命令フェッチを制御してもよい。図１０において、調停装置２０は、第２の記憶装置１２にアクセスするために必要となる、データバス１６ａのアクセス権を調停する。より詳細には、調停装置２０は、電源投入後、転送完了通知信号１４４が出力されるまでは、転送装置１４に対してデータバス１６ａのアクセス権を優先的に与える。ＢＳＰ１１１の転送が完了し、転送完了通知信号１４４が出力されると、調停装置２０は、ＣＰＵ１０に対してデータバス１６ａのアクセス権を優先的に与える。
【００６８】
このため、ＣＰＵ１０は、電源投入後、直ちに第２の記憶装置１２から命令をフェッチしようとするが、調停装置２０の作用により、ＢＳＰ１１１の転送が完了するまでデータバス１６ａのアクセス権を獲得することができず、第２の記憶装置１２にアクセスできない。これにより、ＣＰＵ１０による命令フェッチは、ＢＳＰ１１１の転送が完了するまで待機させられ、ＢＳＰ１１１の転送が完了した後にはじめて可能となる。したがって、情報処理装置２は、情報処理装置１と同じ効果を奏する。
【００６９】
また、情報処理装置１では、第１の記憶装置１１の先頭のブロックから順にＢＳＰ１１１を検索し、Ｍページの転送中に訂正不可能な誤りを検出したか否かによって不良ブロックを検出する方法が採用されている。ところが、この方法では、不良ブロックに出荷時の初期値データとして偶然に誤り検出／訂正処理をパスする値が格納されていた場合に、不良ブロックが正常ブロックと誤認識される。この問題を解決するためには、第１の記憶装置１１に書き込みを行うときに、不良ブロックには訂正不可能な誤りを有するデータを繰り返し書き込んでおけばよい。これにより、Ｍページの転送中に確実に訂正不可能な誤りが検出されるので、不良ブロックを正常ブロックと誤認識することを防止することができる。
【００７０】
（第２の実施形態）
図１１は、本発明の第２の実施形態に係る情報処理装置の構成を示す図である。図１１に示す情報処理装置３は、第１の実施形態に係る情報処理装置１（図１）において、転送装置１４を転送装置３０に置換し、ＢＳＰ１１１に照合コード１２１を追加したものである。情報処理装置３は、照合コード１２１を用いて、不良ブロックを正常ブロックと誤認識する問題を解決する。
【００７１】
転送装置３０は、第１の実施形態に係る転送装置１４の転送制御部１４１を転送制御部３１１に置換した上で、照合コード保持部３０１と照合コード比較部３０２とを含む照合コード判定部３０３を追加したものである。照合コード保持部３０１には、システムで一意に決定された照合コードが格納される。照合コードとして使用する値に特に制約はないが、他の値と区別するために、特徴的な値（例えば、値が０のビットと値が１のビットが適宜混在している値）を使用することが望ましい。本実施形態では、例えば、２バイトの照合コード５ａ３ｃ（１６進表現）を使用する。
【００７２】
ＢＳＰ１１１を第１の記憶装置１１に書き込むときには、ＢＳＰ１１１には、照合コード保持部３０１に保持された照合コードと同じ照合コード１２１が付与される。図１２は、図３と同様、照合コード１２１が付与されたＢＳＰ１１１と第１の誤り検査符号１１４のフォーマットを示す図である。ＢＳＰ１１１は、第１の記憶装置１１の１個以上の正常ブロックに複数のページに亘って格納される。ＢＳＰ１１１の一部を格納している各ページのデータ（５１２バイト）の終端４バイトには、照合コード１２１が誤り検査符号付きで格納される。より詳細には、２バイトの照合コード１２１は、４ビットずつ４個に分割されて、各ページの終端４バイトの下位４ビットに格納される。また、照合コード１２１の４ビットごとに上式（１）を用いて４ビットの誤り検査符号が計算され、照合コードの誤り検査符号１２２として、各ページの終端４バイトの上位４ビットに格納される。例えば、照合コードの値を５ａ３ｃ（１６進表現）とした場合、Ｍ［１５］＝０、Ｍ［１４］＝１、Ｍ［１３］＝０、Ｍ［１２］＝１、Ｐ［２０４７］＝１、Ｐ［２０４６］＝１、Ｐ［２０４５］＝０、Ｐ［２０４４］＝０などのようになる。
【００７３】
図１３は、図７と同様、電源投入後の転送制御部３１１の動作を示すフローチャートである。転送制御部３１１は、第１の実施形態に係る転送制御部１４１と同様、図１３に示す手順に従い、第１の記憶装置１１におけるＢＳＰ１１１の格納位置を求め、求めた格納位置からＢＳＰ１１１を１ページずつ順に読み出して第２の記憶装置１２に転送する。なお、ここでも、ＢＳＰ１１１のサイズは１ブロック以下であるとする。また、変数ＢおよびＰの意味は、図７と同じである。
【００７４】
転送制御部３１１は、電源が投入されると、まずＢとＰを０に初期化する（ステップＳ３０１）。次に、転送制御部３１１は、ＰがＢＳＰ１１１のサイズＭより小さいか否かを判定する（ステップＳ３０２）。判定結果がＮＯである場合には、転送制御部３１１は、ＢＳＰ１１１の転送に成功したとみなして、処理を終了する。この場合、ＣＰＵ制御装置１５は、転送完了通知信号１４４を出力する。
【００７５】
ステップＳ３０２の判定結果がＹＥＳである場合には、転送制御部３１１は、第１の記憶装置１１のＢ番目のブロック内のＰ番目のページを読み出し、第２の記憶装置１２の所定のアドレスに転送する（ステップＳ３０３）。このとき、誤り処理部１４２は、図７のステップＳ１０２のときと同じ誤り検出／訂正処理を行う。また、照合コード比較部３０２は、転送されるページのデータ（５１２バイト）の終端４バイトに格納されている照合コード１２１と、照合コード保持部３０１に保持されている照合コード（照合コードの正解値）とを比較する。
【００７６】
次に、転送制御部３１１は、照合コード比較部３０２において、照合コード１２１と照合コードの正解値が一致したかを否かを判定する（ステップＳ３０４）。判定結果がＹＥＳである場合には、転送制御部３１１は、ステップＳ３０３における１ページの転送において、訂正不可能な誤りを検出かしたか否かを判定する（ステップＳ３０５）。この判定結果がＮＯである場合には、転送制御部３１１は、Ｐに１を加算し（ステップＳ３０７）、ステップＳ３０２に進む。
【００７７】
ステップＳ３０４における判定結果がＮＯである場合には、転送制御部３１１は、Ｂが検索対象のブロック数Ｎより小さいか否かを判定する（ステップＳ３０６）。判定結果がＹＥＳである場合には、転送制御部３１１は、Ｂに１を加算し、Ｐに０を設定して（ステップＳ３０８）、ステップＳ３０２に進む。
【００７８】
ステップＳ３０５における判定結果がＹＥＳである場合、または、ステップＳ３０６における判定結果がＮＯである場合には、転送制御部３１１は、ＢＳＰ１１１の転送に失敗したとみなして、処理を終了する。この場合、ＣＰＵ制御装置１５は、転送完了通知信号１４４を出力しない。
【００７９】
ブートストラッププログラムの転送に成功した場合も失敗した場合も、情報処理装置３は、第１の実施形態に係る情報処理装置１と同じように動作する。したがって、情報処理装置３は、第１の実施形態に係る情報処理装置１と同じ効果を奏する。これに加えて、照合コードを用いることにより、不良ブロックを正常ブロックと誤認識する問題を解決し、不良ブロックを含む第１の記憶装置に格納されたブートストラッププログラムを高速に検出することができる。
【００８０】
なお、情報処理装置３では、ＣＰＵ１０による命令フェッチを制御するために、図５および図６に示すＣＰＵ制御装置１５を使用してもよく、図１０に示す調停装置２０を使用してもよい。この点は、後述する第３〜第５の実施形態でも同じである。
【００８１】
また、情報処理装置は、図１４に示す情報処理装置４のように、外部から照合コードを書き換えできる転送装置を備えていてもよい。図１４において、転送装置４０は、データバス１６ｄを介して、照合コード保持部３０１にデータを書き込むことができるように構成されている。第１の記憶装置１１には、２種類のＢＳＰ１１１ａ、１１１ｂと、これら２種類のＢＳＰに基づき同じ方法で計算された第１の誤り検査符号１１４ａ、１１４ｂが格納される。ＢＳＰ１１１ａおよび第１の誤り検査符号１１４ａは、図１１に示す情報処理装置３で言えば、それぞれ、ＢＳＰ１１１および第１の誤り検査符号１１４に相当する。ＢＳＰ１１１ｂは、ＢＳＰ１１１ａとは異なるＢＳＰであり、例えば、リビジョンの異なるＣＰＵのためのＢＳＰや、システム構成の異なる情報処理装置のためのＢＳＰなどである。ＢＳＰ１１１ａ、１１１ｂは、それぞれ、照合コード１２１ａ、１２１ｂが付与された状態で第１の記憶装置１１に格納される。照合コード１２１ｂには、照合コード１２１ａとは異なる値が使用される。
【００８２】
照合コード保持部３０１に保持された照合コード（照合コードの正解値）は、ＣＰＵ１０のリビジョンやシステム構成などに応じて書き換えられる。転送装置４０は、電源が投入されると、照合コード保持部３０１に保持された照合コードに応じて、ＢＳＰ１１１ａまたはＢＳＰ１１１ｂのいずれかを選択し、第２の記憶装置１２に転送する。ＣＰＵ１０は、第２の記憶装置１２上のＢＳＰ１１１ａまたはＢＳＰ１１１ｂに従って動作する。これにより、ＣＰＵのリビジョンやシステム構成などが異なる場合でも、１個の第１の記憶装置１１から、ＣＰＵのリビジョンやシステム構成などに応じて最適なＢＳＰを選択し、システムブートを正しく行うことができる。なお、情報処理装置４では、ＢＳＰ１１１ａ、１１１ｂに基づき、第１の誤り検査符号１１４ａ、１１４ｂを同じ方法で計算することとしたが、両者を異なる方法で計算してもよい。この場合、各誤り検査符号に対応した誤り検出／訂正は、誤り処理部１４２によって行われる。
【００８３】
（第３の実施形態）
図１５は、本発明の第３の実施形態に係る情報処理装置の構成を示す図である。図１５に示す情報処理装置５は、第１の実施形態に係る情報処理装置１（図１）において、転送装置１４を転送装置５０に置換したものである。情報処理装置５は、メインプログラム１１２に対する誤り検出／訂正処理の一部を転送装置５０で行うことを特徴とする。
【００８４】
転送装置５０は、第１の実施形態に係る転送装置１４の誤り処理部１４２を、第１および第２の誤り処理部５０１、５０２、並びに誤り処理選択部５０３に置換したものである。第１の誤り処理部５０１は、第１および第３の誤り検査符号１１４、１１６に基づく誤り検出／訂正処理を行う。第１の誤り処理部５０１における誤り検出／訂正処理は、例えば、上式（２）を用いて所定の処理単位で（ここでは、８ビット単位で）行われる。
【００８５】
第２の誤り処理部５０２は、第２の誤り検査符号１１５に基づく誤り検出／訂正処理のうち一部の処理を行う。ここで、第２の誤り検査符号１１５が５１２バイトのデータに基づき計算された１６バイトの誤り検査符号であるとした場合、第２の誤り検査符号１１５に基づく誤り検出／訂正処理には、第１および第３の誤り検査符号１１４、１１６よりも、多くの計算量が必要とされる。したがって、第２の誤り処理部５０２が第２の誤り検査符号１１５に基づく誤り検出／訂正処理のすべてを行うとすると、転送装置５０のハードウェア量が増加し、情報処理装置５のコストが増大する。そこで、第２の誤り処理部５０２は、第２の誤り検査符号１１５に基づく誤り検出／訂正処理のうち、シンドローム計算だけを行うこととする。計算されたシンドロームを用いた誤り検出／訂正処理は、ＣＰＵ１０のソフトウェア処理によって行われる。
【００８６】
誤り処理選択部５０３は、ＣＰＵ１０による制御に従い、第１および第２の誤り処理部５０１、５０２のいずれかを選択的に動作させる。誤り処理選択部５０３は、ＣＰＵ１０から書き込み可能なレジスタを含み、このレジスタには、ＢＳＰ１１１の転送が完了するまでは、例えば値０が格納されている。ＢＳＰ１１１の転送が完了すると、ＣＰＵ１０は、誤り処理選択部５０３に含まれるレジスタの値を、例えば１に書き替える。誤り処理選択部５０３は、レジスタの値が０であるときは、第１の記憶装置１１から読み出されたデータを第１の誤り処理部５０１に供給し、レジスタの値が１であるときは、第１の記憶装置１１から読み出されたデータを第２の誤り処理部５０２に供給する。
【００８７】
したがって、転送装置５０では、電源が投入された後、誤り処理選択部５０３に含まれるレジスタの値が１に変化するまでの間、転送されるＢＳＰ１１１に対して、第１の誤り検査符号１１４に基づく誤り検出／訂正処理が行われる。その後、ＣＰＵ１０が所定の命令を実行することにより、誤り処理選択部５０３に含まれるレジスタの値が１に変化する。これ以降、転送装置５０では、転送されるメインプログラム１１２に対して、第２の誤り検査符号１１５に基づく誤り検出／訂正処理のうち、シンドローム計算が行われる。
【００８８】
以上に示すように、情報処理装置５によれば、誤り検出／訂正処理の一部を転送装置で行うことにより、メインプログラムに対する誤り検出／訂正処理を高速に行い、システムブートを高速に行うことができる。
【００８９】
なお、情報処理装置５では、誤り処理選択部５０３に含まれるレジスタの値は、ＣＰＵ１０の命令によって書き替えられることとした。これに代えて、図１６に示す情報処理装置６のように、転送装置６０に含まれる誤り処理選択部６０１は、通知部１４３から受け取った転送完了通知信号１４４に同期して、上記レジスタの値を０から１に切り替えてもよい。
【００９０】
（第４の実施形態）
図１７は、本発明の第４の実施形態に係る情報処理装置の構成を示す図である。図１７に示す情報処理装置７は、第３の実施形態に係る情報処理装置５（図１５）において、転送装置５０を転送装置７０に置換したものである。情報処理装置７は、転送装置７０がメインプログラム１１２の転送機能を有することを特徴とする。
【００９１】
転送装置７０は、第３の実施形態に係る転送装置５０（図１５）に、制御情報格納部７０１と、不良ブロック情報テーブルポインタ格納部７０２と、不良ブロック情報テーブル格納部７０３とを追加したものである。制御情報格納部７０１には、転送元アドレスや、転送サイズや、転送先アドレスなどが格納される。不良ブロック情報テーブルポインタ格納部７０２には、ＢＳＰ１１１に含まれる不良ブロック情報テーブルポインタ１１９（不良ブロック情報テーブル１１３の先頭アドレス）が格納される。
【００９２】
不良ブロック情報テーブル１１３には、ＢＳＰ１１１と同じ方法で計算された第３の誤り検査符号１１６が付与されている。転送装置７０は、ＣＰＵ１０からの制御に従い、第１の記憶装置１１から不良ブロック情報テーブル１１３と第３の誤り検査符号１１６を読み出し、第１の誤り処理部５０１を用いて誤り検出／訂正処理を施して、誤り検出／訂正処理後の不良ブロックテーブルを第２の記憶装置１２に書き込む。
【００９３】
また、本実施形態では、第２の誤り処理部５０２は、第２の誤り検査符号に対する誤り検出／訂正処理の全体を行うこととする。この場合、第２の誤り処理部５０２は、メインプログラム１１２に対して誤り検出／訂正処理を行っている間に、訂正不可能な誤りを検出した場合には、誤り処理を中断し、図示しない手段で、ＣＰＵ１０に回復不可能な誤りを検出したことを通知する。ＣＰＵ１０は、この通知を受けると、異常処理を行う。例えば、ＣＰＵ１０は、システムをアボートさせ、図示しない表示手段にメッセージを表示するなどにより、回復不可能な誤りが発生したことをユーザに通知する。
【００９４】
図１８は、本実施形態に係るＣＰＵ１０によるブートストラップ処理を示すフローチャートである。図１８に示すフローチャートは、図９に示すフローチャートと類似しているので、以下では両者の相違点のみを説明する。
【００９５】
図９に示すフローチャートでは、ＣＰＵ１０は、ＢＳＰ１１１から不良ブロック情報テーブルポインタ１１９を読み出し、これを用いて、不良ブロック情報テーブル１１３を第１の記憶装置１１から第３の記憶装置１３にコピーする（ステップＳ２０２）。これに対して、図１８に示すフローチャートでは、ＣＰＵ１０は、ＢＳＰ１１１から不良ブロック情報テーブルポインタ１１９を読み出し、転送装置７０の不良ブロック情報テーブルポインタ格納部７０２に書き込む（ステップＳ４０２）。このとき、転送装置７０は、不良ブロック情報テーブルポインタ格納部７０２に格納された不良ブロック情報テーブルポインタを参照して、第１の記憶装置１１から不良ブロック情報テーブル１１３と第３の誤り検出符号１１６を読み出し、第１の誤り検査符号１１４に基づく誤り検出／訂正処理を施して、その結果を不良ブロック情報テーブルポインタ格納部７０２に書き込む。
【００９６】
また、図９に示すフローチャートでは、ＣＰＵ１０は、コピー関数を呼び出すことによりページを第３の記憶装置１３にコピーし（ステップＳ２０６）、コピーしたページのシンドロームを自ら計算する（ステップＳ２０７）。これに対して、図１８に示すフローチャートでは、ＣＰＵ１０は、転送装置７０の制御情報格納部７０１に転送に必要なパラメータ（例えば、転送元としてＢとＰの値など）を書き込み、転送装置７０による転送完了まで待機する（ステップＳ４０６）。このとき、転送制御部１４１は、制御情報格納部７０１に格納されたパラメータで指定された、第１の記憶装置１１のＢ番目のブロックのＰ番目のページを第２の記憶装置１２の所定のアドレスに転送し、第２の誤り処理部５０２は、転送したページのシンドロームを計算する。１ページの転送が完了すると、ＣＰＵ１０は、第２の誤り処理部５０２で計算されたシンドロームを読み出す（ステップＳ４０８）。ステップＳ４０９における誤り検出／訂正処理は、読み出されたシンドロームに基づき行われる。
【００９７】
以上に示すように、情報処理装置７によれば、ブートストラッププログラムのサイズを小さくするとともに、ＣＰＵの負荷を軽減しシステムブートを高速に行うことができる。
【００９８】
（第５の実施形態）
図１９は、本発明の第５の実施形態に係る情報処理装置の構成を示す図である。図１９に示す情報処理装置８は、第３の実施形態に係る情報処理装置３（図１１）から、第２の記憶装置１２を除去し、転送装置３０を転送装置８０に置換したものである。情報処理装置８は、ＢＳＰ１１１を格納するために専用の記憶装置を備えず、ＢＳＰ１１１を転送装置８０から供給することを特徴とする。
【００９９】
転送装置８０は、第３の実施形態に係る転送装置３０（図１１）において、転送制御部３１１を転送制御部８０３に置換し、バッファ制御部８０１と命令供給バッファ８０２を追加したものである。命令供給バッファ８０２は、所定数の命令を格納するためのバッファである。転送制御部８０３は、電源が投入されると、第１の記憶装置１１の先頭からＢＳＰ１１１を所定量だけ順に読み出し、誤り処理部１４２は、読み出された所定量のＢＳＰ１１１に対して誤り検出／訂正処理を施す。誤り検出／訂正後のＢＳＰ１１１は、データバス１６ｃ、１６ｂ、１６ｅ経由で命令供給バッファ８０２に格納される。ＣＰＵ１０は、電源が投入されると、命令供給バッファ８０２から命令をフェッチしようとする。
【０１００】
ＣＰＵ１０が命令フェッチを行ったときに、命令供給バッファ８０２に次の命令が既に格納されていた場合には、バッファ制御部８０１は、ＣＰＵ１０がその命令を読み出すことを許可する。この場合、ＣＰＵ１０は、命令フェッチに成功し、フェッチした命令を実行する。これに対して、ＣＰＵ１０が命令フェッチを行ったときに、命令供給バッファ８０２に次の命令がまだ蓄積されていない場合には、バッファ制御部８０１は、ＣＰＵ１０の命令フェッチを留保し、転送制御部８０３を制御して、第１の記憶装置１１から次の命令を読み出す。読み出された命令は、誤り検出／訂正処理を施された後、命令供給バッファ８０２に格納される。このようにして、転送装置８０は、命令供給バッファ８０２に次の命令が格納されていない場合には、次の命令が準備できるまで、ＣＰＵ１０が命令をフェッチできないように制御する。
【０１０１】
以上に示すように、情報処理装置８によれば、ＢＳＰを格納するためにメモリ領域を確保することなく、第１の実施形態に係る情報処理装置と同じ効果を奏することができる。
【０１０２】
（第６の実施形態）
図２０は、本発明の第６の実施形態に係るＲＯＭイメージ生成装置の構成を示す図である。図２０に示すＲＯＭイメージ生成装置９は、上記各実施形態に係る情報処理装置に含まれる第１の記憶装置１１として使用されるメモリ（以下、対象メモリという）に、ＢＳＰ１１１やメインプログラム１１２などを含むＲＯＭイメージを書き込む装置である。
【０１０３】
ＲＯＭイメージ生成装置９は、イメージ整形部９１と、書き込みイメージ生成部９２と、メモリ制御部９３と、照合コード管理部９４と、符号情報管理部９５と、不良ブロック情報保持部９６と、不良ブロック情報テーブル生成部９７とを備えている。また、イメージ整形部９１は、照合コード付与部９１１と整形部９１２とを含み、書き込みイメージ生成部９２は、イメージ合成部９２１と不良ブロック情報テーブルポインタ付与部９２２と誤り検査符号付与部９２３とを含み、メモリ制御部９３は、不良ブロック検索部９３１とメモリ書き込み部９３２を含んでいる。
【０１０４】
入力データ９００が入力される前に、照合コード管理部９４には、入力データ９００に付与して書き込まれる照合コード９４１が格納されており、符号情報管理部９５には、入力データ９００の種類ごとに、いかなる方法で誤り検査符号を計算するかを表す誤り検査符号付与情報９５１が格納されている。また、不良ブロック検索部９３１は、対象メモリに所定の方法でアクセスし、対象メモリに含まれる不良ブロックの位置を表す不良ブロック情報９３３を出力する。不良ブロック検索部９３１から出力された不良ブロック情報９３３は、不良ブロック情報保持部９６に格納される。
【０１０５】
ＲＯＭイメージ生成装置９には、入力データ９００として、対象メモリに書き込むべきバイナリ形式のＢＳＰやメインプログラムなどが、別々のファイルに分けて入力される。また、不良ブロック情報テーブル生成部９７は、不良ブロック情報保持部９６に保持された不良ブロック情報９６１に基づき、バイナリ形式の不良ブロック情報テーブル９７１を生成する。入力データ９００と不良ブロック情報テーブル９７１は、別々のファイルに分かれた状態でイメージ整形部９１に入力される。
【０１０６】
イメージ整形部９１は、入力データ９００と不良ブロック情報テーブル９７１を、対象メモリに書き込むための形式に整形する。より詳細には、照合コード付与部９１１は、照合コード管理部９４に格納された照合コード９４１を、必要に応じて入力データ９００に付与する。整形部９１２は、符号情報管理部９５に格納された誤り検査符号付与情報９５１に応じて、入力データ９００と不良ブロック情報テーブル９７１を誤り検査符号を付与するための形式に整形し、その結果を別々のファイルに分けた状態でする。イメージ整形部９１で整形されたデータを、整形部出力９１３という。
【０１０７】
図２１は、整形部出力９１３の例を示す図である。図２１（ａ）は、ＢＳＰ１１１が入力された場合の整形部出力９１３を示し、図２１（ｂ）は、メインプログラム１１２が入力された場合の整形部出力９１３を示している。ＢＳＰ１１１が入力されている間、符号情報管理部９５からは、４ビットの情報ビットに４ビットの誤り検査符号を付与する形式（図３に示す形式）に整形することを示す誤り検査符号付与情報９５１が出力される。整形部９１２は、この誤り検査符号付与情報９５１に基づき、バイナリ形式で入力されたＢＳＰ１１１を図２１（ａ）に示す形式に整形する。また、メインプログラム１１２が入力されている間、符号情報管理部９５からは、５１２バイトのデータに１６バイトの誤り検査符号を付与する形式に整形することを示す誤り検査符号付与情報９５１が出力される。整形部９１２は、この誤り検査符号付与情報９５１に基づき、バイナリ形式で入力されたメインプログラム１１２を図２１（ｂ）に示す形式に整形する。
【０１０８】
書き込みイメージ生成部９２は、イメージ整形部９１から出力された整形部出力９１３を合成し、対象メモリに含まれる不良ブロックの位置を考慮して、対象メモリに書き込むＲＯＭイメージ９２４を生成する。より詳細には、イメージ合成部９２１は、別々のファイルに分けた状態で出力された整形部出力９１３を１つのファイルに合成する。この際、イメージ合成部９２１は、不良ブロック情報保持部９６から出力された不良ブロック情報９６１に基づき、不良ブロックを避けて、正常ブロックに対応する位置にのみ有効なデータを出力する。
【０１０９】
イメージ合成部９２１が整形部出力９１３を１つのファイルに合成すると、不良ブロック情報テーブル９７１をどの正常ブロックに配置するかが確定する。そこで、不良ブロック情報テーブルポインタ付与部９２２は、イメージ合成部９２１の出力に、この正常ブロックの番号（不良ブロック情報テーブルポインタ１１９に相当する）を付与する。
【０１１０】
不良ブロック情報テーブルポインタ付与部９２２が、上記正常ブロックの番号を付与すると、対象メモリに書き込べきＲＯＭイメージのうち、誤り検査符号以外のすべてのデータが確定する。そこで、誤り検査符号付与部９２３は、不良ブロック情報テーブルポインタ付与部９２２の出力に、符号情報管理部９５から出力された誤り検査符号付与情報９５１に応じて、誤り検査符号を付与する。誤り検査符号付与部９２３は、例えば、ＢＳＰ１１１には第１の誤り検査符号１１４を付与し、メインプログラム１１２には第２の誤り検査符号１１５を付与する。
【０１１１】
メモリ書き込み部９３２は、対象メモリに対して、書き込みイメージ生成部９２から出力されたＲＯＭイメージ９２４を書き込む。この際、メモリ書き込み部９３２は、不良ブロック情報保持部９６に保持された不良ブロック情報９６１に基づき、対象メモリに含まれる正常ブロックに対してのみ、ＲＯＭイメージ９２４を書き込む。
【０１１２】
以上に示すように、本実施形態に係るＲＯＭイメージ生成装置によれば、第１〜第５の実施形態に係る情報処理装置に含まれる第１の記憶装置として使用されるメモリに、ＢＳＰやメインプログラムなどを含むＲＯＭイメージを書き込むことができる。
【産業上の利用可能性】
【０１１３】
本発明の情報処理装置は、初期プログラムを格納するためにＲＯＭなどを使用することなく、システムブートを安定的に行えるという特徴を有するので、ノート型パーソナルコンピュータ、携帯型情報機器、携帯電話、デジタルカメラ、ビデオムービー、ゲーム機器など、各種の情報処理装置に利用することができる。
【図面の簡単な説明】
【０１１４】
【図１】本発明の第１の実施形態に係る情報処理装置の構成を示す図
【図２】ＮＡＮＤ型フラッシュメモリにおけるブロックとページの関係を示す図
【図３】図１に示す情報処理装置におけるブートストラッププログラムと第１の誤り検査符号のフォーマットを示す図
【図４】図１に示す情報処理装置における不良ブロック情報テーブルと第３の誤り検査符号のフォーマットを示す図
【図５】図１に示す情報処理装置におけるＣＰＵ制御装置の構成例を示す図
【図６】図１に示す情報処理装置におけるＣＰＵ制御装置の構成例を示す図
【図７】図１に示す情報処理装置の転送装置の動作を示すフローチャート
【図８】図１に示す情報処理装置のブートストラッププログラムの構成を示す図
【図９】図１に示す情報処理装置のＣＰＵによるブートストラップ処理を示すフローチャート
【図１０】本発明の第１の実施形態の変形例に係る情報処理装置の構成を示す図
【図１１】本発明の第２の実施形態に係る情報処理装置の構成を示す図
【図１２】図１１に示す情報処理装置におけるブートストラッププログラムと第１の誤り検査符号のフォーマットを示す図
【図１３】図１１に示す情報処理装置の転送装置の動作を示すフローチャート
【図１４】本発明の第２の実施形態の変形例に係る情報処理装置の構成を示す図
【図１５】本発明の第３の実施形態に係る情報処理装置の構成を示す図
【図１６】本発明の第３の実施形態の変形例に係る情報処理装置の構成を示す図
【図１７】本発明の第４の実施形態に係る情報処理装置の構成を示す図
【図１８】図１７に示す情報処理装置のＣＰＵによるブートストラップ処理を示すフローチャート
【図１９】本発明の第５の実施形態に係る情報処理装置の構成を示す図
【図２０】本発明の第６の実施形態に係るＲＯＭイメージ生成装置の構成を示す図
【図２１】図２０に示すＲＯＭイメージ生成装置の整形部出力を示す図
【符号の説明】
【０１１５】
１、２、３、４、５、６、７、８…情報処理装置
９…ＲＯＭイメージ生成装置
１０…ＣＰＵ
１１…第１の記憶装置
１２…第２の記憶装置
１３…第３の記憶装置
１４、３０、４０、５０、６０、７０、８０…転送装置
１５…ＣＰＵ制御装置
１６…データバス
２０…調停装置
３７…命令供給バッファ
９１…イメージ整形部
９２…書き込みイメージ生成部
９３…メモリ制御部
９４…照合コード管理部
９５…符号情報管理部
９６…不良ブロック情報保持部
９７…不良ブロック情報テーブル生成部
１１０…不良ブロック
１１１…ＢＳＰ
１１２…メインプログラム
１１３…不良ブロック情報テーブル
１１４…第１の誤り検査符号
１１５…第２の誤り検査符号
１１６…第３の誤り検査符号
１１７…コンフィギュレーション部
１１８…メインプログラム転送部
１１９…不良ブロック情報テーブルポインタ
１２１…照合コード
１２２…照合コードの誤り検査符号
１４１、３１１、８０３…転送制御部
１４２…誤り処理部
１４３…通知部
１４４、２０１…転送完了通知信号
１５１…ＣＰＵ起動制御信号
３０１…照合コード保持部
３０２…照合コード比較部
３０３…照合コード判定部
５０１…第１の誤り処理部
５０２…第２の誤り処理部
５０３、６０１…誤り処理選択部
７０１…制御情報格納部
７０２…不良ブロック情報テーブルポインタ格納部
７０３…不良ブロック情報テーブル格納部
８０１…バッファ制御部
８０２…命令供給バッファ
９００…入力データ
９１１…照合コード付与部
９１２…整形部
９１３…整形部出力
９２１…イメージ合成部
９２２…不良ブロック情報テーブルポインタ付与部
９２３…誤り検査符号付与部
９２４…ＲＯＭイメージ
９３１…不良ブロック検索部
９３２…メモリ書き込み部
９３３、９６１…不良ブロック情報
９４１…照合コード
９５１…誤り検査符号付与情報
９７１…不良ブロック情報テーブル
【図１】
2005190201.tif 000005
【図２】
2005190201.tif 000006
【図３】
2005190201.tif 000007
【図４】
2005190201.tif 000008
【図５】
2005190201.tif 000009
【図６】
2005190201.tif 000010
【図７】
2005190201.tif 000011
【図８】
2005190201.tif 000012
【図９】
2005190201.tif 000013
【図１０】
2005190201.tif 000014
【図１１】
2005190201.tif 000015
【図１２】
2005190201.tif 000016
【図１３】
2005190201.tif 000017
【図１４】
2005190201.tif 000018
【図１５】
2005190201.tif 000019
【図１６】
2005190201.tif 000020
【図１７】
2005190201.tif 000021
【図１８】
2005190201.tif 000022
【図１９】
2005190201.tif 000023
【図２０】
2005190201.tif 000024
【図２１】
2005190201.tif 000025