(57)【要約】【課題】異常を生じたメモリを自動で更新することのできるブート制御装置を提供する。【解決手段】同一内容のブートプログラムが格納されるＦＲＯＭ１、２と、ＦＲＯＭ１、２からブートプログラムを読み出し、該読み出したブートプログラムにしたがってブート制御を実行するＣＰＵ３と、ＣＰＵ３によるブートプログラムの読み出しを制御するブート制御部４とを有する。ブート制御部４は、ＣＰＵ３によるブート制御の実行状態を保持するレジスタ部を有し、該レジスタ部の状態に応じてＦＲＯＭ１、２の更新を行う。【選択図】図１
2007122151.tif 000002
【特許請求の範囲】
【請求項１】
同一内容のブートプログラムが格納される第１および第２のメモリ部と、
前記第１または第２のメモリ部からブートプログラムを読み出し、該読み出したブートプログラムにしたがってブート制御を実行する制御部と、
前記制御部によるブートプログラムの読み出しを制御するブート制御部とを有し、
前記ブート制御部は、前記制御部によるブート制御の実行状態を保持するレジスタ部を有し、該レジスタ部に、前記第１のメモリ部に格納されたブートプログラムに基づくブート制御が異常とされ、前記第２のメモリ部に格納されたブートプログラムに基づくリブート制御が正常に行われたことを示す第１の状態が保持されている場合は、前記第２のメモリ部に格納されたブートプログラムを用いて前記第１のメモリ部を更新し、前記レジスタ部に、前記第２のメモリ部に格納されたブートプログラムに基づくブート制御が異常とされ、前記第１のメモリ部に格納されたブートプログラムに基づくリブート制御が正常に行われたことを示す第２の状態が保持されている場合には、前記第１のメモリ部に格納されたブートプログラムを用いて前記第２のメモリ部を更新することを特徴とするブート制御装置。
【請求項２】
発光部をさらに有し、
前記ブート制御部は、前記レジスタ部に、前記第１および第２のメモリ部に格納された各ブートプログラムに基づくブート制御がともに異常とされたことを示す第３の状態が保持されている場合に、前記発光部を点灯する、請求項１に記載のブート制御装置。
【請求項３】
前記ブート制御部は、外部から前記ブートプログラムの更新要求を受信すると、前記レジスタ部の状態を確認する、請求項１または２に記載のブート制御装置。
【請求項４】
前記ブート制御部は、前記レジスタ部の状態を定期的に確認する、請求項１または２に記載のブート制御装置。
【請求項５】
前記ブート制御部は、
外部から供給されるリセット信号によりカウント動作を開始するブートタイマと、
前記ブートタイマのタイムアウト値が設定されるタイマレジスタとをさらに有し、
前記制御部が、前記リセット信号の供給に応じて前記第１および第２のメモリ部のうちの一方のメモリからブートプログラムを読み出してブート制御を行い、該ブート制御が、前記ブートタイマによるカウント値が前記タイマレジスタに設定されたタイムアウト値を超えても完了しなかった場合に、前記ブート制御部が、前記制御部によるブートプログラムの読み出し先を他方のメモリ部に切り替えるとともに、前記一方のメモリ部からのブートプログラムによるブート制御が異常となった旨を前記レジスタに反映させる、請求項１から４のいずれか１項に記載のブート制御装置。
【請求項６】
制御部が、同一内容のブートプログラムが格納される第１および第２のメモリ部の一方からブートプログラムを読み出し、該読み出したブートプログラムにしたがってブート制御を実行する第１のステップと、
レジスタ部が、前記制御部によるブート制御の実行状態を保持する第２のステップと、
ブート制御部が、前記レジスタ部の状態に応じて前記第１および第２のメモリ部を更新する第３のステップとを有し、
前記第３のステップは、
前記第１のメモリ部に格納されたブートプログラムに基づくブート制御が異常とされ、前記第２のメモリ部に格納されたブートプログラムに基づくリブート制御が正常に行われたことを示す第１の状態が前記レジスタ部に保持されている場合は、前記第２のメモリ部に格納されたブートプログラムを用いて前記第１のメモリ部を更新するステップと、
前記第２のメモリ部に格納されたブートプログラムに基づくブート制御が異常とされ、前記第１のメモリ部に格納されたブートプログラムに基づくリブート制御が正常に行われたことを示す第２の状態が前記レジスタ部に保持されている場合は、前記第１のメモリ部に格納されたブートプログラムを用いて前記第２のメモリ部を更新するステップとを含む、ブート制御方法。
【請求項７】
前記ブート制御部が、前記第１および第２のメモリ部に格納された各ブートプログラムに基づくブート制御がともに異常とされたことを示す第３の状態が前記レジスタ部に保持されている場合に、発光部を点灯する第４のステップをさらに含む、請求項６に記載のブート制御方法。
【請求項８】
前記ブート制御部が、外部から前記ブートプログラムの更新要求を受信すると、前記レジスタ部の状態を確認するステップをさらに含み、該ステップで確認された状態に応じて前記第３および第４のステップが実行される、請求項７に記載のブート制御方法。
【請求項９】
前記ブート制御部が、前記レジスタ部の状態を定期的に確認するステップをさらに含み、該ステップで確認された状態に応じて前記第３および第４のステップが実行される、請求項７に記載のブート制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータを起動するためのブート制御を行うブート制御装置に関する。
【背景技術】
【０００２】
コンピュータシステムでは、電源投入時やシステムリセット時に、ブート制御が実行される。通常、ブート制御に必要なプログラム（以下、ブートプログラム）は、不揮発性メモリ（例えば、ＦＲＯＭ（Flash Read Only Memory））に格納されており、システムの起動またはリセットを行う際に、ＣＰＵがそのブートプログラムを不揮発性メモリから読み出して実行する。
【０００３】
最近では、ブート制御が可能な制御カードの１つとして、外部コンピュータから通信ネットワークを介して行われる遠隔ダウンロードによるブートプログラムの更新が可能な制御カードが提供されている。この種の制御カードでは、ブートプログラムの更新が正常に行われた場合は、更新されたブートプログラムでの起動が可能となる。しかし、操作ミスやプログラム更新中の停電等の事故により、ブートプログラムの更新が正常に行われず、ブートプログラムのデータ自体にデータ化けなどの異常が発生した場合は、制御カードを正常に起動することができなくなってしまう。
【０００４】
そこで、ブートプログラムを格納するメモリを二重化し、一方のメモリに不具合が生じた場合に、他方のメモリに切り替る方法が提案されている（特許文献１）。
【特許文献１】特開２００１−３３１３２５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述したメモリを二重化した従来のブート制御方法においては、以下のような問題がある。
【０００６】
メモリ自体に損傷がなく、格納されているブートプログラムにデータ化けなどの異常が発生しているだけであれば、そのメモリを更新することで、再び利用可能な状態に復旧することができる。しかし、従来のブート制御方法は、ブートプログラムに異常が生じたメモリに対して、ブートプログラムの更新を自動で行うようにはなっていない。このため、ユーザ自身が、異常を生じたメモリの復旧を行うための処理を行う必要がある。このようなメモリ復旧処理は、ユーザにとって面倒である。
【０００７】
本発明の目的は、上記問題を解決し、異常を生じたメモリを自動で更新することのできるブート制御装置を提供することにある。
【課題を解決するための手段】
【０００８】
上記目的を達成するため、本発明は、同一内容のブートプログラムが格納される第１および第２のメモリ部と、前記第１または第２のメモリ部からブートプログラムを読み出し、該読み出したブートプログラムにしたがってブート制御を実行する制御部と、前記制御部によるブートプログラムの読み出しを制御するブート制御部とを有し、前記ブート制御部は、前記制御部によるブート制御の実行状態を保持するレジスタ部を有し、該レジスタ部に、前記第１のメモリ部に格納されたブートプログラムに基づくブート制御が異常とされ、前記第２のメモリ部に格納されたブートプログラムに基づくリブート制御が正常に行われたことを示す第１の状態が保持されている場合は、前記第２のメモリ部に格納されたブートプログラムを用いて前記第１のメモリ部を更新し、前記レジスタ部に、前記第２のメモリ部に格納されたブートプログラムに基づくブート制御が異常とされ、前記第１のメモリ部に格納されたブートプログラムに基づくリブート制御が正常に行われたことを示す第２の状態が保持されている場合には、前記第１のメモリ部に格納されたブートプログラムを用いて前記第２のメモリ部を更新するように構成したことを特徴とする。
【０００９】
上記の構成によれば、第１および第２のメモリ部のうちの一方に異常が生じると、その状態がレジスタ部に反映される。そして、レジスタ部の状態に基づいて、正常なメモリ部のプログラムデータを用いて、異常が生じたメモリ部のプログラムが自動更新される。
【発明の効果】
【００１０】
本発明によれば、異常が生じたメモリ部のプログラムを自動更新することができるので、ユーザ自身がメモリの復旧処理を行う必要がない。よって、ユーザに対する負担を軽減することができる。
【発明を実施するための最良の形態】
【００１１】
次に、本発明の実施形態について図面を参照して説明する。
【００１２】
図１は、本発明の一実施形態である制御カードの構成を示すブロック図である。図１を参照すると、本実施形態の制御カードは、ブートプログラムデータ格納用の不揮発性メモリ（以下、ＦＲＯＭと称す）１、２と、ＣＰＵ３と、ブートプログラムデータの読み出し先の切り替えやリブート動作を制御するブート制御部４と、起動に失敗したことを視覚的に表示するためのＬＥＤ５とから構成されている。
【００１３】
ＣＰＵ３、ＦＲＯＭ１、２およびブート制御部４のそれぞれは、バスを介して相互に接続されている。ＣＰＵ３から見たＦＲＯＭ１とＦＲＯＭ２のメモリアドレスは同一とされている。ＣＰＵ３は、どちらか一方のＦＲＯＭにバスを介してアクセスすることが可能とされ、同時に両方のＦＲＯＭへアクセスすることはできない。ＣＰＵ３は、ＦＲＯＭ１、２のいずれかへアクセスする場合は、ＦＲＯＭを指定するためのチップセレクト（ＣＳ）信号をブート制御部４に供給する。また、ＣＰＵ３は、ＦＲＯＭからのプログラムの読み出しが正常に行われた場合は、その旨を示すＡＣＴ信号を出力する。
【００１４】
ブート制御部４は、ＣＰＵ３からＣＳ信号が供給されると、ブートプログラムデータの読み出し先であるＦＲＯＭを決定して、その決定したＦＲＯＭに対してＣＳ信号を送出する。ブートプログラムデータの読み出し先をＦＲＯＭ１とした場合は、ブート制御部４は、ＣＳ１信号をＦＲＯＭ１へ送出する。ブートプログラムデータの読み出し先をＦＲＯＭ２とした場合は、ブート制御部４は、ＣＳ２信号をＦＲＯＭ２へ送出する。また、ブート制御部４は、ＣＰＵ３が起動したことを示すＡＣＴ信号が有効となった時点で、制御カードが正常に起動したと判断する。
【００１５】
ＣＰＵ３やブート制御部４には、電源ＯＮ時に、外部装置から初期化用の信号として、制御カードを初期化するリセット信号（以下、パワーオンリセット信号）と、起動後に任意のタイミングで制御カードを初期化するリセット信号（以下、ローカルリセット信号）が供給されている。本実施形態では、ブート制御部４がリブート動作を制御する都合上、ローカルリセット信号をドライブするようになっており、そのため、ローカルリセット信号は双方向に送受信される信号とされている。また、ブート制御部４は、パワーオンリセット信号により全てが初期化され、ローカルリセット信号により一部が初期化されるようになっている。
【００１６】
なお、ＦＲＯＭ１およびＦＲＯＭ２のいずれにおいてもプログラムのブートに失敗した場合には、ＣＰＵ３は、正常に起動できなくなる。この場合には、ブート制御部４は、ＣＰＵ３が起動に失敗したことを報知するために、ＬＥＤ５の点灯制御を行う。ＬＥＤ５は、別の発光手段、例えばレーザダイオードに代表される半導体レーザに置き換えることができる。
【００１７】
図２に、ブート制御部４の構成を示す。図２を参照すると、ブート制御部４は、ブート制御に必要な各種設定や状態監視を行うためのレジスタ部６と、ＣＰＵ３が起動するのに必要とする時間をカウントすることが可能なブートタイマ７と、入力されたクロックの分周や断検出を行うクロック機能部８と、ＦＲＯＭ１およびＦＲＯＭ２のどちらかを選択するＦＲＯＭ選択部９とから構成される。
【００１８】
レジスタ部６は、ＣＰＵ３のブート状態やメモリ選択状態などを監視するステータスレジスタと、ステータスレジスタを初期化するクリアレジスタと、ブートタイマ７のタイムアウト値を設定することができるタイマレジスタとを有する。ステータスレジスタおよびタイマレジスタは、パワーオンリセット信号により初期化されるが、ローカルリセット信号では初期化されない。これは、ローカルリセット信号によるリブート制御を行うためである。
【００１９】
図３に、ステータスレジスタの内容を示す。図３を参照すると、ステータスレジスタは、ＦＲＯＭ１およびＦＲＯＭ２の各ブート状態（正常状態を「０」、異常状態を「１」とする）、入力クロック状態（正常状態を「０」、異常状態を「１」とする）、リブート状態（「なし」の場合を「０」、「あり」の場合を「１」とする）、ＦＲＯＭ選択状態（ＦＲＯＭ１を選択している状態を「０」、ＦＲＯＭ２を選択している状態を「１」とする）といった各状態を示すための項目が設けられている。ステータスレジスタでは、制御カードのブート状態の確認、ブートタイマ７のタイムアウト値の設定、ＦＲＯＭ選択部９の制御、クロック機能部８の断検出などの各状態の監視結果に基づいて、それぞれの項目の値が設定される。各項目のデフォルト値は、「０」とされている。ステータスレジスタのアドレスは、「０ｘ００００」である。
【００２０】
図４に、クリアレジスタの内容を示す。図４を参照すると、クリアレジスタでは、データ「０ｘ０９」（下２桁は１６進数）をライトすることで、ステータスレジスタを初期化するようになっている。クリアレジスタのアドレスは「０ｘ０００１」とされている。ただし、ステータスレジスタのＦＲＯＭＳＥＬビットのみは、このクリアレジスタでは初期化されない。このクリアレジスタの状態は任意にクリアすることができる。
【００２１】
図５に、タイマレジスタの内容を示す。図５を参照すると、タイマレジスタは、上位のタイマ（アドレスは「０ｘ０００２」）と下位のタイマ（アドレスは「０ｘ０００３」）を合わせて、「０ｘ００００」から「０ｘＦＦＦＦ」（下四桁は１６進数）まで設定が可能とされている。ここで、「０ｘ００００」および「０ｘＦＦＦＦ」はそれぞれ十進法で「１」および「６５５３６」を表す。クロック機能部８から供給されるクロックが１ｋＨｚで、タイマレジスタ値が「０ｘ００ＦＦ」であった場合は、ブートタイマ７のタイムアウト値は、
２５６（タイマ値）×１ｍｓ（１ｋＨｚ）＝２５６ｍｓ
となる。このタイマレジスタは、パワーオンリセット信号により初期化される。また、タイマレジスタは、所定の条件が整ったところで、リブート制御するためのローカルリセット信号を出力する。
【００２２】
ブートタイマ７は、クロック機能部８から供給されるクロックにて動作するタイマであり、ローカルリセット信号の解除によりカウント動作をスタートし、ＣＰＵ３からのＡＣＴ信号が有効（「１」は起動状態を示す）になった時点またはタイマがタイムアウトした時点でカウント動作を停止する。ブートタイマ７のタイムアウト値は、レジスタ部６のタイマレジスタにて設定することができる。タイムアウトした場合は、その旨を示す情報がレジスタ部６やＦＲＯＭ選択部９に通知される。ＦＲＯＭ１からのブート処理とＦＲＯＭ２からのブート処理は、同時に行なわれることはないので、ブートタイマ回路としては１系統あれば十分である。本実施形態では、１系統のブートタイマ回路を想定している。
【００２３】
クロック機能部８は、外部から入力されるクロックを分周してブートタイマ７に供給したり、外部から入力されるクロックの断検出を行ったりする。ブートタイマ７の設定範囲は決まっている（図５の例では、「１」から「６５５３６」の範囲とされている）ため、分周されたクロックの速度により同じカウント数でもタイムアウト時間が変わってくる。例えば、分周されたクロックが１ｋＨｚでタイマレジスタ値が２５６であった場合は、タイムアウト時間は２５６ｍｓとなるが、同じタイマ値でも、分周クロックが１０ｋＨｚであった場合には、タイムアウト時間は２５．６ｍｓとなる。入力されるクロック状態は、レジスタ部６のステータスレジスタに反映される。本実施形態では、ＣＰＵ３の正常起動を期待するものであるため、入力クロックはＣＰＵ３の動作クロックと同じであることが望ましい。通常、ＣＰＵ３の動作クロックは高速であるので、クロック機能部８の分周回路規模を小さくしたい場合は、入力クロックをＣＰＵ３の動作クロックと異なるようにしてもよい。本実施形態では、入力クロックはＣＰＵ３の動作クロックと同じとする。
【００２４】
ＦＲＯＭ選択部９は、ＦＲＯＭ１とＦＲＯＭ２のどちらかを選択するものであって、ＣＰＵ３からのＣＳ信号を受信すると、レジスタ部６からの指示により、ＣＳ１信号またはＣＳ２信号のいずれかの出力を選択する。また、ＦＲＯＭ選択部９は、ブートタイマ７からタイムアウト状態の通知を受けると、それまで選択していたＦＲＯＭとは異なる側のＦＲＯＭへのＣＳ信号を選択して、リブートすることをレジスタ部６へ通知する。
【００２５】
次に、本実施形態の制御カードにおける電源投入時の立ち上げ動作について説明する。図６は、電源投入された場合の立ち上げ動作の手順を示すフローチャートである。以下、図６を用いて、電源投入された場合の立ち上げについて説明する。
【００２６】
電源投入後、パワーオンリセット信号が解除されると（ステップ１００）、ＦＲＯＭ選択部９は、デフォルトでＣＳ１信号を有効、ＣＳ２信号を無効として、ＣＰＵ３に対してＦＲＯＭ１からプログラムを読み出すことを許可する（ステップ１０１）。ローカルリセット信号が解除されると（ステップ１０２）、レジスタ部６のタイマレジスタの初期タイムアウト値に従いブートタイマ７によるカウント動作がスタートする（ステップ１０３）。
【００２７】
ＡＣＴ信号が有効（「１」は起動状態を示す）になれば（ステップ１０４、ＮＯ）、ＣＰＵ３がＦＲＯＭ１からのブート処理に成功したことを示すため、ブート制御部４は、ブートタイマ７の動作をストップして当該処理を終える（ステップ１０５）。ＡＣＴ信号が有効とならず（ステップ１０４、ＹＥＳ）、ブートタイマ７がタイムアウトした場合（ステップ１０６、ＹＥＳ）、ブート制御部４は、ブートタイマ７の動作をストップして（ステップ１０７）、ステータスレジスタのリブートフラグを確認する（ステップ１０８）。
【００２８】
リブートフラグが「０」の場合（ステップ１０８、ＹＥＳ）は、ブート制御部４は、ステータスレジスタにＦＲＯＭ１のブート異常を反映させる（ステップ１０９）。次いで、ブート制御部４は、ＣＳ１信号を無効、ＣＳ２信号を有効として（ステップ１１０）、ＣＰＵ３がＦＲＯＭ２からプログラムを読み出すことを許可して、リブートフラグ（この場合のフラグは「１」）を立てる（ステップ１１１）。次いで、ブート制御部４は、ＦＲＯＭ２からのリブートが必要となったので、ローカルリセット信号を出力して（ステップ１１２）、ＣＰＵ３が再度ブート処理に入るように促す。
【００２９】
ステップ１１２でのローカルリセット信号の出力後、ステップ１０２に戻り、ローカルリセット信号が解除される。そして、ステップ１０３にてブートタイマ７が起動され、ステップ１０４で、ＡＣＴ信号が有効になった否かの確認が行われる。ＡＣＴ信号が有効になった場合は、ステップ１０５のブートタイマストップの処理に移行した後、当該処理を終了する。ＡＣＴ信号が有効にならずにタイムアウトした場合は、ステップ１０７のブートタイマストップ処理に移行する。その後、ステップ１０８で、ステータスレジスタのリブートフラグを確認する。この場合は、リブートフラグは「１」であるので、ブート制御部４は、ステータスレジスタにＦＲＯＭ２のブート異常を反映させる（ステップ１１３）。そして、ブート制御部４は、ＦＲＯＭ１とＦＲＯＭ２のどちらからのブートも失敗となり、ＣＰＵ３が正常起動していないために、ＬＥＤ５を点灯する（ステップ１１４）。ＣＰＵ３が正常起動せず、ブート制御部４の各種レジスタへのアクセスができなくなる場合は、ハードウェアにてＬＥＤ５の点灯制御が行われるようにしてもよい。
【００３０】
次に、本実施形態の制御カードにおいて行われるローカルリセットによる立ち上げ動作について説明する。図７は、ローカルリセットによる立ち上げ動作の手順を示すフローチャートである。以下、図７を用いて、ローカルリセットによる立ち上げ動作について説明する。
【００３１】
電源投入により起動した制御カードは、アプリケーションにもよるが、電源投入状態で再起動をかけたりすることがある。例えば、ダウンロードなどによりデータを更新する場合や障害復旧のための再起動を行う場合が、そのような再起動に相当する。この再起動では、前提として、ＣＰＵは一度正常に起動しているといえる。
【００３２】
ローカルリセットを実施する前に、リブートフラグを初期化する目的でクリアレジスタを使用することが望ましいが、必ずしもクリアレジスタを使用する必要はない。仮に、リブートフラグをクリアしておけば、パワーオンリセットによる起動と同じように、ＦＲＯＭ１とＦＲＯＭ２の二重化によるブートを行うことができる。この場合は、後述するカード診断のしやすさに影響を与えるのみである。使用するアプリケーションに応じて、クリアレジスタを使用するようなソフトウェアの作りを考えることも可能である。以下のローカルリセットによる立ち上げ動作の説明では、特にクリアレジスタのことには触れずに動作説明を行う。
【００３３】
ローカルリセット信号が解除されると（ステップ２００）、レジスタ部６のタイマレジスタのタイムアウト値に従いブートタイマ７をスタートさせる（ステップ２０１）。ここで、タイムアウト値はローカルリセット前にＣＰＵ３から設定値を変更することが可能である。
【００３４】
次いで、ブート制御部４は、ＡＣＴ信号が有効（「１」は起動状態を示す）になれば（ステップ２０２、ＮＯ）、ＣＰＵ３がブート処理に成功したことを示すため、ブートタイマ７の動作をストップして当該処理を終える（ステップ２０３）。ＡＣＴ信号が有効とならず（ステップ２０２、ＹＥＳ）、ブートタイマ７がタイムアウトした場合（ステップ２０４、ＹＥＳ）は、ブート制御部４は、ブートタイマ７の動作をストップし（ステップ２０５）、リブートフラグの状態を確認する（ステップ２０６）。
【００３５】
リブートフラグが立っていれば、すなわちフラグの状態が「１」であれば（ステップ２０６、ＮＯ）、ブート制御部４は、ＦＲＯＭ１とＦＲＯＭ２のどちらからのブートも失敗とみなしてＬＥＤ５を点灯し（ステップ２０７）、当該処理を終了する。リブートフラグが立っていない場合（ステプ２０６、ＹＥＳ）は、ブート制御部４は、ＣＳ１信号の有効の有無を確認する（ステップ２０８）。
【００３６】
ステップ２０８の確認でＣＳ１信号が有効であれば（ステップ２０８、ＹＥＳ）、ブート制御部４は、ステータスレジスタにＦＲＯＭ１のブート異常を反映し（ステップ２０９）、ＣＳ１信号を無効、ＣＳ２信号を有効とし（ステップ２１０）、ＣＰＵ３がＦＲＯＭ２からプログラムを読み出すことを許可して、リブートフラグを立てる（ステップ２１１）。
【００３７】
反対に、ステップ２０８の確認でＣＳ１信号が無効で、もともとＣＳ２信号が有効であったならば（ステップ２０８、ＮＯ）、ブート制御部４は、ステータスレジスタにＦＲＯＭ２のブート異常を反映し（ステップ２１３）、ＣＳ１信号を有効、ＣＳ２信号を無効とし（ステップ２１４）、ＣＰＵ３がＦＲＯＭ１からプログラムを読み出すことを許可して、リブートフラグを立てる（ステップ２１１）。リブートが必要となったので、ブート制御部４は、ローカルリセット信号を出力し（ステップ２１２）、ＣＰＵ３が再度ブート処理に入るように促す。
【００３８】
次に、本実施形態の制御カードにおいて行われるブートプログラムの更新処理について説明する。図８は、ブートプログラムの更新処理の基本的な手順を示すフローチャートである。以下、図８を用いて、ブートプログラムの更新処理の基本的な手順を説明する。
【００３９】
ブートプログラムを更新するには、ＣＰＵ３が正常に起動していることが前提とされる。本実施形態では、ＣＰＵ３から見たＦＲＯＭ１、２のアドレスは同一であり、ＣＰＵ３はＦＲＯＭ１とＦＲＯＭ２へ同時にアクセスすることはできない。このため、ＦＲＯＭへのアクセスには、必ずソフトウェアによるメモリ指定が必要となる。
【００４０】
ブート制御部４は、ＦＲＯＭ１の更新か否か（ソフトウェアによりＦＲＯＭ１が指定されたか否か）を判断する（ステップ３００）。ＦＲＯＭ１の更新である場合（ステップ３００、ＹＥＳ）は、ブート制御部４は、ステータスレジスタのＦＲＯＭＳＥＬビットに０を設定し（ステップ３０１）、ＦＲＯＭ１のプログラムを、使用する不揮発性メモリの仕様にしたがって更新する（ステップ３０２、３０３）。ＦＲＯＭ２の更新である場合（ステップ３００、ＮＯ）は、ブート制御部４は、ステータスレジスタのＦＲＯＭＳＥＬビットに１を設定し（ステップ３０４）、ＦＲＯＭ２のプログラムを、使用する不揮発性メモリの仕様にしたがって更新する（ステップ３０５、３０６）。
【００４１】
次に、上記ブートプログラムの更新処理について、さらに具体的に説明する。ブートプログラムの更新には、外部システムからのメッセージ受信を契機とした遠隔操作によるプログラムの更新と、定期的にステータスレジスタの状態をチェックして自律的にプログラムの更新を行う自律更新と、ダウンロードによるプログラムのバージョンアップの３つがあり、いずれの更新処理も、ソフトウェア（プログラム）により実現される。ここでは、通常ＣＰＵ３が動作するのに必要なＲＡＭ（不図示）を周辺に備えていることを前提に、このＲＡＭ上で、ＦＲＯＭ１、２に格納されているブートプログラムデータや外部装置からのプログラムデータの展開を行うことが可能とされている。
【００４２】
まず、遠隔操作によるブートプログラムの更新処理を説明する。図９に、ブート制御部４において行われる、遠隔操作によるブートプログラムの更新処理の手順を示す。
【００４３】
図９を参照すると、まず、外部システムからＦＲＯＭ更新要求メッセージを受信したか否かを判断する（ステップ４００）。更新要求メッセージを受信した場合（ステップ４００、ＹＥＳ）は、続いて、更新要求メッセージがＦＲＯＭ１の更新要求であるか否かを判断する（ステップ４０１）。
【００４４】
ステップ４０１で、ＦＲＯＭ１の更新であると判断した場合（ステップ４０１、ＹＥＳ）は、続いて、ＦＲＯＭ１が異常な状態か否かを判断する（ステップ４０２）。このステップ４０２で、ＦＲＯＭ１が異常な状態であると判断した場合（ステップ４０２、ＹＥＳ）は、ステータスレジスタのＦＲＯＭＳＥＬに「１」を設定し（ステップ４０３）、ＦＲＯＭ２のブートプログラムデータをＲＡＭ上に展開する（ステップ４０４）。次いで、ステータスレジスタのＦＲＯＭＳＥＬに「０」を設定し（ステップ４０５）、ＲＡＭ上に展開したブートプログラムデータでＦＲＯＭ１の更新を行う（ステップ４０６）。その後、クリアレジスタに「０ｘ０９」を書き込む（ステップ４０７）。
【００４５】
ステップ４０２で、ＦＲＯＭ１が正常な状態であると判断した場合（ステップ４０２、ＮＯ）は、ステータスレジスタのＦＲＯＭＳＥＬに「０」を設定し（ステップ４０８）、ＦＲＯＭ１のブートプログラムデータをＲＡＭ上に展開する（ステップ４０９）。そして、ＲＡＭ上に展開したブートプログラムデータでＦＲＯＭ１を更新し（ステップ４１０）、その後、ステップ４０７に移行して、クリアレジスタに「０ｘ０９」を書き込む。
【００４６】
ステップ４０１で、ＦＲＯＭ１の更新でない、すなわち、ＦＲＯＭ２の更新であると判断した場合（ステップ４０１、ＮＯ）は、続いて、ＦＲＯＭ２が異常な状態か否かを判断する（ステップ４１１）。このステップ４１１で、ＦＲＯＭ２が異常な状態であると判断した場合（ステップ４１１、ＹＥＳ）は、ステータスレジスタのＦＲＯＭＳＥＬに「０」を設定し（ステップ４１２）、ＦＲＯＭ１のブートプログラムデータをＲＡＭ上に展開する（ステップ４１３）。次いで、ステータスレジスタのＦＲＯＭＳＥＬに「１」を設定し（ステップ４１４）、ＲＡＭ上に展開したブートプログラムデータでＦＲＯＭ２の更新を行う（ステップ４１５）。その後、ステップ４０７に移行して、クリアレジスタに「０ｘ０９」を書き込む。
【００４７】
ステップ４１１で、ＦＲＯＭ２が正常な状態であると判断した場合（ステップ４１１、ＮＯ）は、ステータスレジスタのＦＲＯＭＳＥＬに「１」を設定し（ステップ４１６）、ＦＲＯＭ２のブートプログラムデータをＲＡＭ上に展開する（ステップ４１７）。そして、ＲＡＭ上に展開したブートプログラムデータでＦＲＯＭ２を更新し（ステップ４１８）、その後、ステップ４０７で、クリアレジスタに「０ｘ０９」を書き込む。
【００４８】
上記のプログラム更新処理において、ステップ４０２およびステップ４１１のＦＲＯＭの異常の有無は、ステータスレジスタの状態に基づいて行う。具体的には、ＦＲＯＭ１、２の各ブート状態を示すブートフラグの値の組み合わせと、リブートフラグの値との関係から、ＦＲＯＭの異常を判断する。図１０に、ＦＲＯＭ１、２の各ブート状態を示すブートフラグの値の組み合わせと、リブートフラグの値との関係を示す。
【００４９】
図１０に示すように、本実施形態では、第１乃至第３の状態を取り得る。第１の状態は、ＦＲＯＭ１、２のブート状態が共に「０」で、リブートフラグの値が「０」の状態である（（ＦＲＯＭ２：ＦＲＯＭ１）＝（０：０）かつＲＥＢＯＯＴＦＬＡＧ＝０）。第１の状態である場合は、１回目のブート制御（ＦＲＯＭ１からのブートプログラムの読み出し）で正常起動されたものと判断する。なお、第１の状態の場合は、電源投入による起動であれば、ＦＲＯＭ１によるブート処理は正常であるが、ＦＲＯＭ２によるブート処理が正常に行われるかは不明である。ローカルリセットによる起動であれば、ＦＲＯＭＳＥＬで選択されたＦＲＯＭからのブートが正常ではあるが、選択されていないＦＲＯＭからのブートが正常に行われるかは不明である。仮に、ブートしていない側のＦＲＯＭによるブートの正常性を確認したい場合は、ＦＲＯＭＳＥＬによりブートしていない側のＦＲＯＭを選択してからローカルリセットによる再起動を実施すればよい。
【００５０】
第２の状態は、ＦＲＯＭ１のブート状態が「０」、ＦＲＯＭ２のブート状態が「１」、リブートフラグの値が「１」の状態である（（ＦＲＯＭ２：ＦＲＯＭ１）＝（０：１）かつＲＥＢＯＯＴＦＬＡＧ＝１）。第２の状態の場合は、ＦＲＯＭ１を用いたブート処理が異常となり、ＦＲＯＭ２を用いたリブート処理が正常に起動したと判断する。
【００５１】
第３の状態は、ＦＲＯＭ１のブート状態が「１」、ＦＲＯＭ２のブート状態が「０」、リブートフラグの値が「１」の状態である（（ＦＲＯＭ２：ＦＲＯＭ１）＝（１：０）かつＲＥＢＯＯＴＦＬＡＧ＝１）。第３の状態の場合は、ＦＲＯＭ２を用いたブート処理で異常となり、ＦＲＯＭ１を用いたリブート処理で正常に起動したと判断する。
【００５２】
なお、ＦＲＯＭ１、２のブート状態が共に「１」の状態（（ＦＲＯＭ２：ＦＲＯＭ１）＝（１：１））は、ＣＰＵ３が正常に起動していないことを示す。この場合は、ステータスレジスタの状態を確認することさえもできないが、ハードウェア的にＬＥＤ５が点灯されるので、ＦＲＯＭ１、ＦＲＯＭ２の両方のブートが異常であったことがわかる。場合によっては、ＣＰＵ３の故障も考えられる。
【００５３】
次に、ブートプログラムの自律更新について説明する。ブート制御部４では、ソフトウェアにより時間管理が行われており、ある時刻になったところで、ステータスレジスタの状態確認（上述の第１乃至第３の状態の確認）が行われる。このステータスレジスタの状態確認処理で、ＦＲＯＭ１、２のいずれかによるブート処理の異常終了が確認された場合、すなわち第２または第３の状態が確認された場合は、ブート制御部４は、その異常終了したＦＲＯＭに対してブートプログラムの更新処理を行う。例えば、ＦＲＯＭ１が異常終了している場合（第２の状態の場合）は、図９のステップ４０３〜４０７の手順でＦＲＯＭ１の更新処理を行う。反対に、ＦＲＯＭ２が異常終了している場合（第３の状態の場合）は、図９のステップ４１２〜４１５およびステップ４０７の手順でＦＲＯＭ２の更新処理を行う。
【００５４】
次に、ダウンロードによるバージョンアップを行う際のブートプログラムの更新処理を説明する。図１１に、バージョンアップによるブートプログラムの更新処理の手順を示す。
【００５５】
図１１を参照すると、外部システムからダウンロードしたプログラムデータをＲＡＭ上に展開する（ステップ５００）。次いで、ソフトウェアにより指定されたプログラム更新対象であるＦＲＯＭがＦＲＯＭ１であるか否かが判断される（ステップ５０１）。ステップ５０１で、プログラム更新対象がＦＲＯＭ１であると判断された場合（ステップ５０１、ＹＥＳ）は、ステータスレジスタのＦＲＯＭＳＥＬに「０」を設定し（ステップ５０２）、ステップ５００でＲＡＭ上に展開したプログラムでＦＲＯＭ１のブートプログラムデータを更新する（ステップ５０３、５０４）。その後、クリアレジスタに「０ｘ０９」を書き込む（ステップ５０５）。
【００５６】
ステップ５０１で、ＦＲＯＭ１の更新でない、すなわち、ＦＲＯＭ２の更新であると判断した場合（ステップ５０１、ＮＯ）は、ステータスレジスタのＦＲＯＭＳＥＬに「１」を設定し（ステップ５０６）、ステップ５００でＲＡＭ上に展開したプログラムでＦＲＯＭ２のブートプログラムデータを更新する（ステップ５０７、５０８）。その後、ステップ５０５に移行し、クリアレジスタに「０ｘ０９」を書き込む。
【００５７】
以上説明した本実施形態のブート制御装置によれば、ＣＰＵ３が読み出すブートプログラムを完全二重化し、リブート制御を行うことで再起動を行うようになっているので、ダウンロードによる更新中の事故や部品故障による制御カードの起動失敗の頻度が減ることが期待できる。
【００５８】
また、ステータスレジスタ中に、各ＦＲＯＭ１、２からのブート状態を監視できる部分と、リブートしたかどうかを示すリブートフラグを用意したので、ステータスレジスタの状態を確認することで、どの段階でブートに失敗したかを特定することができる。このように、ブートに失敗した原因となる部分を容易に特定することができる。
【００５９】
さらに、ＣＰＵ３から見たＦＲＯＭ１、２のメモリアドレスを同一とし、ＦＲＯＭＳＥＬにより、どちらか１つのＦＲＯＭに対して、バスアクセスを許容する構成としているため、ダウンロードなどによりブートプログラムを更新する際に同時に２つのＦＲＯＭを壊さないようにすることができる。
【００６０】
さらに、ＣＰＵ３が動作できない場合には、ハードウェア的にＬＥＤが点灯するようになっているため、万が一、ＦＲＯＭ１、２からのブートがともに失敗した場合でも、ＦＲＯＭ１、２の異常を容易に判断することができる。
【００６１】
さらに、ＣＰＵ３のブート処理時間のタイムアウトをタイマレジスタにより調整することができるので、ＣＰＵ３の起動にかかる時間のバラツキを吸収することができる。
【００６２】
（他の実施形態）
図１２は、本発明の他の実施形態である制御カードの構成を示すブロック図である。図１２を参照すると、この制御カードは、ＦＲＯＭ１００、ＣＰＵ１０１、ブート制御部１０２およびＬＥＤ１０３からなり、ＦＲＯＭ１、２に代えてＦＲＯＭ１００が設けられた以外は、図１に示した構成と同じものである。ＦＲＯＭ１００は、ＦＲＯＭ１、２に比べて２倍のメモリ容量を有する。ＦＲＯＭ１００に接続されるアドレスピンのうち最上位アドレス１ビットを意図的に制御することにより、１つの不揮発性メモリ内に２つのエリアを確保し、それぞれのエリアに同じプログラムデータを格納する。
【００６３】
図１３の（ａ）に、ＦＲＯＭ独立型のイメージを示し、図１３の（ｂ）に、ＦＲＯＭ分割型のイメージを示す。ＦＲＯＭ独立型は、図１に示したＦＲＯＭ１、２に対応するメモリ形態であり、ＦＲＯＭ１、２のそれぞれで、アドレス「０ｘ００００」〜「０ｘ７ＦＦＦ」までのメモリ領域を有する。これに対して、ＦＲＯＭ分割型の場合は、１つのＦＲＯＭ上で、アドレス「０ｘ００００」〜「０ｘ７ＦＦＦ」の第１のメモリ領域（ＦＲＯＭ１に相当する領域）と、アドレス「０ｘ８０００」〜「０ｘＦＦＦＦ」の第２のメモリ領域（ＦＲＯＭ２に相当する領域）とを有する。ＦＲＯＭ１００は、図１３の（ｂ）に示したＦＲＯＭ分割型のメモリである。
【００６４】
ＣＰＵ１０１から見たＦＲＯＭ１００のメモリアドレスに対応するメモリ容量は、ＦＲＯＭ１００の容量の半分である。ＦＲＯＭ１００へ接続されるアドレスピンのうち、最上位アドレス（ＡＤＲ信号）のみがブート制御部１０２に接続される。ブート制御部１０２からＡＤＲ信号を制御することで、ちょうど１つのＦＲＯＭを２つのエリア（ＦＲＯＭ１エリアとＦＲＯＭ２エリア）に分けて使用することが可能となり、ＣＰＵ１０１は、同時に２つのエリアにアクセスすることはできない。また、ＣＰＵ１０１が起動したことを示すＡＣＴ信号が、ＣＰＵ１０１からブート制御部１０２へ供給されており、ＡＣＴ信号が有効となった時点で、ブート制御部１０２は制御カードが正常起動したと判断する。
【００６５】
ＣＰＵ１０１およびブート制御部１０２には、初期化するための信号として、パワーオンリセット信号とローカルリセット信号が供給されている。パワーオンリセット信号の供給により、制御カードの電源ＯＮ時に、各機能部が初期化される。ローカルリセット信号の供給により、制御カード起動後に、各機能部を任意に初期化することができる。
【００６６】
本実施形態においても、ブート制御部１０２がリブート動作を制御する都合上、ローカルリセット信号をドライブするので、ローカルリセット信号は双方向信号となっている。また、ブート制御部１０２は、パワーオンリセット信号では全てが初期化されるのに対し、ローカルリセット信号では一部が初期化される。
【００６７】
また、万が一、ＦＲＯＭ１エリアおよびＦＲＯＭ２エリアのどちらでもプログラムのブートに失敗した場合には、ＣＰＵ１０１は正常に起動できなくなる。この場合には、ブート制御部１０２がＬＥＤ１０３を点灯することにより、ＣＰＵ１０１が起動に失敗したことを視覚的に訴えるものとする。
【００６８】
図１４に、ブート制御部１０２の概略構成を示す。図１４を参照すると、ブート制御部１０２は、ブート制御に必要な各種設定や状態監視を行うレジスタ部１０４と、ＣＰＵ１０１が起動するのに必要とする時間をカウントできるブートタイマ１０５と、入力されたクロックの分周や断検出を行うクロック機能部１０６と、ＦＲＯＭ１エリアおよびＦＲＯＭ２エリアのどちらかを選択するＦＲＯＭ選択部１０７から構成される。
【００６９】
レジスタ部１０４は、ＣＰＵ１０１のブート状態やメモリ選択状態などを監視するステータスレジスタと、ステータスレジスタを初期化するクリアレジスタと、ブートタイマ１０５のタイムアウト値を設定できるタイマレジスタとを有する。これらステータスレジスタ、クリアレジスタ、タイマレジスタはそれぞれ、図３、図４、図５に示したレジスタと同様の構成のものである。ただし、図３のステータスレジスタのＦＲＯＭＳＥＬビットについては、０＝ＡＤＲ信号が０（ＦＲＯＭ１エリアを選択）、１＝ＡＤＲ信号が１（ＦＲＯＭ２エリアを選択）という読み替えをおこなう必要がある。ステータスレジスタとタイマレジスタは、パワーオンリセット信号により初期化されるが、ローカルリセット信号では初期化されない。これはローカルリセット信号によるリブート制御を行うためである。
【００７０】
ステータスレジスタは、制御カードのブート状態の確認、ブートタイマ１０５のタイムアウト値の設定、ＦＲＯＭ選択部１０７の制御、クロック機能部１０６の断検出の状態監視を行う。クリアレジスタは、ステータスレジスタを初期化するためのレジスタで、任意に状態をクリアすることができる。タイマレジスタは、ブートタイマ１０５のタイムアウト値を設定する。また、リブート制御するためのローカルリセット信号の出力についても、条件が整ったところで実施する。
【００７１】
ブートタイマ１０５は、クロック機能部１０６から供給されるクロックにて動作するタイマであり、ローカルリセット信号の解除によりカウント動作をスタートし、ＣＰＵ１０１からのＡＣＴ信号が有効（１で起動状態を示す）もしくはタイマがタイムアウトすると、カウント動作をストップする。ブートタイマ１０５のタイムアウト値は、レジスタ部１０４のタイマレジスタにて設定することができ、タイムアウトしたという情報はレジスタ部１０４やＦＲＯＭ選択部１０７に通知される。
【００７２】
ＦＲＯＭ１エリアからのブート処理とＦＲＯＭ２エリアからのブート処理は同時に行なわれることはないので、ブートタイマ回路としては１系統あれば十分である。本実施形態では、１系統のブートタイマ回路を想定している。
【００７３】
クロック機能部１０６は、外部から入力されるクロックを分周してブートタイマ１０５に供給したり、外部から入力されるクロックの断検出を行ったりする。ブートタイマ１０５の設定可能な範囲は決まっている（１から６５５３６まで）ため、分周されたクロックの速度により同じカウント数でも時間が変わってくる。入力されるクロック状態は、レジスタ部１０４のステータスレジスタに反映される。
【００７４】
本実施形態では、ＣＰＵ１０１の正常起動を期待するものであるため、入力クロックは、ＣＰＵ１０１の動作クロックと同じであることが望ましい。ただし、通常、ＣＰＵ１０１の動作クロックは高速であるので、クロック機能部１０６の分周回路規模を小さくしたい場合は、ＣＰＵ１０１の動作クロックと同じでなくともよい。
【００７５】
ＦＲＯＭ選択部１０７は、ＦＲＯＭ１エリアとＦＲＯＭ２エリアのどちらかを選択するものであって、レジスタ部１０４からの指示により、ＦＲＯＭ１００の最上位アドレスに接続されるＡＤＲ信号を制御する。また、ＦＲＯＭ選択部１０７は、ブートタイマ１０５からのタイムアウト状態の通知を受けると、それまで選択していたＦＲＯＭエリアとは異なる側のＦＲＯＭエリアを選択し、リブートすることをレジスタ部１０４へ通知する。
【００７６】
次に、本実施形態の制御カードにおける電源投入時の立ち上げ動作について説明する。図１５は、電源投入された場合の立ち上げ動作の手順を示すフローチャートである。以下、図１５を用いて、電源投入された場合の立ち上げについて説明する。
【００７７】
電源投入後、パワーオンリセット信号が解除されると（ステップ６００）、ＦＲＯＭ選択部１０７は、デフォルトでＡＤＲ信号＝０とし（ステップ６０１）、ＣＰＵ１０１に対してＦＲＯＭ１エリアからプログラムを読み出すことを許可する。
【００７８】
ローカルリセット信号が解除されると（ステップ６０２）、ブート制御部１０２は、レジスタ部１０４のタイマレジスタの初期タイムアウト値に従いブートタイマ１０５をスタートさせる（ステップ６０３）。ＡＣＴ信号が有効（「１」は起動状態を示す）になれば（ステップ６０４、ＮＯ）、ＣＰＵ１０１がＦＲＯＭ１エリアからのブート処理に成功したことを示すため、ブート制御部１０２は、ブートタイマ１０５の動作をストップし（ステップ６０５）、当該処理を終える。
【００７９】
ＡＣＴ信号が有効とならず（ステップ６０４、ＹＥＳ）、ブートタイマ１０５がタイムアウトした場合（ステップ６０６、ＹＥＳ）は、ブート制御部１０２は、ブートタイマ１０５の動作をストップし（ステップ６０７）、リブートフラグが「０」か否かを確認する（ステップ６０８）。
【００８０】
リブートフラグが「０」であることを確認した場合（ステップ６０８、ＹＥＳ）は、ブート制御部１０２は、ステータスレジスタにＦＲＯＭ１エリアのブート異常を反映する（ステップ６０９）。その後、ブート制御部１０２は、ＡＤＲ信号＝１とし（ステップ６０１）、ＣＰＵ１０１に対してＦＲＯＭ２エリアからプログラムを読み出すことを許可して、リブートフラグを立てる（ステップ６１１）。ＦＲＯＭ２エリアからのリブートが必要となったので、ブート制御部１０２は、ローカルリセット信号を出力して（ステップ６１２）、ＣＰＵ１０１が再度ブート処理に入るように促す。
【００８１】
ステップ６１２でのローカルリセット信号の出力後、ステップ６０２に戻り、ローカルリセット信号が解除される。そして、ステップ６０３にてブートタイマ１０５が起動され、ステップ６０４で、ＡＣＴ信号が有効になった否かの確認が行われる。ＡＣＴ信号が有効になった場合は、ステップ６０５のブートタイマストップの処理に移行した後、当該処理を終了する。ＡＣＴ信号が有効にならずにタイムアウトした場合は、ステップ６０７のブートタイマストップ処理に移行する。その後、ステップ６０８で、ステータスレジスタのリブートフラグを確認する。この場合は、リブートフラグは「１」であるので、ブート制御部１０２は、ステータスレジスタにＦＲＯＭ２エリアのブート異常を反映させる（ステップ６１３）。そして、ブート制御部１０２は、ＦＲＯＭ１エリアとＦＲＯＭ２エリアのどちらからのブートも失敗となり、ＣＰＵ１０１が正常起動していないために、ＬＥＤ５を点灯する（ステップ６１４）。ＣＰＵ１０１が正常起動せず、ブート制御部１０２の各種レジスタへのアクセスができなくなるので、ＬＥＤ５の点灯制御をハードウェアにて行うようにしてもよい。
【００８２】
次に、本実施形態の制御カードにおいて行われるローカルリセットによる立ち上げ動作について説明する。図１６は、ローカルリセットによる立ち上げ動作の手順を示すフローチャートである。以下、図１６を用いて、ローカルリセットによる立ち上げ動作について説明する。
【００８３】
電源投入により起動した制御カードは、アプリケーションにもよるが、電源投入状態で再起動をかけたりすることがある。例えば、ダウンロードなどによりデータを更新する場合や障害復旧のための再起動を行う場合が、そのような再起動に相当する。この再起動では、前提として、ＣＰＵは一度正常に起動しているといえる。
【００８４】
ローカルリセットを実施する前に、リブートフラグを初期化する目的でクリアレジスタを使用することが望ましいが、必ずしもクリアレジスタを使用する必要はない。仮に、リブートフラグをクリアしておけば、パワーオンリセットによる起動と同じように、ＦＲＯＭ１エリアとＦＲＯＭ２エリアの二重化によるブートを行うことができる。この場合は、後述するカード診断のしやすさに影響を与えるのみである。使用するアプリケーションに応じて、クリアレジスタを使用するようなソフトウェアの作りを考えることも可能である。以下のローカルリセットによる立ち上げ動作の説明では、特にクリアレジスタのことには触れずに動作説明を行う。
【００８５】
ローカルリセット信号が解除されると（ステップ７００）、レジスタ部１０４のタイマレジスタのタイムアウト値に従いブートタイマ１０５をスタートさせる（ステップ７０１）。ここで、タイムアウト値はローカルリセット前にＣＰＵ１０１から設定値を変更することが可能である。
【００８６】
次いで、ブート制御部１０２は、ＡＣＴ信号が有効（「１」は起動状態を示す）になれば（ステップ７０２、ＮＯ）、ＣＰＵ１０１がブート処理に成功したことを示すため、ブートタイマ１０５の動作をストップし（ステップ７０３）、当該処理を終える。ＡＣＴ信号が有効とならず（ステップ７０２、ＹＥＳ）、ブートタイマ１０５がタイムアウトした場合（ステップ７０４、ＹＥＳ）は、ブート制御部１０２は、ブートタイマ１０５の動作をストップし（ステップ７０５）、リブートフラグの状態を確認する（ステップ７０６）。
【００８７】
リブートフラグが立っていれば、すなわちフラグの状態が「１」であれば（ステップ７０６、ＮＯ）、ブート制御部１０２は、ＦＲＯＭ１エリアとＦＲＯＭ２エリアのどちらからのブートも失敗とみなしてＬＥＤ１０３を点灯し（ステップ７０７）、当該処理を終了する。リブートフラグが立っていない場合（ステプ７０６、ＹＥＳ）は、ブート制御部１０２は、ＡＤＲ信号の状態を確認する（ステップ７０８）。
【００８８】
ステップ７０８の確認でＡＤＲ信号＝０であれば（ステップ７０８、ＹＥＳ）、ブート制御部１０２は、ステータスレジスタにＦＲＯＭ１エリアのブート異常を反映した後（ステップ７０９）、ＡＤＲ信号を＝１とし（ステップ７１０）、ＣＰＵ１０１がＦＲＯＭ２エリアからプログラムを読み出すことを許可して、リブートフラグを立てる（ステップ７１１）。
【００８９】
反対に、ステップ７０８の確認でＡＤＲ信号が＝１であったならば（ステップ７０８、ＮＯ）、ブート制御部１０２は、ステータスレジスタにＦＲＯＭ２エリアのブート異常を反映した後（ステップ７１３）、ＡＤＲ信号を＝０とし（ステップ７１４）、ＣＰＵ１０１がＦＲＯＭ１エリアからプログラムを読み出すことを許可して、リブートフラグを立てる（ステップ７１１）。リブートが必要となったので、ブート制御部１０２は、ローカルリセット信号を出力し（ステップ７１２）、ＣＰＵ１０１が再度ブート処理に入るように促す。
【００９０】
次に、本実施形態の制御カードにおいて行われるブートプログラムの更新処理について説明する。ブートプログラムを更新するには、ＣＰＵ１０１が正常に起動していることが前提とされる。本実施形態では、ＣＰＵ１０１から見たＦＲＯＭ１エリアとＦＲＯＭ２エリアのアドレスは同一であり、ＣＰＵ１０２はＦＲＯＭ１エリアとＦＲＯＭ２エリアへ同時にアクセスすることはできない。このため、ＦＲＯＭエリアへのアクセスには、必ずソフトウェアによるメモリ指定が必要となる。
【００９１】
ＦＲＯＭ１エリアのプログラムを更新するには、ステータスレジスタのＦＲＯＭＳＥＬビットに０を設定し、使用する不揮発性メモリの仕様にしたがって更新処理を実施する。また、ＦＲＯＭ２エリアのプログラムを更新するにはステータスレジスタのＦＲＯＭＳＥＬビットに１を設定し、使用する不揮発性メモリの仕様にしたがって更新処理を実施する。
【００９２】
上記ブートプログラムの更新処理も、前述したような、外部システムからのメッセージ受信を契機とした遠隔操作によるプログラムの更新と、定期的にステータスレジスタの状態をチェックして自律的にプログラムの更新を行う自律更新と、ダウンロードによるプログラムのバージョンアップの３つがある。通常ＣＰＵ１０１が動作するのに必要なＲＡＭ（不図示）を周辺に備えていることを前提に、このＲＡＭ上で、ＦＲＯＭ１エリアおよびＦＲＯＭ２エリアに格納されているブートプログラムデータや外部システムからのプログラムデータの展開を行うことが可能とされている。いずれの更新処理も、ソフトウェア（プログラム）により実現され、その手順は前述したとおりであるので、ここでは、プログラム更新対象であるＦＲＯＭエリアが、ブート制御処理が異常終了したＦＲＯＭエリアである場合の更新処理を簡単に説明する。
【００９３】
図１７は、ブート制御処理が異常終了したＦＲＯＭエリアに対してプログラムの更新を行う場合の手順を示すフローチャートである。以下、図１７を用いて、ブート制御処理が異常終了したＦＲＯＭエリアに対するブートプログラムの更新処理を説明する。
【００９４】
ブート制御部１０２は、ソフトウェアにより指定されたＦＲＯＭエリアの更新が、ブート制御処理が異常終了したＦＲＯＭ１エリアに対するプログラムの更新であると判断した場合（ステップ８００、ＹＥＳ）、ステータスレジスタのＦＲＯＭＳＥＬビットに１を設定し（ステップ８０１）、ＦＲＯＭ２エリアのプログラムをＲＡＭ上に展開する（ステップ８０２）。次いで、ブート制御部１０２は、ステータスレジスタのＦＲＯＭＳＥＬビットに０を設定し（ステップ８０３）、ステップ８０２でＲＡＭ上に展開したプログラムデータを用いてＦＲＯＭ１エリアのプログラムの更新を行う（ステップ８０４、８０５）。そして、ブート制御部１０２は、クリアレジスタに「０ｘ０９」を書き込む（ステップ８０６）。
【００９５】
ソフトウェアにより指定されたＦＲＯＭエリアの更新が、ブート制御処理が異常終了したＦＲＯＭ２エリアに対するプログラムの更新であると判断した場合（ステップ８００、ＮＯ）、ブート制御部１０２は、ステータスレジスタのＦＲＯＭＳＥＬビットに０を設定し（ステップ８０７）、ＦＲＯＭ１エリアのプログラムをＲＡＭ上に展開する（ステップ８０８）。次いで、ブート制御部１０２は、ステータスレジスタのＦＲＯＭＳＥＬビットに１を設定し（ステップ８０９）、ステップ８０８でＲＡＭ上に展開したプログラムデータを用いてＦＲＯＭ２エリアのプログラムの更新を行う（ステップ８１０、８１１）。そして、ブート制御部１０２は、ステップ８０６に移行し、クリアレジスタに「０ｘ０９」を書き込む。
【００９６】
上記のプログラム更新処理において、ＦＲＯＭエリアの異常の有無（ブート制御が異常終了した否か）の判断は、レジスタ部１０４のステータスレジスタの状態に基づいて行う。具体的には、ＦＲＯＭ１エリア、ＦＲＯＭ２エリアの各ブート状態を示すブートフラグの値の組み合わせと、リブートフラグの値との関係から、ＦＲＯＭの異常を判断する。この判断においても、図１０にしたような第１乃至第３の状態取り得る。
【００９７】
第１の状態は、ＦＲＯＭ１エリア、ＦＲＯＭ２エリア２のブート状態が共に「０」で、リブートフラグの値が「０」の状態である。第１の状態である場合は、１回目のブート制御（ＦＲＯＭ１エリアからのブートプログラムの読み出し）で正常起動されたものと判断する。なお、第１の状態の場合は、電源投入による起動であれば、ＦＲＯＭ１エリアによるブート処理は正常であるが、ＦＲＯＭ２エリアによるブート処理が正常に行われるかは不明である。ローカルリセットによる起動であれば、ＦＲＯＭＳＥＬで選択されたＦＲＯＭエリアからのブートが正常ではあるが、選択されていないＦＲＯＭエリアからのブートが正常に行われるかは不明である。仮に、ブートしていない側のＦＲＯＭエリアによるブートの正常性を確認したい場合は、ＦＲＯＭＳＥＬによりブートしていない側のＦＲＯＭを選択してからローカルリセットによる再起動を実施すればよい。
【００９８】
第２の状態は、ＦＲＯＭ１エリアのブート状態が「０」、ＦＲＯＭ２エリアのブート状態が「１」、リブートフラグの値が「１」の状態である。第２の状態の場合は、ＦＲＯＭ１エリアを用いたブート処理が異常となり、ＦＲＯＭ２エリアを用いたリブート処理が正常に起動したと判断する。
【００９９】
第３の状態は、ＦＲＯＭ１エリアのブート状態が「１」、ＦＲＯＭ２エリアのブート状態が「０」、リブートフラグの値が「１」の状態である。第３の状態の場合は、ＦＲＯＭ２エリアを用いたブート処理で異常となり、ＦＲＯＭ１エリアを用いたリブート処理で正常に起動したと判断する。
【０１００】
なお、ＦＲＯＭ１エリアおよびＦＲＯＭ２エリアのブート状態が共に「１」の状態では、ＣＰＵ１０１が正常に起動していないことを示す。この場合は、ステータスレジスタの状態を確認することさえもできないが、ハードウェア的にＬＥＤ１０３が点灯されるので、ＦＲＯＭ１エリア、ＦＲＯＭ２エリアの両方のブートが異常であったことがわかる。場合によっては、ＣＰＵ１０１の故障も考えられる。
【０１０１】
上述した本実施形態の制御カードによれば、先の実施形態の制御カードが持つ効果の他に、部品が減ることにより実装面積の削減および部品コストの低減という新たな効果が期待できる。
【産業上の利用可能性】
【０１０２】
本発明は、プラグラムデータの二重化方法一般に適用することができるが、特には、移動通信の無線基地局装置、その他電子装置などに実装されるＣＰＵを使用した制御カードにおけるプログラムの二重化方法に適用することができる。
【図面の簡単な説明】
【０１０３】
【図１】本発明の一実施形態である制御カードの構成を示すブロック図である。
【図２】図１に示すブート制御部の構成を示すブロック図である。
【図３】図２に示すレジスタ部のステータスレジスタを説明するための図である。
【図４】図２に示すレジスタ部のクリアレジスタを説明するための図である。
【図５】図２に示すレジスタ部のタイマレジスタを説明するための図である。
【図６】図１に示す制御カードにおいて行われる、電源投入された場合の立ち上げ動作の手順を示すフローチャートである。
【図７】図１に示す制御カードにおいて行われる、ローカルリセットによる立ち上げ動作の手順を示すフローチャートである。
【図８】図１に示す制御カードにおいて行われる、ブートプログラムの更新処理の基本的な手順を示すフローチャートである。
【図９】図１に示す制御カードにおいて行われる、遠隔操作によるブートプログラムの更新処理の手順を示すフローチャートである。
【図１０】各ＦＲＯＭのブート状態を示すブートフラグの値の組み合わせと、リブートフラグの値との関係を説明するための図である。
【図１１】図１に示す制御カードにおいて行われる、バージョンアップによるブートプログラムの更新処理の手順を示すフローチャートである。
【図１２】本発明の他の実施形態である制御カードの構成を示すブロック図である。
【図１３】メモリの構成を説明するための図であって、（ａ）は、ＦＲＯＭ独立型のイメージを示す模式図、（ｂ）は、ＦＲＯＭ分割型のイメージを示す模式図である。
【図１４】図１２に示すブート制御部の概略構成を示すブロック図である。
【図１５】図１２に示す制御カードにおいて行われる、電源投入された場合の立ち上げ動作の手順を示すフローチャートである。
【図１６】図１２に示す制御カードにおいて行われる、ローカルリセットによる立ち上げ動作の手順を示すフローチャートである。
【図１７】図１２に示す制御カードにおいて行われる、異常を生じたＦＲＯＭエリアに対してプログラムの更新を行う場合の手順を示すフローチャートである。
【符号の説明】
【０１０４】
１、２  ＦＲＯＭ
３  ＣＰＵ
４  ブート制御部
５  ＬＥＤ
【図１】
2007122151.tif 000003
【図２】
2007122151.tif 000004
【図３】
2007122151.tif 000005
【図４】
2007122151.tif 000006
【図５】
2007122151.tif 000007
【図６】
2007122151.tif 000008
【図７】
2007122151.tif 000009
【図８】
2007122151.tif 000010
【図９】
2007122151.tif 000011
【図１０】
2007122151.tif 000012
【図１１】
2007122151.tif 000013
【図１２】
2007122151.tif 000014
【図１３】
2007122151.tif 000015
【図１４】
2007122151.tif 000016
【図１５】
2007122151.tif 000017
【図１６】
2007122151.tif 000018
【図１７】
2007122151.tif 000019