(57)【要約】【課題】ファームウェア更新時に電源断などの障害が発生した場合でも、不揮発性メモリを交換することなく、ファームウェアに関するデータをオンボードで更新を可能とする。【解決手段】識別部５とアドレス反転部４とを具備するファームウェア更新回路を用いる。識別部５は、ブートローダ及びメインプログラムを格納する不揮発性メモリ３におけるブートローダのアドレスに対応する識別データ５ａを格納する。アドレス反転部４は、制御装置２がブートローダ及びメインプログラムの更新を実行するとき、ブートローダ及び更新用のブートローダの少なくとも一方が不揮発性メモリ３に存在するように、識別データ５ａに基づいて、制御装置２が不揮発性メモリ３へ出力するブートローダの読出し用のアドレス１０と更新用のブートローダの書込み用のアドレス１０とが異なるように変更する。【選択図】図１
2007193596.tif 000002
【特許請求の範囲】
【請求項１】
ブートローダ及びメインプログラムを格納する不揮発性メモリにおける前記ブートローダのアドレスに対応する識別データを格納する識別部と、
制御装置が前記ブートローダ及び前記メインプログラムの更新を実行するとき、前記ブートローダ及び更新用のブートローダの少なくとも一方が前記不揮発性メモリに存在するように、前記識別データに基づいて、前記制御装置が前記不揮発性メモリへ出力する前記ブートローダの読出し用のアドレスと前記更新用のブートローダの書込み用のアドレスとが異なるように変更するアドレス反転部と
を具備する
ファームウェア更新回路。
【請求項２】
請求項１に記載のファームウェア更新回路において、
前記アドレス反転部は、
前記更新のとき、前記識別データに基づいて、前記読出し用のアドレスについて反転及び非反転のいずれか一方を行い、前記書込み用のアドレスについて他方を行う
ファームウェア更新回路。
【請求項３】
請求項２に記載のファームウェア更新回路において、
前記アドレス反転部は、
前記識別データが第１状態の場合、前記読出し用のアドレスについて非反転を行い、前記書込み用のアドレスについて反転を行う
ファームウェア更新回路。
【請求項４】
請求項２又は３に記載のファームウェア更新回路において、
前記アドレス反転部は、
前記識別データが第２状態の場合、前記読出し用のアドレスについて反転を行い、前記書込み用のアドレスについて非反転を行う
ファームウェア更新回路。
【請求項５】
請求項１乃至４のいずれか一方に記載のファームウェア更新回路において、
前記更新のとき、当該更新に関するタイムアウトを監視する監視部を更に具備し、
前記識別部は、前記監視部が前記タイムアウトを検出したとき、前記識別データを前記タイムアウト前の値から変更し、
前記アドレス反転部は、変更された前記識別データに基づいて、前記読出し用のアドレス及び前記書込み用のアドレスの反転及び非反転について、それぞれ前記タイムアウト前のものから変更する
ファームウェア更新回路。
【請求項６】
制御装置と、
ブートローダ及びメインプログラムを格納する不揮発性メモリと、
前記制御装置と前記不揮発性メモリとに通信可能に接続され、請求項１乃至５のいずれか一項に記載されたファームウェア更新回路と
を具備する
情報処理装置。
【請求項７】
（ａ）制御装置が不揮発性メモリに格納されたブートローダ及びメインプログラムの更新を実行するとき、前記ブートローダ及び更新用のブートローダの少なくとも一方が前記不揮発性メモリに存在するように、前記不揮発性メモリおける前記ブートローダのアドレスに対応する識別データに基づいて、前記制御装置が出力する前記ブートローダの読出し用のアドレスについて、変更及び非変更のいずれか一方を行い前記不揮発性メモリへ送信するステップと、
（ｂ）前記識別データに基づいて、前記制御装置が出力する前記更新用のブートローダの書込み用のアドレスについて、前記変更及び非変更のうちの他方を行い前記不揮発性メモリへ送信するステップと
を具備する
ファームウェア更新方法。
【請求項８】
請求項７に記載のファームウェア更新方法において、
前記（ａ）ステップは、
（ａ１）前記更新のとき、前記識別データに基づいて、前記読出し用のアドレスについて反転及び非反転のいずれか一方を行うステップを備え、
前記（ｂ）ステップは、
（ｂ１）前記更新のとき、前記識別データに基づいて、前記書込み用のアドレスについて前記反転及び非反転のうちの他方を行うステップを備える
ファームウェア更新方法。
【請求項９】
請求項８に記載のファームウェア更新方法において、
前記（ａ１）ステップは、
（ａ１１）前記識別データが第１状態の場合、前記読出し用のアドレスについて非反転を行うステップを含み、
前記（ｂ１）ステップは、
（ｂ１１）前記識別データが第１状態の場合、前記書込み用のアドレスについて反転を行うステップを含む
ファームウェア更新方法。
【請求項１０】
請求項８又は９に記載のファームウェア更新方法において、
前記（ａ１）ステップは、
（ａ１２）前記識別データが第２状態の場合、前記読出し用のアドレスについて反転を行うステップを含み、
前記（ｂ１）ステップは、
（ｂ１２）前記識別データが第２状態の場合、前記書込み用のアドレスについて非反転を行うステップを含む
ファームウェア更新方法。
【請求項１１】
請求項７乃至１０のいずれか一方に記載のファームウェア更新方法において、
（ｃ）前記更新のとき、当該更新に関するタイムアウトを監視するステップと、
（ｄ）前記タイムアウトを検出したとき、前記識別データを前記タイムアウト前の値から変更するステップと、
（ｅ）変更された前記識別データに基づいて、前記（ａ）ステップ及び前記（ｂ）ステップを実行するステップと
を更に具備する
ファームウェア更新方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ファームウェア更新回路およびファームウェア更新方法に関する。
【背景技術】
【０００２】
ファームウェア更新回路は、コンピュータ装置の制御を司るファームウェアについて、機能強化や問題回避などのために新しいファームウェアに更新する必要が生じた場合、フラッシュメモリに記憶されたファームウェアに関するデータをオンボードで書き換えるための回路である。従来、ファームウェア更新時に電源断などの障害が発生した場合、フラッシュメモリ内のデータが破壊され、フラッシュメモリを交換しないかぎり二度と立ち上がらなくなるという課題があった。この問題を解決するために、いくつかの解決手段が提案されている。
【０００３】
たとえば、特開２００５−７８３３６号公報に画像形成装置のプログラム書き換え方法が開示されている。このプログラム書き換え方法は、ファームウェア更新前に更新前データをＦＲＯＭに退避しておく。そして、電源断などの障害が発生して、ファームウェアの更新に失敗した場合、退避データをフラッシュメモリに戻して、再びファームウェアを更新する。この従来技術の問題点は、更新前データを退避中に障害が発生した場合、退避データそのものの信頼性が失われることと、退避用のＦＲＯＭが冗長であることでコストが増大することである。
【０００４】
また、特開２００５−２２８２２５号公報にメモリーカードアダプタが開示されている。このメモリーカードアダプタは、フラッシュメモリ内のブート部を非書き換え領域にする。それにより、プログラム部の書き換え中に電源断などの障害が発生しても、ブート部は破壊されていないため、再びファームウェアを更新することを可能とする。この従来技術の問題点は、フラッシュメモリ内に固定で非書き換え領域を備える必要があるため、ファームウェア設計者にプログラム上の制限を強いることである。特に、ファームウェアはレビジョンアップするにつれて、プログラム部の容量が増大していくことは常であり、低コストのために容量の少ないファームウェアを搭載するシステムでは、大きな固定領域を持つことは致命的ともいえる。
【０００５】
また、特開平１１−００３２１３号公報に情報処理システムが開示されている。この情報処理システムは、立ち上げ用ＲＯＭを別に備えている。そして、フラッシュメモリの書き換え中に電源断などの障害が発生しても、この立ち上げ用ＲＯＭから再びファームウェアを立ち上げ、再び更新することを可能とする。この従来技術の問題点は、立ち上げ用のＲＯＭが冗長であることでコストが増大することと、ローダ部の更新が出来ないため、ファームウェアとしての機能が制限されることである。
【０００６】
また、別の方式として、フラッシュメモリ自体を二重化させる方式があった。この方式もフラッシュメモリ部分が冗長となり、高コストをもたらす問題点があった。
【０００７】
関連する技術として特開２００１−１９５２６０号公報にブートプログラム書き換えシステムが開示されている。このブートプログラム書き換えシステムは、物理的に領域を第１の領域および第２の領域に２分され、前記第１の領域にパワーオンからシステムが立ち上がるまでの設定を行うブートプログラムを格納し、前記第２の領域に前記ブートプログラムを書き換えるための書き換えルーチンを格納する書き換え可能不揮発性リードオンリーメモリと；前記書き換え可能不揮発性リードオンリーメモリに与えられるアドレスの１ビットを論理的に反転する手動スイッチとを有することを特徴とする。
【０００８】
この場合、フラッシュメモリに固定領域（書き換えルーチン用）を確保しておく必要があり、ファームウェア設計者にプログラム上の制限を強いることになる。実施例２の書き換えルーチンを複数持たせる方法では、プログラム用のメモリの容量がより制限される。最上位ビットのアドレスのみを反転して、論理的上位、下位に書き込む方法も結局は、フラッシュＲＯＭを内部で二重化していることに他ならず、プログラム用のメモリの容量は半分に制限される。アップデートによるプログラムの容量アップにも対応できない。また、外部スイッチを使用することで人手の介入が必要である。
【０００９】
また、特開２００２−２２２０８４号公報に半導体記憶装置が開示されている。この半導体記憶装置は、複数の領域に分割されている。前記複数の領域は、それぞれ、領域内の最上位の物理アドレス又は領域内の最上位の物理アドレスを含む一連の複数の物理アドレスに、１又は複数のスモールセクタを配置したことを特徴とする。この半導体記憶装置は、アドレス変換回路を有していても良い。その場合、前記複数の領域は、それぞれ、更に、スモールセクタより大きいセクタを複数有し、前記アドレス変換回路は、外部から入力された前記セクタのセクタアドレスを変換し、前記複数の領域を同一のブート・ブロック・タイプとして機能させることを特徴とする。
【００１０】
この場合、トップタイプとボトムタイプとを分けて同一メモリにバンクを混在させているのみで、二重化に他ならない。メモリの二重化は、フラッシュメモリ部分が冗長となり、高コストをもたらし問題点である。
【００１１】
また、特開平８−２５５０８４号公報にＥＥＰＲＯＭのアップグレード方法が開示されている。このアップグレード方法は、第１のメモリにおける主アドレス空間に関連した主ブート・ブロックから代替アドレス空間に関連した代替ブート・ブロックにブート・データをコピーするステップと、前記代替ブート・ブロックがマイクロプロセッサの視点から主アドレス空間に現れ、前記主ブート・ブロックが代替アドレス空間に現れるように、第２の不揮発性メモリをセットするステップと、新しいブート・データを前記主ブート・ブロックに書き込むステップと、前記主ブート・ブロックを主アドレス空間に戻し、前記代替ブート・ブロックを代替アドレス空間に戻すように前記第２の不揮発性メモリをリセットするステップと、を備えて成る。
【００１２】
この場合、主ブートブロックを一時的に別領域に代替ブロックとしてコピーし、消去／書き換え後の電源障害に耐えられるようにしたもので、プログラム書き換えに特段のシーケンスが必要となり、それだけ余分な書き換え時間を要する。加えて、書き換え者（プロセッサ等）に相応のインテリジェンスをプログラム等で持たせなければならない。
【００１３】
また、特表２００２−５２６８２８号公報にブート・ブロックへの書き込みアクセスを可能にする時のブート・ブロック・コードの保護方法が開示されている。この方法は、第１ブート・ブロック・コードを保護し、第１ブート・ブロック・コードと同じセグメントまたは領域中に常駐する他のコードまたはデータの更新を可能にする方法である。その際、第１ブート・ブロック・コードおよび他のコードもしくはデータはメモリの第１書き込み可能セグメント中に格納されており、そのセグメントは初めに保護された書き込み不可能な状態に設定されており、 ａ）メモリの第１書き込み可能セグメント中に格納されているすべての情報をメモリの第２書き込み可能セグメント中にコピーするステップと、 ｂ）メモリの第２書き込み可能セグメント中のコピーされた情報の妥当性検査をするステップと、 ｃ）第１書き込み可能セグメントを保護されていない、書き込み可能な状態に設定するステップと、 ｄ）第１書き込み可能セグメント中に格納されているすべての情報を消去するステップと、 ｅ）第１書き込み可能セグメントを更新されたコードまたはデータで更新するステップとを含み、更新されたコードまたはデータは第２ブート・ブロック・コードを含み、 ｆ）第１書き込み可能セグメント中に格納されている第２ブート・ブロック・コードを第２書き込み可能セグメント中の第１ブート・ブロック・コードと比較するステップと、 ｇ） ステップｆ）の比較で、第１および第２再書き込み可能セグメント中にそれぞれ格納されている第２および第１ブート・ブロック・コードが同一である場合、第１再書き込み可能セグメントを保護された、書き込み不可能な状態に設定するステップとを含む方法。
【００１４】
ファームウェア更新時に電源断などの障害が発生した場合でも、不揮発性メモリを交換することなく、ファームウェアに関するデータをオンボードで書き換え可能なファームウエア更新回路及びファームウエア更新方法が望まれる。上記オンボードでの書き換えの際、メインプログラムを格納するプログラム領域とブートローダを格納するローダ領域とを有する不揮発性メモリ中に、ローダ領域を固定的に確保する必要がなく、ファームウェア設計時にローダ領域を意識する必要がないようなファームウエア更新回路及びファームウエア更新方法が望まれる。上記書き換えの際、冗長な不揮発性メモリを用いる必要のないファームウエア更新回路及びファームウエア更新方法が望まれる。
【００１５】
【特許文献１】特開２００５−７８３３６号公報
【特許文献２】特開２００５−２２８２２５号公報
【特許文献３】特開平１１−００３２１３号公報
【特許文献４】特開２００１−１９５２６０号公報
【特許文献５】特開２００２−２２２０８４号公報
【特許文献６】特開平８−２５５０８４号公報
【特許文献７】特表２００２−５２６８２８号公報
【発明の開示】
【発明が解決しようとする課題】
【００１６】
従って、本発明の目的は、ファームウェア更新時に電源断などの障害が発生した場合でも、不揮発性メモリを交換することなく、ファームウェアに関するデータをオンボードで書き換えが可能なファームウエア更新回路及びファームウエア更新方法を提供することにある。
【００１７】
また、本発明の他の目的は、上記オンボードでの書き換えの際、不揮発性メモリ中にブートローダを格納するローダ領域を固定的に確保する必要のないファームウエア更新回路及びファームウエア更新方法を提供することにある。
【００１８】
本発明の更に他の目的は、冗長な不揮発性メモリを用いる必要のないファームウエア更新回路及びファームウエア更新方法を提供することにある。
【課題を解決するための手段】
【００１９】
以下に、発明を実施するための最良の形態で使用される番号・符号を用いて、課題を解決するための手段を説明する。これらの番号・符号は、特許請求の範囲の記載と発明を実施するための最良の形態との対応関係を明らかにするために括弧付きで付加されたものである。ただし、それらの番号・符号を、特許請求の範囲に記載されている発明の技術的範囲の解釈に用いてはならない。
【００２０】
上記課題を解決するために、本発明のファームウェア更新回路は、識別部（５）とアドレス反転部（４）とを具備する。識別部（５）は、ブートローダ及びメインプログラムを格納する不揮発性メモリ（３）におけるブートローダのアドレスに対応する識別データ（５ａ）を格納する。アドレス反転部（４）は、制御装置（２）がブートローダ及びメインプログラムの更新を実行するとき、ブートローダ及び更新用のブートローダの少なくとも一方が不揮発性メモリ（３）に存在するように、識別データ（５ａ）に基づいて、制御装置（２）が不揮発性メモリ（３）へ出力するブートローダの読出し用のアドレス（１０）と更新用のブートローダの書込み用のアドレス（１０）とが異なるように変更する。
本発明は、既存のブートローダを格納した読出し用のアドレス（１０）と更新用のブートローダを格納する書込み用のアドレス（１０）とを異なるようにすることができる。それにより、不揮発性メモリ（３）において、既存のブートローダの格納領域と異なる領域に、更新用のブートローダを書き込むことができる。それにより、ファームウェア（ブートローダ＋メインプログラム）の更新中に電源断などの障害が発生した場合においても、不揮発性メモリ（３）内に、既存のブートローダ及び更新用のブートローダの少なくとも一方が上書きされずに残ることができる。したがって、不揮発性メモリ（３）を交換することなく、ファームウェア更新を再実行することができる。
【００２１】
上記のファームウェア更新回路において、アドレス反転部（４）は、更新のとき、識別データ（５ａ）に基づいて、読出し用のアドレス（１０）について反転及び非反転のいずれか一方を行い、書込み用のアドレス（１０）について他方を行う。
【００２２】
上記のファームウェア更新回路において、アドレス反転部（４）は、識別データ（５ａ）が第１状態（「０」）の場合、読出し用のアドレス（１０）について非反転を行い、書込み用のアドレス（１０）について反転を行う。
【００２３】
上記のファームウェア更新回路において、アドレス反転部（４）は、識別データ（５ａ）が第２状態（「１」）の場合、読出し用のアドレス（１０）について反転を行い、書込み用のアドレス（１０）について非反転を行う。
【００２４】
上記のファームウェア更新回路において、更新のとき、当該更新に関するタイムアウトを監視する監視部（６）を更に具備する。識別部（５）は、監視部（６）がタイムアウトを検出したとき、識別データ（５ａ）をタイムアウト前の値から変更する。アドレス反転部（４）は、変更された識別データ（５ａ）に基づいて、読出し用のアドレス（１０）及び書込み用のアドレス（１０）の反転及び非反転について、それぞれタイムアウト前のものから変更する。
【００２５】
上記課題を解決するために、本発明の情報処理装置は、制御装置（２）と、ブートローダ及びメインプログラムを格納する不揮発性メモリ（３）と、制御装置（２）と不揮発性メモリ（３）とに通信可能に接続され、上記のいずれか一項に記載されたファームウェア更新回路（１ａ）とを具備する。
【００２６】
上記課題を解決するために、本発明のファームウェア更新方法は、（ａ）制御装置（２）が不揮発性メモリ（３）に格納されたブートローダ及びメインプログラムの更新を実行するとき、ブートローダ及び更新用のブートローダの少なくとも一方が不揮発性メモリ（３）に存在するように、不揮発性メモリ（３）おけるブートローダのアドレスに対応する識別データ（５ａ）に基づいて、制御装置（２）が出力するブートローダの読出し用のアドレス（１０）について、変更及び非変更のいずれか一方を行い不揮発性メモリ（３）へ送信するステップと；（ｂ）識別データ（５ａ）に基づいて、制御装置（２）が出力する更新用のブートローダの書込み用のアドレス（１０）について、変更及び非変更のうちの他方を行い不揮発性メモリ（３）へ送信するステップとを具備する。
【００２７】
上記のファームウェア更新方法において、（ａ）ステップは、（ａ１）更新のとき、識別データ（５ａ）に基づいて、読出し用のアドレス（１０）について反転及び非反転のいずれか一方を行うステップを備える。（ｂ）ステップは、（ｂ１）更新のとき、識別データ（５ａ）に基づいて、書込み用のアドレス（１０）について反転及び非反転のうちの他方を行うステップを備える。
【００２８】
上記のファームウェア更新方法において、（ａ１）ステップは、（ａ１１）識別データ（５ａ）が第１状態（「０」）の場合、読出し用のアドレス（１０）について非反転を行うステップを含む。（ｂ１）ステップは、（ｂ１１）識別データ（５ａ）が第１状態（「０」）の場合、書込み用のアドレス（１０）について反転を行うステップを含む。
【００２９】
上記のファームウェア更新方法において、（ａ１）ステップは、（ａ１２）識別データ（５ａ）が第２状態（「１」）の場合、読出し用のアドレス（１０）について反転を行うステップを含む。（ｂ１）ステップは、（ｂ１２）識別データ（５ａ）が第２状態（「１」）の場合、書込み用のアドレス（１０）について非反転を行うステップを含む。
【００３０】
上記のファームウェア更新方法において、（ｃ）更新のとき、当該更新に関するタイムアウトを監視するステップと；（ｄ）タイムアウトを検出したとき、識別データ（５ａ）をタイムアウト前の値から変更するステップと；（ｅ）変更された識別データ（５ａ）に基づいて、（ａ）ステップ及び（ｂ）ステップを実行するステップとを更に具備する。
【発明の効果】
【００３１】
本発明により、ファームウェア更新時に電源断などの障害が発生した場合でも、不揮発性メモリを交換することなく、ファームウェアに関するデータをオンボードで更新が可能となる。
【発明を実施するための最良の形態】
【００３２】
以下、本発明のファームウエア更新回路及びファームウエア更新方法の実施の形態に関して、添付図面を参照して説明する。
【００３３】
図１は、本発明のファームウエア更新回路を適用したコンピュータ装置の実施の形態の構成を示すブロック図である。コンピュータ装置１は、制御装置２、ファームウエア更新回路１ａ及びフラッシュメモリ３を具備する。ファームウエア更新回路１ａは、制御装置２及びフラッシュメモリ３に通信可能に接続され、アドレス反転回路４、アドレス識別フラグ回路５、タイムアウト監視回路６及び更新フラグ回路１５を備える。
【００３４】
コンピュータ装置１はＬＡＮ１４で外部のＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）１２と接続されている。ＰＣ１２内に持つ更新用ファームウェア１３は制御装置２を介してフラッシュメモリ３に書き込まれる。
【００３５】
制御装置２は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）に例示される、演算処理部である。ファームウエア更新回路１ａ内の各回路及びフラッシュメモリ３の動作を制御する。制御装置２は、フラッシュメモリ３と接続され、ライトイネーブル信号９とアドレス信号１０とデータ信号１１をフラッシュメモリ３へ向けて出力する。また、フラッシュメモリ３からデータ信号１１を受け取る。
【００３６】
フラッシュメモリ３は、ファームウェアを構成するブートローダ７とメインプログラム８とを格納している。フラッシュメモリ３は、制御装置２から出力されるライトイネーブル信号９に応答して、データ信号１１をアドレス信号１０の示す領域に記憶する。又は、制御装置２から出力されるアドレス信号１０の示す領域のデータを、データ信号１１として制御装置２へ出力する。フラッシュメモリ３は、不揮発性であれば、他の種類のメモリでも良い。
【００３７】
アドレス反転回路４は、ライトイネーブル信号９とアドレス識別フラグ回路５からのアドレス識別フラグ５ａとを供給される。そして、それらの値からアドレス信号１０をそのままフラッシュメモリ３へ送るか、アドレス信号１０を反転してフラッシュメモリ３へ送るかを判定して、アドレス信号１０及びアドレス信号１０を反転したアドレス信号のいずれか一方を示す入力アドレス信号１０ａをフラッシュメモリ３へ送信する。
【００３８】
フラッシュメモリ３へのライトを行う場合、制御装置２は、ライトイネーブル信号９＝「１」（ＨＩＧＨ状態）とし、アドレス信号１０とデータ信号１１とをフラッシュメモリ３へ出力する。この場合、アドレス信号１０はフラッシュメモリ３内のライトの番地を示す。データ信号１１はフラッシュメモリ３へのライトデータを示す。アドレス信号１０はアドレス反転回路４へ供給される。アドレス反転回路４は、ライトイネーブル信号９とアドレス識別フラグ回路５からのアドレス識別フラグ５ａとを供給され、それらに基づいて、入力アドレス信号１０ａをフラッシュメモリ３へ出力する。フラッシュメモリ３は、ライトイネーブル信号９に応答して、アドレス反転回路４から出力された入力アドレス信号１０ａに示すフラッシュメモリ３内の領域にデータ信号１１を格納する。
【００３９】
フラッシュメモリ３へのリードを行う場合、制御装置２は、ライトイネーブル信号９＝「０」（ＬＯＷ状態）とし、アドレス信号１０をフラッシュメモリ３へ出力する。この場合、アドレス信号１０はフラッシュメモリ３内のリードの番地を示す。アドレス信号１０はアドレス反転回路４へ供給される。アドレス反転回路４は、ＬＯＷ状態のライトイネーブル信号９とアドレス識別フラグ回路５からのアドレス識別フラグ５ａとを供給され、それらに基づいて、入力アドレス信号１０ａをフラッシュメモリ３へ出力する。フラッシュメモリ３は、ＬＯＷ状態のライトイネーブル信号９に応答して、アドレス反転回路４から出力された入力アドレス信号１０ａに示すフラッシュメモリ３内の領域のデータ信号１１を出力する。データ信号１１はフラッシュメモリ３からのリードデータを示す。
【００４０】
タイムアウト監視回路６は、制御装置２及びアドレス識別フラグ回路５に接続されている。タイムアウトを検知して、アドレス識別フラグ回路５から出力されるアドレス識別フラグａの反転制御、及び制御装置２のリセットを行う。タイムアウト監視回路６は、カウンタで構成され、制御装置２が発行するセット指示をトリガとしてカウントを開始する。タイムアウト監視回路６には、通常、ファームウェア更新にかかる時間を越えた時間がタイムアウト時間として設定されている。そして、タイムアウトを検出すると、アドレス識別フラグ５ａの値を反転し、制御装置２のリセットを行う。
【００４１】
更新フラグ回路１５は、制御装置２と接続され、更新フラグ１５ａを格納した不揮発性レジスタから成る。更新フラグ１５ａは、値が「１」の時、ファームウェア更新中であることを示す。そのとき、制御装置２にリセットがかかると、制御装置２は、フラッシュメモリ３内のブートローダ７をリードする。更新フラグ１５ａは、値が「０」の時、通常動作中であることを示す。制御装置２にリセットがかかると、制御装置２は、フラッシュメモリ３内のメインプログラムをリードする。この更新フラグ１５ａは、フラッシュメモリ３内の最下位アドレスのデータを用いても良い。
【００４２】
アドレス識別フラグ回路５は、タイムアウト監視回路６及びアドレス反転回路４に接続され、アドレス識別フラグ５ａを格納した不揮発性レジスタ１ビットから成る。アドレス識別フラグ５ａは、値が「１」の時、アドレス反転回路４において、リード時のアドレスが反転され、ライト時のアドレスは反転されない。アドレス識別フラグ５ａは、値が「０」の時、ライト時のアドレスが反転され、リード時のアドレスは反転されない。
【００４３】
なお、本実施の形態では、説明の簡単化のため、フラッシュメモリ３へのライトはファームウェア更新時のみとしている。また、フラッシュメモリ３の制御信号に関して、一般的なフラッシュメモリには、チップイネーブル信号及びライトイネーブル信号でリード及びライトを選択するが、本実施の形態では、説明の簡単化のため、ライトイネーブル＝１（ＨＩＧＨ状態）の時をライト、ライトイネーブル＝０（ＬＯＷ状態）の時をリードとしている。
【００４４】
次に、アドレス反転回路４について詳細に説明する。アドレス反転回路４は、たとえばインバータとセレクタの組合せで実現できる。図２は、本発明のファームウエア更新回路の実施の形態におけるアドレス反転回路４の構成例を示すブロック図である。
【００４５】
アドレス反転回路４は、アドレス信号線１本ごとに、インバータ４０、ＡＮＤ回路４１〜４４およびＯＲ回路４５を備える。ＡＮＤ回路４１〜４４およびＯＲ回路４５は、セレクタのような集合回路を用いても良い。ここでは、アドレス信号（０）１００〜アドレス信号（３）１０３の４ビットの信号線に対応するアドレス反転回路４の例を示している。すなわち、アドレス反転回路４に入力されるアドレス信号１０は、アドレス信号（０）１００〜アドレス信号（３）１０３である。一方、アドレス反転回路４から出力される入力アドレス信号１０ａは、アドレス信号（０）１０４〜アドレス信号（３）１０７である。
【００４６】
なお、アドレス信号線の数は、この数（４）に限定されるものではなく、更に多くても良い。例えば、アドレス信号線の数は、フラッシュメモリ３のアドレス信号線数に対応して決定される。
【００４７】
アドレス反転回路４は、各アドレス信号線について同様なので、ここでは、アドレス信号（０）用の回路について説明する。インバータ４０は、アドレス信号（０）１００の出力レベルを反転させる。アドレス信号（０）１００がＨＩＧＨの時、ＬＯＷを出力し、アドレス信号（０）１００がＬＯＷの時、ＨＩＧＨを出力する。ＡＮＤ回路４１は、ライトイネーブル信号９がＬＯＷ且つアドレス識別フラグ５ａがＬＯＷの時、アドレス信号（０）１００の値を出力する。ライトイネーブル信号９とアドレス識別フラグ５ａがそれ以外の時、ＬＯＷを出力する。ＡＮＤ回路４２は、ライトイネーブル信号９がＬＯＷ且つアドレス識別フラグ５ａがＨＩＧＨの時、アドレス信号（０）１００の反転した値を出力する。ライトイネーブル信号９とアドレス識別フラグ５ａがそれ以外の時、ＬＯＷを出力する。ＡＮＤ回路４３は、ライトイネーブル信号９がＨＩＧＨ且つアドレス識別フラグ５ａがＬＯＷの時、アドレス信号（０）１００の反転した値を出力する。ライトイネーブル信号９とアドレス識別フラグ５ａがそれ以外の時、ＬＯＷを出力する。ＡＮＤ回路４４は、ライトイネーブル信号９がＨＩＧＨ且つアドレス識別フラグ５ａがＨＩＧＨの時、アドレス信号（０）１００の値を出力する。ライトイネーブル信号９とアドレス識別フラグ５ａがそれ以外の時、ＬＯＷを出力する。ＯＲ回路４５は、ＡＮＤ回路４１、ＡＮＤ回路４２、ＡＮＤ回路４３およびＡＮＤ回路４４の出力の論理和を入力アドレス信号（０）１０４として出力する。ＡＮＤ回路４１〜４４のいずれかがＨＩＧＨの時、ＨＩＧＨを出力し、全てがＬＯＷの時、ＬＯＷを出力する。アドレス信号（１）１０１〜アドレス信号（３）１０３は、アドレス信号（０）１００と同等の回路で接続され、それぞれ、入力アドレス信号（１）１０５、入力アドレス信号（２）１０６、入力アドレス信号（３）１０７を出力する。
【００４８】
図３Ａ及び図３Ｂは、図２に示すアドレス反転回路４の真理値表である。入力信号は、アドレス信号（０）１００、アドレス信号（１）１０１、アドレス信号（２）１０２、アドレス信号（３）１０３、ライトイネーブル信号９およびアドレス識別フラグ５ａであり、対応する出力信号が、入力アドレス信号（０）１０４、入力アドレス信号（１）１０５、入力アドレス信号（２）１０６および入力アドレス信号（３）１０７である。真理値表中の「０」は信号線がＬＯＷレベルであることを示し、「１」は信号線がＨＩＧＨレベルであることを示す。
【００４９】
次に、本発明のファームウエア更新回路を適用したコンピュータ装置の実施の形態の動作（本発明のファームウエア更新方法の実施の形態）について図４〜図６を参照して説明する。図４は、本発明のファームウエア更新回路を適用したコンピュータ装置の実施の形態の動作を示すフローチャートである。図５、図６は、各動作におけるフラッシュメモリ３の状態を示す概念図である。
【００５０】
制御装置２は、ファームウェア更新開始時、更新フラグ１５ａを値「１」にセットし、セルフリセットをかける（ステップＳ１）。制御装置２は、リセットが解除されると、アドレス識別フラグ５ａの値により、ブートローダＡもしくはブートローダＢのどちらをリードするか判断を行う（ステップＳ２）。
【００５１】
ステップＳ２において、アドレス識別フラグ５ａの値が「０」の時、ブートローダＡをリードする（ステップＳ０３）。制御装置２は、アドレス信号１０をフラッシュメモリ３へ向けて出力する。アドレス反転回路４は、アドレス識別フラグ５ａの値が「０」なので、リード時（ライトイネーブル信号９：ＬＯＷ）のアドレス信号１０を反転しない（アドレス反転無効）。アドレス反転回路４は、アドレス信号１０をそのまま入力アドレス信号１０ａとして出力する。したがって、フラッシュメモリ３は、入力アドレス信号１０ａに基づいて、アドレス０番地からデータを出力する。すなわち、制御装置２は、アドレス０番地からリードを行う。
【００５２】
図５（ａ）を参照して、この図は、ステップＳ３、すなわち、ファームウエア更新前におけるフラッシュメモリ３の状態を示している。右縦軸上はアドレス（１６進法表示）を示している。ファームウエア更新前、フラッシュメモリ３は、アドレス０〜１番地にブートローダＡを、アドレス２〜Ｆ番地にメインプログラムをそれぞれ格納している。制御装置２は、ステップＳ３において、アドレス０〜１番地のブートローダＡをリードする。同時に、制御装置２は、タイムアウト監視回路６へセット指示を発行する。タイムアウト監視回路６は、カウントを開始する。
【００５３】
図４を参照して、制御装置２は、ブートローダＡを起動し、フラッシュメモリ３へのメインプログラムのライトを実行する（ステップＳ４）。制御装置２は、アドレス信号１０、ライトイネーブル信号９及びデータ信号１１をフラッシュメモリ３へ向けて出力する。データ信号１１は、更新用ファームウエア１３である。アドレス反転回路４は、アドレス識別フラグ５ａの値が「０」なので、ライト時（ライトイネーブル信号９：ＨＩＧＨ）のアドレス信号１０を反転する（アドレス反転有効）。アドレス反転回路４は、アドレス信号１０を反転して入力アドレス信号１０ａとして出力する。したがって、フラッシュメモリ３は、入力アドレス信号１０ａに基づいて、アドレスＦ番地からデータ信号１１のライトを行う。
【００５４】
制御装置２は、メインプログラムのライトが正常終了したかどうか判断を行う（ステップＳ５）。制御装置２は、正常終了と判断した場合（ステップＳ５：Ｙｅｓ）、アドレス識別フラグ５ａの値を「１」にセットする（ステップＳ６）。その後、制御装置２は、更新フラグ１５ａをリセットする（ステップＳ７）。制御装置２は、セルフリセットされ、新しいファームウェアのメインプログラムをリードして、通常処理を起動する。
【００５５】
図５（ｂ）を参照して、この図は、ステップＳ４においてメインプログラムのライトが正常終了した場合におけるフラッシュメモリ３の状態を示している。右縦軸上はアドレス（１６進法表示）を示している。メインプログラムのライトの正常終了後、フラッシュメモリ３は、アドレスＦ〜Ｅ番地にブートローダＢを、アドレスＤ〜０番地にメインプログラムをそれぞれ格納する。制御装置２は、ステップＳ７の後、新しいファームウェアのメインプログラムをアドレスＤ〜０番地からリードする。
【００５６】
ステップＳ２において、アドレス識別フラグ５ａの値が「１」の時、ブートローダＢをリードする（ステップＳ８）。制御装置２は、アドレス信号１０をフラッシュメモリ３へ向けて出力する。アドレス反転回路４は、アドレス識別フラグ５ａの値が「１」なので、リード時（ライトイネーブル信号９：ＬＯＷ）のアドレス信号１０を反転する（アドレス反転有効）。アドレス反転回路４は、アドレス信号１０を反転して入力アドレス信号１０ａとして出力する。したがって、フラッシュメモリ３は、入力アドレス信号１０ａに基づいて、アドレスＦ番地からデータを出力する。すなわち、制御装置２は、アドレスＦ番地からリードを行う。
【００５７】
図６（ａ）を参照して、この図は、ステップＳ８、すなわち、ファームウエア更新前におけるフラッシュメモリ３の状態を示している。右縦軸上はアドレス（１６進法表示）を示している。ファームウエア更新前、フラッシュメモリ３は、アドレスＦ〜Ｅ番地にブートローダＢを、アドレスＤ〜０番地にメインプログラムをそれぞれ格納している。制御装置２は、ステップＳ８において、アドレスＦ〜Ｅ番地のブートローダＢをリードする。同時に、制御装置２は、タイムアウト監視回路６へセット指示を発行する。タイムアウト監視回路６は、カウントを開始する。
【００５８】
図４を参照して、制御装置２は、ブートローダＢを起動し、フラッシュメモリ３へのメインプログラムのライトを実行する（ステップＳ９）。制御装置２は、アドレス信号１０、ライトイネーブル信号９及びデータ信号１１をフラッシュメモリ３へ向けて出力する。データ信号１１は、更新用ファームウエア１３である。アドレス反転回路４は、アドレス識別フラグ５ａの値が「１」なので、ライト時（ライトイネーブル信号９：ＨＩＧＨ）のアドレス信号１０を反転しない（アドレス反転無効）。アドレス反転回路４は、アドレス信号１０をそのまま入力アドレス信号１０ａとして出力する。したがって、フラッシュメモリ３は、入力アドレス信号１０ａに基づいて、アドレス０番地からデータ信号１１のライトを行う。
【００５９】
制御装置２は、メインプログラムのライトが正常終了したかどうか判断を行う（ステップＳ１０）。制御装置２は、正常終了と判断した場合（ステップＳ１０：Ｙｅｓ）、アドレス識別フラグ５ａの値をリセットして「０」にする（ステップＳ１１）。その後、制御装置２は、更新フラグ１５ａをリセットする（ステップＳ１２）。制御装置２は、セルフリセットされ、新しいファームウェアのメインプログラムをリードして、通常処理を起動する。
【００６０】
図６（ｂ）を参照して、この図は、ステップＳ９においてメインプログラムのライトが正常終了した場合におけるフラッシュメモリ３の状態を示している。右縦軸上はアドレス（１６進法表示）を示している。メインプログラムのライトの正常終了後、フラッシュメモリ３は、アドレス０〜１番地にブートローダＢを、アドレス２〜Ｆ番地にメインプログラムをそれぞれ格納する。制御装置２は、ステップＳ１２の後、新しいファームウェアのメインプログラムをアドレス２〜Ｆ番地からリードする。
【００６１】
このように、ファームウェアの更新のたびに、アドレス識別フラグの値が「０」から「１」、又は「１」から「０」へと遷移する。すなわち、ブートローダＡが有効な場合、新しいファームウェアは有効ブートローダと反対側のアドレスＦ番地からライトされ、ブートローダＢが有効な場合、新しいファームウェアは有効ブートローダと反対側のアドレス０番地からライトされる。
【００６２】
図４を参照して、ステップＳ５において、タイムアウト監視回路６がタイムアウトを検出した場合（ステップＳ１３）、制御装置２は、異常終了と判断する（ステップＳ５：Ｎｏ）。本実施の形態では、タイムアウト監視回路６がタイムアウトを検出する前に、制御装置２からのリセット指示でカウンタがリセットされることで、正常終了したと判断する。ただし、フラッシュメモリ３のチェックサム照合を行い、正常終了を判断しても構わない。タイムアウト監視回路６は、タイムアウトを検出すると、アドレス識別フラグ５ａの値を「１」に反転し（ステップＳ１４）、後述する異常処理Ｂの動作を行う。
【００６３】
ステップＳ１０において、タイムアウト監視回路６がタイムアウトを検出すると、制御装置２は、異常終了と判断する（ステップＳ１５）。タイムアウト監視回路６は、タイムアウトを検出すると、アドレス識別フラグ５ａの値を「０」に反転し（ステップＳ１６）、後述の異常処理Ａの動作を行う。
【００６４】
次に、本発明のファームウエア更新回路を適用したコンピュータ装置の実施の形態の動作（本発明のファームウエア更新方法の実施の形態）における異常発生時の動作について説明する。図７は、本発明のファームウエア更新回路を適用したコンピュータ装置の実施の形態の動作における異常発生時の動作を示すフローチャートである。図８、図９は、異常発生時におけるフラッシュメモリ３の状態を示す概念図である。
【００６５】
異常処理Ａにおいて、ファームウェア更新中なので更新フラグ１５ａの値は「１」であり、アドレス識別フラグ５ａの値は「０」である。ファームウェア更新中に電源断やネットワーク障害等の障害が発生し、ファームウェアライト処理が途中で止まってしまった場合を想定する。図８は、そのフラッシュメモリ３の状態を示している。
【００６６】
図８（ａ）、（ｂ）及び（ｃ）は、それぞれ異常終了ｃａｓｅ４、異常終了ｃａｓｅ５及び異常終了ｃａｓｅ６を示す。異常終了ｃａｓｅ４は、ライト処理初期段階で障害が発生したケースを示し、図６（ｂ）（正常終了ｃａｓｅ）と比較して、ブートローダＡのライトの途中で処理が停止している。異常終了ｃａｓｅ５は、ライト処理中期段階で障害が発生したケースを示し、図６（ｂ）と比較して、ブートローダＡのライトは完了し、メインプログラムのライトの途中で処理が停止している。異常終了ｃａｓｅ６は、ライト処理後期段階で障害が発生したケースを示し、図６（ｂ）と比較して、ブートローダＡのライトは完了し、メインプログラムのライトの途中且つブートローダＢを書き潰している段階で処理が停止している。異常終了ｃａｓｅ４は、ブートローダＢのみ有効。異常終了ｃａｓｅ５は、ブートローダＡとブートローダＢが共に有効。異常終了ｃａｓｅ６は、ブートローダＡのみ有効という状態である。
【００６７】
図７を参照して、異常処理Ａにおいて、タイムアウト監視回路６は、制御装置２をリセットする（ステップＳ１７）。制御装置２は、リセットが解除されると、アドレス識別フラグ５ａの値が「０」の時、ブートローダＡをリードする（ステップＳ１８）。制御装置２は、アドレス信号１０をフラッシュメモリ３へ向けて出力する。アドレス反転回路４は、アドレス識別フラグ５ａの値が「０」なので、リード時（ライトイネーブル信号９：ＬＯＷ）のアドレス信号１０を反転しない（アドレス反転無効）。アドレス反転回路４は、アドレス信号１０をそのまま入力アドレス信号１０ａとして出力する。したがって、フラッシュメモリ３は、入力アドレス信号１０ａに基づいて、アドレス０番地からデータを出力する。すなわち、制御装置２は、アドレス０番地からリードを行う。同時に、制御装置２は、タイムアウト監視回路６へセット指示を発行する。タイムアウト監視回路６は、カウントを開始する。
【００６８】
制御装置２は、ブートローダＡを起動し、フラッシュメモリ３へのメインプログラムのライトを実行する（ステップＳＳ１９）。アドレス反転が有効となり、アドレスＦ番地からライトを行う。制御装置２は、アドレス信号１０、ライトイネーブル信号９及びデータ信号１１をフラッシュメモリ３へ向けて出力する。データ信号１１は、更新用ファームウエア１３である。アドレス反転回路４は、アドレス識別フラグ５ａの値が「０」なので、ライト時（ライトイネーブル信号９：ＨＩＧＨ）のアドレス信号１０を反転する（アドレス反転有効）。アドレス反転回路４は、アドレス信号１０を反転して入力アドレス信号１０ａとして出力する。したがって、フラッシュメモリ３は、入力アドレス信号１０ａに基づいて、アドレスＦ番地からデータ信号１１のライトを行う。
【００６９】
制御装置２は、メインプログラムのライトが正常終了したかどうか判断を行う（ステップＳ２０）。制御装置２は、正常終了と判断した場合（ステップＳ２０：Ｙｅｓ）、アドレス識別フラグ５ａの値を「１」にセットする（ステップＳ２１）。その後、制御装置２は、更新フラグ１５ａをリセットする（ステップＳ２２）。制御装置２は、セルフリセットされ、新しいファームウェアのメインプログラムをリードして、通常処理を起動する。
【００７０】
一方、異常処理Ｂにおいて、ファームウェア更新中なので更新フラグ１５ａの値は「１」であり、アドレス識別フラグ５ａの値は「１」である。ファームウェア更新中に電源断やネットワーク障害等の障害が発生し、ファームウェアライト処理が途中で止まってしまった場合を想定する。図９は、そのフラッシュメモリ３の状態を示している。
【００７１】
図９（ａ）、（ｂ）及び（ｃ）は、それぞれ異常終了ｃａｓｅ１、異常終了ｃａｓｅ２及び異常終了ｃａｓｅ３を示す。異常終了ｃａｓｅ１は、ライト処理初期段階で障害が発生したケースを示し、図５（ｂ）（正常終了ｃａｓｅ）と比較して、ブートローダＢのライトの途中で処理が停止している。異常終了ｃａｓｅ２は、ライト処理中期段階で障害が発生したケースを示し、図５（ｂ）と比較して、ブートローダＢのライトは完了し、メインプログラムのライトの途中で処理が停止している。異常終了ｃａｓｅ３は、ライト処理後期段階で障害が発生したケースを示し、図５（ｂ）と比較して、ブートローダＢのライトは完了し、メインプログラムのライトの途中且つブートローダＡを書き潰している段階で処理が停止している。異常終了ｃａｓｅ１は、ブートローダＡのみ有効。異常終了ｃａｓｅ２は、ブートローダＡとブートローダＢが共に有効。異常終了ｃａｓｅ３は、ブートローダＢのみ有効という状態である。
【００７２】
図７を参照して、異常処理Ｂにおいて、タイムアウト監視回路６は、制御装置２をリセットする（ステップＳ２３）。制御装置２は、リセットが解除されると、アドレス識別フラグ５ａの値が「１」の時、ブートローダＢをリードする（ステップＳ２４）。制御装置２は、アドレス信号１０をフラッシュメモリ３へ向けて出力する。アドレス反転回路４は、アドレス識別フラグ５ａの値が「１」なので、リード時（ライトイネーブル信号９：ＬＯＷ）のアドレス信号１０を反転する（アドレス反転有効）。アドレス反転回路４は、アドレス信号１０を反転して入力アドレス信号１０ａとして出力する。したがって、フラッシュメモリ３は、入力アドレス信号１０ａに基づいて、アドレスＦ番地からデータを出力する。すなわち、制御装置２は、アドレスＦ番地からリードを行う。同時に、制御装置２は、タイムアウト監視回路６へセット指示を発行する。タイムアウト監視回路６は、カウントを開始する。
【００７３】
制御装置２は、ブートローダＢを起動し、フラッシュメモリ３へのメインプログラムのライトを実行する（ステップＳ２５）。制御装置２は、アドレス信号１０、ライトイネーブル信号９及びデータ信号１１をフラッシュメモリ３へ向けて出力する。データ信号１１は、更新用ファームウエア１３である。アドレス反転回路４は、アドレス識別フラグ５ａの値が「１」なので、ライト時（ライトイネーブル信号９：ＨＩＧＨ）のアドレス信号１０を反転しない（アドレス反転無効）。アドレス反転回路４は、アドレス信号１０をそのまま入力アドレス信号１０ａとして出力する。したがって、フラッシュメモリ３は、入力アドレス信号１０ａに基づいて、アドレス０番地からデータ信号１１のライトを行う。
【００７４】
制御装置２は、メインプログラムのライトが正常終了したかどうか判断を行う（ステップＳ２６）。制御装置２は、正常終了と判断した場合（ステップＳ２６：Ｙｅｓ）、アドレス識別フラグ５ａの値をリセットして「０」にする（ステップＳ２７）。その後、制御装置２は、更新フラグ１５ａをリセットする（ステップＳ２８）。制御装置２は、セルフリセットされ、新しいファームウェアのメインプログラムをリードして、通常処理を起動する。
【００７５】
異常終了ｃａｓｅ１では、ブートローダＢが無効であるため、異常処理Ｂが動いても、ブートローダＢの読み出しに失敗する（ステップＳ２６：Ｎｏ）。この時、タイムアウト監視回路６が再びタイムアウトを検出し（ステップＳ３１）、アドレス識別フラグ５ａを再反転する（ステップＳ３２）。その後、異常処理Ａ（ステップＳ１７〜Ｓ２２）を実行する。
【００７６】
同様に、異常処理ｃａｓｅ４では、ブートローダＡが無効であるため、異常処理Ａが動いても、ブートローダＡの読み出しに失敗する（ステップＳ２０：Ｎｏ）。この時、タイムアウト監視回路６が再びタイムアウトを検出し（ステップＳ２９）、アドレス識別フラグ５ａを再反転する（ステップＳ３０）。その後、異常処理Ｂ（ステップＳ２３〜Ｓ２８）を実行する。
【００７７】
タイムアウト検出（異常終了ｃａｓｅ）のとき、アドレス識別フラグ５ａを反転させ、異常処理Ａと異常処理Ｂとを交互に行うのは、図８及び図９に示したように、異常終了ｃａｓｅではブロードローダＡ、Ｂのいずれが有効であるかが不明だからである。
【００７８】
本実施の形態では、ファームウェアの更新が正常終了するまで、繰り返しファームウェア更新処理が行われるが、タイムアウト監視回路６のタイムアウト検出回数をカウントして、任意に設定可能な規定回数に達したら、フラッシュメモリ３自体の故障と判断し、ファームウェア更新処理を強制終了させても良い。
【００７９】
本発明において、このように異常処理Ａと異常処理Ｂとを交互に実行すれば、ファームウエアの更新を行うことができる。これにより、ファームウェア更新時に電源断などの障害が発生した場合でも、フラッシュメモリ（不揮発性メモリ）を交換することなく、ファームウェアに関するデータをオンボードで書き換えることが可能となる。加えて、フラッシュメモリ中にブートローダ（Ａ、Ｂ）を格納するローダ領域を固定的に確保することなく、上記オンボードでの書き換えを実行することができる。これらは、冗長なフラッシュメモリ（不揮発性メモリ）を用いることなく実行することができる。
【００８０】
次に、本発明のファームウエア更新回路を適用したコンピュータ装置の実施の形態の動作（本発明のファームウエア更新方法の実施の形態）の実施例について図１０〜図１１を参照して説明する。図１０、図１１は、本発明のファームウエア更新回路を適用したコンピュータ装置の実施の形態の動作を示すタイミングチャートである。図１０は、正常に行われる場合を示す。図１１は、異常終了ｃａｓｅ２が発生した場合を示す。
【００８１】
（Ａ）ファームウエア更新処理が正常に行われる場合
図１０を参照すると、クロック３００は、コンピュータ装置１内のクロック信号を示す。時間は、本実施例の説明のための時間の経過を表し、クロック３００の１クロックごとに１加算される。
【００８２】
Ｔ０において、ファームウェア更新処理が開始される。制御装置２は、更新フラグ回路１５へセット指示を発行する。
【００８３】
Ｔ１において、更新フラグ１５ａが１にセットされる（ステップＳ１）。制御装置２は、アドレス信号１０（アドレス（０）１００〜アドレス（３）１０３）＝０（１６進法表示：ＨＥＸ）を発行する。アドレス識別フラグ５ａが「０」であるため（ステップＳ２：Ｙｅｓ）、アドレス反転回路４は、アドレス信号１０そのままの入力アドレス信号１０ａ（アドレス（０）１０４〜アドレス（３）１０７）＝０（ＨＥＸ）をフラッシュメモリ３へ出力する。それにより、制御装置２は、フラッシュメモリ０番地のデータＬ０をデータ信号１１としてリードする。タイムアウト監視回路６はカウントを開始する。
【００８４】
Ｔ２において、制御装置２は、アドレス信号１０（アドレス（０）１００〜アドレス（３）１０３）＝１（ＨＥＸ）を発行する。アドレス識別フラグ５ａが「０」であるため、アドレス反転回路４は、入力アドレス信号１０ａ（アドレス（０）１０４〜アドレス（３）１０７）＝１（ＨＥＸ）をフラッシュメモリ３へ出力する。それにより、制御装置２は、フラッシュメモリ１番地のデータＬ１をデータ信号１１としてリードする。タイムアウト監視回路６のカウンタ値が「０１」になる。ブートローダＡのリードが完了する（ステップＳ３）。
【００８５】
Ｔ３において、制御装置２は、ライトイネーブル信号９及びデータ信号１１をフラッシュメモリ３へ出力する。同時に、制御装置２は、アドレス信号１０（アドレス（０）１００〜アドレス（３）１０３）＝０（ＨＥＸ）を発行する。アドレス反転回路４は、アドレス識別フラグ５ａが「０」であるため、アドレス信号１０を反転した入力アドレス信号１０ａ（アドレス（０）１０４〜アドレス（３）１０７）＝Ｆ（ＨＥＸ）をフラッシュメモリ３へ出力する。それにより、制御装置２は、フラッシュメモリＦ番地にデータ信号１１のデータＬ０をライトする。タイムアウト監視回路６のカウンタ値が「０２」になる。
【００８６】
Ｔ４において、制御装置２は、ライトイネーブル信号９及びデータ信号１１をフラッシュメモリ３へ出力する。同時に、制御装置２は、アドレス信号１０（アドレス（０）１００〜アドレス（３）１０３）＝１（ＨＥＸ）を発行する。アドレス反転回路４は、アドレス識別フラグ５ａが「０」であるため、入力アドレス信号１０ａ（アドレス（０）１０４〜アドレス（３）１０７）＝Ｅ（ＨＥＸ）をフラッシュメモリ３へ出力する。それにより、制御装置２は、フラッシュメモリＥ番地にデータ信号１１のデータＬ１をライトする。タイムアウト監視回路６のカウンタ値が「０３」になる。
【００８７】
Ｔ５において、制御装置２は、ライトイネーブル信号９及びデータ信号１１をフラッシュメモリ３へ出力する。同時に、制御装置２は、アドレス信号１０（アドレス（０）１００〜アドレス（３）１０３）＝２（ＨＥＸ）を発行する。アドレス反転回路４は、アドレス識別フラグ５ａが「０」であるため、入力アドレス信号１０ａ（アドレス（０）１０４〜アドレス（３）１０７）＝Ｄ（ＨＥＸ）をフラッシュメモリ３へ出力する。それにより、制御装置２は、フラッシュメモリＤ番地にデータ信号１１のデータＭ２をライトする。タイムアウト監視回路６のカウンタ値が「０４」になる。
【００８８】
Ｔ６において、制御装置２は、ライトイネーブル信号９及びデータ信号１１をフラッシュメモリ３へ出力する。同時に、制御装置２は、アドレス信号１０（アドレス（０）１００〜アドレス（３）１０３）＝３（ＨＥＸ）を発行する。アドレス反転回路４は、アドレス識別フラグ５ａが「０」であるため、入力アドレス信号１０ａ（アドレス（０）１０４〜アドレス（３）１０７）＝Ｃ（ＨＥＸ）をフラッシュメモリ３へ出力する。それにより、制御装置２は、フラッシュメモリＣ番地にデータ信号１１のデータＭ３をライトする。タイムアウト監視回路６のカウンタ値が「０５」になる。
【００８９】
Ｔ７において、制御装置２は、ライトイネーブル信号９及びデータ信号１１をフラッシュメモリ３へ出力する。同時に、制御装置２は、アドレス信号１０（アドレス（０）１００〜アドレス（３）１０３）＝４（ＨＥＸ）を発行する。アドレス反転回路４は、アドレス識別フラグ５ａが「０」であるため、入力アドレス信号１０ａ（アドレス（０）１０４〜アドレス（３）１０７）＝Ｂ（ＨＥＸ）をフラッシュメモリ３へ出力する。それにより、制御装置２は、フラッシュメモリＢ番地にデータ信号１１のデータＭ４をライトする。タイムアウト監視回路６のカウンタ値が「０６」になる。
【００９０】
Ｔ８において、制御装置２は、ライトイネーブル信号９及びデータ信号１１をフラッシュメモリ３へ出力する。同時に、制御装置２は、アドレス信号１０（アドレス（０）１００〜アドレス（３）１０３）＝５（ＨＥＸ）を発行する。アドレス反転回路４は、アドレス識別フラグ５ａが「０」であるため、入力アドレス信号１０ａ（アドレス（０）１０４〜アドレス（３）１０７）＝Ａ（ＨＥＸ）をフラッシュメモリ３へ出力する。それにより、制御装置２は、フラッシュメモリＡ番地にデータ信号１１のデータＭ５をライトする。タイムアウト監視回路６のカウンタ値が「０７」になる。
【００９１】
Ｔ９において、制御装置２は、ライトイネーブル信号９及びデータ信号１１をフラッシュメモリ３へ出力する。同時に、制御装置２は、アドレス信号１０（アドレス（０）１００〜アドレス（３）１０３）＝６（ＨＥＸ）を発行する。アドレス反転回路４は、アドレス識別フラグ５ａが「０」であるため、入力アドレス信号１０ａ（アドレス（０）１０４〜アドレス（３）１０７）＝９（ＨＥＸ）をフラッシュメモリ３へ出力する。それにより、制御装置２は、フラッシュメモリ９番地にデータ信号１１のデータＭ６をライトする。タイムアウト監視回路６のカウンタ値が「０８」になる。
【００９２】
Ｔ１０において、制御装置２は、ライトイネーブル信号９及びデータ信号１１をフラッシュメモリ３へ出力する。同時に、制御装置２は、アドレス信号１０（アドレス（０）１００〜アドレス（３）１０３）＝７（ＨＥＸ）を発行する。アドレス反転回路４は、アドレス識別フラグ５ａが「０」であるため、入力アドレス信号１０ａ（アドレス（０）１０４〜アドレス（３）１０７）＝８（ＨＥＸ）をフラッシュメモリ３へ出力する。それにより、制御装置２は、フラッシュメモリ８番地にデータ信号１１のデータＭ７をライトする。タイムアウト監視回路６のカウンタ値が「０９」になる。
【００９３】
Ｔ１１において、制御装置２は、ライトイネーブル信号９及びデータ信号１１をフラッシュメモリ３へ出力する。同時に、制御装置２は、アドレス信号１０（アドレス（０）１００〜アドレス（３）１０３）＝８（ＨＥＸ）を発行する。アドレス反転回路４は、アドレス識別フラグ５ａが「０」であるため、入力アドレス信号１０ａ（アドレス（０）１０４〜アドレス（３）１０７）＝７（ＨＥＸ）をフラッシュメモリ３へ出力する。それにより、制御装置２は、フラッシュメモリ７番地にデータ信号１１のデータＭ８をライトする。タイムアウト監視回路６のカウンタ値が「０Ａ」になる。
【００９４】
Ｔ１２において、制御装置２は、ライトイネーブル信号９及びデータ信号１１をフラッシュメモリ３へ出力する。同時に、制御装置２は、アドレス信号１０（アドレス（０）１００〜アドレス（３）１０３）＝９（ＨＥＸ）を発行する。アドレス反転回路４は、アドレス識別フラグ５ａが「０」であるため、入力アドレス信号１０ａ（アドレス（０）１０４〜アドレス（３）１０７）＝６（ＨＥＸ）をフラッシュメモリ３へ出力する。それにより、制御装置２は、フラッシュメモリ６番地にデータ信号１１のデータＭ９をライトする。タイムアウト監視回路６のカウンタ値が「０Ｂ」になる。
【００９５】
Ｔ１３において、制御装置２は、ライトイネーブル信号９及びデータ信号１１をフラッシュメモリ３へ出力する。同時に、制御装置２は、アドレス信号１０（アドレス（０）１００〜アドレス（３）１０３）＝Ａ（ＨＥＸ）を発行する。アドレス反転回路４は、アドレス識別フラグ５ａが「０」であるため、入力アドレス信号１０ａ（アドレス（０）１０４〜アドレス（３）１０７）＝５（ＨＥＸ）をフラッシュメモリ３へ出力する。それにより、制御装置２は、フラッシュメモリ５番地にデータ信号１１のデータＭＡをライトする。タイムアウト監視回路６のカウンタ値が「０Ｃ」になる。
【００９６】
Ｔ１４において、制御装置２は、ライトイネーブル信号９及びデータ信号１１をフラッシュメモリ３へ出力する。同時に、制御装置２は、アドレス信号１０（アドレス（０）１００〜アドレス（３）１０３）＝Ｂ（ＨＥＸ）を発行する。アドレス反転回路４は、アドレス識別フラグ５ａが「０」であるため、入力アドレス信号１０ａ（アドレス（０）１０４〜アドレス（３）１０７）＝４（ＨＥＸ）をフラッシュメモリ３へ出力する。それにより、制御装置２は、フラッシュメモリ４番地にデータ信号１１のデータＭＢをライトする。タイムアウト監視回路６のカウンタ値が「０Ｄ」になる。
【００９７】
Ｔ１５において、制御装置２は、ライトイネーブル信号９及びデータ信号１１をフラッシュメモリ３へ出力する。同時に、制御装置２は、アドレス信号１０（アドレス（０）１００〜アドレス（３）１０３）＝Ｃ（ＨＥＸ）を発行する。アドレス反転回路４は、アドレス識別フラグ５ａが「０」であるため、入力アドレス信号１０ａ（アドレス（０）１０４〜アドレス（３）１０７）＝３（ＨＥＸ）をフラッシュメモリ３へ出力する。それにより、制御装置２は、フラッシュメモリ３番地にデータ信号１１のデータＭＣをライトする。タイムアウト監視回路６のカウンタ値が「０Ｅ」になる。
【００９８】
Ｔ１６において、制御装置２は、ライトイネーブル信号９及びデータ信号１１をフラッシュメモリ３へ出力する。同時に、制御装置２は、アドレス信号１０（アドレス（０）１００〜アドレス（３）１０３）＝Ｄ（ＨＥＸ）を発行する。アドレス反転回路４は、アドレス識別フラグ５ａが「０」であるため、入力アドレス信号１０ａ（アドレス（０）１０４〜アドレス（３）１０７）＝２（ＨＥＸ）をフラッシュメモリ３へ出力する。それにより、制御装置２は、フラッシュメモリ２番地にデータ信号１１のデータＭＤをライトする。タイムアウト監視回路６のカウンタ値が「０Ｆ」になる。
【００９９】
Ｔ１７において、制御装置２は、ライトイネーブル信号９及びデータ信号１１をフラッシュメモリ３へ出力する。同時に、制御装置２は、アドレス信号１０（アドレス（０）１００〜アドレス（３）１０３）＝Ｅ（ＨＥＸ）を発行する。アドレス反転回路４は、アドレス識別フラグ５ａが「０」であるため、入力アドレス信号１０ａ（アドレス（０）１０４〜アドレス（３）１０７）＝１（ＨＥＸ）をフラッシュメモリ３へ出力する。それにより、制御装置２は、フラッシュメモリ１番地にデータ信号１１のデータＭＥがライトをライトする。タイムアウト監視回路６のカウンタ値が「１０」になる。
【０１００】
Ｔ１８において、制御装置２は、ライトイネーブル信号９及びデータ信号１１をフラッシュメモリ３へ出力する。同時に、制御装置２は、アドレス信号１０（アドレス（０）１００〜アドレス（３）１０３）＝Ｆ（ＨＥＸ）を発行する。アドレス反転回路４は、アドレス識別フラグ５ａが「０」であるため、入力アドレス信号１０ａ（アドレス（０）１０４〜アドレス（３）１０７）＝０（ＨＥＸ）をフラッシュメモリ３へ出力する。それにより、制御装置２は、フラッシュメモリ１番地にデータ信号１１のデータＭＦをライトする。タイムアウト監視回路６のカウンタ値が「１１」になる。全データのライトが完了する（ステップＳ０４）。
【０１０１】
完了により、制御装置２は、アドレス識別フラグ回路５へセット指示を発行する。制御装置２は、更新フラグ回路１５へリセット指示を発行する。制御装置２は、タイムアウト監視回路６へリセット指示を発行する。
【０１０２】
Ｔ１９において、アドレス識別フラグ５ａが「１」にセットされる（ステップＳ６）。更新フラグ１５ａが「０」にリセットされる（ステップＳ０７）。タイムアウト監視回路６が「００」にリセットされる。制御装置２は、セルフリセットがかかり、更新フラグ１５ａが「０」であることにより、新しいファームウェアのメインプログラムがリードされ、通常処理が起動する。
【０１０３】
（Ｂ）ファームウエア更新処理において異常終了ｃａｓｅ２が発生した場合
図１１を参照すると、クロック３００はコンピュータ装置１内のクロック信号を示す。時間は、本実施例の説明のための時間の経過を表し、クロック３００の１クロックごとに１加算される。ただし、Ｔ０〜Ｔ８までは図１０の正常終了時と同一であるため、それらの説明は省略する。
【０１０４】
Ｔ９において、電源断障害が発生する。タイムアウト監視回路６は障害のあった電源と別電源で動作する回路で、障害発生後もカウントを続ける。タイムアウト監視回路６のカウンタ値が「０８」になる。
【０１０５】
Ｔ１０、Ｔ１１、Ｔ１２、Ｔ１３、Ｔ１４、Ｔ１５、Ｔ１６、Ｔ１７、Ｔ１８、及びＴ１９において、タイムアウト監視回路６のカウンタ値は、それぞれ「０９」、「０Ａ」、「０Ｂ」、「０Ｃ」、「０Ｄ」、「０Ｅ」、「０Ｆ」、「１０」、「１１」、及び「１２」になる。
【０１０６】
Ｔ２０において、タイムアウト監視回路６は、カウンタ値が「１３」になり、タイムアウトを検出する（ステップＳ５：Ｎｏ、ステップＳ１３）。本実施例では、タイムアウト監視回路６のカウント値が「１１」で正常終了するため、それを越えるカウンタ値「１３」をタイムアウト値とした。タイムアウト監視回路６は、アドレス識別フラグ回路５へセット指示を発行する。アドレス識別フラグ回路５は、アドレス識別フラグ５ａを「１」にする（ステップＳ１４）。また、タイムアウト監視回路６は、制御装置２へリセット指示を発行する。制御装置２は、セルフリセットされる（ステップＳ２３）。
【０１０７】
Ｔ２１において、制御装置２は、アドレス信号１０（アドレス（０）１００〜アドレス（３）１０３）＝０（ＨＥＸ）を発行する。アドレス識別フラグ５ａが「１」であるため、アドレス反転回路４は、アドレス信号１０を反転した入力アドレス信号１０ａ（アドレス（０）１０４〜アドレス（３）１０７）＝Ｆ（ＨＥＸ）をフラッシュメモリ３へ出力する。それにより、制御装置２は、フラッシュメモリＦ番地のデータＬ０をデータ信号１１としてリードする。タイムアウト監視回路６はカウントを開始する。
【０１０８】
Ｔ２２において、制御装置２は、アドレス信号１０（アドレス（０）１００〜アドレス（３）１０３）＝１（ＨＥＸ）を発行する。アドレス識別フラグ５ａが「１」であるため、アドレス反転回路４は、入力アドレス信号１０ａ（アドレス（０）１０４〜アドレス（３）１０７）＝Ｅ（ＨＥＸ）をフラッシュメモリ３へ出力する。それにより、制御装置２は、フラッシュメモリＥ番地のデータＬ１をデータ信号１１としてリードする。タイムアウト監視回路６のカウンタ値が「０１」になる。ブートローダＢのリードが完了する（ステップＳ２４）。
【０１０９】
Ｔ２３において、制御装置２は、ライトイネーブル信号９及びデータ信号１１をフラッシュメモリ３へ出力する。同時に、制御装置２は、アドレス信号１０（アドレス（０）１００〜アドレス（３）１０３）＝０（ＨＥＸ）を発行する。アドレス反転回路４は、アドレス識別フラグ５ａが「１」であるため、アドレス信号１０そのままの入力アドレス信号１０ａ（アドレス（０）１０４〜アドレス（３）１０７）＝０（ＨＥＸ）をフラッシュメモリ３へ出力する。それにより、制御装置２は、フラッシュメモリ０番地にデータ信号１１のデータＬ０をライトする。タイムアウト監視回路６のカウンタ値が「０２」になる。
【０１１０】
Ｔ２４において、制御装置２は、ライトイネーブル信号９及びデータ信号１１をフラッシュメモリ３へ出力する。同時に、制御装置２は、アドレス信号１０（アドレス（０）１００〜アドレス（３）１０３）＝１（ＨＥＸ）を発行する。アドレス反転回路４は、アドレス識別フラグ５ａが「１」であるため、入力アドレス信号１０ａ（アドレス（０）１０４〜アドレス（３）１０７）＝１（ＨＥＸ）をフラッシュメモリ３へ出力する。それにより、制御装置２は、フラッシュメモリ１番地にデータ信号１１のデータＬ１をライトする。タイムアウト監視回路６のカウンタ値が「０３」になる。
【０１１１】
Ｔ２５において、制御装置２は、ライトイネーブル信号９及びデータ信号１１をフラッシュメモリ３へ出力する。同時に、制御装置２は、アドレス信号１０（アドレス（０）１００〜アドレス（３）１０３）＝２（ＨＥＸ）を発行する。アドレス反転回路４は、アドレス識別フラグ５ａが「１」であるため、入力アドレス信号１０ａ（アドレス（０）１０４〜アドレス（３）１０７）＝２（ＨＥＸ）をフラッシュメモリ３へ出力する。それにより、制御装置２は、フラッシュメモリ２番地にデータ信号１１のデータＭ２をライトする。タイムアウト監視回路６のカウンタ値が「０４」になる。
【０１１２】
Ｔ２６において、制御装置２は、ライトイネーブル信号９及びデータ信号１１をフラッシュメモリ３へ出力する。同時に、制御装置２は、アドレス信号１０（アドレス（０）１００〜アドレス（３）１０３）＝３（ＨＥＸ）を発行する。アドレス反転回路４は、アドレス識別フラグ５ａが「１」であるため、入力アドレス信号１０ａ（アドレス（０）１０４〜アドレス（３）１０７）＝３（ＨＥＸ）をフラッシュメモリ３へ出力する。それにより、制御装置２は、フラッシュメモリ３番地にデータ信号１１のデータＭ３をライトする。タイムアウト監視回路６のカウンタ値が「０５」になる。
【０１１３】
Ｔ２７において、制御装置２は、ライトイネーブル信号９及びデータ信号１１をフラッシュメモリ３へ出力する。同時に、制御装置２は、アドレス信号１０（アドレス（０）１００〜アドレス（３）１０３）＝４（ＨＥＸ）を発行する。アドレス反転回路４は、アドレス識別フラグ５ａが「１」であるため、入力アドレス信号１０ａ（アドレス（０）１０４〜アドレス（３）１０７）＝４（ＨＥＸ）をフラッシュメモリ３へ出力する。それにより、制御装置２は、フラッシュメモリ４番地にデータ信号１１のデータＭ４をライトする。タイムアウト監視回路６のカウンタ値が「０６」になる。
【０１１４】
Ｔ２８において、制御装置２は、ライトイネーブル信号９及びデータ信号１１をフラッシュメモリ３へ出力する。同時に、制御装置２は、アドレス信号１０（アドレス（０）１００〜アドレス（３）１０３）＝５（ＨＥＸ）を発行する。アドレス反転回路４は、アドレス識別フラグ５ａが「１」であるため、入力アドレス信号１０ａ（アドレス（０）１０４〜アドレス（３）１０７）＝５（ＨＥＸ）をフラッシュメモリ３へ出力する。それにより、制御装置２は、フラッシュメモリ５番地にデータ信号１１のデータＭ５をライトする。タイムアウト監視回路６のカウンタ値が「０７」になる。
【０１１５】
Ｔ２９において、制御装置２は、ライトイネーブル信号９及びデータ信号１１をフラッシュメモリ３へ出力する。同時に、制御装置２は、アドレス信号１０（アドレス（０）１００〜アドレス（３）１０３）＝６（ＨＥＸ）を発行する。アドレス反転回路４は、アドレス識別フラグ５ａが「１」であるため、入力アドレス信号１０ａ（アドレス（０）１０４〜アドレス（３）１０７）＝６（ＨＥＸ）をフラッシュメモリ３へ出力する。それにより、制御装置２は、フラッシュメモリ６番地にデータ信号１１のデータＭ６をライトする。タイムアウト監視回路６のカウンタ値が「０８」になる。
【０１１６】
Ｔ３０において、制御装置２は、ライトイネーブル信号９及びデータ信号１１をフラッシュメモリ３へ出力する。同時に、制御装置２は、アドレス信号１０（アドレス（０）１００〜アドレス（３）１０３）＝７（ＨＥＸ）を発行する。アドレス反転回路４は、アドレス識別フラグ５ａが「１」であるため、入力アドレス信号１０ａ（アドレス（０）１０４〜アドレス（３）１０７）＝７（ＨＥＸ）をフラッシュメモリ３へ出力する。それにより、制御装置２は、フラッシュメモリ７番地にデータ信号１１のデータＭ７をライトする。タイムアウト監視回路６のカウンタ値が「０９」になる。
【０１１７】
Ｔ３１において、制御装置２は、ライトイネーブル信号９及びデータ信号１１をフラッシュメモリ３へ出力する。同時に、制御装置２は、アドレス信号１０（アドレス（０）１００〜アドレス（３）１０３）＝８（ＨＥＸ）を発行する。アドレス反転回路４は、アドレス識別フラグ５ａが「１」であるため、入力アドレス信号１０ａ（アドレス（０）１０４〜アドレス（３）１０７）＝８（ＨＥＸ）をフラッシュメモリ３へ出力する。それにより、制御装置２は、フラッシュメモリ８番地にデータ信号１１のデータＭ８をライトする。タイムアウト監視回路６のカウンタ値が「０Ａ」になる。
【０１１８】
Ｔ３２において、制御装置２は、ライトイネーブル信号９及びデータ信号１１をフラッシュメモリ３へ出力する。同時に、制御装置２は、アドレス信号１０（アドレス（０）１００〜アドレス（３）１０３）＝９（ＨＥＸ）を発行する。アドレス反転回路４は、アドレス識別フラグ５ａが「１」であるため、入力アドレス信号１０ａ（アドレス（０）１０４〜アドレス（３）１０７）＝９（ＨＥＸ）をフラッシュメモリ３へ出力する。それにより、制御装置２は、フラッシュメモリ９番地にデータ信号１１のデータＭ９をライトする。タイムアウト監視回路６のカウンタ値が「０Ｂ」になる。
【０１１９】
Ｔ３３において、制御装置２は、ライトイネーブル信号９及びデータ信号１１をフラッシュメモリ３へ出力する。同時に、制御装置２は、アドレス信号１０（アドレス（０）１００〜アドレス（３）１０３）＝Ａ（ＨＥＸ）を発行する。アドレス反転回路４は、アドレス識別フラグ５ａが「１」であるため、入力アドレス信号１０ａ（アドレス（０）１０４〜アドレス（３）１０７）＝Ａ（ＨＥＸ）をフラッシュメモリ３へ出力する。それにより、制御装置２は、フラッシュメモリＡ番地にデータ信号１１のデータＭＡをライトする。タイムアウト監視回路６のカウンタ値が「０Ｃ」になる。
【０１２０】
Ｔ３４において、制御装置２は、ライトイネーブル信号９及びデータ信号１１をフラッシュメモリ３へ出力する。同時に、制御装置２は、アドレス信号１０（アドレス（０）１００〜アドレス（３）１０３）＝Ｂ（ＨＥＸ）を発行する。アドレス反転回路４は、アドレス識別フラグ５ａが「１」であるため、入力アドレス信号１０ａ（アドレス（０）１０４〜アドレス（３）１０７）＝Ｂ（ＨＥＸ）をフラッシュメモリ３へ出力する。それにより、制御装置２は、フラッシュメモリＢ番地にデータ信号１１のデータＭＢをライトする。タイムアウト監視回路６のカウンタ値が「０Ｄ」になる。
【０１２１】
Ｔ３５において、制御装置２は、ライトイネーブル信号９及びデータ信号１１をフラッシュメモリ３へ出力する。同時に、制御装置２は、アドレス信号１０（アドレス（０）１００〜アドレス（３）１０３）＝Ｃ（ＨＥＸ）を発行する。アドレス反転回路４は、アドレス識別フラグ５ａが「１」であるため、入力アドレス信号１０ａ（アドレス（０）１０４〜アドレス（３）１０７）＝Ｃ（ＨＥＸ）をフラッシュメモリ３へ出力する。それにより、制御装置２は、フラッシュメモリＣ番地にデータ信号１１のデータＭＣをライトする。タイムアウト監視回路６のカウンタ値が「０Ｅ」になる。
【０１２２】
Ｔ３６において、制御装置２は、ライトイネーブル信号９及びデータ信号１１をフラッシュメモリ３へ出力する。同時に、制御装置２は、アドレス信号１０（アドレス（０）１００〜アドレス（３）１０３）＝Ｄ（ＨＥＸ）を発行する。アドレス反転回路４は、アドレス識別フラグ５ａが「１」であるため、入力アドレス信号１０ａ（アドレス（０）１０４〜アドレス（３）１０７）＝Ｄ（ＨＥＸ）をフラッシュメモリ３へ出力する。それにより、制御装置２は、フラッシュメモリＤ番地にデータ信号１１のデータＭＤをライトする。タイムアウト監視回路６のカウンタ値が「０Ｆ」になる。
【０１２３】
Ｔ３７において、制御装置２は、ライトイネーブル信号９及びデータ信号１１をフラッシュメモリ３へ出力する。同時に、制御装置２は、アドレス信号１０（アドレス（０）１００〜アドレス（３）１０３）＝Ｅ（ＨＥＸ）を発行する。アドレス反転回路４は、アドレス識別フラグ５ａが「１」であるため、入力アドレス信号１０ａ（アドレス（０）１０４〜アドレス（３）１０７）＝Ｅ（ＨＥＸ）をフラッシュメモリ３へ出力する。それにより、制御装置２は、フラッシュメモリＥ番地にデータ信号１１のデータＭＥをライトする。タイムアウト監視回路６のカウンタ値が「１０」になる。
【０１２４】
Ｔ３８において、制御装置２は、ライトイネーブル信号９及びデータ信号１１をフラッシュメモリ３へ出力する。同時に、制御装置２は、アドレス信号１０（アドレス（０）１００〜アドレス（３）１０３）＝Ｆ（ＨＥＸ）を発行する。アドレス反転回路４は、アドレス識別フラグ５ａが「１」であるため、入力アドレス信号１０ａ（アドレス（０）１０４〜アドレス（３）１０７）＝Ｆ（ＨＥＸ）をフラッシュメモリ３へ出力する。それにより、制御装置２は、フラッシュメモリＦ番地にデータ信号１１のデータＭＦをライトする。タイムアウト監視回路６のカウンタ値が「１１」になる。全データのライトが完了する（ステップＳ２５）。
【０１２５】
完了により、制御装置２は、アドレス識別フラグ回路５へセット指示を発行する。制御装置２は、更新フラグ回路１５へリセット指示を発行する。制御装置２は、タイムアウト監視回路６へリセット指示を発行する。
【０１２６】
Ｔ３９において、アドレス識別フラグ５ａが「０」にリセットされる（ステップＳ２７）。更新フラグ１５ａが「０」にリセットされる（ステップＳ２８）。タイムアウト監視回路６が「００」にリセットされる。制御装置２は、セルフリセットがかかり、更新フラグ１５ａが「０」であることにより、新しいファームウェアのメインプログラムがリードされ、通常処理が起動する。
【０１２７】
本発明では、フラッシュメモリ内のブートローダを更新するとき、新たなブートローダを、既存のブートローダとは別の領域に書き込むことで、フラッシュメモリ内に必ず一つ以上の有効なブートローダが残るようにすることができる。それにより、ファームウェア更新中に障害が発生しても、障害発生のタイミングに依存することなく、有効なブートローダを用いてファームウェア更新を再実行することが可能となる。
【０１２８】
本発明では、高価なＬＳＩ等でない簡単な論理ゲートＩＣの追加のみで本発明のファームウエア更新回路を実現することができる。それにより、フラッシュメモリ内のファームウエア更新の信頼性を向上させることが可能となる。本発明では、一般的にフラッシュメモリの二重化で実現しているのと同等の信頼性を、上記のような少ないハードウェアで実現できており、低コストで高い信頼性を実現することが可能となる。
【０１２９】
本発明では、タイムアウト監視回路を設けたことでファームウェア更新の成功もしくは失敗を自動的に判別することが可能である。それにより、ファームウェア更新の際に正常終了確認のための人手介入が不要、すなわち、自動で行うことができる。
【０１３０】
本発明では、ブートローダのサイズを意識することなく、ファームウェア技術者がファームウェアを設計することが可能である。一般にブートローダが固定で且つフラッシュメモリの領域を大きく占有するような場合、ファームウェア技術者に設計上の制限を強いることになる。しかし、本発明では、ファームウェアのレビジョンアップに伴い、ブートローダやメインプログラムのサイズを可変にすることができるため、ファームウェア設計者は、設計時にサイズの制限を受けず、自由に設計出来る。また、アドレスの反転に関してはファームウェア設計者は全く意識する必要がない。
【０１３１】
本発明では、ファームウェア更新時に、一時的にブートローダを格納する領域が複数に見えるものの、ファームウェア更新終了時は一つになる。したがって、ブートローダを格納する領域がメインプログラムを格納する領域を圧迫することはない。また、ファームウェア更新時に、外部スイッチによる切替を行っておらず、システム運用者はファームウェア更新時に書き換え成功／失敗を意識せずに運用が可能である。
【０１３２】
本発明では、ファームウェア更新時には、ファームウェア運用時とは逆の反転したアドレスを用いて、一時的に、不揮発性メモリのトップ（アドレス）及びボトム（アドレス）のうちの少なくとも一方に有効なブートローダを残すことができる。その有効なブートローダを用いることで、ファームウェアの更新を再実行することができる。また、ファームウェアの更新終了後は、通常の状態に戻り、従来と同様にファームウェアの運用を行うことができる。
【０１３３】
本発明では、ブートローダを退避させる等のシーケンスは不要であり、簡単なハードウェア回路を追加することだけで書き換え処理を行うことができる。この場合、書き換え者（プロセッサ等）にインテリジェンスを持たせる必要はない。
【０１３４】
上記実施の形態では、アドレス反転回路４をインバータ、ＡＮＤ回路、ＯＲ回路で実現しているが、例えば、ＰＬＤ（プログラマブルロジックデバイス）のような集積回路で実現しても良い。このＰＬＤの電源をフラッシュメモリ３や制御装置２と分けることで、タイムアウト監視回路６のカウンタやアドレス識別フラグ回路５、更新フラグ回路１５を全てＰＬＤ内にまとめることが出来る。
【０１３５】
この場合、論理ゲートＩＣの組み合わせでアドレス反転回路４、タイムアウト監視回路６、アドレス識別フラグ回路５及び更新フラグ回路１５を実現する場合に比べて、部品点数を削減することができ、それにより故障率が削減され、信頼性が向上する。
【０１３６】
本発明は、例えばサーバ装置のようにファームウェアを搭載するコンピュータ装置（情報処理装置）に適用できる。特に、サーバの絶対数が多くファームウェア更新処理を多数行う必要があるブレードサーバ装置に適用することが好適である。また、サーバ装置に限らず、不揮発性メモリにファームウェアを格納し、外部装置と接続してファームウェアの更新を行う機能を有する全ての情報処理装置に適用が可能である。
【図面の簡単な説明】
【０１３７】
【図１】図１は、本発明のファームウエア更新回路を適用したコンピュータ装置の実施の形態の構成を示すブロック図である。
【図２】図２は、本発明のファームウエア更新回路の実施の形態におけるアドレス反転回路の構成例を示すブロック図である。
【図３Ａ】図３Ａは、図２に示すアドレス反転回路の真理値表である。
【図３Ｂ】図３Ｂは、図２に示すアドレス反転回路の真理値表である。
【図４】図４は、本発明のファームウエア更新回路を適用したコンピュータ装置の実施の形態の動作を示すフローチャートである。
【図５】図５は、各動作におけるフラッシュメモリの状態を示す概念図である。
【図６】図６は、各動作におけるフラッシュメモリの状態を示す概念図である。
【図７】図７は、本発明のファームウエア更新回路を適用したコンピュータ装置の実施の形態の動作における異常発生時の動作を示すフローチャートである。
【図８】図８は、異常発生時におけるフラッシュメモリの状態を示す概念図である。
【図９】図９は、異常発生時におけるフラッシュメモリの状態を示す概念図である。
【図１０】図１０は、本発明のファームウエア更新回路を適用したコンピュータ装置の実施の形態の動作を示すタイミングチャートである。
【図１１】図１１は、本発明のファームウエア更新回路を適用したコンピュータ装置の実施の形態の動作を示すタイミングチャートである。
【符号の説明】
【０１３８】
１    コンピュータ装置
１ａ    ファームウエア更新回路
２    制御装置
３    フラッシュメモリ
４    アドレス反転回路
５    アドレス識別フラグ回路
５ａ    アドレス識別フラグ
６    タイムアウト監視回路
７    ブートローダ
８    メインプログラム
１０    アドレス信号
１０ａ    入力アドレス信号
１１    データ信号
１２    ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）
１３    更新用ファームウェア
１４    ＬＡＮ
１５    更新フラグ回路
１５ａ    更新フラグ
４０    インバータ
４１〜４４    ＡＮＤ回路
４５    ＯＲ回路
１００、１０４    アドレス信号（０）
１０１、１０５    アドレス信号（１）
１０２、１０６    アドレス信号（２）
１０３、１０７    アドレス信号（３）
【図１】
2007193596.tif 000003
【図２】
2007193596.tif 000004
【図３Ａ】
2007193596.tif 000005
【図３Ｂ】
2007193596.tif 000006
【図４】
2007193596.tif 000007
【図５】
2007193596.tif 000008
【図６】
2007193596.tif 000009
【図７】
2007193596.tif 000010
【図８】
2007193596.tif 000011
【図９】
2007193596.tif 000012
【図１０】
2007193596.tif 000013
【図１１】
2007193596.tif 000014