(57)【要約】【課題】ＣＰＵ駆動用としてＮＡＮＤ型フラッシュメモリを用いた場合でも不良ブロックによるＣＰＵ起動の不具合を回避する。【解決手段】内部のデータをシーケンシャルにしか読み出せないＮＡＮＤ型フラッシュメモリ１８からは直接動作させるために、ブートコントローラ１６を設け、ＣＰＵ１０のリセット後の起動アドレスからＣＰＵ１０の命令に基づき予め記録されたＮＡＮＤ型フラッシュメモリ１８のブートプログラムを読み出せるようにする。このときＣＰＵコア１１のＲＯＭコントローラ１５は、外部バスインターフェース１７を介してＲＯＭ１９が接続されているのと同等に、命令をバスインターフェース１７より読み出せるようにブートコントローラ１６を構成する。これにより、ＣＰＵ駆動用としてＮＡＮＤ型フラッシュメモリを用いた場合でも不良ブロックによるＣＰＵ起動の不具合を回避可能となる。【選択図】図１
2005071303.tif 000002
【特許請求の範囲】
【請求項１】
起動および実行プログラムを格納したＮＡＮＤ型フラッシュメモリと、
前記実行プログラムに基づいた制御を行うＣＰＵと、
前記ＣＰＵの動作に無関係に予め格納されたプログラムに基づいたブートプログラムを実行する第１の手段と、
前記ブートプログラムが実行された後に、実行する前記ＣＰＵに備えたプログラム実行用のメモリと、
前記ブートプログラム実行時に、前記フラッシュメモリの不良ブロックの利用を避けて前記実行用メモリに前記プログラムを転送する第２の手段とを具備したことを特徴とするプログラム起動装置。
【請求項２】
前記ＮＡＮＤ型フラッシュメモリに不良セクタが存在した場合、プログラム実行メモリへのプログラムを復元することを特徴とする請求項１記載のプログラム起動装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、電子機器のブート用プログラムの起動方式に関する。
【背景技術】
【０００２】
従来、ＮＡＮＤ型フラッシュメモリを用いたＣＰＵ（中央演算処理部）のプログラムの実行は、ＮＡＮＤ型フラッシュメモリがハードロジックを介してＲＡＭに一旦記録し、その記録内容を読み出してＣＰＵのプログラムを実行させている。（例えば、特許文献１）
【特許文献１】特開２００３−１１４８２６号（第７頁、図２）
【発明の開示】
【発明が解決しようとする課題】
【０００３】
上記した特許文献１の技術は、ＮＡＮＤ型フラッシュメモリの所望ページに一旦記録された一部のデータに不良があった場合の対処方法についての開示がなく、不良データが起動用のプログラムにあると以降の動作ができなくなる問題がある。
【０００４】
この発明の目的は、ＣＰＵの駆動用としてＮＡＮＤ型フラッシュメモリを用いた場合でも不良ブロックによるＣＰＵ起動の不具合を回避可能となるプログラム起動装置を提供することにある。
【課題を解決するための手段】
【０００５】
上記した課題を解決するために、この発明のプログラム起動装置は、起動および実行プログラムを格納したＮＡＮＤ型フラッシュメモリと、前記実行プログラムに基づいた制御を行うＣＰＵと、前記ＣＰＵの動作に無関係に予め格納されたプログラムに基づいたブートプログラムを実行する第１の手段と、前記ブートプログラムが実行された後に、実行する前記ＣＰＵに備えたプログラム実行用のメモリと、前記ブートプログラム実行時に、前記フラッシュメモリの不良ブロックの利用を避けて前記実行用メモリに前記プログラムを転送する第２の手段とを具備したことを特徴とする。
【発明の効果】
【０００６】
この発明は、ＣＰＵの駆動用としてＮＡＮＤ型フラッシュメモリを用いた場合でも不良ブロックによるＣＰＵ起動の不具合を回避可能となる。
【発明を実施するための最良の形態】
【０００７】
以下、この発明の実施例について、図面を参照しながら詳細に説明する。  
図１は、この発明の一実施例について説明するための構成図であり、この実施例は、ＮＡＮＤ型フラッシュメモリからブートプログラムを起動し、このフラッシュメモリ内に格納したアプリケーションプログラムをプログラム実行メモリへ転送させて動作させるものである。
【０００８】
図１において、ＣＰＵ１０の電源ＯＮ後のリセットにより、ＣＰＵコア１１は、ＲＯＭ（Read Only Memory）コントローラ１５の所定アドレスの命令を読み込み、その読み込んだプログラムにより動作を開始する。起動させるためのプログラムであるブートプログラムをＲＯＭ１９の起動アドレス部分に配置し、ＣＰＵコア１１の初期設定やＳＤＲＡＭ（Synchronous Dynamic Random Access Memory）コントローラ１２などのリソースの初期設定などを終了すると、ＲＯＭ１９のアプリケーションプログラムを起動して機器を動作させる。
【０００９】
ところで、ＲＯＭコントローラ１５から起動させるブートプログラムやアプリケーションプログラムは、ランダムアクセスが必要であるため、内部のデータをシーケンシャルにしか読み出せないＮＡＮＤ型フラッシュメモリ１８からは直接動作させることができない。
【００１０】
そこで、ブートコントローラ１６を設け、ＣＰＵ１０のリセット後の起動アドレスからＣＰＵ１０の命令に基づき予め記録されたフラッシュメモリ１８のブートプログラムを読み出せるようにする。このときＣＰＵコア１１のＲＯＭコントローラ１５は、外部バスインターフェース１７を介してＲＯＭ１９が接続されているのと同等に、命令をバスインターフェース１７より読み出せるようにブートコントローラ１６を構成すればよい。
【００１１】
また、ブートプログラム起動後のアプリケーションプログラムについては、ＤＭＡ（Direct Memory Access）コントローラ１４をブートプログラムによって動作させ、ＮＡＮＤフラッシュメモリ１８の内容をブートコントローラ１６からバスインターフェース１７，ＳＤＲＡＭコントローラ１２を介してＳＤＲＡＭ１３へ転送して動作させることによって、ＣＰＵコア１１を介する命令実行により、転送と比べると転送時間の高速化を図ることができる。
図２は、ブートコントローラ１６の内部の構成例を示したもので、ＣＰＵ１０内部のＲＯＭコントローラ１５および外部バスインターフェース１７とをバスインターフェース２０で相互接続し、ＤＰＭ（Dual Port Memory）型のバッファメモリ２１がＣＰＵ１０からアクセスできるよう構成される。
【００１２】
フラッシュメモリ１８側には、フラッシュインターフェ―ス回路２２を設置し、ＮＡＮＤフラッシュメモリ１８からデータを読み出すためのＩ／Ｏとそのアクセスを制御する制御回路、読み出したデータの内部の不良ブロック情報を保持する管理エリアレジスタ、読み出した情報のエラー修正を行うＥＣＣ（Error Correcting Code）回路から構成される。
【００１３】
フラッシュメモリ１８では、内部に出荷の不良ブロックや、後天的に発生する不良ブロックが含まれ、管理エリアに情報が書き込まれるとともに、エラーをＥＣＣ回路により同一ブロック内のビット不良を２ビットまで修正できる仕様であり、読み出されるデータブロックが不良でないかを確認する必要がある。
【００１４】
フラッシュインターフェース回路２２は、フラッシュメモリ１８のメーカ推奨回路等で提供されたインタフェースを用いれば容易に構成できる。フラッシュインターフェース回路２２からはフラッシュメモリ１８の１ブロックのデータ（５１２バイト）を読み出し、バッファメモリ２１へデータを保存する。
【００１５】
このとき、バッファメモリ２１はＤＰＭ型であることから、フラッシュメモリ１８の２ブロック分（５１２byte×２）のエリアを備え、１つのエリアにフラッシュメモリ１８からの読み込みデータを書き込んでいる間に、もう１つのエリアが書き込まれている状態のときはＣＰＵ１０から読み込むように構成して、フラッシュメモリから読み出す間の時間にＣＰＵ１０を停止させる時間を削減する。
【００１６】
この動きを図３に示しており、バッファメモリ２１のバンク０（２１１）へフラッシュメモリ１８から書き込まれている間は、バンク１（２１２）をＣＰＵ１０はリードするよう構成する。
【００１７】
電源ＯＮ後のリセット時など、ＣＰＵ１０が起動する際、先ず、その起動させるためのプログラムであるブートプログラム３１をフラッシュメモリ１８から読みだし、バッファメモリのバンク０（２１１）へ書き込まれ、バッファメモリ・バンク０（２１１）の全エリアが書き込まれると、バンク１（２１２）側へ書き込みのバッファ面が切り換えられるとともに読みだしがバンク０（２１１）となり、ＣＰＵ１０を起動させ、ＤＰＭ０（２１１）からブートプログム３１が起動される。
【００１８】
起動後はＣＰＵの初期設定とともに、ＳＤＲＡＭコントローラなどの初期設定を行い、ＤＭＡコントローラを設定し、フラッシュメモリ内部のデータをＳＤＲＡＭ１３へ転送させるような命令をブートプログラム３１に構成する。
【００１９】
ＤＭＡコントローラ１４は指示されたソースデバイスであるブートコントローラ１６内部のバッファメモリ２１の収容アドレスと転送バイト数、また、ディスティネーションデバイスであるＳＤＲＡＭ１３のアドレスが設定され、ブートプログラムによってＤＭＡ転送を開始させる。
【００２０】
ＤＭＡ転送が開始されると、バッファメモリ２１のバンク０（２１１）およびバンク１（２１２）から読み出されるアドレスは、５１２バイトの空間であるが、フラッシュメモリ１８より順次データ読みだしデータがバッファメモリ２１へセットされるため、ＣＰＵリードアドレス３３は９ｂｉｔがバッファメモリに使われ、第１０ビットはバッファメモリの面を切り換えるためのバンク反転に利用され、それより上位ビットについては、ＣＰＵ１０にとってみると、指定アドレスから読み取っているかのように見えるものの実際には下位９ビットによって読み出される。
【００２１】
ＤＭＡによって一旦転送が始ると、フラッシュメモリ１８のページ＃１から順次バッファメモリ３１または３２を介して、ＳＤＲＡＭ１３へのＤＭＡ転送が行われ、所定のバイト数の転送を完了すると、ＣＰＵコア１１がＤＭＡを開始した時点のプログラムカウンタアドレスの次ステップの命令を読み込み実行する。ページ＃０のブートプログラムが中断された形になっており、ページ＃０の続きのアドレスが実行される。
【００２２】
しかし、ページ＃０はＤＭＡによるプログラム転送に使われており、プログラムは存在しない。
【００２３】
そこで、ＣＰＵへブートプログラム３２の続きのプログラムが読み込めるようブートプログラムの続きを書いておくことで、機器を動作させるためのＳＤＲＡＭのアプリケーションプログラムの実行アドレスへのジャンプを行うことができる。
【００２４】
図４はブートコントローラの動作について説明するためのフローチャートであり、再び図２を参照して説明する。装置の電源ＯＮ等のシステムリセットによって動作が開始され（Ｓ０）、ＣＰＵ１０へのブートプロラグムをブートコントローラ１６のバッファメモリ２１へ転送する過程において、フラッシュメモリ１８に不良ブロックがあった場合の動作フローも示している。
【００２５】
先ず、装置の電源ＯＮ後、ステップＳ０においてシステムリセットが発生すると、ブートコントローラ１６のフラッシュＩ／Ｆコントローラ２３によって、フラッシュメモリ１８よりデータを取り出すよう動作する。
【００２６】
このとき、ＣＰＵ１０へはリセットがかかったままで、フラッシュメモリ１８からフラッシュＩ／Ｆコントローラ２３によって読み込まれた、不良などを判定するためのフラッシュメモリ内に備えられた管理情報を記憶している管理エリアを読み込み（Ｓ１）、バッファメモリの書き込みが許可されているかを確認し（Ｓ２）、不良ブロック判定を行う（Ｓ３）。
【００２７】
もし不良ブロックでなければ、読み出した５１２バイトデータをバッファメモリ２１へ書き込んで（Ｓ４）、起動フラグをセットしてＣＰＵリセットを解除し（Ｓ５）、次ぎのデータを取り出すためのフラッシュメモリのページまたはブロックを更新する（Ｓ７）ようにしている。
【００２８】
ここで、起動フラグは初めてフラッシュメモリにデータが転送される、すなわち、ブートプログラムの転送がバッファメモリ２１へ転送されると、「０」から「１」へ変化し、その変化によってバッファ面の状態を書き込みから読みだしに切り換えて、ＣＰＵ１０よりブートプログラムを読み出せるようにするとともに、ＣＰＵ１０のリセットを解除する。
【００２９】
すると、ＣＰＵ１０の起動アドレスがバッファメモリの先頭アドレスであるため、フラッシュメモリに書き込まれたブートプログラムをバッファメモリ２１上から実行するようにＣＰＵ１０は動作を始める。
【００３０】
ステップＳ６，Ｓ８におけるバスリクエストについては、ＤＭＡ転送中にＤＭＡを一時停止させるためのもので、これについては後で説明する。
【００３１】
ここで、ステッブＳ３において不良ブロックが検出された場合は、不良ブロックを飛ばす必要がある。この動作にはブートプログラムを読み込み中の不良ブロックである場合と、ＤＭＡ転送中の不良ブロックの２つの場合がある。
【００３２】
ブートプログラムの読み込み中に不良ブロック検出が行われると（Ｓ２）、バスリクエストは起動フラグがセットＳ５されていない状態のためＣＰＵ１０へはリセットがかかっておりこのリクエストは無効であり、ブロックを更新Ｓ９が行われるよう動作する。
【００３３】
次に、フラッシュメモリ１８のブロック数を終えたかどうかを判定し（Ｓ１１）、最終ブロックに達していなければ、管理エリアを読み込むステップＳ１の動作に再び戻り、動作が繰り返される。
【００３４】
ＤＭＡ転送中の不良ブロックが検出されたケースでは、上記説明したようにブートプログラムが起動後にＤＭＡ転送が開始されるよう構成しているため、フラッシュメモリ１８の次ぎのブロックから新たな正常なデータを読み出す必要があり、その読みだし中はアクセス時間の追加発生によってＤＭＡ転送を中断させる必要がある。ＤＭＡ転送は、ステップＳ８において、バスリクエストをかけ中断させることができる。
【００３５】
ここでバスリクエストは、ＤＭＡより優先順位を高く設定しておけば、バス権が開放され、ＤＭＡがバスリクエストが解除されるまで中断される。
【００３６】
従って、正常に５１２バイトデータをバッファへ転送Ｓ５できた後に、バスリクエストを解除する（Ｓ６）ことによって、バッファメモリ２１へのデータが準備された状態でバスリクエストが解除され、一連の動作が再開される。
【００３７】
バスリクエストの制御は、フラッシュメモリ１８からバッファメモリ２１への転送が間に合わない場合にＤＭＡを一時停止し、フラッシュメモリへの書き込みの方が早く、ＤＭＡ転送が完了していない場合は、書き込み面の書き込み許可フラグの確認を行い（Ｓ２）、許可されていない場合は、バッファへの書き込みを待つよう制御する。
【００３８】
ＤＭＡ転送が完了し、ブートプログラムの起動を完了し、アプリケーションプログラムへ動作を移すとき、フラッシュＩ／Ｆコントローラ２３へその旨を通知することで、ブートプログラム終了を判断し（Ｓ１０）、動作を終了させる。
【００３９】
フラッシュメモリ１８からの読み込みが、ステッブＳ１０でブートプログラムを終了しか、ステッブＳ１１で所定ブロック数を書き終えたかが検出されない場合は、上記の動作を繰り返す。
【００４０】
以上のようにしてＣＰＵの駆動用としてＮＡＮＤ型フラッシュメモリを用いた場合でも不良ブロックによるＣＰＵ起動の不具合を回避可能となる。
【図面の簡単な説明】
【００４１】
【図１】この発明の一実施例について説明するための構成図。
【図２】図１のブートコントローラについて説明するための構成図。
【図３】図１のＤＭＡコントローラの動作について説明するための説明図。
【図４】この発明のブートコントローラの動作について説明するための説明図。
【符号の説明】
【００４２】
１０  ＣＰＵ
１１  ＣＰＵコア
１２  ＳＤＲＡＭコントローラ
１３  ＳＤＲＡＭ
１４  ＤＭＡコントローラ
１５  ＲＯＭコントローラ
１６  ブートコントローラ
１７  外部バスインターフェース
１８  ＮＡＮＤ型フラッシュメモリ
１９  ＲＯＭ
２０  バスインターフェース
２１  バッファメモリ
２２  フラッシュインターフェ―ス回路
２３  フラッシュＩ／Ｆコントローラ
【図１】
2005071303.tif 000003
【図２】
2005071303.tif 000004
【図３】
2005071303.tif 000005
【図４】
2005071303.tif 000006