(57)【特許請求の範囲】
【請求項１】
ファームウェアプログラムの一部であるメインプログラムに従って動作するＣＰＵと、当該メインプログラムを格納する不揮発性メモリと、当該メインプログラムを当該ＣＰＵが実行可能な状態に展開させる揮発性メモリと、書き換え可能な論理回路からなるハードウェアとを少なくとも備えるファームウェア被組込装置に、提供された新たなファームウェアを組み込むファームウェア組込方法において、
前記ＣＰＵが、既に展開されているファームウェアプログラムのメインプログラムにより、
前記揮発性メモリにおいて既に展開されている前記ファームウェアプログラムの格納領域以外の所定領域に、予め定められた態様で前記提供された新たなファームウェアプログラムを前記ＣＰＵが動作可能な形式で格納すると共に、前記ＣＰＵから前記揮発性メモリへ出力される読出信号を制御する特殊フラグを前記ハードウェアのレジスタに設定する格納ステップと、
前記ＣＰＵをリセットするリセットステップとを実行し、
前記ＣＰＵが、前記ファームウェアプログラムの一部であるブートプログラムにより、
前記リセットステップにてＣＰＵが再起動される際に、前記格納ステップにて格納された提供された新たな前記ファームウェアプログラムを起動する起動ステップを実行し、
前記ＣＰＵが、提供された新たな前記ファームウェアプログラムにより、
当該提供された新たなファームウェアプログラムの起動中に、当該提供された新たなファームウェアプログラムを前記不揮発性メモリに転送する転送ステップを実行し、
前記起動ステップにおいて前記ＣＰＵが再起動される際に、前記ハードウェアのレジスタに設定された前記特殊フラグの信号に基づき、前記ＣＰＵと前記揮発性メモリとを繋ぐ高速バスの間でアドレス切替により前記読出信号が制御されることを特徴とするファームウェア組込方法。
【請求項２】
請求項１に記載のファームウェア組込方法において、
前記リセットステップにてＣＰＵが再起動される際に、前記不揮発性メモリに格納されたブートプログラムに基づき動作するＣＰＵにより、前記特殊フラグに基づいて、前記不揮発性メモリに既に格納されているメインプログラムを前記揮発性メモリに展開する処理をスキップし、
当該スキップ後に前記特殊フラグの信号に基づく前記アドレス切替により、揮発性メモリに格納した新たなファームウェアプログラムをＣＰＵが読み出すように制御されることを特徴とするファームウェア組込方法。
【請求項３】
請求項１又は２に記載のファームウェア組込方法において、
前記転送ステップにて、前記ＣＰＵの空き時間に前記提供された新たなファームウェアプログラムを不揮発性メモリに転送する処理を行うことを特徴とするファームウェア組込方法。
【請求項４】
ファームウェアプログラムの一部であるメインプログラムに従って動作するＣＰＵと、当該メインプログラムを格納する不揮発性メモリと、当該メインプログラムを当該ＣＰＵが実行可能な状態に展開させる揮発性メモリと、書き換え可能な論理回路からなるハードウェアとを少なくとも備えるファームウェア被組込装置において、
前記ＣＰＵが、前記ファームウェアプログラムに含まれる前記メインプログラム及びブートプログラムを実行することにより実現される、
前記メインプログラムの起動中に、当該メインプログラムに係る前記ファームウェアを前記不揮発性メモリに転送する転送手段と、
前記揮発性メモリにおける、既に展開されているファームウェアプログラムの格納領域以外の所定領域に、予め定められた態様で、提供された新たなファームウェアプログラムを前記ＣＰＵが動作可能な形式で格納すると共に、前記ＣＰＵから前記揮発性メモリへ出力される読出信号を制御する特殊フラグを前記ハードウェアのレジスタに設定する格納手段と、
前記ＣＰＵをリセットするリセット手段とを備え、
前記ＣＰＵがリセットにより再起動される際に、前記格納手段にて格納された提供された新たな前記ファームウェアプログラムが起動され、
前記ＣＰＵが再起動される際に、前記ハードウェアのレジスタに設定された前記特殊フラグの信号に基づき、前記ＣＰＵと前記揮発性メモリとを繋ぐ高速バスの間でアドレス切替により前記読出信号が制御されることを特徴とするファームウェア被組込装置。
【請求項５】
ファームウェアプログラムの一部であるメインプログラムに従って動作するＣＰＵと、当該メインプログラムを格納する不揮発性メモリと、当該メインプログラムを当該ＣＰＵが実行可能な状態に展開させる揮発性メモリと、書き換え可能な論理回路からなるハードウェアとを少なくとも備えるファームウェア被組込装置に、提供された新たなファームウェアプログラムを組み込むように前記ＣＰＵを機能させ、前記メインプログラム及びブートプログラムを含むファームウェアプログラムにおいて、
前記ＣＰＵを、
前記メインプログラムの起動中に、当該メインプログラムに係る前記ファームウェアを前記不揮発性メモリに転送する転送手段、
前記揮発性メモリにおける、既に展開されている前記ファームウェアプログラムの格納領域以外の所定領域に、予め定められた態様で前記提供された新たなファームウェアプログラムを前記ＣＰＵが動作可能な形式で格納すると共に、前記ＣＰＵから前記揮発性メモリへ出力される読出信号を制御する特殊フラグを前記ハードウェアのレジスタに設定する格納手段、
前記ＣＰＵをリセットするリセット手段として機能させ、
前記ＣＰＵがリセットにより再起動される際に、前記格納手段にて格納された提供された新たな前記ファームウェアプログラムが起動され、
前記ＣＰＵが再起動される際に、前記ハードウェアのレジスタに設定された前記特殊フラグの信号に基づき、前記ＣＰＵと前記揮発性メモリとを繋ぐ高速バスの間でアドレス切替により前記読出信号が制御されることを特徴とするファームウェアプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、提供されるファームウェアをファームウェア被組込装置に組み込む方法に関し、特に、ファームウェアをロードしてからファームウェア被組込装置を起動するまでの時間を短縮するファームウェア組込方法等に関する。
【背景技術】
【０００２】
近年、装置の傾向として、多機能化とファームウェア処理の比率の増加に伴い、ファームウェアのプログラムサイズが膨張傾向にある。そのため、ファームウェアの更新に掛かる時間が増大している。それに伴い、開発時のデバックやフィールドにおけるファームウェア更新作業における負荷も増大しており、装置が起動するまでの時間を短縮できるファームウェアの新しい更新手順が望まれている。
【０００３】
ここで、ファームウェア被組込装置にファームウェアを組み込む場合の処理について説明する。図５は、提供される新たなファームウェアの組み込み対象となる従来のファームウェア被組込装置の構成図である。ＰＣ１０から外部ＩＦ１０１を介してロードされたファームウェアプログラムは、一旦アクセス速度が速い揮発性メモリ１３０に格納され、その後、不揮発性メモリ１２０のＰｒｏｇｒａｍ格納エリアに転送される。再起動後は、ＢＯＯＴプログラムにより、不揮発性メモリ１２０に転送された新たなメインプログラムが揮発性メモリ１３０のＰｒｏｇｒａｍエリアに展開されて、ＣＰＵ（プロセッサ）１１０の動作が行われる。
【０００４】
図６は、従来のファームウェアの組み込み処理のフローチャートである。まず、準備段階として、新たなファームウェアプログラムをファームウェア被組込装置へロード可能にするために、ＣＰＵ１１０とＰＣ１０を通信可能な状態にする（ステップＳ６０１）。ＰＣ１０からＣＰＵ１１０へ新たなファームウェアプログラムを転送する（ステップＳ６０２）。転送されたファームウェアプログラムを揮発性メモリ１３０のＤＩＳＫエリアに格納し（ステップＳ６０３）、不揮発性メモリ１２０のセクタイレースを行う（ステップＳ６０４）。新たなファームウェアプログラムを揮発性メモリ１３０から不揮発性メモリ１２０に転送し（ステップＳ６０５）、ＣＰＵ１１０の再起動を行う（ステップＳ６０６）。ＣＰＵ１１０が起動されると、ＢＯＯＴ処理にてＣＰＵ１１０及び周辺のハードウェアの設定が行われ（ステップＳ６０７）、不揮発性メモリ１２０に格納された新たなメインプログラムを揮発性メモリ１３０のＰｒｏｇｒａｍエリアに転送して、展開する（ステップＳ６０８）。ＣＰＵ１１０に対して不揮発性メモリ１２０から揮発性メモリ１３０のＰｒｏｇｒａｍエリアへのジャンプ命令がされ（ステップＳ６０９）、揮発性メモリ１３０のＰｒｏｇｒａｍエリアに展開された新たなプログラムによりファームウェア被組込装置の運用が開始される（ステップＳ６１０）。
【０００５】
以上が、一般的に行われる、ファームウェア被組込装置へのファームウェアの組込方法である。上記にも示したように、この手法では、プログラムサイズが膨張傾向にあるため、ファームウェアの更新に掛かる時間が増大しているという問題がある。
【０００６】
そこで、プログラムの書き換えを改善する技術として、特許文献１及び特許文献２に示す技術がある。特許文献１に示す技術は、画像形成の制御を行うＣＰＵと、ＣＰＵが前記画像形成の制御を実行するためのプログラムを格納するための、電気的に書き換えが可能で不揮発性の第１のメモリと、第１のメモリから読み出したプログラムを格納し、前記ＣＰＵの実行プログラムを格納する第２のメモリと、第１のメモリに格納するプログラム・データを外部から得るデータ入力手段と、データ入力手段から得た前記プログラム・データの全てを一時的に格納するデータ蓄積手段と、データ蓄積手段から読み出した前記プログラム・データに前記第１のメモリ内容を書き換える書き換え手段とを有するものであり、さらにデータ入力手段および書き換え手段の実行を操作する操作手段を有し、操作手段によって設定された日時に応じて書き換え手段の実行を制御する書き換え実行制御手段を有するものである。
【０００７】
また、特許文献２に示す技術は、通常処理を行いながらダウンロード処理を実施することを可能にする技術であり、ＥＰＲＯＭにはＢＯＯＴプログラム、運用プログラム、予備プログラムを格納する各プログラム領域および切替えフラグが設けられる。マイクロプロセッサは、ＲＯＭに格納されているプログラムに従って処理を実行し、内蔵するＲＡＭには、ＢＯＯＴプログラム及び運用プログラムを起動するために参照される割込みベクタを設けている。切替回路は、切替えフラグに基づくマイクロプロセッサからの切替え制御信号に応答して運用プログラム領域と予備プログラム領域のアドレスを交換する。ＢＯＯＴプログラムは、最新のプログラムをダウンロードするときは、割込みベクタをＢＯＯＴプログラム用に書き換えて予備プログラム領域にダウンロードすると共に、切替えフラグを反転し、一方、通常動作時は割込みベクタを運用プログラム用に書き換える。
【０００８】
さらに、不良ソフトウェアのインストールを抑止する方法として、特許文献３に示す技術がある。特許文献３に示す技術は、インストールの指示を受けると、プログラムの入力元のコンピュータからネットワークアドレスを得、自身が有するインストールの禁止されているコンピュータの一覧データの中に含まれているかをチェックし、含まれていればインストールをキャンセルし、含まれていなければインストールを続行し、ダウンロードされたプログラムをＲＡＭに書き込み、続いてこのプログラムを起動し、正常に起動しない場合は、そのコンピュータのネットワークアドレスを一覧データに追加し、正常に起動した場合はＲＡＭ上のプログラムを不揮発性メモリに書き込むという技術である。
【特許文献１】特開２００２−２４４８７６号公報
【特許文献２】特開２００５−３３２２２８号公報
【特許文献３】特開２００６−４８２６８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかしながら、特許文献１及び特許文献２に示す技術は、プログラムを装置に組み込む処理において、新たなプログラムを不揮発性メモリに書き込む際には時間を有効に利用できるが、プログラムを不揮発性メモリに書き込んだ後でなければ、新たなプログラムでの装置の起動を確認することができない。通常、プログラムを装置に組み込む場合、不揮発性メモリへのプログラムの書き込みに多くの時間を費やすため、プログラムを組み込む処理において、効果的に時間を短縮できないという課題を有する。
【００１０】
また、特許文献３に示す技術は、メインプログラムで制御する機能的なプログラム（アプリケーション等）が更新の対象であり、プログラムの起動方法や起動形態が、メインプログラム自体を起動する場合と大きく異なるため（例えば、メインプログラムの場合は、ＣＰＵがハード的に認識しているアドレス値に従ってプログラムを格納しなければならない等）、ファームウェアを組み込む際の時間短縮を実現できる技術ではない。
【００１１】
そこで、本発明は前記課題を解決するためになされたものであり、外部からロードした新たなファームウェアプログラムを揮発性メモリに直接実行可能な形式で格納して装置を起動させることで、ファームウェアの組み込み時間を短縮する、ファームウェア組込方法、ファームウェア組込装置、及び、ファームウェア組込プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１２】
本発明に係るファームウェア組込方法は、ファームウェアプログラムの一部であるメインプログラムに従って動作するＣＰＵと、当該メインプログラムを格納する不揮発性メモリと、当該メインプログラムを当該ＣＰＵが実行可能な状態に展開させる揮発性メモリと、書き換え可能な論理回路からなるハードウェアとを少なくとも備えるファームウェア被組込装置に、提供された新たなファームウェアを組み込むファームウェア組込方法において、前記ＣＰＵが、既に展開されているファームウェアプログラムのメインプログラムにより、前記揮発性メモリにおいて既に展開されている前記ファームウェアプログラムの格納領域以外の所定領域に、予め定められた態様で前記提供された新たなファームウェアプログラムを前記ＣＰＵが動作可能な形式で格納すると共に、前記ＣＰＵから前記揮発性メモリへ出力される読出信号を制御する特殊フラグを前記ハードウェアのレジスタに設定する格納ステップと、前記ＣＰＵをリセットするリセットステップとを実行し、前記ＣＰＵが、前記ファームウェアプログラムの一部であるブートプログラムにより、前記リセットステップにてＣＰＵが再起動される際に、前記格納ステップにて格納された提供された新たな前記ファームウェアプログラムを起動する起動ステップを実行し、前記ＣＰＵが、提供された新たな前記ファームウェアプログラムにより、当該提供された新たなファームウェアプログラムの起動中に、当該提供された新たなファームウェアプログラムを前記不揮発性メモリに転送する転送ステップを実行し、前記起動ステップにおいて前記ＣＰＵが再起動される際に、前記ハードウェアのレジスタに設定された前記特殊フラグの信号に基づき、前記ＣＰＵと前記揮発性メモリとを繋ぐ高速バスの間でアドレス切替により前記読出信号が制御されるものである。
【００１３】
このように、本発明においては、提供される新たなファームウェアプログラムをファームウェア被組込装置に組み込む際に、揮発性メモリに実行形式で直接格納するため、不揮発性メモリへの転送時間を省くことができ、提供された新たなファームウェアプログラムでファームウェア被組込装置を起動するまでの時間を短縮することができるという効果を奏する。具体的には、ファームウェアプログラム格納セクタを消去する処理、ファームウェアプログラムの書き込みを行う処理、書き込み内容のチェックする処理等を省くことで組み込みの処理時間を短縮することができる。
【００１４】
また、提供される新たなファームウェアプログラムは、ＣＰＵが動作可能な形式で揮発性メモリに格納されるため、既に不揮発性メモリに格納されている保存形式のメインプログラムを起動する場合のように、メインプログラムを揮発性メモリに展開する時間を省くことができるため、提供された新たなファームウェアプログラムでファームウェア被組込装置を起動するまでの時間をさらに短縮することができるという効果を奏する。具体的には、不揮発性メモリに格納されている保存形式のメインプログラムは圧縮されており、それを解凍してプログラムの先頭にジャンプする処理等を省くことで処理時間をさらに短縮することができる。
【００１５】
さらに、提供された新たなファームウェアプログラムを不揮発性メモリに格納することなく、直接揮発性メモリに、ＣＰＵが実行可能な形式で格納するため作業手順も少なく、簡単に実現することができ、作業時間を短縮することができると共に、作業効率を大幅に上げることが可能になるという効果を奏する。
【００１６】
さらにまた、提供された新たなファームウェアプログラムによるファームウェア被組込装置の起動が確認できるまでは、不揮発性メモリに格納されている現在のファームウェアプログラムに何ら影響を与えることがないため、例えば、組み込みの処理中に電源が落ちてしまったような場合であっても、ファームウェアプログラムを失って装置を起動できなくなるような問題が起こることはないという効果を奏する。
【００１８】
さらにまた、論理回路を書き換え可能であるハードウェアの論理回路に基づいて、ＣＰＵから揮発性メモリへ出力される読出信号を所定の値に設定し、リセット信号、及び、読出信号に基づいて、ＣＰＵと揮発性メモリとを繋ぐ高速バスの間で起動ステップにおけるＣＰＵの動作を制御するため、ＣＰＵがリセットされた際に通常通りのプログラム領域に命令をジャンプさせることで、物理的には、提供された新たなファームウェアプログラムが格納された領域にジャンプするように制御することができる。従って、ＣＰＵの動作を個別のプログラムにて制御する必要がなくなり、処理の手間を省くことができるという効果を奏する。
【００１９】
本発明に係るファームウェア組込方法は、前記リセットステップにてＣＰＵが再起動される際に、前記不揮発性メモリに格納されたブートプログラムに基づき動作するＣＰＵにより、前記特殊フラグに基づいて、前記不揮発性メモリに既に格納されているメインプログラムを前記揮発性メモリに展開する処理をスキップし、当該スキップ後に前記特殊フラグの信号に基づく前記アドレス切替により、揮発性メモリに格納した新たなファームウェアプログラムをＣＰＵが読み出すように制御されるものである。
【００２０】
このように、本発明においては、ハードウェアの所定の読出信号に基づいて、不揮発性メモリに格納されたブートプログラムが、同じく不揮発性メモリに保存形式で格納されているメインプログラムを揮発性メモリに展開する処理をスキップすることで、揮発性メモリに格納された、提供された新たなファームウェアプログラムにより直ちに装置が起動されるため、提供された新たなファームウェアプログラムによる装置の起動時間を短縮することができるという効果を奏する。
【００２１】
また、不揮発性メモリに保存形式で格納されたメインプログラムを揮発性メモリに展開する処理をスキップすることで、揮発性メモリに格納された提供された新たなファームウェアプログラムを消去してしまうようなことがなくなり、新たなファームウェアプログラムでの起動を正確で、確実に制御することができるという効果を奏する。
【００２２】
本発明に係るファームウェア組込方法は、前記転送ステップにて、前記ＣＰＵの空き時間に前記提供された新たなファームウェアプログラムを不揮発性メモリに転送する処理を行うものである。
【００２３】
このように、本発明においては、ＣＰＵの空き時間に提供された新たなファームウェアプログラムを不揮発性メモリに転送する処理を行うため、ＣＰＵを有効的に活用して、提供された新たなファームウェアプログラムを現在のファームウェアプログラムと入れ替えることができ、処理の効率性を上げることができるという効果を奏する。
【００２４】
また、提供された新たなファームウェアプログラムが揮発性メモリに格納されたままだと、電源を落とした際に消去されてしまうため、提供された新たなファームウェアプログラムの動作中にバックグランドで、その新たなファームウェアプログラムを揮発性メモリに転送することで、次回からの装置の起動を、提供された新たなファームウェアプログラムにより行うことができると共に、動作確認を行っている新たなファームウェアプログラムを、その動作中に転送処理することで、処理が効率化されて処理時間を短縮することができるという効果を奏する。
【００２５】
これまで、本発明を方法として示したが、所謂当業者であれば明らかであるように本発明を装置、及び、プログラムとして捉えることもできる。これら前記の発明の概要は、本発明に必須となる特徴を列挙したものではなく、これら複数の特徴のサブコンビネーションも発明となり得る。
【発明を実施するための最良の形態】
【００２６】
以下、本発明の実施の形態を説明する。本発明は多くの異なる形態で実施可能である。従って、本実施形態の記載内容のみで本発明を解釈すべきではない。また、本実施形態の全体を通して同じ要素には同じ符号を付けている。
【００２７】
以下の実施の形態では、主に方法について説明するが、所謂当業者であれば明らかな通り、本発明は装置、及び、コンピュータを動作させるためのプログラムとしても実施できる。また、本発明はハードウェア、ソフトウェア、または、ハードウェア及びソフトウェアの実施形態で実施可能である。プログラムは、ハードディスク、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、光記憶装置、または、磁気記憶装置等の任意のコンピュータ可読媒体に記録できる。さらに、プログラムはネットワークを介した他のコンピュータに記録することができる。
【００２８】
（本発明の第１の実施形態）
（１．概要）
以下、本実施形態に係るファームウェア組込方法の概要について説明する。本実施形態において、外部から提供され、これから動作確認を行う対象となるファームウェアプログラムを新たなファームウェアプログラムとし、既に組み込まれているファームウェアプログラムを現在のファームウェアプログラムと定義する。本実施形態では、上記従来技術の図５及び図６で説明したような、揮発性メモリ（ＷＯＲＫ  ＲＡＭ）１３０にロードされた新たなファームウェアプログラムを不揮発性メモリ（ＦＬＡＳＨ  ＲＯＭ）１２０に転送する処理を行わず、揮発性メモリ１３０の別領域に、ＣＰＵ（プロセッサ）１１０が実行できる形式で直接展開する。そして、再起動後は揮発性メモリ１３０に展開された新たなファームウェアプログラムの領域が、本来の揮発性メモリ１３０にファームウェアプログラムが展開される領域に変更されるように、ハードウェアにてアドレス変換制御を行う。
【００２９】
新たなファームウェアプログラムが揮発性メモリ１３０に展開されたら、ＣＰＵ１１０をリセットする。リセットによりＣＰＵ１１０が再起動され、ＢＯＯＴ処理が完了したら、不揮発性メモリ１２０に保存形式で格納されている現在のファームウェアプログラムを揮発性メモリ１３０へ展開する処理をスキップして、揮発性メモリ１３０における現在のファームウェアプログラムが展開されるべき領域にＣＰＵ１１０の命令をジャンプさせる。この時、上記で示したようにハードウェアにてアドレス変換制御がなされているため、提供された新たなファームウェアプログラムが展開されている領域が、現在のファームウェアプログラムが展開されている領域となっている。従って、提供された新たなファームウェアプログラムにＣＰＵ１１０の命令がジャンプされることになる。そして、提供された新たなファームウェアプログラムにより装置を動作させる。
【００３０】
その後、提供された新たなファームウェアプログラムが動作するバックグランドで、その動作している新たなファームウェアプログラムを不揮発性メモリ１２０に保存形式で転送する。この時、ＣＰＵの空き時間を利用することで、より効率的に転送処理を行うことができる。このような手法によりファームウェアの組み込みを行うことで、従来行っていた、不揮発性メモリ１２０からの現在のファームウェアプログラムの消去、提供された新たなファームウェアプログラムの不揮発性メモリ１２０への書き込み、チェック、起動時に不揮発性メモリ１２０から読み出した現在プログラムの揮発性メモリ１３０への展開等の処理を省略して、提供された新たなファームウェアプログラムによるファームウェア被組込装置の起動確認の作業時間を短縮することができる。
【００３１】
（２．装置のハードウェア構成）
図１は、提供されるファームウェアの組み込み対象となるファームウェア被組込装置のハードウェア構成図である。ファームウェア被組込装置１００は、ＰＣ１０との通信を可能にする外部ＩＦ１０１と、プログラムを解読し、それに従って演算処理を行うＣＰＵ１１０と、メインプログラム等を記録している不揮発性メモリ１２０と、実行するプログラムやデータを蓄える揮発性メモリ１３０と、論理回路を書き換え可能なハードウェアであるＦＰＧＡ１４０と、各ハードウェア間でやり取りするデータの制御を行うＬＳＩ１５０と、ＣＰＵ１１０と揮発性メモリ１３０間のデータ通信を高速で行う高速バス１６０と、ＣＰＵ１１０と各ハードウェア間のデータ通信を行うメインバス１７０とを備える。
【００３２】
揮発性メモリ１３０は、現在のファームウェアプログラム領域とは別に、提供される新たなファームウェアプログラムを格納する領域を備える構成となっている。それぞれのメインプログラムの領域には、メインプログラムを実行形式で展開するＰｒｏｇｒａｍエリア（または新プログラム格納エリア）、作業用のＷＯＲＫエリア、及び、メインプログラムの保存形式のファイルを格納するＤＩＳＫエリアとを備える。
【００３３】
不揮発性メモリ１２０は、運用面と予備面を備える構成となっている。運用面と予備面を備えることで、予備面を利用して新たなファームウェアプログラムの転送を効率よく行うことができる。運用面、予備面のそれぞれの領域には、ＢＯＯＴ  ｐｒｏｇｒａｍ、及び、Ｍａｉｎ  ｐｒｏｇｒａｍ領域を備えており、ＢＯＯＴ  ｐｒｏｇｒａｍ領域にはブートプログラムが格納され、Ｍａｉｎ  ｐｒｏｇｒａｍ領域には、メインプログラムが保存形式で格納されている。
ＦＰＧＡ１４０は、レジスタの最後の領域に特殊フラグ用の領域を備え、アドレス制御やＢＯＯＴプログラムの制御を行うことができる。
なお、不揮発性メモリ１２０は、運用面と予備面を分けた構成でなくてもよい。
【００３４】
（３．プログラムのモジュール構成と機能）
図２は、本実施形態に係るファームウェア組込方法を実現させるプログラムのモジュール構成図である。プログラムモジュールは、大きくダウンロード処理部２０１と起動処理部２０２と格納処理部２０３からなる。ダウンロード処理部２０１及び格納処理部２０３は、ファームウェアのメインプログラムに起因して起動され、起動処理部２０２は、ＢＯＯＴプログラムに起因して起動される処理部である。ダウンロード処理部２０１は、ファームウェア受信処理部２１０と、展開処理部２２０と、フラグ設定処理部２３０と、ＣＰＵリセット処理部２４０とを備え、起動処理部２０２は、フラグ読込処理部２５０と、ＰＧエリアジャンプ命令処理部２６０を備え、格納処理部２０３は、プログラム転送処理部２７０を備える。
ファームウェア受信処理部２１０は、ＰＣ１０からロードされた新たなファームウェアプログラムを受信する処理を行う。
【００３５】
なお、新たなファームウェアプログラムの提供は、ＰＣ１０からの提供に限定されない。例えば、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ等を読み込み可能なドライブからの提供でもよいし、ネットワークを介して提供されてもよい。いずれにしても提供される新たなファームウェアプログラムはこのファームウェア受信処理部２１０により受信される。
【００３６】
展開処理部２２０は、ファームウェア受信処理部２１０で受信された新たなファームウェアプログラムを、ＣＰＵ１１０が実行可能な形式で揮発性メモリ１３０の所定の領域（既に現在のファームウェアプログラムが展開されている領域以外の領域）に所定の態様（例えば、ＣＰＵ１１０がハード的に認識しているアドレス値等に従った態様）で展開する処理を行う。
【００３７】
フラグ設定処理部２３０は、展開処理部２２０が新たなファームウェアプログラムを展開した場合に、ＦＰＧＡ１４０のレジスタの最後の領域に備えられた特殊フラグ用の領域に、「新たなファームウェアプログラムを揮発性メモリ１３０に格納済み」を示すフラグ（１：ＯＮ）を設定する処理を行う。新たなファームウェアプログラムを格納していない場合は、このフラグの設定は行わない。
【００３８】
ＣＰＵリセット処理部２４０は、ＣＰＵ１１０をリセットして再起動する処理を行う。
【００３９】
フラグ読込処理部２５０は、フラグ設定処理部２３０が設定したＦＰＧＡ１４０の特殊フラグを読み込む処理を行う。特殊フラグがＯＮ（新たなファームウェアプログラム格納済み）の場合は、不揮発性メモリ１２０に保存形式で格納されている現在のファームウェアプログラムを揮発性メモリ１３０に展開する処理をスキップするようにＢＯＯＴプログラムによりＣＰＵ１１０が制御される。
【００４０】
ＰＧエリアジャンプ命令処理部２６０は、特殊フラグがＯＮの場合には、上述のように不揮発性メモリ１２０に格納されているメインプログラムを揮発性メモリ１３０に展開する処理をスキップして、ＣＰＵ１１０の処理を揮発性メモリ１３０のプログラムが格納されたエリアにジャンプさせる。特殊フラグがＯＦＦの場合には、不揮発性メモリ１２０に格納されているメインプログラムを揮発性メモリ１３０のプログラムエリアに転送し、ＣＰＵ１１０に対して不揮発性メモリ１３０のプログラムが格納されたエリアにジャンプ命令する。
後述する図４に示す論理回路のハード処理により、前記特殊フラグがＯＮの状態であれば、アドレス変換がなされ、ＣＰＵ１１０は現在のメインプログラムが格納されたエリアにジャンプするが、アドレス変換により物理的には新たなファームウェアプログラムが格納されたエリアにジャンプするようになる。
【００４１】
プログラム転送処理部２７０は、ＣＰＵ１１０が、提供された新たなファームウェアプログラムを実行すると、ＣＰＵ１１０の空き時間を利用して、揮発性メモリ１３０に提供されている新たなファームウェアプログラムを不揮発性メモリ１２０に転送して書き込む処理を行う。
【００４２】
（４．メインプログラム組込方法の処理動作）
図３は、本実施形態に係るメインプログラムの組み込み処理のフローチャートである。まず、新たなメインプログラムの組み込みの準備として、外部ＩＦ１０１を介してＣＰＵ１１０と外部端末（ＰＣ１０）が通信可能なコネクションを確立しておく。コネクションが確立されていれば、ＰＣ１０に用意されている新たなファームウェアプログラムのファイルをＣＰＵ１１０にロードし、揮発性メモリ１３０のＤＩＳＫエリアに格納する（ステップＳ３０１）。ＰＣ１０から新たなファームウェアプログラムファイルの全データの転送が終了し、ファイルに異常がないことが確認されると、そのデータをＣＰＵ１１０が実行可能なプログラム形式に変換して、揮発性メモリ１３０の新プログラム格納エリアに展開する（ステップＳ３０２）。
【００４３】
ここで、ＣＰＵ１１０が実行可能なプログラム形式について説明する。ＰＣ１０からロードした新たなファームウェアプログラムは不揮発性メモリ１２０に格納して運用することを前提とした形式になっている。ファームウェアプログラムを不揮発性メモリ１２０に格納した通常の運用では、不揮発性メモリ１２０上ではメインプログラムが圧縮された状態で格納されており、その圧縮されたメインプログラムのファイルを揮発性メモリ１３０のＰｒｏｇｒａｍエリアに解凍、展開して、展開されたプログラムの先頭番地にＣＰＵ１１０の処理がジャンプされてメインプログラムの動作を始める。このように、解凍及び展開処理されたプログラム形式を、ＣＰＵ１１０が実行可能なプログラム形式とする。
【００４４】
新たなファームウェアプログラムが新プログラム格納エリアに格納されたら、ＦＰＧＡ１４０のレジスタの特殊フラグ領域に「１：ＯＮ」をセットする（ステップＳ３０３）。この特殊フラグは、「新たなファームウェアプログラムを揮発性メモリ１３０に格納済み」であることを示すフラグであり、通常は「０：ＯＦＦ」がセットされている。特殊フラグ領域は、ＣＰＵ１１０のリセット後にチェックするため、ＣＰＵ１１０のリセット信号をレジスタのリセット信号に接続しない構成とすることで、ＣＰＵ１１０のリセットで特殊フラグが初期化されないようにする。特殊フラグがセットされたら、ＣＰＵ１１０のリセット処理を行う（ステップＳ３０４）。ここでのリセット処理は、ＦＰＧＡ１４０のレジスタによる制御で行われ、ＣＰＵ１１０内部の初期化及び再起動のみが行われ、周辺のハードウェア（ＦＰＧＡ１４０、メモリ等）の初期化は発生しない。
【００４５】
次に、ＣＰＵ１１０のリセット後の起動時には、ステップＳ３０５のハード処理（揮発性メモリ１３０の特殊フラグによるアドレス制御）が行われる。このステップＳ３０５の処理について以下に詳細に説明する。
【００４６】
図４は、本実施形態におけるアドレス制御の処理を示す図である。図４（ａ）は、高速バス（ＡＤ０〜ＡＤ２３）１６０のＡＤ２３の信号線とＦＰＧＡ１４０のレジスタの特殊フラグの信号線ＡＤ＿ＳＥＬとの論理回路図である。図に示すように、ＣＰＵリセット信号が「０」から「１」に変化する時のＦＰＧＡ１４０の特殊フラグの値をＡＤ＿ＳＥＬ信号として出力することでアドレスの制御を行う構成となっている。図４（ｂ）は、特殊フラグの値と図４（ａ）の論理回路における出力結果との関係を示す表である。表から、特殊フラグの値に応じて論理回路の出力結果が制御されていることがわかる。この出力結果により、揮発性メモリ１２０のアドレスの最上位ビットの値を制御する。つまり、アドレスの最上位ビットが「０」の場合は、アドレス番地は「０ｘ００００００」であり、アドレスの最上位ビットが「１」の場合は、アドレス番地は「０ｘ８０００００」となる。図４（ｃ）は、特殊フラグが０の場合と１の場合の揮発性メモリ１２０のアドレスマップである。特殊フラグが「０」（通常時）の場合、アドレスの最上位ビットが「０」となり、アドレス番地は「０ｘ００００００」である。しかし、特殊フラグが「１」（新しいファームウェアプログラムが揮発性メモリ１３０に格納されている）の場合、アドレスの最上位ビットが「１」となり、アドレス番地は「０ｘ８０００００」となる。つまり、物理的にアドレス空間が入れ替わり、ＣＰＵ１１０が処理をジャンプした先にあるプログラムを選択的に決定することができる。従って、特殊フラグが１の場合には、ＣＰＵ１１０は、通常のＰｒｏｇｒａｍエリアにアクセスしているが、物理的には新プログラム格納エリアにアクセスすることになる。
【００４７】
図３に戻って、上記ステップＳ３０５のハード処理によりアドレス空間が入れ替えられると、ステップＳ３０６以降の処理が行われる。ＣＰＵ１１０は、再起動後に不揮発性メモリ１２０に格納されているＢＯＯＴプログラムに処理をジャンプし、ＢＯＯＴ処理としてＣＰＵ１１０の内部パラメータ等の初期設定を行う（ステップＳ３０６）。ＣＰＵ１１０は、ＢＯＯＴプログラムに従いＦＰＧＡ１４０にレジスタアクセスを行い、特殊フラグを確認する。（ステップＳ３０７）、特殊フラグが「０」の場合は、ステップＳ３０８からステップＳ３１０の処理を行う。このステップＳ３０８からステップＳ３１０の処理は、図６に示した従来の処理（ステップＳ６０８からステップＳ６１０）と同じであるため、説明は省略する。特殊フラグが「１」の場合は、現在のファームウェアプログラムを揮発性メモリ１３０に展開する処理をスキップして、次のステップＳ３１１の処理を行う。ステップＳ３１１では、ＣＰＵ１１０の処理を揮発性メモリ１３０のｐｒｏｇｒａｍエリアのプログラム先頭番地にジャンプさせる。揮発性メモリ１３０のｐｒｏｇｒａｍエリアに展開された、新たなファームウェアプログラムにて装置の起動が開始され（ステップＳ３１２）、装置起動を完了する（ステップＳ３１３）。新たなファームウェアプログラムで装置を起動後、通常運用のバックグランドで揮発性メモリ１３０のＤＩＳＫエリア１に格納した新たなファームウェアプログラムのプログラムファイルから不揮発性メモリ１２０のＭａｉｎ  ｐｒｏｇｒａｍ＃１に転送する部分を抽出し、抽出した部分を不揮発性メモリ１２０のＭａｉｎ  ｐｒｏｇｒａｍ＃１に転送して格納する（ステップＳ３１４）。
【００４８】
不揮発性メモリ１２０への新たなファームウェアプログラムの転送が完了すると、次回以降の装置の起動は、通常の処理により新たなファームウェアプログラムが起動されるようになる。以上がファームウェアの組み込み処理の動作である。
【００４９】
このように、本実施形態においては、不揮発性メモリ１２０に格納されている現在のファームウェアプログラムを消去する処理、外部からロードされた新たなファームウェアプログラムを不揮発性メモリ１２０に書き込む処理、そのファームウェアプログラムをチェックする処理、不揮発性メモリ１２０に格納されている現在のファームウェアプログラムを揮発性メモリ１３０に展開する処理等を省略することで、時間を有効に活用することができ、新たなファームウェアプログラムによる装置の起動を行うまでの時間を短縮することができる。
【００５０】
以上の前記各実施形態により本発明を説明したが、本発明の技術的範囲は実施形態に記載の範囲には限定されず、これら各実施形態に多様な変更又は改良を加えることが可能である。そして、かような変更又は改良を加えた実施の形態も本発明の技術的範囲に含まれる。このことは、特許請求の範囲及び課題を解決する手段からも明らかなことである。
【実施例】
【００５１】
上記実施形態によるファームウェア組込方法で実験を行った結果を以下の表に示す。
【表１】
0004973472.tif 000002
【００５２】
ファームウェアプログラムファイルサイズが圧縮時３Ｍｂｙｔｅ、解凍時７Ｍｂｙｔｅであるファームウェアプログラムを、バス速度が６６ＭＨｚのＳＭＤ−Ｂ装置に組み込む処理を行った。表１に示すように、ファームウェアプログラムファイルのロードから装置の起動までの時間が、従来に比べて２〜４分程度短縮されていることがわかる。１装置に１回のファームウェアの組み込みに対して２〜４分程度の短縮が可能となれば、多数の装置に対してファームウェアを組み込む処理を行う場合や、デバッグで頻繁にファームウェアを差し替える必要がある場合には非常に効果的な方法であると言える。また、実現方法が簡単であるにも関わらず、非常に効果的な手法であるため、今後の装置開発においても十分有効的な手法であると言える。
【図面の簡単な説明】
【００５３】
【図１】提供されるファームウェアプログラムの組み込み対象となる装置のハードウェア構成図である。
【図２】第１の実施形態に係るファームウェア組込方法を実現させるプログラムのモジュール構成図である。
【図３】第１の実施形態に係るファームウェアの組み込み処理のフローチャートである。
【図４】第１の実施形態におけるアドレス制御の処理を示す図である。
【図５】提供されるファームウェアプログラムの組み込み対象となる従来の装置の構成図である。
【図６】従来のファームウェアの組み込み処理のフローチャートである。
【符号の説明】
【００５４】
１０  ＰＣ
１００  装置
１０１  外部ＩＦ
１１０  ＣＰＵ
１２０  不揮発性メモリ
１３０  揮発性メモリ
１４０  ＦＰＧＡ
１５０  ＬＳＩ
１６０  高速バス
１７０  メインバス
【図１】
0004973472.tif 000003
【図２】
0004973472.tif 000004
【図３】
0004973472.tif 000005
【図４】
0004973472.tif 000006
【図５】
0004973472.tif 000007
【図６】
0004973472.tif 000008