以下、図面を参照して本発明の実施形態の一例を詳細に説明する。図1には、本実施形態に係る印刷システム10が示されている。印刷システム10は、クライアント端末12、画像形成システム14および遠隔メンテナンス装置16を含み、これらはネットワーク18を介して互いに接続されている。
印刷システム10では、画像形成システム14に対し、利用者がクライアント端末12からオンラインで印刷を指示可能とされている。クライアント端末12はパーソナル・コンピュータ(Personal Computer)、或いは携帯型の電子機器(例えばタブレット端末やスマートフォン等の情報処理機能を備えた電子機器)等を含んでいる。
クライアント端末12には、任意のOS(Operating System)および原稿作成に利用可能なアプリケーション・プログラムがインストールされている。本実施形態において、利用者はクライアント端末12を操作して所望のアプリケーション・プログラムを起動し、原稿作成のための種々の操作を行うことで印刷対象の原稿を作成する。原稿の作成が完了すると、利用者は、原稿の印刷を指示する操作を行う。利用者によってこの操作が行われると、原稿をページ記述言語(PDL:Page Description Language)で記述した印刷データが、クライアント端末12からネットワーク18を介して画像形成システム14へ送信される。
画像形成システム14はコントローラ20および画像形成装置22を含んでいる。コントローラ20は、CPU24、メモリ26、記憶部28、複数の通信I/F(InterFace)カード30および通信I/F部32(図2参照)を含み、これらはバス34を介して互いに接続されている。通信I/F部32は通信線を介してネットワーク18に接続されており、ネットワーク18経由でのコントローラ20とクライアント端末12または遠隔メンテナンス装置16との通信を制御する。また、通信I/Fカード30は、通信線35を介して画像形成装置22(の後述する画像処理部64)に接続されており、バス34経由でCPU24等と通信を行うと共に、通信線35経由で画像形成装置22(の画像処理部64)と通信を行う。
記憶部28はHDD(Hard Disk Drive)またはフラッシュメモリ等の不揮発性の記憶媒体によって実現される。図2に示すように、記憶部28は画像処理プログラム36、FPGA構成情報更新プログラム38および画像処理部FPGA構成情報更新プログラム40を各々記憶している。
CPU24は、画像処理プログラム36を実行することで、クライアント端末12から受信した印刷データを解釈し、印刷データに対して予め設定した画像処理を行った後に、ページ単位で各色成分(例えばC,M,Y,Kおよびその他の特殊色)毎のラスタイメージデータ(ビットマップ形式の印刷用画像データ)へ変換する処理を行う。なお、CPU24が行う上記の画像処理としては公知の様々な画像処理を適用可能であり、例えば解像度変換処理などが挙げられる。またCPU24は、印刷データを中間データへ一旦変換し、画像処理(例えば、原稿の各頁に含まれる画像要素の種類毎に最適化した画像処理)を行った後に、ビットマップ形式の印刷用画像データへ変換する処理を行うようにしてもよい。
なお、FPGA構成情報更新プログラム38はCPU24によってFPGA構成情報更新処理を行うためのプログラムであり、画像処理部FPGA構成情報更新プログラム40はCPU24によって画像処理部FPGA構成情報更新処理を行うためのプログラムであるが、これらの処理については後述する。
個々の通信I/Fカード30は、CPU42、メモリ44、記憶部46、FPGA(Field Programmable Gate Array)48およびフラッシュROM(Read-Only Memory)50を含み、これらはバス52を介して互いに接続されている。個々の通信I/Fカード30のCPU42は通信線43を介して相互に接続されており、個々の通信I/Fカード30のCPU42は、通信線43を介して相互にローカル通信(例えばUART/Local Net等)を行うことが可能とされている。
記憶部46はHDDまたはフラッシュメモリ等の不揮発性の記憶媒体によって実現される。記憶部46はFPGA更新プログラム54およびリカバリプログラム56を各々記憶している。FPGA更新プログラム54はCPU42によってFPGA更新処理を行うためのプログラムであり、リカバリプログラム56はCPU42によってリカバリ処理を行うためのプログラムであるが、これらの処理については後述する。
フラッシュROM50は、FPGA48による回路の形成に使用されるFPGA構成情報58を記憶している。本実施形態では、FPGA48による回路の形成にFPGA構成情報58を使用することで、FPGA構成情報58に応じた構成の回路として、バス34経由での通信I/Fカード30とCPU24等との通信を制御するバスI/F回路60、および、通信線35経由での通信I/Fカード30と画像形成装置22(の画像処理部64)との通信を制御する画像形成装置I/F回路62がFPGA48に形成される。
なお、本実施形態では、FPGA更新プログラム54を記憶する記憶部46と、FPGA構成情報58を記憶するフラッシュROM50と、を別に設けた態様を説明するが、これに限定されるものではなく、FPGA更新プログラム54及びFPGA構成情報58は同一の記憶部(フラッシュROM等)に記憶してもよい。
図1に示すように、画像形成装置22は画像処理部64および画像形成部66を含んでおり、画像処理部64と画像形成部66とは通信線86を介して接続されている。
図3に示すように、画像処理部64は、CPU68、メモリ70、記憶部72、FPGA74、フラッシュROM76、コンフィグ回路78およびNVM(Non-volatile memory)80を含み、これらはバス82を介して互いに接続されている。記憶部72はHDDまたはフラッシュメモリ等の不揮発性の記憶媒体によって実現され、NVM80はEEPROM(Electrically Erasable Programmable Read-Only Memory)等で実現される。記憶部72はFPGA更新プログラム84を記憶している。FPGA更新プログラム84はCPU68によってFPGA更新処理を行うためのプログラムであるが、この処理については後述する。
フラッシュROM76には、FPGA74による回路の形成に使用されるFPGA構成情報を記憶するための記憶領域として、領域A、領域BおよびWP(Write Protect)領域の3つの記憶領域が各々設けられている。WP領域には、画像形成装置22の工場出荷時に、エラーを含まずFPGA74に適正に回路が形成されることが確認済みのFPGA構成情報(以下、この情報を初期構成情報という)が予め書き込まれている。また、領域Aおよび領域Bについては、後述するFPGA更新処理(図13A,図13B)によってFPGA構成情報が書き込まれる。
本実施形態では、フラッシュROM76の記憶領域に記憶されたFPGA構成情報をFPGA74による回路の形成に使用することで、FPGA構成情報に応じた構成の回路として、通信線35経由でのコントローラ20の通信I/Fカード30と画像処理部64との通信を制御するコントローラI/F回路88、および、コントローラ20から受信した印刷画像データに対して予め設定された画像処理を行うと共に、通信線86経由での画像処理部64と画像形成部66との通信を制御する画像処理回路部90がFPGA74に形成される。
なお、画像処理回路部90が行う画像処理としては、ビットマップ形式の印刷用画像データに対するスクリーン処理や、多次元ルックアップテーブルを用いた色変換等が挙げられる。但し、これらの画像処理の一部は画像処理部64のCPU68が行うようにしてもよい。
図4に示すように、NVM80には、MODEフラグ、WRITEプロテクトフラグおよびFPGA READフラグの3種類のフラグの記憶領域が各々設けられている。これらのフラグはCPU68によって設定されるが、これらのフラグの詳細については後述する。また、コンフィグ回路78は、NVM80に記憶されている各フラグの値に基づいて、フラッシュROM76に設けられた3つの記憶領域の中からFPGA構成情報を読み出す記憶領域を選択し、選択した記憶領域から読み出したFPGA構成情報をFPGA74へ出力する。
画像形成部66は、画像処理部64から受信した印刷用画像データに基づき記録用紙に印刷対象の原稿の画像を印刷する。画像形成部66としては、例えば、電子写真プロセスによりフルカラーのトナー像を形成し、記録用紙に転写することで、記録用紙にカラー画像を印刷する構成を採用してもよい。但し、これに限定されるものではなく、例えば感熱式や熱転写式、インクジェット式、或いはその他の印刷方式で普通紙や感熱紙上に画像を印刷する各種の構成を採用可能である。
また、遠隔メンテナンス装置16は記憶部92を備えており、記憶部92には、コントローラ20の通信I/Fカード30に設けられたFPGA48や、画像形成装置22の画像処理部64に設けられたFPGA74が回路の形成に使用するFPGA構成情報が更新された(新バージョンがリリースされた)場合に、更新されたFPGA構成情報(以下、「更新用のFPGA構成情報」という)が記憶される。遠隔メンテナンス装置16は、オペレータから指示されると、ネットワーク18経由でコントローラ20と通信を行うことで、記憶部92に記憶された更新用のFPGA構成情報(新バージョンのFPGA構成情報)をコントローラ20へ配信する処理を行う。
次に本実施形態の作用を説明する。構成情報に応じた構成の回路を形成するFPGA等の回路形成デバイスが搭載された電子機器における前記構成情報の更新は、従来、電子機器の稼働を停止させた状態で、サービスエンジニアが治具等を用い、フラッシュROM等に書き込まれた構成情報を書き替えることで実施されていた。一方、電子機器の稼働停止期間の短縮や、構成情報の更新に要する手間の削減等を目的として、更新用の構成情報をサーバ等の外部からダウンロードにより取得し、フラッシュROM等に書き込まれた構成情報を自動的に書き替えることで構成情報を更新する方式も一般的になってきている。
但し、構成情報を自動的に更新する方式は、例えば構成情報を更新している処理の途中で電子機器の電源がオフされる可能性もある。このため、例えば構成情報にエラーが重畳したり、構成情報の書き替え途中での電源オフ等により、構成情報の更新に失敗するおそれがある。
そして、通信機能を実現する回路が回路形成デバイスに形成され、この通信機能を利用して構成情報を取得する構成である場合、構成情報の更新に失敗すると、回路形成デバイスに形成された回路によって実現される通信機能が停止して外部と通信不能になり、外部から構成情報を再度受信して構成情報の更新を再度試行することが不可能な状態に陥る。この場合、回路形成デバイスが搭載された基板の交換等の現場での作業が必要になる。
本実施形態に係る印刷システム10では、コントローラ20の通信I/Fカード30に設けられているFPGA48にバスI/F回路60が形成され、通信I/Fカード30はバスI/F回路60を通じて更新用のFPGA構成情報58を受信する構成となっている。このため、或る通信I/Fカード30において、フラッシュROM50に記憶されるFPGA構成情報58の更新に失敗すると、当該通信I/Fカード30はバスI/F回路60経由で外部と通信できない状態に陥り、更新用のFPGA構成情報をバスI/F回路60経由で再度受信することができなくなる。
また、本実施形態に係る印刷システム10では、画像形成装置22の画像処理部64に設けられているFPGA74にコントローラI/F回路88が形成され、画像処理部64はコントローラI/F回路88を通じて更新用のFPGA構成情報を受信する構成となっている。このため、フラッシュROM76に記憶されるFPGA構成情報の更新に失敗すると、画像処理部64はコントローラI/F回路88経由でコントローラ20と通信できない状態に陥り、更新用のFPGA構成情報をコントローラI/F回路88で再度受信することができなくなる。
このため、本実施形態では、或る通信I/Fカード30でFPGA構成情報の更新に失敗した場合には、他の通信I/Fカード30から通信線43経由で現行バージョンのFPGA構成情報を転送し、現行バージョンのFPGA構成情報によってFPGA48を再構成させることで、FPGA構成情報の更新に失敗した通信I/Fカード30を復旧させる。また、画像処理部64でFPGA構成情報の更新に失敗した場合には、フラッシュROM76の別の構成情報記憶領域に記憶されている現行バージョンのFPGA構成情報によってFPGA74を再構成させることで、画像処理部64を復旧させる。
以下、コントローラ20の通信I/Fカード30のフラッシュROM50に記憶されているFPGA構成情報58の更新について、図5〜図10を参照して説明する。コントローラ20は、通信I/Fカード30のFPGA48の再構成(回路形成)に使用されるFPGA構成情報58の更新を指示する情報を遠隔メンテナンス装置16から受信すると、CPU24によってFPGA構成情報更新プログラム38が実行されることで、図5に示すFPGA構成情報更新処理を行う。
FPGA構成情報更新処理のステップ100において、コントローラ20のCPU24は、コントローラ20に設けられている個々の通信I/Fカード30を識別するために、コントローラ20に設けられている全ての通信I/Fカード30に互いに異なるIDを割り振る。なお、以下では、通信I/Fカード30の総数が2、個々の通信I/Fカード30にID=0またはID=1が割り振られたものとして説明を続ける。
次のステップ102において、コントローラ20のCPU24は、通信I/Fカード30のFPGA48の再構成(回路形成)に使用するための更新用のFPGA構成情報を遠隔メンテナンス装置16からネットワーク18経由でダウンロードしてメモリ26に一時記憶させた後、メモリ26に一時記憶させた更新用のFPGA構成情報をバス34経由でID=0の通信I/Fカード30へ転送する。詳細は後述するが、通信I/Fカード30のCPU42は、図9に示すように、コントローラ20のCPU24から更新用のFPGA構成情報が転送されると、転送された更新用のFPGA構成情報をメモリ44に一旦記憶した後に、フラッシュROM50にそれ迄記憶されていたFPGA構成情報に上書きして書き込み、書き込み完了をコントローラ20のCPU24へ通知するFPGA更新処理(図6)を行う。
なお、図5は、遠隔メンテナンス装置16から更新用のFPGA構成情報をダウンロードすると、ダウンロードした更新用のFPGA構成情報を通信I/Fカード30へ直ちに転送する態様を示しているが、本発明はこれに限定されるものではない。例えば、コントローラ20のCPU24は、ダウンロードした更新用のFPGA構成情報を一旦記憶部28へ記憶しておき、予め設定された状況(例えば、クライアント端末12から印刷データを受信しておらず、ID=0の通信I/Fカード30が通信を行っていない状況、或いは画像形成システム14の利用頻度が閾値以下に低下する時間帯に入った状況等)になったタイミングで、更新用のFPGA構成情報を記憶部28から読み出して通信I/Fカード30へ転送するようにしてもよい。
ステップ104において、コントローラ20のCPU24は、ID=0の通信I/Fカード30から更新用のFPGA構成情報の書き込み完了が通知されると、ID=0の通信I/Fカード30を再起動させる。なお、ステップ104における再起動の対象は、コントローラ20全体としてもよい。ID=0の通信I/Fカード30では、ステップ104の再起動により、フラッシュROM50に書き込まれた更新用のFPGA構成情報が読み出され、FPGA48の再構成(回路形成)に使用される。これにより、FPGA48には、更新用のFPGA構成情報に応じた構成の回路(例えばバスI/F回路60および画像形成装置I/F回路62)が形成される。
ID=0の通信I/Fカード30の再起動が完了すると、ステップ106において、コントローラ20のCPU24は、ID=0の通信I/Fカード30とのバス34経由の通信が正常に行えるか否かをチェックする。なお、このチェックはFPGA48に形成されたバスI/F回路60により実現される通信機能が正常に機能しているか否かのチェックであるが、本実施形態では、画像形成装置22との通信を行うための画像形成装置I/F回路62もFPGA48に形成されるので、画像形成装置I/F回路62によって実現される通信機能についても正常か否かを併せてチェックするようにしてもよい。次のステップ108において、コントローラ20のCPU24は、ステップ106における通信チェックでエラーが検出されなかったか否か判定する。
ステップ106の通信チェックでエラーが検出された場合は、ステップ108の判定が否定されてステップ110へ移行する。この場合、ID=0の通信I/Fカード30とバス34経由で正常に通信できない状態となっているので、ID=0の通信I/Fカード30のFPGA48には何らかの理由で正常に回路が形成されていない可能性が高い。このため、ステップ110において、コントローラ20のCPU24は、FPGA48への更新用のFPGA構成情報の書込回数N(初期値=0)を1だけインクリメントし、「更新失敗」の情報を遠隔メンテナンス装置16へ送信する。なお、「更新失敗」の情報は、例えばコントローラ20に設けられた表示部に出力する(表示部に表示させる)ようにしてもよい。
次のステップ112において、コントローラ20のCPU24は、書込回数Nの値が3よりも大きいか否か判定する。ステップ112の判定が否定された場合はステップ114へ移行し、ID=1の通信I/Fカード30のCPU42に対し、リカバリ処理1の実行を指示する。詳細は後述するが、図10に示すように、ID=1の通信I/Fカード30のCPU42は、自カード30のフラッシュROM50に記憶されている現行バージョンのFPGA構成情報、すなわち自カード30が正常に動作していることで、エラー等が含まれていないことが確認できているFPGA構成情報を通信線43経由でID=0の通信I/Fカード30へ転送することで、ID=0の通信I/Fカード30のフラッシュROM50に記憶されている新バージョンのFPGA構成情報を、現行バージョンのFPGA構成情報に書き戻させるリカバリ処理1(図7)を行う。ステップ114の処理を行うとステップ104に戻り、ステップ104以降を繰り返す。
また、ステップ106の通信チェックでエラーが検出されなかった場合は、ステップ108の判定が肯定されてステップ118へ移行し、ステップ118において、コントローラ20のCPU24は、ID=0の通信I/Fカード30のFPGA48に形成された回路のバージョンをチェックする。FPGA48は、回路形成に使用したFPGA構成情報のバージョンを表す情報を、FPGA48の外部から参照可能な内蔵レジスタに設定する。このため、上記のバージョンチェックは、FPGA48の内蔵レジスタに設定された情報を参照し、ID=0の通信I/Fカード30へ転送した更新用のFPGA構成情報のバージョンと照合することで行う。
次のステップ120において、コントローラ20のCPU24は、ステップ118におけるバージョンチェックにおいて、FPGA48に形成された回路のバージョンが更新されていたか否か判定する。ステップ120の判定が肯定された場合は、ID=0の通信I/Fカード30とバス34経由で正常に通信できており、FPGA48に形成された回路のバージョンが更新されているので、ID=0の通信I/Fカード30についてのFPGA構成情報の更新は成功したと判断される。このため、ステップ120の判定が肯定された場合はステップ122へ移行する。
一方、ステップ120の判定が否定される場合としては、ID=1の通信I/Fカード30のCPU42によるリカバリ処理1によって、ID=0の通信I/Fカード30のフラッシュROM50に記憶されている新バージョンのFPGA構成情報が現行バージョンのFPGA構成情報に書き戻された場合が挙げられる。また、何らかの原因により、ID=0の通信I/Fカード30のFPGA48に、現行バージョンのFPGA構成情報に応じた回路が形成された場合も挙げられる。何れの場合も、ID=0の通信I/Fカード30についてのFPGA構成情報の更新は失敗したと判断されるので、ステップ120の判定が否定された場合はメモリ26に一時記憶している更新用のFPGA構成情報を消去してステップ121へ移行し、ステップ121において、コントローラ20のCPU24は、図示しない表示装置上でエラー表示を行い、FPGA構成情報の更新が失敗したことを通知する。ステップ121の処理を行うとステップ102に戻り、ステップ102以降の処理を繰り返す。
これにより、更新用のFPGA構成情報のダウンロード、ID=0の通信I/Fカード30のフラッシュROM50への更新用のFPGA構成情報の書き込み、ID=0の通信I/Fカード30の再起動、通信チェックの各処理が再度行われる。各処理の再実行によりステップ108,120の判定が各々肯定された場合はステップ122へ移行する。
また、通信チェックでエラーが検出された場合は、上記各処理に加えて、ID=0の通信I/Fカード30のフラッシュROM50に記憶されている新バージョンのFPGA構成情報を現行バージョンのFPGA構成情報に書き戻す処理も行われる。そして、上記各処理にFPGA構成情報の書き戻しを加えた一連の処理を3回繰り返しても通信チェックでエラーが検出される場合は、ステップ112の判定が肯定されてステップ116へ移行する。この場合、ID=0の通信I/Fカード30のFPGA構成情報の更新が成功しない原因としては、ID=0の通信I/Fカード30の基板の故障や、遠隔メンテナンス装置16の記憶部92に記憶されている更新用のFPGA構成情報の不良等が考えられるため、ステップ116では上記の原因を遠隔メンテナンス装置16へ通知するエラー処理を行い、FPGA構成情報更新処理を終了する。
ID=0の通信I/Fカード30についてのFPGA構成情報の更新に成功した場合、ステップ122において、コントローラ20のCPU24は、コントローラ20に設けられている通信I/Fカード30のうち、FPGA構成情報が未更新の通信I/Fカード30を処理対象として認識する。ここでは、コントローラ20に設けられている通信I/Fカード30の総数が2の場合を説明しているので、ステップ122ではID=1の通信I/Fカード30が処理対象として認識される。
次のステップ124において、コントローラ20のCPU24は、ステップ122で処理対象と認識した通信I/Fカード30のCPU42に対し、フラッシュROM50に記憶されているFPGA構成情報のバージョンを問い合わせ、処理対象の通信I/Fカード30のCPU42からの応答に含まれるFPGA構成情報のバージョンを更新用のFPGA構成情報のバージョンと照合することで、処理対象の通信I/Fカード30のフラッシュROM50に記憶されているFPGA構成情報のバージョンをチェックする。
ステップ126において、コントローラ20のCPU24は、処理対象の通信I/Fカード30の中に、フラッシュROM50に記憶されているFPGA構成情報のバージョンが更新用のFPGA構成情報のバージョンよりも古い通信I/Fカード30が存在しているか否か判定する。ステップ126の判定が否定された場合は、FPGA構成情報の更新が必要な通信I/Fカード30が存在していないので、FPGA構成情報更新処理を終了する。
一方、ステップ126の判定が肯定された場合は、処理対象の通信I/Fカード30の中にFPGA構成情報の更新が必要な通信I/Fカード30が存在しているので、ステップ128へ移行し、ステップ128において、コントローラ20のCPU24は、メモリ26に一時記憶している更新用のFPGA構成情報を処理対象の通信I/Fカード30(FPGA構成情報の更新が必要な通信I/Fカード30、説明している例ではID=1の通信I/Fカード30)へ転送する。処理対象の通信I/Fカード30(ID=1の通信I/Fカード30)では、コントローラ20のCPU24から転送された更新用のFPGA構成情報がフラッシュROM50に書き込まれる。
次のステップ130において、コントローラ20のCPU24は、更新用のFPGA構成情報を転送した処理対象の通信I/Fカード30から更新用のFPGA構成情報の書き込み完了が通知されると、処理対象の通信I/Fカード30を再起動させる。処理対象の通信I/Fカード30(ID=1の通信I/Fカード30)では、ステップ130の再起動により、フラッシュROM50に書き込まれた更新用のFPGA構成情報が読み出され、FPGA48の再構成(回路形成)に使用される。これにより、FPGA48には、更新用のFPGA構成情報に応じた構成の回路(例えばバスI/F回路60および画像形成装置I/F回路62)が形成される。
処理対象の通信I/Fカード30(ID=1の通信I/Fカード30)の再起動が完了すると、ステップ132において、コントローラ20のCPU24は、処理対象の通信I/Fカード30(ID=1の通信I/Fカード30)とのバス34経由の通信が正常に行えるか否かをチェックする。次のステップ134において、コントローラ20のCPU24は、ステップ132における通信チェックでエラーが検出された処理対象の通信I/Fカード30(ID=1の通信I/Fカード30)が無かったか否か判定する。
ステップ132の通信チェックでエラーが検出された場合は、ステップ134の判定が否定されてステップ136へ移行する。この場合、処理対象の通信I/Fカード30(ID=1の通信I/Fカード30)とはバス34経由で正常に通信できない状態となっているので、処理対象の通信I/Fカード30(ID=1の通信I/Fカード30)のFPGA48には何らかの理由で正常に回路が形成されていない可能性が高い。このため、ステップ136において、コントローラ20のCPU24は、FPGA48への更新用のFPGA構成情報の書込回数N(初期値=0)を1だけインクリメントし、「更新失敗」の情報を遠隔メンテナンス装置16へ送信する。なお、「更新失敗」の情報は、例えばコントローラ20に設けられた表示部に出力(表示部に表示)してもよい。
ステップ138において、コントローラ20のCPU24は、書込回数Nの値が3よりも大きいか否か判定する。ステップ138の判定が否定された場合はステップ140へ移行し、ID=0の通信I/Fカード30のCPU42に対し、リカバリ処理0の実行を指示する。詳細は後述するが、ID=0の通信I/Fカード30のCPU42は、自カード30のフラッシュROM50に記憶されている更新後のFPGA構成情報、すなわち自カード30が正常に動作していることで、エラー等が含まれていないことが確認できているFPGA構成情報を通信線43経由でID=1の通信I/Fカード30へ転送することで、ID=1の通信I/Fカード30のフラッシュROM50に記憶されているFPGA構成情報を、更新後のFPGA構成情報に書き替えさせるリカバリ処理0(図8)を行う。ステップ140の処理を行うとステップ130に戻り、ステップ130以降を繰り返す。
また、ステップ132の通信チェックでエラーが検出されなかった場合は、ステップ134の判定が肯定されてステップ144へ移行し、ステップ144において、コントローラ20のCPU24は、処理対象の通信I/Fカード30(ID=1の通信I/Fカード30)のFPGA48の内蔵レジスタに設定されたFPGA構成情報のバージョンを表す情報を参照し、処理対象の通信I/Fカード30(ID=1の通信I/Fカード30)へ転送した更新用のFPGA構成情報のバージョンと照合することで、FPGA48に形成された回路のバージョンをチェックする。
次のステップ146において、コントローラ20のCPU24は、ステップ144におけるバージョンチェックにおいて、処理対象の通信I/Fカード30(ID=1の通信I/Fカード30)のFPGA48に形成された回路のバージョンが更新されていたか否か判定する。ステップ146の判定が肯定された場合は、処理対象の通信I/Fカード30(ID=1の通信I/Fカード30)とバス34経由で正常に通信できており、処理対象の通信I/Fカード30(ID=1の通信I/Fカード30)のFPGA48に形成された回路のバージョンも更新されているので、処理対象の通信I/Fカード30(ID=1の通信I/Fカード30)についてのFPGA構成情報の更新も成功したと判断される。このため、ステップ146の判定が肯定された場合はFPGA構成情報更新処理を終了する。
一方、ステップ146の判定が否定される場合は、何らかの原因により、処理対象の通信I/Fカード30(ID=1の通信I/Fカード30)のFPGA48に、現行バージョンのFPGA構成情報に応じた回路が形成された場合である。この場合、処理対象の通信I/Fカード30(ID=1の通信I/Fカード30)についてのFPGA構成情報の更新は失敗したと判断されるので、ステップ146の判定が否定された場合はステップ122に戻り、ステップ122以降の処理を繰り返す。
これにより、処理対象の通信I/Fカード30(ID=1の通信I/Fカード30)のフラッシュROM50への更新用のFPGA構成情報の書き込み、処理対象の通信I/Fカード30(ID=1の通信I/Fカード30)の再起動、通信チェックの各処理が再度行われる。各処理の再実行によりステップ134,146の判定が各々肯定された場合はFPGA構成情報更新処理を終了する。
また、通信チェックでエラーが検出された場合は、上記各処理に加えて、処理対象の通信I/Fカード30(ID=1の通信I/Fカード30)のフラッシュROM50に記憶されているFPGA構成情報を更新後のFPGA構成情報に書き替える処理も行われる。
そして、上記各処理にFPGA構成情報の書き替えを加えた一連の処理を3回繰り返しても通信チェックでエラーが検出される場合は、ステップ138の判定が肯定されてステップ142へ移行する。この場合、処理対象の通信I/Fカード30(ID=1の通信I/Fカード30)のFPGA構成情報の更新が成功しない原因としては、処理対象の通信I/Fカード30(ID=1の通信I/Fカード30)の基板の故障や、遠隔メンテナンス装置16の記憶部92に記憶されている更新用のFPGA構成情報の不良等が考えられるため、ステップ142では上記の原因を遠隔メンテナンス装置16へ通知するエラー処理を行い、FPGA構成情報更新処理を終了する。
次に、上述したFPGA構成情報更新処理がコントローラ20のCPU24で実行されている間、個々の通信I/Fカード30のCPU42でFPGA更新プログラム54が実行されることで個々の通信I/Fカード30で行われるFPGA更新処理について、図6を参照して説明する。
FPGA更新処理のステップ150において、通信I/Fカード30のCPU42は、コントローラ20のCPU24によって自カードに割り振られたIDを認識する。次のステップ152において、通信I/Fカード30のCPU42は、通信I/Fカード30のCPU42の間の通信線43経由のローカル接続(ローカル通信)が正常か否かをチェックする。そしてステップ154において、通信I/Fカード30のCPU42は、ステップ152における通信チェックでエラーが検出されなかったか否か判定する。
ステップ152における通信チェックでエラーが検出された場合は、ステップ154の判定が否定されてステップ160へ移行する。この場合、FPGA更新処理を行っている通信I/Fカード30の基板の故障や、電気的な接触不良等が考えられるため、ステップ154では上記の原因をコントローラ20のCPU24へ通知するエラー処理を行い、FPGA更新処理を終了する。この場合、コントローラ20のCPU24は、通信チェックでエラーが検出される原因(基板の故障や電気的な接触不良等)を遠隔メンテナンス装置16へ通知する処理を行うことが好ましい。
なお、ステップ152における通信チェックでエラーが検出された通信I/Fカード30であっても、コントローラ20のCPU24とのバス34経由での通信は可能である。このため、ステップ154の判定が否定された場合も、通信線43経由のローカル接続(ローカル通信)が正常でないことをコントローラ20のCPU24へ通知した上で、次に説明するステップ156,158の処理を行うようにしてもよい。
ステップ152における通信チェックでエラーが検出されなかった場合は、ステップ154の判定が肯定されてステップ156へ移行する。ステップ156において、通信I/Fカード30のCPU42は、コントローラ20のCPU24からバス34経由で自カードへ転送された更新用のFPGA構成情報を一旦メモリ44に記憶させた後、フラッシュROM50に記憶されているFPGA構成情報に上書きして書き込む。
また、フラッシュROM50への更新用のFPGA構成情報の書き込みが完了すると、ステップ158へ移行し、ステップ158において、通信I/Fカード30のCPU42は、更新用のFPGA構成情報の書き込みが完了したことをコントローラ20のCPU24へ通知し、FPGA更新処理を終了する。この場合、FPGA更新処理が正常に終了した通信I/Fカード30が再起動されると、フラッシュROM50に書き込んだ更新用のFPGA構成情報が読み出されてFPGA48の再構成に使用され、更新用のFPGA構成情報に応じた回路がFPGA48に形成されることになる。
先に説明したように、ID=0の通信I/Fカード30のフラッシュROM50に更新用のFPGA構成情報を書き込んだものの、当該通信I/Fカード30の再起動でバス34経由での通信にエラーが検出された場合、コントローラ20のCPU24からID=1の通信I/Fカード30へリカバリ処理1の実行が指示される。この指示を契機として、ID=1の通信I/Fカード30では、CPU42でリカバリプログラム56が実行されることで、図7に示すリカバリ処理1が行われる。
リカバリ処理1のステップ170において、ID=1の通信I/Fカード30のCPU42は、自カード30のフラッシュROM50に記憶されている現行バージョンのFPGA構成情報を読み出す。次のステップ172において、ID=1の通信I/Fカード30のCPU42は、自カード30のフラッシュROM50から読み出した現行バージョンのFPGA構成情報を、通信線43経由のローカル通信により、ID=0の通信I/Fカード30のCPU42へ転送する。
これにより、ID=0の通信I/Fカード30のCPU42は、通信線43経由のローカル通信により転送された現行バージョンのFPGA構成情報を一旦メモリ44に記憶した後に、自カード30のフラッシュROM50に書き込み、書き込みが完了するとID=1の通信I/Fカード30のCPU42へ正常応答を返す処理を行う。ステップ174において、ID=1の通信I/Fカード30のCPU42は、ID=0の通信I/Fカード30のCPU42から正常応答を受信したか否かに基づいて、ID=0の通信I/Fカード30でフラッシュROM50への現行バージョンのFPGA構成情報の書き込みが完了したか否か判定し、判定が肯定される迄ステップ174を繰り返す。
ID=0の通信I/Fカード30のCPU42から正常応答を受信すると、ステップ174の判定が肯定されてステップ176へ移行し、ステップ176において、ID=1の通信I/Fカード30のCPU42は、指示されたリカバリ処理1の完了をコントローラ20のCPU24へ通知し、リカバリ処理1を終了する。これにより、ID=0の通信I/Fカード30のフラッシュROM50への現行バージョンのFPGA構成情報の書き込みが完了し、ID=0の通信I/Fカード30を再起動すれば、ID=0の通信I/Fカード30のCPU42とコントローラ20のCPU24とのバス34経由での通信が復旧することになる。
また、ID=1の通信I/Fカード30のフラッシュROM50に更新用のFPGA構成情報を書き込んだものの、当該通信I/Fカード30の再起動でバス34経由での通信にエラーが検出された場合、コントローラ20のCPU24からID=0の通信I/Fカード30へリカバリ処理0の実行が指示される。この指示を契機として、ID=0の通信I/Fカード30では、CPU42でリカバリプログラム56が実行されることで、図8に示すリカバリ処理0が行われる。
リカバリ処理0のステップ180において、ID=0の通信I/Fカード30のCPU42は、自カード30のフラッシュROM50に記憶されている更新後のFPGA構成情報を読み出す。次のステップ182において、ID=0の通信I/Fカード30のCPU42は、自カード30のフラッシュROM50から読み出した更新後のFPGA構成情報を、通信線43経由のローカル通信により、ID=1の通信I/Fカード30のCPU42へ転送する。
これにより、ID=1の通信I/Fカード30のCPU42は、通信線43経由のローカル通信により転送された更新後のFPGA構成情報を一旦メモリ44に記憶した後に、自カード30のフラッシュROM50に書き込み、書き込みが完了するとID=0の通信I/Fカード30のCPU42へ正常応答を返す処理を行う。ステップ184において、ID=0の通信I/Fカード30のCPU42は、ID=1の通信I/Fカード30のCPU42から正常応答を受信したか否かに基づいて、ID=1の通信I/Fカード30でフラッシュROM50への更新後のFPGA構成情報の書き込みが完了したか否か判定し、判定が肯定される迄ステップ184を繰り返す。
ID=1の通信I/Fカード30のCPU42から正常応答を受信すると、ステップ184の判定が肯定されてステップ186へ移行し、ステップ186において、ID=0の通信I/Fカード30のCPU42は、指示されたリカバリ処理0の完了をコントローラ20のCPU24へ通知し、リカバリ処理0を終了する。これにより、ID=1の通信I/Fカード30のフラッシュROM50への更新後のFPGA構成情報の書き込みが完了し、ID=1の通信I/Fカード30を再起動すれば、ID=1の通信I/Fカード30のCPU42とコントローラ20のCPU24とのバス34経由での通信が復旧することになる。
上述したように、本実施形態では、ID=0の通信I/Fカード30のフラッシュROM50に書き込まれた更新用の新バージョンのFPGA構成情報によってID=0の通信I/Fカード30のFPGA48を再構成(回路を形成)させたときに、バス34経由のコントローラ20のCPU24との通信でエラーが検出された場合、ID=1の通信I/Fカード30のフラッシュROM50に書き込まれた現行バージョンのFPGA構成情報によってID=0の通信I/Fカード30のFPGA48を再構成(回路を形成)させる。これにより、ID=0の通信I/Fカード30の基板を交換する等の作業を行うことなく、ID=0の通信I/Fカード30のCPU42とコントローラ20のCPU24とのバス34経由での通信が復旧する。
なお、上記のケースにおいて、ID=0,1の通信I/Fカード30を含むコントローラ20は本発明に係る電子機器の一例であり、ID=0の通信I/Fカード30のFPGA48は本発明における回路形成デバイスの一例であり、ID=0の通信I/Fカード30のフラッシュROM50は本発明における第1記憶部の一例であり、ID=1の通信I/Fカード30のフラッシュROM50は本発明における第2記憶部の一例であり、コントローラ20のCPU24およびID=1の通信I/Fカード30のCPU42は本発明における復旧制御部の一例であり、通信I/Fカード30は本発明におけるモジュールの一例である。
また、本実施形態では、ID=1の通信I/Fカード30のフラッシュROM50に書き込まれた更新用のFPGA構成情報によってID=1の通信I/Fカード30のFPGA48を再構成(回路を形成)させたときに、バス34経由のコントローラ20のCPU24との通信でエラーが検出された場合、ID=0の通信I/Fカード30のフラッシュROM50に書き込まれ、バス34経由での通信が確立することが確認済みの新バージョンのFPGA構成情報によってID=1の通信I/Fカード30のFPGA48を再構成(回路を形成)させる。これにより、ID=1の通信I/Fカード30の基板を交換する等の作業を行うことなく、ID=1の通信I/Fカード30のCPU42とコントローラ20のCPU24とのバス34経由での通信が復旧する。
なお、上記のケースにおいて、ID=0,1の通信I/Fカード30を含むコントローラ20は本発明に係る電子機器の一例であり、ID=1の通信I/Fカード30のFPGA48は本発明における回路形成デバイスの一例であり、ID=1の通信I/Fカード30のフラッシュROM50は本発明における第1記憶部の一例であり、ID=0の通信I/Fカード30のフラッシュROM50は本発明における第2記憶部の一例であり、コントローラ20のCPU24およびID=0の通信I/Fカード30のCPU42は本発明における復旧制御部の一例であり、通信I/Fカード30は本発明におけるモジュールの一例である。
なお、上記ではコントローラ20に設けられている通信I/Fカード30の総数が2の例を説明したが、これに限定されるものではなく、通信I/Fカード30の数は3以上であってもよい。一例として、コントローラ20に通信I/Fカード30が4枚設けられている態様を図11に示す。この場合、図11に矢印で示すように、ID=0の通信I/Fカード30に対してFPGA構成情報の更新を行い、通信エラーが発生しなければ、ID=1〜3の3枚の通信I/Fカード30に対してFPGA構成情報の更新を並列に行えばよい。なお、ID=1〜3の3枚の通信I/Fカード30に対するFPGA構成情報の更新において、各通信I/Fカード30への更新用のFPGA構成情報の転送は、図11に示すように、FPGA構成情報の更新が完了したID=0の通信I/Fカード30から通信線43経由で行うようにしてもよいし、コントローラ20のCPU24からバス34経由で行うようにしてもよい。
次に、画像処理部64のフラッシュROM76に記憶されているFPGA構成情報の更新について説明する。以下では、まず図4を参照し、各部分の間で送受される信号を説明する。コントローラ20と画像処理部64との間では、通信線35経由で、画像データと、この画像データの送受のための通信コマンドと、が送受される。また、コントローラ20と画像処理部64との間には、通信線35と別の制御信号線も設けられており、コントローラ20および画像処理部64は、上記の制御信号線を経由して、次の表1にも示すように、MODE信号、RESET信号およびI_READY信号も送受する。
MODE信号は、コントローラ20から画像処理部64へ送信される信号であり、表1に示すように、通常モードではLレベルとされ、コントローラ20から画像処理部64へ更新用のFPGA構成情報が転送されるダウンロードモードではHレベルとされる。
RESET信号は、コントローラ20から画像処理部64へ送信される信号であり、表1に示すように、コントローラ20が画像処理部64へリセット(再起動)を指示する場合にLレベルとされ、それ以外の場合はHレベルとされる。
I_READY信号は、画像処理部64からコントローラ20へ送信される信号であり、コントローラ20と画像処理部64との間で通信線35経由の通信が確立している間はLレベルとされ、表1に示すように、画像処理部64で異常が発生した場合、画像処理部64が電源をオフする場合、画像処理部64がリセット(再起動)をする場合にHレベルとされる。
また、画像処理部64のFPGA74は、図4に示すように、CONF_DONE信号とCRC_ERROR信号をCPU68へ出力する。CONF_DONE信号は、FPGA74がFPGA構成情報に応じた再構成(回路の形成)を行っている間はHレベルとされ、FPGA構成情報に応じた再構成(回路の形成)が完了するとFPGA74によってLレベルに切り替えられる。
CRC_ERROR信号は、通常時はHレベルとされ、FPGA構成情報に応じた再構成(回路の形成)にあたり、コンフィグ回路78からFPGA74に入力されたFPGA構成情報に対するパリティチェックでエラーが発生すると、FPGA74によってLレベルに切り替えられる。
図4に示すように、NVM80には、MODEフラグ、WRITEプロテクトフラグおよびFPGA READフラグの3種類のフラグが記憶されており、これらのフラグはCPU68によって設定される。コンフィグ回路78は、NVM80に記憶されている各フラグの値に基づいて、フラッシュROM76に設けられた3つの記憶領域の中から、FPGA構成情報を読み出す記憶領域およびWRITEプロテクトを掛ける記憶領域を選択する。各フラグの値とFPGA構成情報を読み出す領域およびWRITEプロテクトを掛ける領域との関係を次の表2に示す。
MODEフラグは、WP領域からFPGA構成情報を読み出す場合に1が設定され、それ以外の場合は0に設定される。コンフィグ回路78は、MODEフラグ=1の場合、他のフラグの値に拘わらずWP領域からFPGA構成情報を読み出し、FPGA74へ出力する。
FPGA READフラグは、領域AからFPGA構成情報を読み出す場合に0が設定され、領域BからFPGA構成情報を読み出す場合に1が設定される。コンフィグ回路78は、MODEフラグ=0でかつFPGA READフラグ=0の場合、領域AからFPGA構成情報を読み出してFPGA74へ出力し、MODEフラグ=0でかつFPGA READフラグ=1の場合、領域BからFPGA構成情報を読み出してFPGA74へ出力する。
WRITEプロテクトフラグは、領域AにWRITEプロテクトを掛ける場合に0が設定され、領域BにWRITEプロテクトを掛ける場合に1が設定される。コンフィグ回路78は、MODEフラグ=0でかつWRITEプロテクトフラグ=0の場合、領域AにWRITEプロテクトを掛け、MODEフラグ=0でかつWRITEプロテクトフラグ=1の場合、領域BにWRITEプロテクトを掛ける。
次に図12を参照し、画像処理部64のフラッシュROM76に記憶されているFPGA構成情報を更新する場合に、コントローラ20のCPU24によって行われる画像処理部FPGA構成情報更新処理について説明する。
なお、この画像処理部FPGA構成情報更新処理は、コントローラ20のCPU24によって画像処理部FPGA構成情報更新プログラム40が実行されることで実現される。また、コントローラ20のCPU24は、例えば、画像処理部64のFPGA74が使用する更新用のFPGA構成情報(新バージョンのFPGA構成情報)を遠隔メンテナンス装置16から受信して記憶部28等に記憶している状態で、予め設定された状況(例えば、クライアント端末12から印刷データを受信しておらず、画像処理部64が画像処理を行っていない状況、或いは画像形成システム14の利用頻度が閾値以下に低下する時間帯に入った状況等)になったタイミングで、画像処理部FPGA構成情報更新処理を行う。
画像処理部FPGA構成情報更新処理のステップ200において、コントローラ20のCPU24は、画像処理部64へ出力するMODE信号をHレベルに切替えることで、画像処理部64のCPU68に対してダウンロードモードへの移行を指示する。次のステップ202において、コントローラ20のCPU24は、画像処理部64へ出力するRESET信号を一旦Lレベルへ切替えることで、画像処理部64のCPU68に対して画像処理部64の再起動を指示する。ステップ204において、コントローラ20のCPU24は、一定時間待機する。なお、ステップ204における一定時間としては、例えば、画像処理部64の再起動に要する時間に、予め設定した余裕時間を加算した時間を適用する。
次のステップ206において、コントローラ20のCPU24は、画像処理部64から入力されるI_READY信号がLレベルに切り替わったか否かを判定することで、画像処理部64で何らかの異常が発生していないか否か判定する。I_READY信号がHレベルの場合、画像処理部64の再起動で何らかの異常が発生したと判断される。このため、ステップ206の判定が否定された場合はステップ224へ移行し、画像処理部64の再起動で何らかの異常が発生したことを遠隔メンテナンス装置16へ通知するエラー処理を行い、画像処理部FPGA構成情報更新処理を終了する。
一方、I_READY信号がLレベルに切り替わっていた場合は、ステップ206の判定が肯定されてステップ208へ移行する。ステップ208において、コントローラ20のCPU24は、画像処理部64のFPGA74が使用する更新用のFPGA構成情報を記憶部28等から読み出し、通信線35経由で画像処理部64へ転送する。
また、I_READY信号がLレベルに切り替わったことで、コントローラ20と画像処理部64との間で通信線35経由の通信が確立している。このため、次のステップ212において、コントローラ20のCPU24は、画像処理部64から更新用のFPGA構成情報の転送完了が通知されたか否かに基づいて、更新用のFPGA構成情報に転送エラーが無かったか否かを判定する。ステップ212の判定が否定された場合はステップ208へ戻り、画像処理部64への更新用のFPGA構成情報の転送を再度行う。
一方、画像処理部64への更新用のFPGA構成情報の転送で転送エラーが無かった場合は、ステップ212の判定が肯定されてステップ214へ移行する。ステップ214において、コントローラ20のCPU24は、画像処理部64へ出力するMODE信号をLレベルに切替えることで、画像処理部64のCPU68に対して通常モードへの移行を指示する。次のステップ216において、コントローラ20のCPU24は、画像処理部64へ出力するRESET信号を一旦Lレベルへ切替えることで、画像処理部64のCPU68に対して画像処理部64の再起動を指示する。ステップ218において、コントローラ20のCPU24は、一定時間待機する。なお、ステップ218における一定時間としては、例えば、前述したステップ204と同じ長さの時間を適用する。
次のステップ220において、コントローラ20のCPU24は、画像処理部64から入力されるI_READY信号がLレベルに切り替わったか否かを判定することで、画像処理部64で何らかの異常が発生していないか否か判定する。I_READY信号がHレベルの場合、画像処理部64の再起動で何らかの異常が発生したと判断される。このため、ステップ220の判定が否定された場合はステップ228へ移行し、画像処理部64の再起動で何らかの異常が発生したことを遠隔メンテナンス装置16へ通知するエラー処理を行い、画像処理部FPGA構成情報更新処理を終了する。
なお、遠隔メンテナンス装置16へ通知する前に、画像処理部FPGA構成情報更新処理をステップ200から繰り返すリトライ処理を行い、リトライ処理の実行回数が予め設定された回数(例えば3回)に達してもステップ220でI_READY信号がLレベルに切り替わらない場合に、遠隔メンテナンス装置16への通知を行うようにしてもよい。
一方、I_READY信号がLレベルに切り替わっていた場合は、ステップ220の判定が肯定されてステップ222へ移行し、画像処理部64のFPGA74が回路形成に使用したFPGA構成情報のバージョンを画像処理部64へ問い合わせる。この問い合わせに対し、画像処理部64のCPU68は、FPGA74の内蔵レジスタに設定された、FPGA74が回路形成に使用したFPGA構成情報のバージョンを表す情報を読み込み、読み込んだバージョンをコントローラ20のCPU24へ通知する処理を行う。
次のステップ224において、コントローラ20のCPU24は、画像処理部64のCPU68から通知されたバージョンが、記憶部28等に記憶している更新用のFPGA構成情報のバージョンに一致しているか否か判定する。ステップ224の判定が否定された場合はステップ225へ移行し、ステップ225において、コントローラ20のCPU24は、図示しない表示装置上でエラー表示を行い、FPGA構成情報の更新が失敗したことを通知する。ステップ225の処理を行うとステップ200に戻り、ステップ200以降の処理(画像処理部64のFPGA74が使用するFPGA構成情報を更新するための処理)を再度行う。
一方、ステップ224の判定が肯定された場合はステップ226へ移行し、ステップ226において、コントローラ20のCPU24は、記憶部28に記憶している画像処理部64のFPGA構成情報のバージョン管理情報を、先に画像処理部64へ転送した更新用のFPGA構成情報のバージョンを表す情報へ更新し、画像処理部FPGA構成情報更新処理を終了する。
次に図13A,13Bを参照し、画像処理部64のCPU68がFPGA更新プログラム84を実行することで行われるFPGA更新処理を説明する。なお、このFPGA更新処理は、先に説明した画像処理部FPGA構成情報更新処理(図12)のステップ200により、コントローラ20のCPU24から画像処理部64へ入力されるMODE信号がHレベルに切替わり、ダウンロードモードへの移行が指示されたことをトリガとして実行される。なお、このときフラッシュROM76の領域Aには現行バージョンのFPGA構成情報が、領域Bには旧バージョンのFPGA構成情報が記憶されているものとする。
FPGA更新処理のステップ230において、画像処理部64のCPU68は、NVM80に記憶されているMODEフラグを1に設定する。次のステップ232において、画像処理部64のCPU68は、画像処理部FPGA構成情報更新処理(図12)のステップ202により、コントローラ20のCPU24から画像処理部64へ入力されるRESET信号が一旦Lレベルに切替わり、画像処理部64のリセット(再起動)が指示されたことをトリガとして、画像処理部64を再起動させる処理を行う。
このときの画像処理部64の再起動は、NVM80に記憶されているMODEフラグ=1になっているので、コンフィグ回路78は、フラッシュROM76のWP領域に記憶されている初期構成情報を読み出してFPGA74へ出力する(ステップ234)。これによりFPGA74は、コンフィグ回路78から入力された初期構成情報に応じた回路を形成する。初期構成情報は、画像形成装置22の工場出荷時に、エラーを含まずFPGA74に適正に回路が形成されることが確認済みのFPGA構成情報であるので、画像処理部64の基板の異常等が無ければ、FPGA74には、正常に動作するコントローラI/F回路88および画像処理回路部90が確実に形成される。
なお、ここでフラッシュROM76に書き込まれている旧バージョンのFPGA構成情報のバックアップを行ってもよい。
次のステップ240において、画像処理部64のCPU68は、FPGA74から入力されるCRC_ERROR信号がHレベルのまま維持され、かつ、CONF_DONE信号がHレベルからLレベルに切り替わったか否かに基づいて、初期構成情報に応じた回路をFPGA74に異常なく形成されたか否か判定する。ステップ240の判定が否定された場合はステップ248へ移行してエラー処理を行う。
このエラー処理としては、例えば画像処理部64の再起動とエラーのチェックを含むリトライ処理を繰り返し、リトライ処理の実行回数が一定回数(例えば3回)に達する前にエラー無しで再起動できた場合には正常処理(ステップ242以降の処理)へ移行し、リトライ処理が一定回数に達した場合は、画像処理部64の基板の接続確認または交換、ケーブルの接続確認または交換など、状況に応じた対応作業を指示する情報を出力する処理を適用してもよい。
一方、ステップ240の判定が肯定された場合はステップ242へ移行し、ステップ242において、画像処理部64のCPU68は、コントローラ20へ送信するI_READY信号をHレベルからLレベルへ切替えることで、コントローラ20と画像処理部64との間で通信線35経由の通信が確立したことをコントローラ20のCPU24へ通知する。
上記のI_READY信号のLレベルへの切替えにより、画像処理部FPGA構成情報更新処理(図12)のステップ208において、コントローラ20のCPU24から画像処理部64へ、画像処理部64のFPGA74が使用する更新用のFPGA構成情報が転送される。次のステップ244において、画像処理部64のCPU68は、コントローラ20のCPU24から転送された更新用のFPGA構成情報をフラッシュROM76の領域Bに書き込む。
ステップ246において、画像処理部64のCPU68は、フラッシュROM76の領域Bに書き込んだ更新用のFPGA構成情報をフラッシュROM76の領域Bから読み出し、読み出した更新用のFPGA構成情報がコントローラ20のCPU24から受信した更新用のFPGA構成情報と一致しているかを比較することで、フラッシュROM76の領域Bへの更新用のFPGA構成情報の書き込みでエラーが発生していないか否か判定する。ステップ246の判定が否定された場合はステップ248へ移行し、画像処理部64のCPU68は、エラー処理を行う。
この場合のエラー処理としては、例えばフラッシュROM76の領域Bへ更新用のFPGA構成情報を再度書き込むリトライ処理を繰り返し、リトライ処理の実行回数が一定回数(例えば3回)に達する前にエラー無しで書き込めた場合には正常処理(ステップ250以降の処理)へ移行し、リトライ処理が一定回数に達した場合は、画像処理部64の基板の接続確認または交換、ケーブルの接続確認または交換など、状況に応じた対応作業を指示する情報を出力する処理を適用してもよい。
また、ステップ246の判定が肯定された場合はステップ250へ移行し、ステップ250において、画像処理部64のCPU68は、NVM80に記憶されているMODEフラグを0(通常動作)に設定し、FPGA READフラグを1(FPGA構成情報を領域Bから読み込み)に設定し、WRITEプロテクトフラグを0(領域Aをプロテクト)に設定する。次のステップ252において、画像処理部64のCPU68は、更新用のFPGA構成情報の転送完了をコントローラ20のCPU24へ通知する。
上記の転送完了通知により、画像処理部FPGA構成情報更新処理(図12)のステップ214,216において、まずコントローラ20のCPU24から画像処理部64へ入力されるMODE信号がLレベルに切替わることで、通常モードへの移行が指示され、次いで、コントローラ20のCPU24から画像処理部64へ入力されるRESET信号がLレベルに切替わることで、画像処理部64のリセット(再起動)が指示される。次のステップ254において、画像処理部64のCPU68は、RESET信号がLレベルに切替わり、画像処理部64のリセット(再起動)が指示されたことをトリガとして、画像処理部64を再起動させる処理を行う。
このときの画像処理部64の再起動は、NVM80に記憶されているMODEフラグ=0、FPGA READフラグ=1、WRITEプロテクトフラグ=0であるので、コンフィグ回路78は、フラッシュROM76のA領域にWRITEプロテクトを掛け、B領域に記憶されている更新用のFPGA構成情報を読み出してFPGA74へ出力する(ステップ256)。これによりFPGA74は、コンフィグ回路78から入力された更新用のFPGA構成情報に応じた回路を形成する処理を行う。
画像処理部64のCPU68は、FPGA74から入力されるCONF_DONE信号がHレベルからLレベルに切り替わるとステップ260へ移行し、ステップ260において、FPGA74に形成されたコントローラI/F回路88経由でのコントローラ20のCPU24との通信が正常か否かをチェックする。次のステップ262において、画像処理部64のCPU68は、ステップ260における通信チェックの結果に基づいて、コントローラI/F回路88経由でのコントローラ20のCPU24との通信が時間内に確立したか否か判定する。
ステップ262の判定が肯定された場合はステップ268へ移行し、ステップ268において、画像処理部64のCPU68は、コントローラ20へ送信するI_READY信号をHレベルからLレベルへ切替える。この場合、前述したコントローラ20のCPU24へのFPGA構成情報のバージョンの通知等の処理を経て、画像処理部FPGA構成情報更新処理(図12)のステップ226において、コントローラ20のCPU24により、画像処理部64のFPGA構成情報のバージョン管理情報を更新する処理が行われる。
また、次のステップ270において、画像処理部64のCPU68は、NVM80に記憶されているWRITEプロテクトフラグを1(領域Bをプロテクト)に設定し、FPGA更新処理を終了する。これにより、以後はフラッシュROM76の領域Bに書き込まれている新バージョンのFPGA構成情報が上書き等によって破壊されることが防止される。
次に、フラッシュROM76の領域Bに書き込んだ更新用のFPGA構成情報を用いてFPGA74に回路を形成したものの、コントローラ20のCPU24との通信が時間内に確立しなかった場合(ステップ262の判定が否定された場合)の処理を説明する。ステップ262の判定が否定された場合はステップ272へ移行し、ステップ272において、画像処理部64のCPU68は、FPGA74から出力されるCRC_ERROR信号を読み込む。そして、次のステップ274において、画像処理部64のCPU68は、FPGA74から出力されるCRC_ERROR信号がHレベルからLレベルに切り替わっているか否かに基づいて、FPGA74によるFPGA構成情報に対するパリティチェックでエラーが発生したか否か判定する。
ステップ274の判定が肯定された場合はステップ276へ移行し、ステップ276において、画像処理部64のCPU68は、フラッシュROM76の領域Bに書き込んだFPGA構成情報のバージョンを取得し、後でエラー解析等の作業を行うために、取得したバージョン等の情報をログに記録し、ステップ278へ移行する。なお、ステップ274の判定が否定された場合はステップ276をスキップしてステップ278へ移行する。また、前述したステップ266の判定が否定された場合もステップ278へ移行する。
ステップ278において、画像処理部64のCPU68は、NVM80に記憶されているFPGA READフラグを0(FPGA構成情報を領域Aから読み込み)に設定する。またステップ280において、画像処理部64のCPU68は、画像処理部64を再起動させる処理を行う。
このときの画像処理部64の再起動は、NVM80に記憶されているMODEフラグ=0、FPGA READフラグ=0、WRITEプロテクトフラグ=0であるので、コンフィグ回路78は、フラッシュROM76のA領域にWRITEプロテクトを掛け、A領域に記憶されている現行バージョンのFPGA構成情報を読み出してFPGA74へ出力する(ステップ282)。これによりFPGA74は、コンフィグ回路78から入力された現行バージョンのFPGA構成情報に応じた回路を形成する処理を行う。
画像処理部64のCPU68は、FPGA74から入力されるCONF_DONE信号がHレベルからLレベルに切り替わるとステップ286へ移行し、ステップ286において、FPGA74に形成されたコントローラI/F回路88経由でのコントローラ20のCPU24との通信が正常か否かをチェックする。次のステップ288において、画像処理部64のCPU68は、ステップ286における通信チェックの結果に基づいて、コントローラI/F回路88経由でのコントローラ20のCPU24との通信が時間内に確立したか否か判定する。
ステップ288の判定が肯定された場合はステップ300へ移行する。一方、ステップ288の判定が否定された場合はステップ290へ移行し、ステップ290において、画像処理部64のCPU68は、図示しない表示装置上でエラー表示を行い、FPGA構成情報の更新が失敗したことを通知し、FPGA更新処理を終了する。
本実施形態に係るFPGA更新処理(図13A,13B)では、ステップ288の判定が肯定された場合にステップ300へ移行する。上記場合は、画像処理部64におけるFPGA構成情報の更新が失敗した場合であり、ステップ300において、画像処理部64のCPU68は、FPGA構成情報の更新失敗の原因切り分けのために、FPGA更新処理を今回実行している間にFPGA構成情報に対するパリティチェックでエラーが発生していたことを表すCRCエラー発生履歴が記憶されているか否か判定する。
FPGA構成情報に対するパリティチェックでエラーが発生していた場合、FPGA構成情報の更新失敗の原因としては、例えばFPGA構成情報を転送している間のエラーの混入(データ化け)等が考えられる。このため、ステップ300の判定が肯定された場合はステップ302へ移行し、ステップ302において、画像処理部64のCPU68は、FPGA構成情報の転送エラー等を原因として更新を失敗したことをコントローラ20経由で遠隔メンテナンス装置16へ通知する等のエラー処理を行う。この場合、必要に応じて遠隔メンテナンス装置16により、FPGA74の回路形成に使用する更新用のFPGA構成情報をコントローラ20へ再配信する等の処理が行われる。
また、FPGA構成情報に対するパリティチェックでエラーが発生していなかった場合には、FPGA構成情報の更新失敗の原因としては、例えば更新用のFPGA構成情報としてエラーを含むFPGA構成情報が作成された等が考えられる。このため、ステップ300の判定が否定された場合はステップ304へ移行し、ステップ304において、画像処理部64のCPU68は、元々の更新用のFPGA構成情報にエラーが含まれている等を原因として更新を失敗したことをコントローラ20経由で遠隔メンテナンス装置16へ通知する等のエラー処理を行う。この場合、必要に応じて遠隔メンテナンス装置16のオペレータにより、配信した更新用のFPGA構成情報のチェック等の作業が行われる。
上記で説明した画像処理部FPGA構成情報更新処理(図12)およびFPGA更新処理(図13A,図13B)は、FPGA74の回路形成に使用するFPGA構成情報が更新される都度実行され、これに伴い、フラッシュROM76の領域A,Bは、一例として図14に示すように推移する。
すなわち、フラッシュROM76の領域Aにバージョン1.0のFPGA構成情報が記憶されてWRITEプロテクトが掛けられ、領域Bは空の状態(図14に示すinitial状態)で、FPGA構成情報の更新が正常に行われた場合、フラッシュROM76の領域Aにバージョン1.0のFPGA構成情報が記憶され、領域Bにバージョン2.0のFPGA構成情報が記憶されてWRITEプロテクトが掛けられ、領域BからFPGA構成情報が読み出される状態(図14に示すUpdate1状態)になる。
この状態でFPGA構成情報の更新が正常に行われた場合、フラッシュROM76の領域Aにバージョン3.0のFPGA構成情報が記憶されてWRITEプロテクトが掛けられ、領域Bにバージョン2.0のFPGA構成情報が記憶され、領域AからFPGA構成情報が読み出される状態(図14に示すUpdate2状態)になる。
この状態でFPGA構成情報の更新が失敗し、修正したFPGA構成情報を転送することでFPGA構成情報の更新に成功した場合、まずFPGA構成情報の更新が失敗した時点で、フラッシュROM76の領域Aにバージョン3.0のFPGA構成情報が記憶され、領域Bにバージョン4.0のFPGA構成情報が記憶されるが、バージョン4.0のFPGA構成情報では正常に通信ができないので、領域AにWRITEプロテクトが掛けられ、領域AからFPGA構成情報が読み出される状態(図14に示すFault1の1行目の状態)になる。そして、修正したFPGA構成情報(バージョン4.1のFPGA構成情報)を転送することでFPGA構成情報の更新に成功すると、フラッシュROM76の領域Aにバージョン3.0のFPGA構成情報が記憶され、領域Bにバージョン4.1のFPGA構成情報が記憶されてWRITEプロテクトが掛けられ、領域BからFPGA構成情報が読み出される状態(図14に示すFault1の2行目の状態)になる。
この状態で更にFPGA構成情報の更新が正常に行われた場合、フラッシュROM76の領域Aにバージョン5.0のFPGA構成情報が記憶されてWRITEプロテクトが掛けられ、領域Bにバージョン4.1のFPGA構成情報が記憶され、領域BからFPGA構成情報が読み出される状態(図14に示すUpdate3状態)になる。
上述したように、本実施形態では、画像処理部64のフラッシュROM76の領域Bに書き込まれた更新用のFPGA構成情報によって画像処理部64のFPGA74を再構成(回路を形成)させたときに、通信線35経由のコントローラ20のCPU24との通信でエラーが検出された場合、フラッシュROM76の領域Aに書き込まれた現行バージョンのFPGA構成情報によってFPGA74を再構成(回路を形成)させる。これにより、画像処理部64の基板を交換する等の作業を行うことなく、画像処理部64のCPU68とコントローラ20のCPU24との通信線35経由での通信が復旧する。
なお、上記のケースにおいて、画像形成装置22は本発明に係る電子機器の一例であり、FPGA74は本発明における回路形成デバイスの一例であり、フラッシュROM76の領域Bは本発明における第1記憶部の一例であり、フラッシュROM76の領域Aは本発明における第2記憶部の一例であり、画像処理部64のCPU68、NVM80およびコンフィグ回路78は本発明における復旧制御部の一例である。
また、動作が同じであるので説明を省略したが、画像処理部64のフラッシュROM76の領域Aに書き込まれた更新用のFPGA構成情報によって画像処理部64のFPGA74を再構成(回路を形成)させたときに、通信線35経由のコントローラ20のCPU24との通信でエラーが検出された場合には、フラッシュROM76の領域Bに書き込まれた現行バージョンのFPGA構成情報によってFPGA74を再構成(回路を形成)させる。これにより、画像処理部64の基板を交換する等の作業を行うことなく、画像処理部64のCPU68とコントローラ20のCPU24との通信線35経由での通信が復旧する。このケースにおいて、フラッシュROM76の領域Aは本発明における第1記憶部の一例であり、フラッシュROM76の領域Bは本発明における第2記憶部の一例である。
また、本実施形態では、更新用のFPGA構成情報によってFPGA74を再構成(回路を形成)したときに通信線35経由でコントローラ20のCPU24と正常に通信できた場合に、FPGA74が回路形成に使用したFPGA構成情報のバージョンが更新用のFPGA構成情報のバージョンと一致しているか否か判定し、バージョンが相違していた場合に、現行のFPGA構成情報によってFPGA74を再構成(回路を形成)する。これにより、FPGA74が回路形成に使用したFPGA構成情報のバージョンが更新用のFPGA構成情報のバージョンと相違していた場合にも、これがエラーとして処理される。
また、本実施形態では、フラッシュROM76の領域AにWRITEプロテクトが設定されている状態で、フラッシュROM76の領域Bに記憶された更新用のFPGA構成情報によってFPGA74を再構成(回路を形成)したときに通信線35経由でコントローラ20のCPU24と正常に通信できた場合に、フラッシュROM76の領域BにWRITEプロテクトを設定するので、通信線35経由でのコントローラ20のCPU24との通信が確立することが確認された新バージョンのFPGA構成状況の誤消去が防止される。
更に、本実施形態では、通信線35経由で更新用のFPGA構成情報を受信する場合に、フラッシュROM76のWP領域に予め書き込まれた初期構成情報によってFPGA74を再構成(回路を形成)するので、更新用のFPGA構成情報の受信に成功する確率が向上する。
なお、上記では、本発明における第1回路と第2回路がバージョンが異なり構成が同一の回路である場合を説明したが、本発明はこれに限定されるものではなく、第1回路と第2回路は構成が異なる回路であってもよい。
また、上記では本発明における回路形成デバイスの一例としてFPGAを説明したが、本発明はこれに限定されるものではなく、SPLD、CPLD、DAP(Digital Application Processor)/DNA(Distributed Network Architecture)等のプログラマブル論理デバイスやその他のデバイスにも適用可能である。
また、上記では、印刷システム10のコントローラ20および画像形成装置22の画像処理部64に本発明を適用した態様を説明したが、本発明はこれに限定されるものではなく、構成情報によって通信機能を含む機能を実現する回路が形成される回路形成デバイスが搭載された電子機器であれば、本発明を適用可能である。