(57)【要約】【課題】  シーケンス番号を省くことで高速通信可能とし、かつビット化けを生じてもシステムエラーを回避する。【解決手段】  複数種類の制御コードが、１ビットエラーが発生してもＮＡＣＫコードやＡＣＫコードとは異なるエラーコードが発生するコードであり、かつＮＡＣＫコードやＡＣＫコードが、１ビットエラーが発生しても制御コードとは異なるエラーコードが発生するコードであり、受信した制御パケットのヘッダに、複数種類の制御コードのうちのいずれか、あるいは制御コードの種類が判明するエラーコードが含まれていたときは、その制御パケットのＣＲＣに基づき、エラーの有無に応じてそれぞれＮＡＣＫパケットあるいはＡＣＫパケットを返信し、受信した制御パケットのヘッダに、制御コードの種類が不明なエラーコードが含まれていたときは、不明なエラーコードが含まれていたことをもってＮＡＣＫパケットを返信する。【選択図】        図５
2015080091.tif 000002
【特許請求の範囲】
【請求項１】
互いを通信相手としてパケット通信を行なう第１通信部および第２通信部を備え、該第１通信部および該第２通信部のそれぞれが、
複数種類の制御コードのうちのいずれかの制御コードが記録されたヘッダと、ペイロードと、エラー検出符号とを有する制御パケットを生成して通信相手に向けて送信する送信部と、
通信相手から送信されてきた制御パケットを受信して該制御パケットのエラーの有無を調べ、前記送信部に、ＮＡＣＫコードおよびＡＣＫコードのいずれか一方を記録した返信パケットの送信を依頼する受信部とを備え、
前記送信部がさらに、前記受信部からの依頼に応じて、前記返信パケットを生成して通信相手に向けて送信し、
前記受信部がさらに、通信相手から送信されてきた返信パケットを受信するものであって、
前記複数種類の制御コードのいずれもが１ビットエラーが発生しても前記ＮＡＣＫコードおよび前記ＡＣＫコードのいずれとも異なるエラーコードが発生するコードであって、かつ前記ＮＡＣＫコードおよび前記ＡＣＫコードのいずれもが１ビットエラーが発生しても前記複数種類の制御コードのいずれとも異なるエラーコードが発生するコードであり、
前記受信部が、受信した前記制御パケットのヘッダに、前記複数種類の制御コードのうちのいずれか、あるいは制御コードの種類が判明するエラーコードが含まれていたときは、当該制御パケットの前記エラー検出符号あるいは該エラー検出符号に相当する領域に記録されている符号に基づき、エラーの有無に応じてそれぞれＮＡＣＫコードあるいはＡＣＫコードを記録した返信パケットを返信し、
受信した前記制御パケットのヘッダに、制御コードの種類が不明なエラーコードが含まれていたときは、該不明なエラーコードが含まれていたことをもってＮＡＣＫコードを記録した返信パケットを返信するものであることを特徴とする通信装置。
【請求項２】
前記ＮＡＣＫコードが記録された返信パケットは、該ＮＡＣＫコードに１ビットエラーが生じた場合であっても、エラーを生じたＮＡＣＫコードであることが判明する形式の返信パケットであって、
前記受信部は、受信した返信パケットにＮＡＣＫコードあるいはＮＡＣＫコードであると判明するエラーコードが含まれていたときに、前記送信部に、当該返信パケットに対応する制御パケットを再送させるものであることを特徴とする請求項１記載の通信装置。
【請求項３】
前記ＡＣＫコードが、１ビットエラーが発生したときに、前記複数の制御コードのうちのいずれかの制御コードに１ビットエラーが発生したときのエラーコードと同一のエラーコードとなることがあるコードであって、
前記受信部は、受信した返信パケットに、該同一のエラーコードが含まれていたときに、前記送信部に、ＮＡＣＫコードを含む返信パケットを再返信させるものであることを特徴とする請求項１又は２記載の通信装置。
【請求項４】
前記受信部は、ＮＡＣＫコードあるいはＡＣＫコードを含む返信パケットを受信した場合において該返信パケットに対応する制御パケットが存在しないときは、前記送信部に、ＡＣＫコードを記録した返信パケットを再返信させるものであることを特徴とする請求項１から３のうちいずれか１項記載の通信装置。
【請求項５】
前記ＮＡＣＫコードおよび前記ＡＣＫコードが、１ビットエラーを生じたときにそれぞれＡＣＫコードと同一のエラーコードおよびＮＡＣＫコードと同一のエラーコードとなることがあるコードであって、
前記返信パケットが、ＮＡＣＫコードおよびＡＣＫコードのいずれか一方のコードとパリティビットとを含むパケットであることを特徴とする請求項１から４のうちいずれか１項記載の通信装置。
【請求項６】
前記受信部は、受信した返信パケットにパリティエラーが発生し、かつＮＡＣＫコードあるいはＡＣＫコードと同一のコードが含まれていたときは、前記送信部に、当該返信パケットに対応する制御パケットを再送させるものであることを特徴とする請求項５記載の通信装置。
【請求項７】
前記返信パケットが、前記制御パケットのヘッダのビット長に対応したビット長のパケットであることを特徴とする請求項１から６のうちのいずれか１項記載の通信装置。
【請求項８】
請求項１から７のうちのいずれか１項記載の通信装置を備えて被制御機器の動作を制御する制御装置であって、
前記被制御機器の状態を認識して該被制御機器を制御するための指令を発する中央処理装置と、前記通信装置のうちの前記第１通信部とを備えた主制御部と、
前記通信装置のうちの前記第２通信部を備え、前記主制御部と前記被制御機器の双方に接続されて、前記中央処理装置から発せられ前記通信装置により送信されれきた指令に基づいて前記被制御機器の動作を制御するとともに該被制御機器の状態を該通信装置により前記主制御部に送信する機器制御部とを備えたことを特徴とする制御装置。
【請求項９】
請求項８記載の制御装置と、前記機器制御部に接続された、画像を形成する被制御機器とを備えたことを特徴とする画像形成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信装置、制御装置、および画像形成装置に関する。
【背景技術】
【０００２】
ＰＣＩ  Ｅｘｐｒｅｓｓ技術が知られている。非特許文献１の第４章には、パケットの通し番号であるシーケンス番号が付加されたパケットを送受信し、受信側は送信側からシーケンス番号順に正常に届いた事を確認し、エラー等によりパケットが欠落した場合は、復旧のためのリトライを実行することが記載されている。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】『ＰＣＩ  Ｅｘｐｒｅｓｓ入門講座』、荒井信隆・里見尚志・田中顕裕  共著、電波新聞社  、２００７年４月１日発行（３月１５日発売）
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明は、シーケンス番号を省くことで高速通信可能とし、かつビット化けを生じてもシステムエラーを回避した通信装置、制御装置、および画像形成装置を提供することを目的とする。
【課題を解決するための手段】
【０００５】
請求項１は、互いを通信相手としてパケット通信を行なう第１通信部および第２通信部を備え、該第１通信部および該第２通信部のそれぞれが、
複数種類の制御コードのうちのいずれかの制御コードが記録されたヘッダと、ペイロードと、エラー検出符号とを有する制御パケットを生成して通信相手に向けて送信する送信部と、
通信相手から送信されてきた制御パケットを受信して該制御パケットのエラーの有無を調べ、前記送信部に、ＮＡＣＫコードおよびＡＣＫコードのいずれか一方を記録した返信パケットの送信を依頼する受信部とを備え、
前記送信部がさらに、前記受信部からの依頼に応じて、前記返信パケットを生成して通信相手に向けて送信し、
前記受信部がさらに、通信相手から送信されてきた返信パケットを受信するものであって、
前記複数種類の制御コードのいずれもが１ビットエラーが発生しても前記ＮＡＣＫコードおよび前記ＡＣＫコードのいずれとも異なるエラーコードが発生するコードであって、かつ前記ＮＡＣＫコードおよび前記ＡＣＫコードのいずれもが１ビットエラーが発生しても前記複数種類の制御コードのいずれとも異なるエラーコードが発生するコードであり、
前記受信部が、受信した前記制御パケットのヘッダに、前記複数種類の制御コードのうちのいずれか、あるいは制御コードの種類が判明するエラーコードが含まれていたときは、当該制御パケットの前記エラー検出符号あるいは該エラー検出符号に相当する領域に記録されている符号に基づき、エラーの有無に応じてそれぞれＮＡＣＫコードあるいはＡＣＫコードを記録した返信パケットを返信し、
受信した前記制御パケットのヘッダに、制御コードの種類が不明なエラーコードが含まれていたときは、該不明なエラーコードが含まれていたことをもってＮＡＣＫコードを記録した返信パケットを返信するものであることを特徴とする通信装置である。
【０００６】
請求項２は、前記ＮＡＣＫコードが記録された返信パケットは、該ＮＡＣＫコードに１ビットエラーが生じた場合であっても、エラーを生じたＮＡＣＫコードであることが判明する形式の返信パケットであって、
前記受信部は、受信した返信パケットにＮＡＣＫコードあるいはＮＡＣＫコードであると判明するエラーコードが含まれていたときに、前記送信部に、当該返信パケットに対応する制御パケットを再送させるものであることを特徴とする請求項１記載の通信装置である。
【０００７】
請求項３は、前記ＡＣＫコードが、１ビットエラーが発生したときに、前記複数の制御コードのうちのいずれかの制御コードに１ビットエラーが発生したときのエラーコードと同一のエラーコードとなることがあるコードであって、
前記受信部は、受信した返信パケットに、該同一のエラーコードが含まれていたときに、前記送信部に、ＮＡＣＫコードを含む返信パケットを再返信させるものであることを特徴とする請求項１又は２記載の通信装置である。
【０００８】
請求項４は、前記受信部は、ＮＡＣＫコードあるいはＡＣＫコードを含む返信パケットを受信した場合において該返信パケットに対応する制御パケットが存在しないときは、前記送信部に、ＡＣＫコードを記録した返信パケットを再返信させるものであることを特徴とする請求項１から３のうちいずれか１項記載の通信装置である。
【０００９】
請求項５は、前記ＮＡＣＫコードおよび前記ＡＣＫコードが、１ビットエラーを生じたときにそれぞれＡＣＫコードと同一のエラーコードおよびＮＡＣＫコードと同一のエラーコードとなることがあるコードであって、
前記返信パケットが、ＮＡＣＫコードおよびＡＣＫコードのいずれか一方のコードとパリティビットとを含むパケットであることを特徴とする請求項１から４のうちいずれか１項記載の通信装置である。
【００１０】
請求項６は、前記受信部は、受信した返信パケットにパリティエラーが発生し、かつＮＡＣＫコードあるいはＡＣＫコードと同一のコードが含まれていたときは、前記送信部に、当該返信パケットに対応する制御パケットを再送させるものであることを特徴とする請求項５記載の通信装置である。
【００１１】
請求項７は、前記返信パケットが、前記制御パケットのヘッダのビット長に対応したビット長のパケットであることを特徴とする請求項１から６のうちのいずれか１項記載の通信装置である。
【００１２】
請求項８は、請求項１から７のうちのいずれか１項記載の通信装置を備えて被制御機器の動作を制御する制御装置であって、
前記被制御機器の状態を認識して該被制御機器を制御するための指令を発する中央処理装置と、前記通信装置のうちの前記第１通信部とを備えた主制御部と、
前記通信装置のうちの前記第２通信部を備え、前記主制御部と前記被制御機器の双方に接続されて、前記中央処理装置から発せられ前記通信装置により送信されれきた指令に基づいて前記被制御機器の動作を制御するとともに該被制御機器の状態を該通信装置により前記主制御部に送信する機器制御部とを備えたことを特徴とする制御装置である。
【００１３】
請求項９は、請求項８記載の制御装置と、前記機器制御部に接続された、画像を形成する被制御機器とを備えたことを特徴とする画像形成装置である。
【発明の効果】
【００１４】
請求項１の通信装置、請求項８の制御装置、および請求項９の画像形成装置によれば、シーケンス番号を付したパケットの送受信と比べ高速通信可能であって、かつ、１ビット化けが生じてもシステムエラーを回避することができる。
【００１５】
請求項２の通信装置によれば、ＮＡＣＫコードとして、ＮＡＣＫコードのビットエラーであることが分からない場合があるコードを採用した場合と比べ、速やかな再送が可能となる。
【００１６】
請求項３の通信装置によれば、制御パケットの１ビットエラーとＡＣＫコードの１ビットエラーとを統一的に取り扱うことができる。
【００１７】
請求項４の通信装置によれば、稀なケースにもシステムエラーを回避できる。
【００１８】
請求項５の通信装置によれば、通信パケットにパリティビットを含めることによってビット化けによるＮＡＣＫコードやＡＣＫコードと同一のエラーコードの発生が許容され、システムエラーが回避される。
【００１９】
請求項６の通信装置によれば、パリティエラーという異常が生じたときは一層安全サイドのシーケンスが実行される。
【００２０】
請求項７の通信装置によれば、一層高速な通信が可能である。
【図面の簡単な説明】
【００２１】
【図１】本発明の一実施形態としての画像形成装置の構成を示すブロック図である。
【図２】図１に示す主制御部を構成する第１通信部の構成を示すブロック図である。
【図３】図１に示す機器制御部を構成する第２通信部の構成を示すブロック図である。
【図４】図１〜図３に示す第１通信部と第２通信部との間で送受信されるパケットのフレーム構成を示した図である。
【図５】各種のコードと、各コードごとの１ビット化けのパターンを示した図である。
【図６】基本通信フローを示した図である。
【図７】パケット受信側での処理フローを示したフローチャートである。
【図８】ＡＣＫコードにビット化けが生じたときのパケット送受信シーケンスの、稀なケースを示した図である。
【図９】図７に示したパケット受信側の処理フローの変形例を示したフローチャートである。
【発明を実施するための形態】
【００２２】
以下、本発明の実施の形態を説明する。
【００２３】
図１は、本発明の一実施形態としての画像形成装置の構成を示すブロック図である。この画像形成装置は、本発明の各一実施形態としての制御装置および通信装置を内包している。
【００２４】
この画像形成装置１は、制御装置１０と機器５０を備えている。
【００２５】
機器５０は、用紙上に画像を形成する機能を備えた機器であって、例えばコピー機、プリンタ、ファクシミリ装置等がこれに該当する。この機器５０としては、好適な一例として、電子写真方式が採用されている。ただし、この機器５０は、電子写真方式を採用した機器である必要はなく、例えばインクジェット方式あるいは感熱方式等、電子写真方式以外の方式により画像を形成する機器であってもよい。ただしここでは、機器５０として電子写真方式を採用した機器を念頭において説明する。
【００２６】
機器５０には、用紙の有無を検出するセンサなど、この機器５０の状態を知るための様々なセンサが備えられている。また、この機器５０には、感光体を駆動するモータなど複数の動力源が備えられている。
【００２７】
制御装置１０は、この機器５０と接続されており、この機器５０に備えられた様々なセンサによる検出値を入力してこの機器５０の状態を知り、また、この機器５０の様々な動力源を駆動してこの機器５０を動作させる役割を担っている。この制御装置１０は、本発明の制御装置の一例に相当する。
【００２８】
尚、この図１では、制御装置１０と機器５０は、別々のブロックで示しているが、制御装置１０と機器５０は、物理的にはそれらの双方が１つの筐体内に収容されていてもよい。
【００２９】
制御装置１０には、主制御部２０と機器制御部３０が備えられており、それら主制御部２０と機器制御部３０は、シリアルバス４０で相互に接続されている。
【００３０】
主制御部２０には、ＣＰＵ２１、第１通信部２２、および複写レジスタ群２３が備えられている。また機器制御部３０には、第２通信部３１、入出力制御レジスタ群３２、および駆動・受信回路３３を備えている。シリアルバス４０は、主制御部２０の第１通信部２２と機器制御部３０の第２通信部３１とを接続している。このシリアルバス４０で接続された第１通信部２２と第２通信部３１との組合せが、本発明の通信装置の一例に相当する。
【００３１】
機器５０の各種センサや各種動力源は、機器制御部３０の駆動・受信回路３３に接続されている。駆動・受信回路３３は、機器５０の各種センサによる検出値を機器５０から取得して入出力制御レジスタ群３２に書き込む。
【００３２】
第２通信部３１は、入出力制御レジスタ群３２の一連の内容全てを定期的に第１通信部２２に送信する。第１通信部は、第２通信部３１から送信されてきた入出力制御レジスタ群３２の内容を複写レジスタ群２３に記録する。ここでは、この動作を、入出力制御レジスタ群３２の内容を複写レジスタ群２３に「複写する」と表現する。複写レジスタ群２３に複写された、機器５０の各種センサの検出値は、ＣＰＵ２１によって参照される。ここで、入出力レジスタ群３２からの複写レジスタ群２３への複写は、短い周期で繰り返し行なわれる。このためＣＰＵ２１は、基本的には、この複写レジスタ群２３を参照するだけで、機器５０の現在の状態を正確に認識することができる。
【００３３】
ＣＰＵ２１は、機器５０の現在の状態を認識し、機器５０にその現在の状態に応じた動作を実行させるための指令、すなわち制御値を出力する。ＣＰＵ２１から出力された制御値は、第１通信部２２から第２通信部３１に送信され、第２通信部３１はその制御値を入出力制御レジスタ群３２に書き込む。駆動・受信回路３３は、その入出力制御レジスタ群３２に書き込まれた制御値を参照しその制御値に従って機器５０の動力源を駆動する。
【００３４】
ここで、入出力制御レジスタ群３２には、入力レジスタ、出力レジスタ、割込みレジスタ、および割込み要因レジスタが含まれている。入力レジスタは、駆動・受信回路３３が機器５０から受け取った、各種センサによる検出値が書き込まれるレジスタである。この入力レジスタに書き込まれた検出値は前述の複写により複写レジスタ群２３に書き込まれてＣＰＵ２１により参照される。また出力レジスタは、ＣＰＵ２１から出力された指令に基づく制御値が書き込まれるレジスタである。この出力レジスタに書き込まれた制御値は、駆動・受信回路３３によって読み出される。駆動・受信回路３３は、その読み出した制御値に従って機器５０を制御する。
【００３５】
また、機器５０に何らかの異常、例えば用紙詰まり、異常な温度上昇等が発生すると、機器５０から割込信号が発せられる。割込みレジスタおよび割込み要因レジスタは、機器５０から割込信号を受信したときに、割込みが発生したことを示すデータおよび割込要因を示すデータがそれぞれ書き込まれるレジスタである。
【００３６】
なお主制御部２０を構成しているＣＰＵ２１は、不図示のシステムタイマを基準として動作する。このシステムタイマはあらかじめ定められた周期ごとにタイムアップしてシステムロックを生成し、各クロックパルス毎にＣＰＵ２１に対しタイマ割込みを発生させる。システムタイマは、リアルタイムＯＳ（オペレーティングシステム）による一般的な技術であり、ここでの説明は省略する。
【００３７】
また機器制御部３０にも不図示のタイマが備えられていて、主制御部２０のシステムクロックと同じ周期のクロックを出力する。この機器制御部３０では、その出力されたクロックに基づいて、主制御部２０と同期した動作が実行される。
【００３８】
図２は、図１に示す主制御部を構成する第１通信部の構成を示すブロック図である。
【００３９】
図２に示す第１通信部２２には、ＣＰＵバスインタフェース２２１、コントローラ２２２、パケット生成回路２２３、バッファ２２４、およびパラレルシリアル変換回路２２５が備えられている。またこの第１通信部２２にはさらに、シリアルパラレル変換回路２２６、バッファ２７、パケットデコード回路２２８、およびアドレスカウンタ２２９を備えている。
【００４０】
ＣＰＵバスインタフェース２２１は、ＣＰＵ２１と第１通信部２２との間の通信を担うインタフェースであって、図１に示すＣＰＵ２１との間がＣＰＵバスで接続されている。
【００４１】
また、コントローラ２２２は、この第１通信部２２を構成する各要素と接続され、この第１通信部２２の全体の制御を担っている。
【００４２】
パケット生成回路２２３では、図１に示す機器制御部３０への送信用のパケットが生成される。その生成されたパケットは、一旦、バッファ２２４に格納される。バッファ２２４に一旦格納されたパケットはパラレルシリアル変換回路２２５により取り出されてシリアル形式のパケットに変換され、シリアルバス４０を介して機器制御部３０に送信される。
【００４３】
ここで、バッファ２２４には送信待バッファ２２４ａと送信済バッファ２２４ｂが設けられている。送信待バッファ２２４ａは、未だ送信されていないパケットが格納されるバッファである。また送信済バッファ２２４ｂは、機器制御部３０に向けて送信された後のパケットが格納されるバッファである。これは、機器制御部３０側からＮＡＣＫパケットが送信されてきたときの再送用である。このＮＡＣＫパケットは、機器制御部３０に向けて送信したパケットが機器制御部３０で正常に受信できなかったときに機器制御部３０から返信されるパケットである、本実施形態は再送は１回のみ許容するシステムとなっている。２度連続して正常な受信ができなかったときはハードウエア障害の可能性が高く、システムエラーとなる。送信済バッファ２２４ｂに格納しておいたパケットは、機器制御部３０から、正常に受信したことを表わすＡＣＫパケットを受信した場合に、その送信済バッファ２２４ｂから消去される。
【００４４】
すなわち、パケット回路２２３で生成されたパケットは送信待バッファ２２４ａに格納され、機器制御部３０に向けて送信されるとそのパケットは送信待バッファ２２４ａからは消去されて送信済バッファ２２４ｂに格納される。そしてその送信済バッファ２２４ｂに格納されたパケットは、ＡＣＫパケットを受信すると、その送信済バッファ２２４ｂからも消去される。
【００４５】
一方、機器制御部３０からシリアルバス４０を介して送信されてきたパケットは、シリアルパラレル変換回路２２６によりパラレル形式のパケットに変換されてバッファ２２７に一旦格納される。このバッファ２２７に格納されたパケットはパケットデコード回路２２８により取り出されデコードされて、そのパケットからコードやデータ等が取り出される。
【００４６】
アドレスカウンタ２９は、複写レジスタ群２３へのデータ書込みのアドレスを生成する。詳細は後述する。
【００４７】
また、この図２には、コントローラ２２２内の構成要素として、未定義コード制御部２２２ａ、検出フラグ２２２ｂ、再送管理部２２２ｃが示されている。再送管理部２２２ｃは、上述したパケットの再送を管理している。未定義コード制御部２２２ａおよび検出フラグの作用については後述する。
【００４８】
図３は、図１に示す機器制御部を構成する第２通信部の構成を示すブロック図である。
【００４９】
この図３に示す第２通信部３１には、コントローラ３１１、シリアルパラレル変換回路３１２、バッファ３１３、およびパケットデコード回路３１４が備えられている。また、この第２通信部３１にはさらに、アドレスカウンタ３１５、パケット生成回路３１６、バッファ３１７、およびパラレルシリアル変換回路３１８が備えられている。
【００５０】
コントローラ３１１は、この第２通信部３１を構成する各要素と接続され、この第２通信部３１の全体の制御を担っている。
【００５１】
図１に示す主制御部２０からシリアルバス４０を介して送信されてきたパケットは、シリアルパラレル変換回路３１２によりシリアル形式のパケットに変換されてバッファ３１３に一旦格納される。このバッファ３１３に格納されたパケットはパケットデコード回路３１４により取り出されてデコードされ、そのパケットからコードやデータが取り出される。
【００５２】
アドレスカウンタ３１５は、入出力制御レジスタ群３２からのデータ読出しのアドレスを生成する。詳細は後述する。
【００５３】
また、パケット生成回路３１６では、図１に示す主制御部２０側への送信用のパケットが生成される。その生成されたパケットは、一旦、バッファ３１７に格納される。バッファ３１７に一旦格納されたパケットはパラレルシリアル変換回路３１８により取り出されてシリアル形式のパケットに変換され、シリアルバス４０を介して主制御部２０に送信される。
【００５４】
バッファ３１７には送信待バッファ３１７ａと送信済バッファ３１７ｂが設けられている。これら送信待バッファ３１７ａおよび送信済バッファ３１７ｂの役割は、図２に示す第１通信部２２におけるバッファ２２４を構成している送信待バッファ２２４ａおよび送信済バッファ２２４ｂとそれぞれ同じである。すなわち、パケット生成回路３１６で生成されたパケットは送信待バッファ３１７ａに格納され、そのパケットが主制御部２０に向けて送信されるとそのパケットは送信待バッファ３１７ａからは消去されて送信済バッファ３１７ｂに格納される。そしてその送信済バッファ３１７ｂに格納されたパケットは、主制御部２０からＡＣＫパケットを受信すると、その送信済バッファ３１７ｂからも消去される。
【００５５】
また、この図３には、図２と同様、コントローラ３１１内の構成要素として、未定義コード制御部３１１ａ、検出フラグ３１１ｂ、再送管理部３１１ｃが示されている。これら
未定義コード制御部３１１ａ、検出フラグ３１１ｂ、再送管理部３１１ｃの役割は、図２に示す第１通信部２２のコントローラ２２２における、未定義コード制御部２２２ａ、検出フラグ２２２ｂ、再送管理部２２２ｃとそれぞれ同一である。
【００５６】
次に本実施形態に係る制御装置１０におけるデータの流れについて説明する。
【００５７】
＜入出力制御レジスタ群３２の更新＞
ＣＰＵ２１は、機器５０を制御するための制御値を書込むための書込要求をＣＰＵバスを介して第１通信部２２に出力する。この書込要求には、書き込むべきデータだけでなく、入出力制御レジスタ群３２の、そのデータの書込先となるレジスタのアドレスが指定されている。第１通信部２２のコントローラ２２２は、ＣＰＵバスインタフェース２２１を介して書込要求を受け取り、パケット生成回路２２３、バッファ２２４、およびパラレルシリアル変換回路２２５を制御し、ＣＰＵ２１から受け取った書込要求をパケット化して送信する。
【００５８】
機器制御部３０のコントローラ３１１は、シリアルパラレル変換回路３１２、バッファ３１３、およびパケットデコード回路３１４を制御し、書込要求のパケットをデコードして書込要求を取り出す。
【００５９】
コントローラ３１１は、入出力制御レジスタ群３２に含まれる出力レジスタのうち、上記デコードにより得られた書込要求で指定されたアドレスの出力レジスタに、当該出力レジスタに対応する動力源を制御するための制御値を書込む。これにより、書込まれた制御値に応じて、機器５０の対応する動力源が駆動される。
【００６０】
なお、ＣＰＵ２１からの書込要求の出力による入出力レジスタ群３２への書込みについては、ＣＰＵ２１から第１通信部２２に対して書込要求を出力しさえすれば、その後は、第１通信部２２でパケットが生成され、機器制御部３０で書込処理されるため、ＣＰＵ２１が書込処理待ちとなることはない。
【００６１】
また、図１に示す駆動・受信回路３３は、機器５０からその機器５０の状態を示すセンサの検出値が入力されると、その検出値を入出力制御レジスタ群３２の、そのセンサに対応する入力レジスタに書込む。
【００６２】
本実施形態では、機器制御部３０に、不図示の割込検出回路が設けられている。その割込検出回路により機器５０からの割込が検出された場合には、機器制御部３０の第２通信部３１に設けられたコントローラ３１１は、入出力制御レジスタ群３２の割込レジスタに、割込発生を示すデータを書き込むと共に、割込要因レジスタに、割込要因のデータを書き込む。さらに、コントローラ３１１は、パケット生成回路３１６に割込パケットを生成させ、パラレルシリアル変換回路３１８にシリアル変換させて主制御部２０に送信させる。
【００６３】
＜複写レジスタ群２３への複写＞
本実施形態の制御装置１０では、システムタイマのタイムアップの毎周期ごと、すなわちシステムクロックの各パルスごとに、入出力制御レジスタ群３２に記憶されている全データを読み出しシリアルバス４０を介して送信して複写レジスタ群２３に書込む複写処理が行なわれる。この複写処理は高速に行なわれ、例えば、システムクロックの周期が１ｍｓであれば、一回の複写処理は、その１ｍｓよりも短い時間に余裕を持って完了する。本実施形態では、入出力制御レジスタ群３２に記憶された各データを先頭アドレスから順に読み出して、読み出したデータの複写先のアドレスを指定せずに複数のパケットを生成して順次送信し、複数のパケットの転送順に複写レジスタ群２３の先頭アドレスから順次にデータを書き込む。
【００６４】
以下、この複写処理を詳しく説明する。
【００６５】
機器制御部３０の第２通信部３１のコントローラ３１１は、機器制御部３０に設けられた、システムクロックと同期したクロックを発生するタイマからのクロックの１パルスごとに、入出力制御レジスタ群３２から複写レジスタ群２３へのデータ複写のための読出処理が開始される。
【００６６】
具体的には、コントローラ３１１は、アドレスカウンタ３１５から出力されたアドレスに従って、入出力制御レジスタ群３２の先頭アドレスから順次に、予め定められた読出サイズ分（本実施形態では４ワードずつ）のデータを読み出して、読み出したデータをパケット生成回路３１６に順次に入力する。そして、コントローラ３１１がデータを読み出す毎に、アドレスカウンタ３１５が読出サイズ分（４ワード分）だけカウントアップする。コントローラ３１１は、入出力制御レジスタ群３２から全データを読み出すまで、アドレスカウンタ３１５のカウント値が示すアドレスから読出サイズ分（４ワード分）のデータを読み出してパケット生成回路３１６に入力することを繰り返す。
【００６７】
パケット生成回路３１６は、複写対象のデータが入力される毎に、そのデータを複写レジスタ群２３に書き込ませるための複写命令のパケット（以下、複写パケットという）を生成し、バッファ３１７に記憶する。なお、複写パケットには、複写先（書込先）のアドレスの情報は含めない。これにより、データ量が削減され、高速送信が行なわれる。
【００６８】
パラレルシリアル変換回路３１８は、コントローラ３１１の制御の下、バッファ３１７に記憶された複写パケットをシリアル形式に変換して、シリアルバス４０に出力する。これにより、入出力制御レジスタ群３２に記憶されている全データが主制御部２０に転送される。
【００６９】
主制御部２０に転送された複写パケットは、シリアルパラレル変換回路２２６によりパラレル形式の複写パケットに変換されて、バッファ２２７に記憶される。パケットデコード回路２２８は、バッファ２２７に記憶された複写パケットをデコードして複写すべきデータを取り出す。
【００７０】
コントローラ２２２は、パケットデコード回路２２８でデコードされて得られたデータを、複写レジスタ群２３の、アドレスカウンタ２２９から出力されたアドレスが示すレジスタに書込む。１つの複写パケットにより書込まれるデータのサイズは、入出力制御レジスタ群３２からデータを読出したときの読出サイズ（４ワード）に等しい。アドレスカウンタ２２９の初期値は、複写レジスタ群２３の先頭アドレスである。そして、コントローラ２２２が、複写レジスタ群２３に全ての複写パケットのデータを書き込むまで、アドレスカウンタ２２９が上記読出サイズ分（４ワード分）ずつカウントアップする。そしてコントローラ２２２は、入出力制御レジスタ群３２から読み出されて送信されてきたデータをアドレスカウンタ２２９のカウント値が示すアドレスに書き込む処理を繰り返す。
【００７１】
このように、本実施形態の制御装置１０は、入出力制御レジスタ群３２の先頭アドレスから順にデータを読み出して複写レジスタ群２３に順次に書き込む処理を繰り返すことにより、最終的に全データを複写レジスタ群２３に複写するため、複写パケットで複写先（書込先）のアドレスを指定しなくても、問題なく複写処理が実行される。これにより、複写処理が簡易化される。
【００７２】
ここで、複写パケットの転送処理中に割込みが発生した場合、転写処理中の１つの複写パケットが送信された後、次の複写パケットが送信されるまでの間に、割込パケットが主制御部２０に送信される。その場合であっても複写処理はシステムクロックの一周期内で余裕をもって終了する。
【００７３】
＜ＣＰＵ２１によるデータ読出し＞
ＣＰＵ２１は、入出力制御レジスタ群３２に書き込まれたデータを参照する場合、入出力制御レジスタ群３２からデータを直接に取得するのではなく、複写レジスタ群２３からデータを読み出すことで、入出力制御レジスタ群３２に書込まれたデータを参照することができる。
【００７４】
従って、ＣＰＵ２１は、データ読出しの際には、複写レジスタ群２３のアドレスを指定した読出要求を第１通信部２２に出力する。第１通信部２２のコントローラ２２２は、ＣＰＵバスインタフェース２２１を介してＣＰＵ２２２から複写レジスタ群２３のデータの読出要求を取得すると、複写レジスタ群２３に複写されたデータ（読出要求で指定されたアドレスのデータ）を読み出して、ＣＰＵ２１に供給する。
【００７５】
本実施形態では、主制御部２０に複写レジスタ群２３を設け、入出力制御レジスタ群３２のデータを複写レジスタ群２３に複写するようにしたため、ＣＰＵ２１は、シリアルバス４０を介さずとも、複写レジスタ群２３に複写されたデータを読み出すことで、入出力制御レジスタ群３２に記憶されたデータを取得することができる。
【００７６】
従って、データ読出しの遅延は生じず、必要以上に高速な伝送路を用いなくても高速な読出性能が確保される。
【００７７】
＜直接読出処理＞
上述の「ＣＰＵによるデータ読出し」では、ＣＰＵ２１が複写レジスタ群２３からデータを読み出す場合について説明したが、ＣＰＵ２１は、入出力制御レジスタ群３２からデータを直接に読み出すこともできる。この場合、ＣＰＵ２１から入出力制御レジスタ群３２からデータを直接読み出す読出要求が出力される。
【００７８】
コントローラ２２２は、複写レジスタ群２３からデータを読み出す通常の読出要求を受け取った場合には、上述したように、複写レジスタ群２１の指定アドレスのレジスタからデータを読み出して、ＣＰＵ２１に供給する。一方、コントローラ２２２は、入出力制御レジスタ群３２からデータを直接に読み出す読出要求を受け取った場合には、複写レジスタ群２３からのデータの読出しは行なわずに、入出力制御レジスタ群３２からデータを読み出す直接読出処理を行なう。
【００７９】
具体的には、コントローラ２２２は、入出力制御レジスタ群３２のアドレスが指定された読出要求をパケット生成回路２２３によりパケット化してバッファ２２４に記憶させる。パラレルシリアル変換回路２２５は、バッファ２２４に記憶された読出要求のパケットをシリアル形式のパケットに変換して、シリアルバス４０に出力する。
【００８０】
機器制御部３０の第２通信部３１において、読出要求のパケットを受信すると、受信したパケットをシリアルパラレル変換回路３１２によりパラレル化してバッファ３１３に記憶し、パケットデコード回路３１４により、バッファ３１３に記憶した読出要求のパケットをデコードして、読出要求のデータを取り出す。コントローラ３１１は、その読出要求に基づき、読出要求の指定アドレスが示す入出力制御レジスタ群３２のレジスタからデータを読み出し、その読み出したデータをパケット生成回路３１６によりパケット化してバッファ３１７に記憶し、バッファ３１７に記憶したパケットをパラレルシリアル変換回路３１８でシリアル形式に変換して、シリアルバス４０に出力する。
【００８１】
主制御部２０の第１通信部２２は、機器制御部３０から送信されてきた読出データのパケットを受け取ると、シリアルパラレル変換回路２２６によりパラレル形式に変換し、パケットデコード回路２２８によりデコードしてデータを取り出し、そのデータをＣＰＵバスインタフェース２２１がＣＰＵバスを介してＣＰＵ２１に供給する。
【００８２】
このような直接読出処理を可能に構成することで、ＣＰＵ２１が、入出力制御レジスタ群３２のデータを直接参照したい場合にも対応可能である。
【００８３】
＜その他＞
なお、ここでは、主制御部２０と機器制御部３０が１つずつ設けられている場合を例に挙げて説明したが、本実施形態の制御装置１０は、１つの主制御部２０に対し機器制御部３０が２つ設けられている場合にも対応している。その場合、それらの２つの機器制御部３０の各々と、それらに共通の１つの主制御部２０とがシリアルバス４０を介して接続されるよう構成される。そして上記のように２つの機器制御部３０双方の入出力制御レジスタ群３２に対する複写が、双方合わせてもシステムクロックの一周期以内の時間で完了するように実行される。
【００８４】
以上、図１〜図３に示す画像形成装置１におけるデータの流れについて説明したが、１回の制御パケット（後述する）の送信毎に、受信側から送信側に返信パケットが返信される。具体的には、受信側において、受信した制御パケットに対しエラーの有／無が調べられる。エラーが有ったときはＮＡＣＫコードを含む返信パケット（ＮＡＣＫパケット）が返信され、エラーが無く正常に受信できたときはＡＣＫコードを含む返信パケット（ＡＣＫパケット）が返信される。ＮＡＣＫパケットの返信を受け取ると、そのＮＡＣＫパケットの受信の直前に送信した制御パケットが再送される。
【００８５】
ここでは以下の２つの前提を置き、その前提を越えるエラーが発生したときは、ハードウエア障害が考えられるためシステムエラーとし、画像形成装置１の全体の動作を停止するものとする。
【００８６】
（１）１つのパケットの送受信においてエラーが発生するのは高々１ビット化けであって、１つのパケット内で同時に複数ビットが化けることはない。ここで「１ビット化け」とは、‘１’，‘０’の１ビットの信号がそれぞれ‘０’，‘１’に変化することを言う。
【００８７】
（２）受信した連続する２つのパケットの双方に「１ビット化け」が発生することはない。
【００８８】
以下では、上記（１），（２）の前提の下で、図１〜図３に示した制御装置２０における、ビット化けが発生したときの回復措置について説明する。
【００８９】
図４は、図１〜図３に示す第１通信部と第２通信部との間で送受信されるパケットのフレーム構成を示した図である。
【００９０】
図４（Ａ）は制御パケットのフレーム構成を示している。
【００９１】
制御パケットは、ヘッダと、ペイロードと、ＣＲＣとから構成されている。
【００９２】
ヘッダは７ビットで構成されていて、ここには、後述する複数種類の制御コードのうちのいずれかの制御コードが書き込まれる。
【００９３】
ペイロードは、実際に送受信したいデータの中身である。このペイロードの長さは、転送量を無駄に増やすのを避けるために、制御コードの種類により異なっている。
【００９４】
ＣＲＣは、エラー検出符号の一種である。受信側でこのＣＲＣが参照されてビット化け発生の有無が調べられる。
【００９５】
図４（Ｂ）は、制御パケットのヘッダの構成を示している。この図４（Ｂ）は返信パケットの構成の説明も兼ねている。すなわち、返信パケット（ＮＡＣＫパケットあるいはＡＣＫパケット）は、制御パケット（図４（Ａ））のヘッダと同じく７ビットで構成されている。
【００９６】
最初の１ビット目はシンクビットである。マーク（パケットが存在しない状態）を‘０’とすると、このシンクビットは‘１’であり、パケットの開始点であることを示している。
【００９７】
２ビット目は、宛先を示している。図１に示す制御装置１０は、１つの主制御部２０と１つの機器制御部３０とで構成されているが、前述の通り、１つの主制御部２０に対し機器制御部３０を２つ接続することが可能である。そこで、この２ビット目に‘０’または‘１’を書き込んで送受信することにより、２つの機器制御部３０のいずれが受信するかが決定される。また機器制御部３０から主制御部２０へ送信するときも、この２ビット目に、２つの機器制御部３０にそれぞれ割り当てられている‘０’または‘１’の符号が書き込まれる。これにより、主制御部２０はどちらの機器制御部３０から送信されてきたパケットであるかを知ることができる。
【００９８】
次の３〜５ビット目は、その次の６ビット目のＡ／Ｎと合わせて４ビットのコードを表わしている。コードの詳細は後述する。
【００９９】
７ビット目の再／Ｐには、制御パケットを初回に送信する際は‘０’、その制御パケットを再送する際は‘１’が書き込まれる。返信パケットのときは、パリティビットとして作用する。詳細は後述する。
【０１００】
図５は、各種のコードと、各コードごとの１ビット化けのパターンを示した図である。図５（Ａ）は制御コード、図５（Ｂ）はＮＡＣＫコード、図５（Ｃ）はＡＣＫコードである。
【０１０１】
制御コード（図５（Ａ））は、４種類存在する。制御コードの場合、４ビットの制御コードのうち１〜３ビット目のうちのいずれか２ビット以上が‘１’であり、４ビット目は常に‘０’である。
【０１０２】
ＮＡＣＫコード（図５（Ｂ））は、４ビットのうちの１〜３ビット目は‘０’、４ビット目が‘１’である。
【０１０３】
またＡＣＫコード（図５（Ｃ））は、４ビットのうちの１〜３ビット目は、ＮＡＣＫコードと同じく‘０’、４ビット目も‘０’である。
【０１０４】
図５（Ａ）に示す制御コードは４種類であるが、コードとしては同じであっても主制御部２０で発行される制御パケットと機器制御部３０で発行される制御パケットとではそのコードの意味が異なっている。以下、１つずつ説明する。
【０１０５】
＜主制御部発行制御コード＞
・「Ｗｒｉｔｅ  Ｗｏｒｄ」‘１１１０’は、主制御部２０から機器制御部３０への１ワード分のデータの書込みを指示する制御コードである。主制御部２０でこの「Ｗｒｉｔｅ  Ｗｏｒｄ」‘１１１０’の制御コードを持った制御パケットが発行されると、入出力制御レジスタ群３２の、その制御パケットのペイロードに埋め込まれたアドレスのレジスタに、同じくそのペイロードに埋め込まれた１ワード分のデータが書き込まれる。
・「Ｗｒｉｔｅ  Ｂｌｏｃｋ」‘１１００’は、主制御部２０から機器制御部３０への４ワード分（ここでは４ワードの集合を「ブロック」と称する）のデータの書込みを指示する制御コードである。「Ｗｒｉｔｅ  Ｗｏｒｄ」の１ワードが１ブロック（４ワード）に変更される点を除き、「Ｗｒｉｔｅ  Ｗｏｒｄ」と同様である。
・「Ｒｅａｄ  Ｗｏｒｄ」‘１０１０’は、主制御部２０から機器制御部３０への１ワード分のデータの読出要求を表わしている。主制御部２０でこの「Ｒｅａｄ  Ｗｏｒｄ」の制御コードを持った制御パケットが発行されると、機器制御部３０では、その制御パケットのペイロードに埋め込まれている入出力制御レジスト群３２のアドレスから１ワード分のデータが読み出されてそのデータを埋め込んだ制御パケットが発行され、その制御パケットが主制御部２０に向けて送信される。尚、この機器制御部３０で発行される制御パケットについては後述する。
・「Ｒｅａｄ  Ｂｌｏｃｋ」‘０１１０’は、主制御部２０から機器制御部３０への１ブロック分のデータの読出要求を表わしている。この「Ｒｅａｄ  Ｂｌｏｃｋ」は、「Ｒｅａｄ  Ｗｏｒｄ」の１ワードが１ブロックに変更される点を除き、「Ｒｅａｄ  Ｗｏｒｄ」と同様である。
【０１０６】
＜機器制御部発行制御コード＞
・「ＩＲＱ」‘１１１０’は、割込み発生を意味する制御コードである。
・「Ｍｉｒｒｏｒ」‘１１００’は、主制御部２０からのデータ読出要求を受けることなく、機器制御部３０から主制御部２０に向けて１ブロック分のデータを転送することを意味する制御コードである。
【０１０７】
前述の通り、入出力制御レジスタ群３２の格納データは、複写レジスタ群２３に繰り返し複写される。この複写の際は１ブロック（４ワード）ずつを１つの制御パケット（前述の複写パケットに相当する）にして転送される。「Ｍｉｒｒｏｒ」は、この処理を実行するときに発行される制御コードである。
・「Ｓｅｎｄ  Ｗｏｒｄ」‘１０１０’は、主制御部２０からの「Ｒｅａｄ  Ｗｏｒｄ」による読出要求に応じて、入出力制御レジスタ群３２のうちの指定されたアドレスに格納されている１ワード分のデータを主制御部２０に向けて送信することを表わす制御コードである。機器制御部３０は、主制御部２０で発行された「Ｒｅａｄ  Ｗｏｒｄ」の制御コードを持った制御パケットを受け取ると、先ずはＡＣＫパケットを主制御部２０に送信する。主制御部２０はこのＡＣＫパケットを受け取ると、一旦、データ受取りの処理から解放され、別の処理を実行することができる。その後、機器制御部３０で「Ｓａｎｄ  Ｗｏｒｄ」の制御コードを持った制御パケットが発行されて、主制御部２０で、その１ワード分のデータが受信される。
・「Ｓｅｎｄ  Ｂｌｏｃｋ」‘０１１０’は、主制御部２０からの「Ｒｅａｄ  Ｂｌｏｃｋ」に対応する制御コードである。１ワードではなく１ブロックである点を除き「Ｓｅｎｄ  Ｗｏｒｄ」と同様である。
【０１０８】
各制御コードは４ビットで構成されているため、コード化けパターンは、図５（Ａ）に示す通り、各制御コードにつき４通りずつ存在する。このコード化けパターンのうち、（Ａ−１）の欄に実線で示したパターンは、４種類の正規の制御コードのいずれかと一致している。この場合、受信側では、そのコード化けした後のパターンが正規の制御コードであるとして処理される。すなわち、この場合は、そのコード化けした後のパターンを正規の制御コードと考えたときのその制御パケットのＣＲＣに相当する領域に記録されている符号に基づいてエラーの発生の有無が調べられる。この場合、正規の制御パケットではないため、常にエラー発生を有りという結果が得られることになる。
【０１０９】
ビット化けは、制御コードのみではなく、制御パケットのどのビットについても発生し得る。ビット化けが発生していない制御コードを持つ制御パケットを受信した場合であっても、受信側では、その制御パケットのＣＲＣの領域が参照されて、ビット化けの有無が判定される。
【０１１０】
図５（Ａ）の（Ａ−１）の欄に破線で示したパターンは、４種類の正規の制御コードでのいずれとも異なっている。この場合は、正規の制御コードではないことを持ってエラー発生有り、とされる。
【０１１１】
図５（Ａ）の（Ａ−２）の欄に示したパターンも正規の制御コードの中のいずれとも異なるパターンである。ただし、このパターンは、制御コードの、常に‘０’であるべき４ビット目が‘１’にビット化けしたパターンであり、１〜３ビット目を参照することで正規の制御コードが判明する。したがって、（Ａ−２）の欄のビット化けは、それに対応する正規の制御コードの制御パケットとして処理される。この場合も、ビット化けがあるので、ＣＲＣチェックによりエラー有りという結果が得られることになる。
【０１１２】
図５（Ｂ）のＮＡＣＫコード‘０００１’および図５（Ｃ）のＡＣＫコード‘００００’は、いずれの制御コードのいずれのビット化けパターンとも異なっている。したがって制御コードにビット化けが発生してもＮＡＣＫコードあるいはＡＣＫコードと混同されるおそれはない。これと同様に、以下に説明する通り、ＮＡＣＫコードやＡＣＫコードにビット化けが発生しても正規の制御コードのいずれとも異なるビット化けパターンである。
【０１１３】
図５（Ｂ）のＮＡＣＫコード‘０００１’は、受信側でビット化けが検出された場合に受信側で発行されて送信側に返信されるＮＡＣＫパケットに書き込まれるコードである。
【０１１４】
このＮＡＣＫコード‘０００１’にビット化けが発生すると、図５（Ｂ）に示した４種類のビット化けパターンのいずれかになる。この４種類のビット化けパターンのうち（Ｂ−１）の欄に示した３種類のビット化けパターンは、４種類の制御コードおよびそれら４種類の制御コードのビット化けパターンのいずれとも異なるパターンであり、さらに図５（Ｃ）に示すＡＣＫコードおよびＡＣＫコードのビット化けパターンのいずれとも異なるパターンである。したがって、これら３種類のビット化けが発生してもＮＡＣＫコードであることが特定される。
【０１１５】
また図５（Ｂ）の（Ｂ−２）の欄に示したビット化けパターン‘００００’は、図５（Ｃ）に示す正規のＡＣＫコード‘００００’と同じパターンである。ただし、図４（Ｂ）を参照して説明した通り、返信パケットにはパリティビットが含まれており、ＮＡＣＫコードのビット化けによるパターン‘００００’か、正規のＡＣＫコード‘００００’であるかは、パリティエラーが発生しているか否かで判別される。
【０１１６】
したがってＮＡＣＫコード‘０００１’については、４種類のビット化けパターンのうちのいずれのビット化けが発生してもＮＡＣＫコードであることが特定される。
【０１１７】
図５（Ｃ）のＡＣＫコード‘００００’は、制御パケットの受信側でその制御パケットにビット化けなしと判定された場合に受信側で発行されて送信側に返信されるＡＣＫパケットに書き込まれるコードである。
【０１１８】
このＡＣＫコード‘００００’にビット化けが発生すると、図５（Ｃ）に示した４種類のビット化けパターンのいずれかとなる。この４種類のビット化けパターンのうち（Ｃ−１）の欄に示した３種類のビット化けパターンは、図４（Ａ）に示す制御コードのビット化けパターンのうちの（Ａ−１）の欄に破線で示したビット化けパターンのいずれかと一致する。すなわち、（Ｃ−１）の欄に示したビット化けパターンは、何のコードがビット化けしたパターンなのか不明なパターンである。この場合、上述の通り、正規のコードではないことをもってエラー発生あり、とされ、このビット化けしたＡＣＫコードを含むＡＣＫパケットの受信側、すなわち、そのＡＣＫパケットに対応する制御パケットの発行側からＮＡＣＫコードが発行される。このビット化けしたＡＣＫコードを含むＡＣＫパケットが、相手側で発行された制御パケットがビット化けしたパケットかも知れないからである。
【０１１９】
図５（Ｃ）に示す４種類のビット化けパターンのうちの（Ｃ−２）の欄に示したビット化けパターン‘０００１’は、図５（Ｂ）に示す正規のＮＡＣＫコード‘０００１’と同じパターンである。この場合は、その返信パケットのパリティエラーの有無により、ＡＣＫコードのビット化けパターンか正規のＮＡＣＫコードかが判別される。
【０１２０】
図６は、基本通信フローを示した図である。ここでは、制御パケットを主制御部２０から機器制御部３０に向けて送信する場合を例に挙げて説明する。ただし、制御パケットを機器制御部３０から主制御部２０に向けて送信する場合も同様である。ここでは、この通信フローについて、図６とともに図１〜図３を参照しながら説明する。
【０１２１】
主制御部２０の第１通信部２２を構成するパケット生成回路２２３で制御パケットが生成されて送信待バッファ２２４ａに格納される。パラレルシリアル変換回路２２５は、その送信待バッファ２２４ａから制御パケットを取り出して送信済バッファ２２４ｂに格納し、さらにシリアル形式に変換して（以下この点の記載は省略する）機器制御部３０に送信する（図６（ａ））。
【０１２２】
機器制御部３０では、この制御パケットが受信され、この制御パケットについてエラー発生の有無が調べられる。ここではエラーの発生はなかったものとする。図３に示す第２通信部３１のパケットデコード回路３１４で、先ずは、受信したパケットのコードが読み出されてコントローラ３１１に送られる。コントローラ３１１の未定義コード制御部３１１ａには、図５を参照して説明した全ての正規コード、全てのビット化けパターンが記憶されていて、ビット化けパターンに関しては、正規のコードが一義的に判明するビット化けパターンのときは正規のコードが何であるかが認識される。今回、すなわち図６（ａ）の制御パケットに関しては、エラーがないことを前提としているため、コントローラ３１１では、今回受信した制御パケットに含まれているコードが正規の制御コードであると認識される。パケットデコード回路３１４では、コードに続きペイロード、ＣＲＣも取り出されてコントローラ３１１に送られる。コントローラ３１１は、ＣＲＣを参照して今回受信したパケットにビットエラーのないことを確認し、パケット生成回路３１６にＡＣＫパケットを生成するよう指示する。するとパケット生成回路３１６はＡＣＫパケットを生成して送信待バッファ３１７ａに格納する。パラレルシリアル変換回路３１８は、送信待バッファ３１７ａからＡＣＫパケットを取り出して主制御部２０に向けて送信する（図６（ｂ））。このＡＣＫパケットは送信済バッファ３１７ｂには格納されない。
【０１２３】
主制御部２０ではそのＡＣＫパケットを受信し、パケットデコード回路２２８でＡＣＫコードが取り出され、コントローラ２２２でＡＣＫコードであることが判定されて、送信済バッファ２２４ｂに格納しておいた制御パケットが消去される。
【０１２４】
次に、主制御部２０から上記と同様にして、次の制御パケットが発行されて機器制御部３０に送信される（図６（ｃ））。上記と同様に、機器制御部３０のパケットデコード回路３１４では受信したパケットのコード等が読み出されてコントローラ３１１に送られる。ここでは、この受信した制御パケットにビット化けが発生していたものとする。このとき、コントローラ３１１で行なわれる処理は以下の複数種類が存在する。
【０１２５】
先ずコード自体には、ビット化けは発生しておらず正規のコードが含まれていた場合について説明する。このときは、コントローラ３１１ではさらにこの制御パケットのＣＲＣがチェックされ、この時点でビット化けが発生していたことが判明する。
【０１２６】
次に、制御コードにビット化けが発生していて、そのビット化けパターンが図５（Ａ）の（Ａ−１）の欄に実線で示したビット化けパターンであった場合について説明する。このビット化けパターンの場合、未定義コード制御部３１１ａでは正規の制御コードと区別がつかない。そこでコントローラ３１１では、正規の制御コードとしての処理が行なわれる。すなわち、その制御コードが正しい制御コードとした場合の制御パケットのＣＲＣの領域に相当する領域にＣＲＣが書き込まれているとして処理が実行される。その結果、エラーが存在すると判定されることになる。
【０１２７】
制御コードにビット化けが発生していて、そのビット化けパターンが、図５（Ａ）の（Ａ−１）の欄に破線で示したビット化けパターンであった場合について説明する。この場合、未定義コード制御部３１１ａでは何のコードか不明であるため、ＣＲＣチェックを行なうことなくエラーが存在すると判定される。
【０１２８】
さらに、図５（Ａ）の（Ａ−２）の欄のビット化けパターンが発生していたときは、未定義コード制御部３１１ａにおいて正規の制御コードが認識されるため、その正規の制御コードに従う制御パケットのＣＲＣの領域が参照されてＣＲＣチェックが行なわれ、エラーの存在が認識される。
【０１２９】
コントローラ３１１は、上記のいずれかの処理により、受信した制御パケットにエラーが存在していたことを認識すると、検出フラグ３１１ｂをセットし、さらにパケット生成回路３１６にＮＡＣＫパケットの生成を指示する。パケット生成回路３１６ではＮＡＣＫパケットが生成されて送信待バッファ３１７ａに格納される。パラレルシリアル変換回路３１８は送信待バッファ３１７ａからＮＡＣＫパケットを取り出して主制御部２０に向けて送信する（図６（ｄ））。このＮＡＣＫパケットも、ＡＣＫパケットと同様、送信済バッファ３１７ｂには格納されない。
【０１３０】
主制御部２０では、そのＮＡＣＫパケットを受信し、パケットデコード回路２２８でＮＡＣＫコードが取り出されコントローラ２２２でＮＡＣＫコードであることが判定される。ここではＮＡＣＫコードが返信されてきたため、再送管理部２２２ｃの制御により、送信済バッファ２２４ｂに格納されている、出力済の制御パケットが再送信される（図６（ｅ））。この再送信にあたっては、再送信される制御パケットのヘッダの７ビット目に再送信であることを意味する‘１’がセットされる（図４（Ｂ）参照）。この再送信された制御パケットが機器制御部３０に正常に受信されると、機器制御部３０の検出フラグ３１１ｂがリセットされる。そして、機器制御部３０からＡＣＫパケットが返信される（図６（ｆ））。主制御部２０でこのＡＣＫパケットを受信すると、送信済バッファ２２４ｂ内の、再送信された制御パケットが消去される。
【０１３１】
仮に、この再送信された制御パケットにもエラーが発生していたときは、検出フラグ３１１ｂがセットされている状況においてエラーが再度発生したことになる。このように２回のパケットに連続してエラーが発生すると、ハードウエア障害等、重大な障害の発生と見なされ、システムエラーの処理に移行する。
【０１３２】
尚、ここでは、制御パケットを主制御部２０から機器制御部３０に向けて送信する場合を例に挙げて説明したが、制御パケットを機器制御部３０から主制御部２０に向けて送信する場合も同様である。主制御部２０の第１通信部２２のコントローラ２２２の、未定義コード制御部２２２ａ、検出フラグ２２２ｂ、および再送管理部２２２ｃと、機器制御部３０の第２通信部３１のコントローラ３１１の、未定義コード制御３１１ａ、検出フラグ３１１ｂ、および再送管理部３１１ｃは、それぞれ互いに同じ作用を成す構成要素であり、機器制御部３０から主制御部２０に送信する場合は、上記の説明とは役割が交替することになる。
【０１３３】
図７は、パケット受信側での処理フローを示したフローチャートである。
【０１３４】
ここで受信することを想定しているパケットは、制御パケットおよび返信パケットの双方である。また、この処理フローは、第１通信部２２および第２通信部３１のいずれにも当てはまる。
【０１３５】
先ず、図４（Ｂ）に示す３〜５ビット目のコード部と６ビット目のＡ／Ｎとからなる、４ビットのコードがデコードされて取り出される（ステップＳ０１）。そしてその取り出されたコードが定義済の正常なコード（図５（Ａ）〜（Ｃ）の「ビット列」の欄に記載された６種類のコードのいずれか）であるか否かが判定される（ステップＳ０２）。尚、ここでは、ビット化けが発生し、その結果その６種類の正常なコードのいずれかと同一のパターンが生成された場合にも、コード自体は正常なコードであると判定される。また、図５（Ａ）の（Ａ−２）の欄に示すビット化けパターンの場合、ビット化けを生じた制御コードが特定できるため、ここでは正常なコードであると判定される。
【０１３６】
正常なコードであると判定されると、次にそのコードが制御コード（図５（Ａ））であるか、ＡＣＫコードあるいはＮＡＣＫコード（図５（Ｂ），（Ｃ））であるかが判定される（ステップＳ０３）。そして制御コードであったときは、次にＣＲＣチェックが行なわれ（ステップＳ０４）。そしてＣＲＣエラーの有無に応じて（ステップＳ０５）、ＣＲＣエラーがなかったときはＡＣＫパケットが返信され（ステップＳ０６）、ＣＲＣエラーがあったときはＮＡＣＫパケットが返信される（ステップＳ０７）。このステップＳ０１〜Ｓ０６，Ｓ０７の処理は、制御パケットを受信し、その制御パケットのヘッダに記録されている制御コードが上記の意味で正常だったときの処理である。すなわち、この処理には、図５（Ａ）の（Ａ−１）欄に実線で示したビット化けが発生し、そのビット化けにより元々の制御コードとは異なるものの正常な制御コードと同一のビット化けパターンが発生した場合、および（Ａ−２）の欄の、正しい制御コードが特定できるビット化けパターンが発生した場合も含まれる。ただし、これらの場合はＣＲＣエラーとなり、ステップＳ０７に進み、ＮＡＣＫパケットが返信されることになる。
【０１３７】
ステップＳ０３において、今回受信したパケットのコードが制御コードではなく、ＡＣＫコードもしくはＮＡＣＫコードであると判定されたときは、次に送信済バッファ（図２の送信済バッファ２２４ｂ，図３の送信済バッファ３１７ｂ）にパケットが存在するか否かが判定される（ステップＳ０８）。ＡＣＫパケットあるいはＮＡＣＫパケットを受信したということは、通常は、その直前に自らが送信側となって制御パケットを送信していて、その制御パケットが送信済バッファに格納されているはずである。ところが、自らが制御パケットの受信側となってＡＣＫパケットを返信したとき、そのＡＣＫパケットにエラーを生じて受信側に受信され、そのビットエラーを生じたＡＣＫパケットに対するＮＡＣＫパケットが再返信されることが有り得る。この場合、このステップＳ０８で送信済バッファを確認し、その送信済バッファにパケットが存在するか否かにより、上記の状況が発生したか否かを判定している。但しこれは、ＡＣＫパケットを返信したことに対するＮＡＣＫパケットを受信した場合であるが、これとは別に、送信済バッファにパケットが存在しないにも拘らずＡＣＫパケットを受信する事態も発生し得る。この点については図８を参照して後述する。
【０１３８】
ＡＣＫパケットあるいはＮＡＣＫパケットを受信し、かつ送信済バッファにパケットが存在しない場合は、ＡＣＫパケットの再送処理が行なわれる（ステップＳ０９）。ＮＡＣＫパケットあるいはＡＣＫパケットを受信して送信済バッファにパケットが存在しなかったときは、ＡＣＫパケットを再送信することで、そのＡＣＫパケットの受信側（元々の制御パケットの送信側）における、ＡＣＫパケットを受信したときに行なわれる処理（ＡＣＫパケット受信側の送信済バッファからの制御パケットの消去等）が完結する。
【０１３９】
ステップＳ０８において、送信済バッファにパケットが存在する旨、判定されると、次はパリティエラーの有無が判定される（ステップＳ１０）。パリティエラーがなく、正常なＡＣＫパケットあるいは正常なＮＡＣＫパケットであったときは、次にそのパケットがＡＣＫパケットであるかＮＡＣＫパケットであるかが判定される（ステップＳ１１）。そしてＡＣＫパケットであったときは、送信済バッファに格納されている制御パケットの消去等のＡＣＫ受信処理が行なわれる（ステップＳ１２）。また、ＮＡＣＫパケットであったときは、送信済バッファに格納さている制御パケットの再送処理等のＮＡＣＫ受信処理が行なわれる（ステップＳ１３）。
【０１４０】
一方、ステップＳ１０においてパリティエラーがあった旨、判定されると、ＡＣＫコードとＮＡＣＫコードが入れ替わっていることになるため（図５（Ｂ）の（Ｂ−２）欄および図５（Ｃ）の（Ｃ−２）欄参照）、ＮＡＣＫコードのときはＡＣＫ受信処理、ＡＣＫコードのときはＮＡＣＫ受信処理が行なわれる（ステップＳ１４）。
【０１４１】
ステップＳ０２において未定義コードであると判定されると、その未定義コードが図５（Ｂ）の（Ｂ−１）欄に示した３つのビット化けパターンのいずれかであるか否かが判定される（ステップＳ１５）。これら３つのビット化けパターンは、ＮＡＣＫコード‘０００１’のビット化けパターンであることが一義的に判明するパターンであるため、送信済バッファに格納しておいた制御パケットの再送処理等のＮＡＣＫ受信処理が行なわれる（ステップＳ１６）。一方、ステップＳ１５で、それらの３つのビット化けパターン以外のビット化けパターンであると判定されると、ＮＡＣＫパケットが送信される（ステップＳ１７）。このときは、図５（Ａ）の（Ａ−１）欄に破線で示した制御コードのビット化けパターンであるか、図５（Ｃ）の（Ｃ−１）欄に示したＡＣＫコードのビット化けパターンとの区別がつかないため、一律にＮＡＣＫパケットを送信することになる。
【０１４２】
尚、この図７の処理フローでは検出フラグ（図２の検出フラグ２２２ｂ、図３の検出フラグ３１１ｂ）のセット、リセットについての説明は省略したが、何らかのビット化が発生したパケットを受信したときに検出フラグがセットされ、次にビット化けのないパケットを受信するとリセットされる。検出フラグがセットされていて、次に受信したパケットにもビット化けが発生していたときは、システムエラーとなる。
【０１４３】
図８は、ＡＣＫコードにビット化けが生じたときのパケット送受信シーケンスの、稀なケースを示した図である。ここでは、このパケット送受信シーケンスを例に挙げて、送信済バッファにパケットが存在しないときにＡＣＫパケットを受信する場合もあり、この場合にもＡＣＫパケットを再送信する（図７、ステップＳ０９）必要があることを説明する。
【０１４４】
（１）先ず、第１通信部２２から第２通信部３１に向けて制御パケットＡが送信される。このとき、第１通信部２２では送信済バッファにその制御パケットが格納される。
【０１４５】
（２）この制御パケットＡは第２通信部３１で正常に受信され、第２通信部３１から第１通信部２２にＡＣＫパケットが返信される（図７、ステップＳ０６）。ところが、このＡＣＫパケットにビット化け（図５（Ｃ）の（Ｃ−１）欄のいずれかのビット化けパターン）が発生し、そのビット化けしたＡＣＫパケットが第１通信部２２で受信されたものとする。
【０１４６】
（３）そのビット化けしたＡＣＫパケットに対しては（４）のＮＡＣＫパケットが返信されるが、ここでは、そのＮＡＣＫパケットの返信よりも先に、第２通信部３１から第１通信部２２に向けて制御パケットＢが送信されている。このとき、第２通信側３１の送信済バッファに制御パケットＢが格納される。
【０１４７】
（４）第１通信部２２では、（２）のＡＣＫパケットが化けたことによる未定義コードが検出されて検出フラグがセットされ、さらに第２通信部３１に向けてＮＡＣＫパケットが返信される（図７、ステップＳ１７）。
【０１４８】
（５）ＮＡＣＫパケットの返信は（３）の制御パケットＢの送信よりも遅れて行なわれていたため、第２通信部３１ではそのＮＡＣＫパケットが（３）の制御パケットＢの送信に対して返信されたＮＡＣＫパケットであるとみなされ、第２通信部３１では制御パケットＢ（再送）が送信される。
【０１４９】
（６）第１通信部２２では、（３）の制御パケットＢの受信が正常であったため検出フラグがリセットされてＡＣＫパケットが返信される。第２通信部３１では、このＡＣＫパケットが（５）の制御パケットＢ（再送）に対して返信されてきたＡＣＫパケットであると見做されて、第２通信部３１の送信済バッファがクリアされる。
【０１５０】
（７）第１通信部２２では、（５）の制御パケットＢ（再送）に対するＡＣＫパケットの返信が行なわれる。
【０１５１】
（８）第２通信部３１では、このＡＣＫパケットを受信したとき送信済バッファが空であったため（図７、ステップＳ０８）、ＡＣＫパケットが再送信される（図７、ステップＳ０９）。第１通信部２２では、このＡＣＫパケットを受信して送信済バッファがクリアされる。仮に、この（８）のＡＣＫパケットの再送信を行なわないと、（２）のＡＣＫパケットにビット化けが生じていたため、第１通信部２２における送信済バッファのクリア等、ＡＣＫパケットを受信したことに伴う処理が未処理のまま残ってしまうことになる。
【０１５２】
このように、ＡＣＫパケットを受信したときであっても、送信済バッファにパケットが存在しなかったときは（図７、ステップＳ０８）、ＡＣＫパケットを再返信することで（図７、ステップＳ０９）、処理が完結する。
【０１５３】
図９は、図７に示したパケット受信側の処理フローの変形例を示したフローチャートである。図７のフローチャートとの相違点のみ説明する。
【０１５４】
この図９のフローチャートでは、図７のフローチャートにおけるステップＳ１４が省かれていて、パリティエラーが存在していたとき（ステップＳ１０）は、ＡＣＫコード／ＮＡＣＫコードに拘らずＮＡＣＫ受信処理（該当する制御パケットの再送等）が行なわれている。これは、１ビットエラーの範囲内ではあるがエラーという異常があったことと、ＡＣＫパケットを受信した場合に制御パケットを再送しても問題はないことから、ここでは、パリティエラーがあったことをもって一律にＮＡＣＫ受信処理を実行している。
【０１５５】
尚、ここでは、本発明の通信装置および制御装置を画像形成装置に適用した例について説明したが、本発明の通信装置および制御装置は画像形成装置にのみ適用されるものではなく、他の装置の制御に適用してもよい。また、本発明の通信装置は制御装置にのみ適用されるものではなく、一般の通信用としても広く適用することができる。
【符号の説明】
【０１５６】
１    画像形成装置
１０    制御装置
２０    主制御部
２１    ＣＰＵ
２２    第１通信部
２３    複写レジスタ群
２２９，３１５    アドレスカウンタ
３０    機器制御部
３１    第２通信部
３２    入出力制御レジスタ群
３３    駆動・受信回路
４０    シリアルバス
５０    機器
２２１    ＣＰＵバスインタフェース
２２２，３１１    コントローラ
２２２ａ，３１１ａ    未定義コード制御部
２２２ｂ，３１１ｂ    検出フラグ
２２２ｃ，３１１ｃ    再送管理部
２２３，３１６    パケット生成回路
２２４，２２７，３１３，３１７    バッファ
２２４ａ，３１７ａ    送信待バッファ
２２４ｂ，３１７ｂ    送信済バッファ
２２５，３１８    パラレルシリアル変換回路
２２６，３１２    シリアルパラレル変換回路
２２８，３１４    パケットデコード回路
【図１】
2015080091.tif 000003
【図２】
2015080091.tif 000004
【図３】
2015080091.tif 000005
【図４】
2015080091.tif 000006
【図５】
2015080091.tif 000007
【図６】
2015080091.tif 000008
【図７】
2015080091.tif 000009
【図８】
2015080091.tif 000010
【図９】
2015080091.tif 000011