以下、本発明の各実施形態について、添付の図面を参照しながら説明する。なお、各実施形態に係る明細書及び図面の記載に関して、実質的に同一の機能構成を有する構成要素については、同一の符号を付することにより重畳した説明を省略する。
(第1実施形態)
第1実施形態に係る通信システムについて、図1〜図5を参照して説明する。図1は、本実施形態に係る通信システムのハードウェア構成の一例を示す図である。図1の通信システムは、データ線L1と、クロック線L2と、モジュールM1〜Mn(n≧2)と、を備える。
データ線L1は、シリアルデータ(SDA)が送受信されるI2Cバスである。クロック線L2は、シリアルクロック(SCL)が送受信されるI2Cバスである。
モジュールM1〜Mnは、I2Cバス(データ線L1及びクロック線L2)により相互に接続される。以下では、モジュールM1〜Mnのうち、i番目のモジュールをモジュールMiと称する。
図1のモジュールMiは、各モジュールを識別するための7ビットのアドレスを割り当てられている。図1の例では、モジュールM1のアドレスは1101000であり、モジュールM2のアドレスは1110000である。モジュールMiに割り当てられたアドレスは、後述するマスタデバイスmi及びスレーブデバイスsiにより共用される。なお、各モジュールMiのアドレスは10ビットであってもよい。
モジュールMiは、マスタデバイスmiと、スレーブデバイスsiと、を備える。マスタデバイスmi及びスレーブデバイスsiは、プルアップ抵抗(例えば、1kΩ)を介して電源電圧に接続される。
マスタデバイスmiは、I2C通信のマスタとして機能するI2Cデバイスであり、FPGA(Field Programmable Gate Array)やマイコンにより構成される。マスタデバイスmiは、マルチマスタモードで動作する。
図2は、マスタデバイスmiのハードウェア構成の一例を示す図である。図2のマスタデバイスmiは、CPU(Central Processing Unit)101と、RAM(Random Access Memory)102と、ROM(Read Only Memory)103と、を備える。また、マスタデバイスmiは、入出力インタフェース(I/O)104と、SDA端子105と、SCL端子106と、内部バス107と、を備える。
CPU101は、マスタデバイスmiをI2C通信のマスタとして機能させるためのプログラムを実行する。RAM102は、CPU102に作業領域を提供する。ROM103は、CPU101が実行するプログラムを格納する。入出力インタフェース104は、外部とのデータの送受信を仲介する。SDA端子105は、入出力インタフェース104に設けられ、データ線L1に接続される。SCL端子106は、入出力インタフェース104に設けられ、クロック線L2に接続される。内部バス107は、CPU101と、RAM102と、ROM103と、入出力インタフェース104と、を相互に接続する。マスタデバイスmiは、SDA端子105及びSCL端子106を介して、データ線L1及びクロック線L2に、ワイヤードアンドロジックで接続される。
スレーブデバイスsiは、I2C通信のスレーブとして機能するI2Cデバイスであり、FPGAやマイコンにより構成される。スレーブデバイスsiのハードウェア構成は、マスタデバイスmiと同様である。ただし、スレーブデバイスsiのROMには、スレーブデバイスsiをI2C通信のスレーブとして機能させるためのプログラムが格納される。スレーブデバイスsiは、マスタデバイスmiとは独立したチップにより構成されてもよいし、マスタデバイスmiと同一のチップにより構成されてもよい。
本実施形態において、マスタデバイスmiはデータの送信だけを行い、スレーブデバイスsiはデータの受信だけを行う。したがって、モジュールMiからモジュールMjへのデータの送信は、マスタデバイスmiからスレーブデバイスsjにデータを送信することにより行われる。これに対して、モジュールMjからモジュールMiへのデータの送信は、マスタデバイスmjからスレーブデバイスsiにデータを送信することにより行われる。
ここで、図3は、本実施形態におけるI2C通信のデータフォーマットの一例を示す図である。図3は、マスタデバイスm2がスレーブデバイスs1にデータを送信する場合のデータフォーマットを示している。
本実施形態において、マスタデバイスmiは、スレーブデバイスsjにデータを送信する場合、スタートコンディションSを送信した後、宛先となるスレーブデバイスsjのアドレス(slave add)と、0と、を送信する。ここで送信される0は、マスタデバイスmiからの送信(Write要求)を示すRead/Write要求である。また、スレーブデバイスsjのアドレスとは、スレーブアドレスsjを備えるモジュールMjに割り当てられたアドレスのことである。図3の例では、スレーブデバイスs1のアドレスとして、1101000が送信されている。
その後、マスタデバイスmiは、スレーブデバイスsjからACKを受信すると、1バイトのデータを送信する。本実施形態では、マスタデバイスmiは、送信元であるマスタデバイスmiのアドレス(master add)を含むデータを送信する。マスタデバイスmiのアドレスとは、マスタアドレスmiを備えるモジュールMiに割り当てられたアドレスのことである。マスタデバイスmiは、1バイトのデータとして、マスタデバイスmiのアドレスの先頭または末尾に、任意のビット(0又は1)を付加したデータを送信すればよい。図3の例では、マスタデバイスm2のアドレス1110000の末尾に0を付加したデータが送信されている。以降のデータフォーマットは、I2C規格で定められた通りである。
図4は、本実施形態におけるI2C通信のデータフォーマットの他の例を示す図である。図4は、マスタデバイスm2が全てのスレーブデバイスs1〜snにデータを同報送信する場合のデータフォーマットを示している。
I2C規格では、ゼネラルコールアドレスと呼ばれる同報送信用のアドレスが用意されている。ゼネラルコールアドレスは、7ビットの場合、0000000である。マスタデバイスmiは、データを同報送信する場合、宛先となるスレーブデバイスのアドレスとして、図4に示すように、このゼネラルコールアドレスを送信すればよい。
図5は、本実施形態における、モジュールMiからモジュールMjへのデータの送信処理の一例を示すフローチャートである。
まず、モジュールMiのマスタデバイスmiは、スタートコンディションSを送信する(ステップS101)。具体的には、マスタデバイスmiは、SCLがHighの間に、SDAをLowにする。
次に、マスタデバイスmiは、モジュールMjのスレーブデバイスsjのアドレスと、Write要求と、を送信する(ステップS102)。通信システムに含まれる各スレーブデバイスは、マスタデバイスmiが送信したアドレスを受信すると、受信したアドレスと、自装置のアドレスと、を比較する。マスタデバイスmiが送信したアドレスが自装置のアドレスが一致するスレーブデバイスsjは、ACKを送信する。
マスタデバイスmiは、スレーブデバイスsjのアドレスの送信後、所定時間以内にACKを受信できない場合(ステップS103のNO)、エラー処理を実行する(ステップS104)。これは、マスタデバイスmiがNAKを受信した場合も同様である。マスタデバイスmiは、エラー処理として、実行中の送信処理をリセットしてもよいし、送信処理をはじめからやり直してもよい。
なお、マスタデバイスmiは、エラー処理を実行する前に、一定時間ごとに所定回数だけスレーブデバイスsjのアドレスの送信を繰り返してもよい。繰り返しの回数や間隔は、任意に設定可能である。
一方、マスタデバイスmiは、スレーブデバイスsjのアドレスの送信後、所定時間以内にACKを受信した場合(ステップS103のYES)、自装置のアドレスを含む1バイトのデータを送信する(ステップS105)。スレーブデバイスsjは、このデータを受信すると、ACKを送信する。
マスタデバイスmiは、自装置のアドレスを含むデータの送信後、所定時間以内にACKを受信できない場合(ステップS106のNO)、エラー処理を実行する(ステップS104)。これは、マスタデバイスmiがNAKを受信した場合も同様である。マスタデバイスmiは、エラー処理として、実行中の送信処理をリセットしてもよいし、送信処理をはじめからやり直してもよい。
なお、マスタデバイスmiは、エラー処理を実行する前に、一定時間ごとに所定回数だけ自装置のアドレスを含むデータの送信を繰り返してもよい。繰り返しの回数や間隔は、任意に設定可能である。
一方、マスタデバイスmiは、自装置のアドレスを含むデータの送信後、所定時間以内にACKを受信した場合(ステップS106のYES)、1バイトの送信対象データを送信(ステップS107)。スレーブデバイスsjは、このデータを受信すると、ACKを送信する。
マスタデバイスmiは、送信対象データの送信後、所定時間以内にACKを受信できない場合(ステップS108のNO)、エラー処理を実行する(ステップS104)。これは、マスタデバイスmiがNAKを受信した場合も同様である。マスタデバイスmiは、エラー処理として、実行中の送信処理をリセットしてもよいし、送信処理をはじめからやり直してもよい。
なお、マスタデバイスmiは、エラー処理を実行する前に、一定時間ごとに所定回数だけ送信対象データの送信を繰り返してもよい。繰り返しの回数や間隔は、任意に設定可能である。
一方、マスタデバイスmiは、送信対象データの送信後、所定時間以内にACKを受信した場合(ステップS108のYES)、全ての送信対象データの送信を完了したか判定する(ステップS109)。未送信の送信対象データがある場合(ステップS109のNO)、処理はステップS107に戻る。以降、全ての送信対象データの送信が完了するまで、ステップS107〜S109の処理が繰り返される。
一方、全ての送信対象データの送信が完了した場合(ステップS109のYES)、マスタデバイスmiは、ストップコンディションPを送信する(ステップS110)。具体的には、マスタデバイスmiは、SCLがHighの間に、SDAをHighにする。以上の処理により、モジュールMiからモジュールMjに、送信対象データを送信することができる。
以上説明した通り、本実施形態によれば、I2Cバスによるモジュール間の双方向通信が可能な通信システムを実現することができる。
また、本実施形態によれば、マスタデバイスmiは、スレーブデバイスsjのアドレスを送信した後、自装置のアドレスを含むデータを送信する。これにより、各マスタデバイスmiが送信するデータの内容を異ならせることができる。したがって、複数のマスタデバイスが同時にデータを送信した場合であっても、送信データのコリジョンを確実に検出することができる。
(第2実施形態)
第2実施形態に係る通信システムについて、図6〜図8を参照して説明する。本実施形態では、第1実施形態に係る通信システムを備えた画像形成装置(MFP)について説明する。
本実施形態に係る画像形成装置は、スキャナ機能、プリンタ機能、コピー機能などの各種の機能を備える複合機である。図6は、本実施形態に係る画像形成装置のハードウェア構成の一例を示す図である。図6の画像形成装置は、本体コントローラ1と、操作部2と、電源部3と、を備える。図示省略されているが、画像形成装置は、上記の機能を実現するエンジン(プリンタエンジンやスキャナエンジンなど)も備える。
本体コントローラ1は、画像形成装置の本体を制御するモジュール(コントローラ)である。本体コントローラ1は、CPUと、ROMと、RAMと、を備える。CPUがROMに格納されたプログラムをRAM上で実行することにより、画像形成装置の基本処理が実行される。また、本体コントローラ1は、省エネサブシステム11を備える。省エネサブシステム11は、画像形成装置の省エネモード時に起動する小型マイコンシステムである。省エネサブシステム11は、マスタデバイスm1と、スレーブデバイスs1と、を備える。マスタデバイスm1及びスレーブデバイスs1は、共通のアドレスを割り当てられ、データ線L1及びクロック線L2にそれぞれ接続される。
操作部2は、画像形成装置の操作パネルシステムを構成するモジュールである。操作部2は、本体コントローラ1と大容量の高速な通信が必要のため、USBで接続されている。操作部2は、操作パネルを備える。操作パネルは、ディスプレイ、操作キー、タッチパネルなどを備える入出力装置である。また、操作部2は、操作パネルを制御する操作部マイコン21を備える。操作部マイコン21は、マスタデバイスm2と、スレーブデバイスs2と、を備える。マスタデバイスm2及びスレーブデバイスs2は、共通のアドレスを割り当てられ、データ線L1及びクロック線L2にそれぞれ接続される。
電源部3は、本体コントローラ1や操作部2などの電源を管理するモジュールである。電源部3は、画像形成装置の電源ラインや電源スイッチを備える。また、電源部3は、電源ラインや電源スイッチを制御する電源マイコン31を備える。電源マイコン31は、マスタデバイスm3と、スレーブデバイスs3と、を備える。マスタデバイスm3及びスレーブデバイスs3は、共通のアドレスを割り当てられ、データ線L1及びクロック線L2にそれぞれ接続される。
本実施形態において、通信システムのI2Cバスは、画像形成装置の補助的なバスとして利用される。以下、I2Cバスの使用態様について説明する。
<1.起動時>
図7は、本実施形態に係る画像形成装置の起動時の動作の一例を示すシーケンス図である。図7の例では、シーケンスの開始時点で、画像形成装置は電源を切断されている。また、図7において、マスタデバイスからの通信に対するACK又はNAKの返信は省略されている。
ユーザにより電源部3の電源スイッチを押下されると、電源マイコン31は、瞬時に起動し、本体コントローラ1及び操作部2の電源投入(電源ON)制御を実行する(ステップS201,S202)。本体コントローラ1及び操作部2に電源が投入されると、省エネサブシステム11及び操作部マイコン21が瞬時に起動する。これにより、本体コントローラ1、操作部2、及び電源部3は、I2Cバスを利用して通信可能となる。
その後、操作部マイコン21のマスタデバイスm2は、省エネサブシステム11のスレーブデバイスs1に、操作部2の状態を通知する。操作部2の状態として、起動開始、起動中、起動完了などの状態が考えられる。また、操作部マイコン21のマスタデバイスm2は、操作部2の全体の状態を通知してもよいし、操作部2の起動ステージごとに状態を通知してもよい。起動ステージとして、ディスプレイ、ローダ、OS(Operating System)、及び操作部2全体の起動が考えられる。
図7の例では、操作部マイコン21のマスタデバイスm2は、操作部2の起動完了後、操作部2の起動完了を示すReadyメッセージを、省エネサブシステム11のスレーブデバイスs1に送信している(ステップS203)。
操作部2が起動完了した時点で省エネサブシステム11が起動していない場合や、I2C通信の準備が完了していない場合が考えられる。このため、操作部マイコン21のマスタデバイスm2は、省エネサブシステム11のスレーブデバイスs1からACKを受信するまで、操作部2の状態を定期的に通知するのが好ましい。操作部2は、省エネサブシステム11のスレーブデバイスs1からACKを受信することにより、省エネサブシステム11の起動を確認することができる。
省エネサブシステム11が起動し、操作部マイコン21から状態を通知されると、省エネサブシステム11のマスタデバイスm1は、操作部マイコン21のスレーブデバイスs2に、本体コントローラ1のバージョン情報を通知する(ステップS204)。こうして得られた本体コントローラ1のバージョン情報を利用して、操作部2を初期化することができる。
なお、本体コントローラ1のバージョン情報は、本体コントローラ1の各起動ステージで実行されるプログラムのバージョン情報であってもよいし、本体コントローラ1を構成する各サブモジュールのハードウェアのバージョン情報であってもよい。
同様に、操作部マイコン21が本体コントローラ1からACKを受信すると、操作部マイコン21のマスタデバイスm2は、省エネサブシステム11のスレーブデバイスs1に、操作部2のバージョン情報を通知する(ステップS205)。こうして得られた操作部2のバージョン情報を利用して、本体コントローラ1を初期化することができる。
なお、操作部2のバージョン情報は、操作部2の各起動ステージで実行されるプログラムのバージョン情報であってもよいし、操作部2を構成する各サブモジュールのハードウェアのバージョン情報であってもよい。
その後、操作部マイコン21のマスタデバイスm2は、省エネサブシステム11のスレーブデバイスs1に起動条件を通知する(ステップS206)。起動条件とは、画像形成装置の起動に影響を及ぼす任意の条件のことである。起動条件は、例えば、画像形成装置の起動中に実行された、操作部2の操作キーの押下により入力される。起動条件の通知は、例えば、工程検査モードやソフトウェアの更新モードなどの特殊な動作モードで画像形成装置を起動する場合に要求される。したがって、操作部マイコン21のマスタデバイスm2は、画像形成装置を通常起動する場合、起動条件の通知を省略してもよい。
本体コントローラ1は、起動完了すると、画像形成装置全体の状態に責任を持ち、各モジュールの状態遷移を他のモジュールに通知する。本体コントローラ1は、各モジュールの状態遷移を、I2Cバスを利用して通知してもよいし、通知先のモジュールと通信可能な他のバス(例えば、USB)を利用して通知してもよい。
図7の例では、本体コントローラ1は、操作部2に、エンジンの停止(OFF)や起動(ON)を通知している(ステップS207,S208)。操作部2は、このような通知に基づいて、ディスプレイのバックライトの消灯や点灯などの制御を実行することができる。
従来の画像形成装置は、起動時に、USBなどの高速シリアルバスの初期化処理が完了するまで、各モジュールは通信することができなかった。すなわち、従来の画像形成装置は、初期化処理が完了するまで、起動に必要な各種の情報をモジュール間でやり取りすることができなかった。この結果、従来の画像形成装置は、起動に時間がかかった。
これに対して、本実施形態に係る画像形成装置は、上述の通り、起動時にI2Cバスにより各モジュールが通信することができる。そして、I2Cバスは、リンクトレーニングなどの初期化処理を行うことなく、画像形成装置の起動開始後、速やかに通信可能となる。この結果、本実施形態に係る画像形成装置は、従来の画像形成装置に比べて、起動にかかる時間が短くなる。すなわち、本実施形態によれば、画像形成装置の起動を高速化することができる。
また、I2Cバスは、信号線を2本しか利用しないため、小規模な回路で実装することができる。したがって、通信システムを小型化し、画像形成装置に追加する回路面積の増大を抑制することができる。
また、I2Cバスは、いわゆる枯れた技術であるため、既存の設計資源が豊富に存在する。これらの設計資源を利用することにより、IPやドライバを容易に作成することができる。
<2.省エネモード移行時及び復帰時>
図8は、本実施形態に係る画像形成装置の省エネモードの移行時及び復帰時の動作の一例を示すシーケンス図である。図8の例では、シーケンスの開始時点で、画像形成装置は起動完了し、通常モードで動作している。また、図8において、マスタデバイスからの通信に対するACK又はNAKの返信は省略されている。なお、図8のステップS307〜S310は、図7のステップS203,S206〜S208と同様である。
通常モードにおいて、エンジンは、消費電力を抑制するため、一定時間動作しないと停止する。エンジンが停止すると、本体コントローラ1は、エンジンが停止(OFF)したことを、操作部2に通知する(ステップS301)。
エンジンの停止後、一定時間が経過すると、本体コントローラ1は、通常モードから省エネモードに移行することを決定する。そして、本体コントローラ1は、省エネモードに移行することを、操作部2及び電源部3に通知する(ステップS302,S303)。
省エネモードは、画像形成装置の消費電力を抑制するための動作モードである。省エネモードでは、メモリの内容が保持された状態で、省エネサブシステム11、操作部マイコン21、及び電源マイコン31に電源が投入され、それ以外のコントローラの電源が切断される。
電源部3は、省エネモードに移行することを通知されると、省エネモードへ移行するための電源制御(移行制御)を実行する(ステップS304)。これにより、画像形成装置の動作モードが、通常モードから省エネモードに移行する。以降、省エネモードからの復帰要因が発生するまで、画像形成装置は省エネモードを継続する。
なお、省エネモードに移行するまでの通信及び制御(ステップS301〜S304)は、I2Cバスを利用して行われてもよいし、USBや他の通信バスを利用して行われてもよい。
省エネモードに移行中に、復帰要因が発生すると、電源マイコン31のマスタデバイスm3は、省エネモードから復帰するための電源制御(復帰制御)を実行する(ステップS306)。これにより、画像形成装置の動作モードが、省エネモードから通常モードに移行する。
復帰要因は、例えば、電源部3の電源スイッチの押下、操作部2の操作キーの押下、圧板の開閉などであるが、これに限られない。復帰要因を検知したモジュールのマスタデバイスは、電源マイコン31のスレーブデバイスs3に復帰要因が発生したことを通知する。電源マイコン31のスレーブデバイスs3がこの通知を受信すると、電源マイコン31は、上述の復帰制御を実行する。
図8の例では、復帰要因は操作部2の操作キーの押下であり、操作キーの押下を検知した操作部マイコン21のマスタデバイスm2が、その旨を電源マイコン31のスレーブデバイスs3に通知している(ステップS305)。
なお、復帰要因を検知したモジュールのマスタデバイスは、ゼネラルコールアドレスに対して、復帰要因が発生したことを通知してもよい。これにより、各モジュールに、復帰要因の発生を周知することができる。
本実施形態によれば、画像形成装置の起動の高速化と同様の理由により、画像形成装置の省エネモードからの復帰を高速化することができる。
また、I2Cバスは、高速シリアルバスに比べて消費電力が小さいため、本実施形態によれば、省エネモードにおける画像形成装置の待機電力を抑制することができる。
以上説明した通り、第1実施形態に係る通信システムを画像形成装置に適用することにより、画像形成装置の起動を高速化し、回路面積の増大を抑制し、IPやドライバを容易に作成することができる。また、画像形成装置の省エネモードからの復帰を高速化し、省エネモード中の待機電力を抑制することができる。
さらに、本実施形態によれば、画像形成装置に障害が発生し、OSが動作しなくなった場合であっても、個別のマイコンやコントローラにより構成された通信システムは、動作可能である。マスタデバイスを備えるマイコンが、検知した障害をゼネラルコードアドレスに通知することにより、通信システムを備える各モジュールに障害を通知することができる。これにより、例えば、操作部2のディスプレイに、障害を検知したことや、検知された障害の内容を表示させることができる。
なお、本実施形態において、起動時や、省エネモードの移行時及び復帰時に、モジュール間でやり取りされる情報は、上記の例に限られない。また、通信システムは、本体コントローラ1、操作部2、及び電源部3だけでなく、エンジンの他のモジュールを含んでもよい。さらに、第1実施形態に係る通信システムは、画像形成装置に限られず、高速シリアルバスで接続された複数のモジュールを備える任意の装置に適用されてもよい。
(第3実施形態)
第3実施形態に係る通信システムについて、図9〜図16を参照して説明する。本実施形態では、通信システムに接続された外部装置(I2Cデバイス)に排他的にアクセス可能な通信システムについて説明する。本実施形態に係る通信システムの構成は、第1実施形態と同様である。
まず、通信システムに外部装置が接続された場合について考える。図9は、外部装置として不揮発性RAMが接続された通信システムの一例を示す図である。図9の不揮発性RAMは、SDA端子及びSCL端子を備えたI2Cデバイスであり、SDA端子がデータ線L1に接続され、SCL端子がクロック線L2に接続されている。この不揮発性RAMは、I2C通信のスレーブとして機能し、各モジュールM1〜MnとI2C通信が可能である。図9の例では、不揮発性RAMに割り当てられたアドレスは、0000100である。
この不揮発性RAMに、モジュールMiが暗号化されたデータ(以下、「暗号化データ」という)を書き込む場合、一連の暗号化データは、連続して不揮発性RAMに書き込まれることが必要となる。このため、モジュールMiが不揮発性RAMに暗号化データを書き込んでいる間、モジュールMiが不揮発性RAMに排他的にアクセスすることが必要になる。モジュールMiが不揮発性RAMに排他的にアクセスするとは、他のモジュールMjが不揮発性RAMにアクセスしないように、モジュールMiが不揮発性RAMにアクセスすることをいう。
このように、通信システムに外部装置が接続された場合、外部装置に対する排他的なアクセスが必要となる場合がある。そこで、本実施形態では、通信システムに接続された外部装置に対する排他的なアクセスを可能とするためのコマンドが予め定義される。
図10は、マスタデバイスm1が不揮発性RAMに排他的にアクセスする際の処理の概要を示すシーケンス図である。図10に示すように、まず、マスタデバイスm1は、他のマスタデバイスmiに対して不揮発性RAMへのアクセスを禁止するためのコマンド(以下、「禁止コマンド」という)を同報送信する(ステップS401)。同報送信された禁止コマンドは、不揮発性RAM及びスレーブデバイスs2〜snにより受信される。
この禁止コマンドは、本実施形態に係る通信システムにおいて独自に定義されたコマンドであるため、外部装置である不揮発性RAMは、禁止コマンドを受信しても、その内容を理解できない。したがって、不揮発性RAMは、受信した禁止コマンドを無視する。
一方、スレーブデバイスs2〜snは、禁止コマンドを受信すると、それぞれ対応するマスタデバイスm2〜mnの不揮発性RAMへのアクセスを禁止する。これ以降、マスタデバイスm1は、不揮発性RAMに排他的にアクセス可能となる(ステップS402)。
マスタデバイスm1は、不揮発性RAMに対する所望の処理(例えば、暗号化データの書き込み)が終了すると、不揮発性RAMに対するアクセスの禁止を解除するためのコマンド(以下、「解除コマンド」という)を同報送信する(ステップS403)。同報送信された解除コマンドは、不揮発性RAM及びスレーブデバイスs2〜snにより受信される。
この解除コマンドは、本実施形態に係る通信システムにおいて独自に定義されたコマンドであるため、外部装置である不揮発性RAMは、解除コマンドを受信しても、その内容を理解できない。したがって、不揮発性RAMは、受信した解除コマンドを無視する。
一方、スレーブデバイスs2〜snは、解除コマンドを受信すると、それぞれ対応するマスタデバイスm2〜mnの、不揮発性RAMへのアクセスの禁止を解除する。これ以降、マスタデバイスm1だけでなく、マスタデバイスm2〜mnも、不揮発性RAMに対してアクセス可能となる。
ここで、図11〜図13は、禁止コマンド及び解除コマンドのコマンドフォーマットの一例を示す図である。
図11の上段は、マスタデバイスmjによるI2C通信を禁止する禁止コマンド(第1の禁止コマンド)により、マスタデバイスmiによる外部装置への排他的なアクセスを可能にするためのコマンドフォーマットの一例である。このコマンドフォーマットは、スタートコンディションS及びゼネラルコールアドレスの送信と、禁止コマンドの送信と、送信元のマスタデバイスmiのアドレスの送信と、ストップコンディションPの送信と、により構成される。禁止コマンドは、ゼネラルコールアドレスに対するACKの受信後に送信される。マスタデバイスmiのアドレスは、禁止コマンドに対するACKの受信後に送信される。ストップコンディションPは、マスタデバイスmiのアドレスに対するACKの受信後に送信される。
図11の例では、ゼネラルコールアドレス及びマスタデバイスmiのアドレスは、末尾に0を付加されている。送信元のマスタデバイスmiは、外部装置に排他的にアクセスするマスタデバイスmiに相当する。図11の例では、送信元のマスタデバイスmiは、マスタデバイスm1である。
図11の例では、禁止コマンドは、00001110(0x0E)である。これは、通信システムにおいて、コマンド0x0Eが禁止コマンドとして定義される場合を想定している。しかしながら、本実施形態において、禁止コマンドは、コマンド0x0Eに限られない。禁止コマンドとして、I2C規格において使用されていない任意のコマンドを割り当てることができる。
このコマンドフォーマットに従って禁止コマンドが送受信されると、マスタデバイスm2〜mnは、I2C通信を禁止される。結果として、マスタデバイスm1は、ストップコンディションPを送信した後、外部装置に対して排他的にアクセス可能となる。
これに対して、図11の下段は、上段の禁止コマンドによるI2C通信の禁止を解除する解除コマンド(第1の解除コマンド)により、マスタデバイスmiによる外部装置への排他的なアクセスを終了させるためのコマンドフォーマットの一例である。図11の下段の解除コマンドは、図11の上段の禁止コマンドに対応する。このコマンドフォーマットは、解除コマンドを除き、上段のコマンドフォーマットと同様である。
図11の例では、解除コマンドは、10001110(0x8E)である。これは、通信システムにおいて、コマンド0x8Eが解除コマンドとして定義される場合を想定している。しかしながら、本実施形態において、解除コマンドは、コマンド0x8Eに限られない。解除コマンドとして、I2C規格において使用されていない任意のコマンドを割り当てることができる。
このコマンドフォーマットに従って解除コマンドが送受信されると、マスタデバイスm2〜mnは、I2C通信の禁止を解除され、外部装置にアクセス可能となる。結果として、マスタデバイスM1により外部装置への排他的なアクセスが終了する。
図12の上段は、マスタデバイスmjによる特定の外部装置へのアクセスを禁止する禁止コマンド(第2の禁止コマンド)により、マスタデバイスmiによる外部装置への排他的なアクセスを可能にするためのコマンドフォーマットの一例である。禁止コマンドを送信したマスタデバイスmiを除く全てのマスタデバイスmiに対して、特定の外部装置へのアクセスを禁止させる禁止コマンド(第2の禁止コマンド)のコマンドフォーマットの一例である。このコマンドフォーマットは、スタートコンディションS及びゼネラルコールアドレスの送信と、禁止コマンドの送信と、外部装置のアドレスの送信と、送信元のマスタデバイスmiのアドレスの送信と、ストップコンディションPの送信と、により構成される。禁止コマンドは、ゼネラルコールアドレスに対するACKの受信後に送信される。外部装置のアドレスは、禁止コマンドに対するACKの受信後に送信される。マスタデバイスmiのアドレスは、外部装置のアドレスに対するACKの受信後に送信される。ストップコンディションPは、マスタデバイスmiのアドレスに対するACKの受信後に送信される。
図12の例では、ゼネラルコールアドレス、マスタデバイスmiのアドレス、及び外部装置のアドレスは、末尾に0を付加されている。送信元のマスタデバイスmiは、外部装置に排他的にアクセスするマスタデバイスmiに相当する。外部装置は、送信元のマスタデバイスmiが排他的にアクセスする外部装置に相当する。図12の例では、送信元のマスタデバイスmiは、マスタデバイスm1であり、外部装置は、不揮発性RAMである。
図12の例では、禁止コマンドは、00011110(0x1E)である。これは、通信システムにおいて、コマンド0x1Eが禁止コマンドとして定義される場合を想定している。しかしながら、本実施形態において、禁止コマンドは、コマンド0x1Eに限られない。禁止コマンドとして、I2C規格において使用されていない任意のコマンドを割り当てることができる。
このコマンドフォーマットに従って禁止コマンドが送受信されると、マスタデバイスm2〜mnは、外部装置(不揮発性RAM)に対するアクセスを禁止される。結果として、マスタデバイスm1は、ストップコンディションPを送信した後、外部装置(不揮発性RAM)に対して排他的にアクセス可能となる。
これに対して、図12の下段は、上段の禁止コマンドによる外部装置へのアクセスの禁止を解除する解除コマンド(第2の解除コマンド)により、マスタデバイスmiによる外部装置への排他的なアクセスを終了させるためのコマンドフォーマットの一例である。図12の下段の解除コマンドは、図12の上段の禁止コマンドに対応する。このコマンドフォーマットは、解除コマンドを除き、上段のコマンドフォーマットと同様である。
図12の例では、解除コマンドは、10011110(0x9E)である。これは、通信システムにおいて、コマンド0x9Eが解除コマンドとして定義される場合を想定している。しかしながら、本実施形態において、解除コマンドは、コマンド0x9Eに限られない。解除コマンドとして、I2C規格において使用されていない任意のコマンドを割り当てることができる。
このコマンドフォーマットに従って解除コマンドが送受信されると、マスタデバイスm2〜mnは、外部装置(不揮発性RAM)に対するアクセスの禁止を解除され、外部装置(不揮発性RAM)にアクセス可能となる。結果として、マスタデバイスM1による外部装置(不揮発性RAM)への排他的なアクセスが終了する。
図13の上段は、マスタデバイスmjによるI2C通信を所定の期間の間禁止する禁止コマンド(第3の禁止コマンド)により、マスタデバイスmiによる外部装置への排他的なアクセスを可能にするためのコマンドフォーマットの一例である。このコマンドフォーマットは、スタートコンディションS及びゼネラルコールアドレスの送信と、禁止コマンドの送信と、禁止期間の送信と、送信元のマスタデバイスmiのアドレスの送信と、ストップコンディションPの送信と、により構成される。禁止コマンドは、ゼネラルコールアドレスに対するACKの受信後に送信される。禁止期間は、I2C通信が禁止される期間であり、禁止コマンドに対するACKの受信後に送信される。マスタデバイスmiのアドレスは、禁止期間に対するACKの受信後に送信される。ストップコンディションPは、マスタデバイスmiのアドレスに対するACKの受信後に送信される。
図13の例では、ゼネラルコールアドレス及びマスタデバイスmiのアドレスは、末尾に0を付加されている。送信元のマスタデバイスmiは、外部装置に排他的にアクセスするマスタデバイスmiに相当する。図13の例では、送信元のマスタデバイスmiは、マスタデバイスm1であり、禁止期間は、10msである。この禁止期間は、任意に設定可能である。
図13の例では、禁止コマンドは、00101110(0x2E)である。これは、通信システムにおいて、コマンド0x2Eが禁止コマンドとして定義される場合を想定している。しかしながら、本実施形態において、禁止コマンドは、コマンド0x2Eに限られない。禁止コマンドとして、I2C規格において使用されていない任意のコマンドを割り当てることができる。
このコマンドフォーマットに従って禁止コマンドが送受信されると、マスタデバイスm2〜mnは、禁止期間の間、I2C通信を禁止される。結果として、マスタデバイスm1は、ストップコンディションPを送信した後、禁止期間の間、外部装置に対して排他的にアクセス可能となる。禁止期間が経過すると、マスタデバイスm2〜mnは、I2C通信の禁止を解除され、マスタデバイスm1による外部装置への排他的なアクセスが終了する。
これに対して、図13の下段は、禁止期間の間に上段の禁止コマンドによるI2C通信の禁止を解除する解除コマンド(第3の解除コマンド)により、マスタデバイスmiによる外部装置への排他的なアクセスを終了させるためのコマンドフォーマットの一例である。図13の下段の解除コマンドは、図13の上段の禁止コマンドに対応する。このコマンドフォーマットは、解除コマンドを除き、図11の解除コマンドのコマンドフォーマットと同様である。
図13の例では、解除コマンドは、10101110(0xAE)である。これは、通信システムにおいて、コマンド0xAEが解除コマンドとして定義される場合を想定している。しかしながら、本実施形態において、解除コマンドは、コマンド0xAEに限られない。解除コマンドとして、I2C規格において使用されていない任意のコマンドを割り当てることができる。
禁止期間の間に、このコマンドフォーマットに従って解除コマンドが送受信されると、マスタデバイスm2〜mnは、I2C通信の禁止を解除され、外部装置にアクセス可能となる。結果として、マスタデバイスM1による外部装置への排他的なアクセスが終了する。一方、禁止期間以外に、このコマンドフォーマットに従って解除コマンドが送受信されると、マスタデバイスm2〜mnは、解除コマンドを無視する。
なお、本実施形態において、通信システムには、図11〜図13の禁止コマンド及び解除コマンドの組がそれぞれ定義されてもよいし、いずれか1つ又は2つの禁止コマンド及び解除コマンドの組が定義されてもよい。また、図13の禁止コマンドが定義される場合、対応する解除コマンドが定義されなくてもよい。
図14は、マスタデバイスmiが図11の禁止コマンド及び解除コマンドを送信可能な場合における、各スレーブデバイスsjが実行する処理の一例を示すフローチャートである。図14の処理は、スレーブデバイスsjがスタートコンディションSを受信すると開始される。
スレーブデバイスsjは、マスタデバイスmiからスタートコンディションSを受信すると、スタートコンディションSに続く1バイト目のデータを受信し(ステップS501)、ACKを返す。
次に、スレーブデバイスsjは、1バイト目のデータが、00000000であるか、すなわち、ゼネラルコールであるか判定する(ステップS502)。1バイト目のデータがゼネラルコールでない場合(ステップS502のNO)、スレーブデバイスsjは、受信したデータに応じた所定の処理を実行する(ステップS510)。
一方、1バイト目のデータがゼネラルコールである場合(ステップS502のYES)、スレーブデバイスsjは、マスタデバイスmiから2バイト目のデータを受信し(ステップS503)、ACKを返す。
次に、スレーブデバイスsjは、2バイト目のデータが、0x0E(00001110)であるか、すなわち、図11の禁止コマンドであるか判定する(ステップS504)。2バイト目のデータが禁止コマンドである場合(ステップS504のYES)、スレーブデバイスsjは、対応するマスタデバイスmjのI2C通信を禁止する(ステップS505)。これにより、マスタデバイスmjは、外部装置にアクセス不能となり、マスタデバイスmiは、外部装置に排他的にアクセス可能となる。
その後、スレーブデバイスsjは、マスタデバイスmiから3バイト目のデータ(マスタデバイスmiのアドレス)を受信し(ステップS506)、ACKを返し、マスタデバイスmiからストップコンディションPを受信する(ステップS507)。
一方、2バイト目のデータが禁止コマンドでない場合(ステップS504のNO)、スレーブデバイスsjは、2バイト目のデータが0x8E(10001110)であるか、すなわち、図11の解除コマンドであるか判定する(ステップS508)。2バイト目のデータが解除コマンドでない場合(ステップS508のNO)、スレーブデバイスsjは、受信したデータに応じた所定の処理を実行する(ステップS510)。
一方、2バイト目のデータが解除コマンドである場合(ステップS508のYES)、スレーブデバイスsjは、対応するマスタデバイスmjのI2C通信の禁止を解除する(ステップS509)。これにより、マスタデバイスmjは外部装置にアクセス可能となり、マスタデバイスmiによる外部装置への排他的なアクセスが終了する。
その後、スレーブデバイスsjは、マスタデバイスmiから3バイト目のデータ(マスタデバイスmiのアドレス)を受信し(ステップS506)、ACKを返し、マスタデバイスmiからストップコンディションPを受信する(ステップS507)。
図15は、マスタデバイスmiが図12の禁止コマンド及び解除コマンドを送信可能な場合における、各スレーブデバイスsjが実行する処理の一例を示すフローチャートである。図15の処理は、スレーブデバイスsjがスタートコンディションSを受信すると開始される。
スレーブデバイスsjは、マスタデバイスmiからスタートコンディションSを受信すると、スタートコンディションSに続く1バイト目のデータを受信し(ステップS601)、ACKを返す。
次に、スレーブデバイスsjは、1バイト目のデータが、00000000であるか、すなわち、ゼネラルコールであるか判定する(ステップS602)。1バイト目のデータがゼネラルコールでない場合(ステップS602のNO)、スレーブデバイスsjは、受信したデータに応じた所定の処理を実行する(ステップS612)。
一方、1バイト目のデータがゼネラルコールである場合(ステップS602のYES)、スレーブデバイスsjは、マスタデバイスmiから2バイト目のデータを受信し(ステップS603)、ACKを返す。
次に、スレーブデバイスsjは、2バイト目のデータが、0x1E(00011110)であるか、すなわち、図12の禁止コマンドであるか判定する(ステップS604)。2バイト目のデータが禁止コマンドである場合(ステップS604のYES)、スレーブデバイスsjは、マスタデバイスmiから3バイト目のデータを受信し(ステップS605)、ACKを返す。ここで受信する3バイト目のデータには、外部装置のアドレスが含まれる。
スレーブデバイスsjは、3バイト目のデータを受信すると、当該データに含まれるアドレス(外部装置)に対する、対応するマスタデバイスmjのアクセスを禁止する(ステップS606)。これにより、マスタデバイスmjは、外部装置にアクセス不能となり、マスタデバイスmiは、外部装置に排他的にアクセス可能となる。ただし、マスタデバイスmjは、外部装置へのアクセスを禁止された後も、外部装置以外のスレーブデバイスに対してはアクセス可能である。
その後、スレーブデバイスsjは、マスタデバイスmiから4バイト目のデータ(マスタデバイスmiのアドレス)を受信し(ステップS607)、ACKを返し、マスタデバイスmiからストップコンディションPを受信する(ステップS608)。
一方、2バイト目のデータが禁止コマンドでない場合(ステップS604のNO)、スレーブデバイスsjは、2バイト目のデータが0x9E(10011110)であるか、すなわち、図12の解除コマンドであるか判定する(ステップS609)。2バイト目のデータが解除コマンドでない場合(ステップS609のNO)、スレーブデバイスsjは、受信したデータに応じた所定の処理を実行する(ステップS612)。
一方、2バイト目のデータが解除コマンドである場合(ステップS609のYES)、スレーブデバイスsjは、マスタデバイスmiから3バイト目のデータを受信し(ステップS610)、ACKを返す。ここで受信する3バイト目のデータには、外部装置のアドレスが含まれる。
スレーブデバイスsjは、3バイト目のデータを受信すると、当該データに含まれるアドレス(外部装置)に対する、対応するマスタデバイスmjのアクセスの禁止を解除する(ステップS611)。これにより、マスタデバイスmjは、外部装置にアクセス可能となり、マスタデバイスmiによる外部装置への排他的なアクセスが終了する。
その後、スレーブデバイスsjは、マスタデバイスmiから4バイト目のデータ(マスタデバイスmiのアドレス)を受信し(ステップS607)、ACKを返し、マスタデバイスmiからストップコンディションPを受信する(ステップS608)。
図16は、マスタデバイスmiが図13の禁止コマンド及び解除コマンドを送信可能な場合における、各スレーブデバイスsjが実行する処理の一例を示すフローチャートである。図16の処理は、スレーブデバイスsjがスタートコンディションSを受信すると開始される。
スレーブデバイスsjは、マスタデバイスmiからスタートコンディションSを受信すると、スタートコンディションSに続く1バイト目のデータを受信し(ステップS701)、ACKを返す。
次に、スレーブデバイスsjは、1バイト目のデータが、00000000であるか、すなわち、ゼネラルコールであるか判定する(ステップS702)。1バイト目のデータがゼネラルコールでない場合(ステップS702のNO)、スレーブデバイスsjは、受信したデータに応じた所定の処理を実行する(ステップS712)。
一方、1バイト目のデータがゼネラルコールである場合(ステップS702のYES)、スレーブデバイスsjは、マスタデバイスmiから2バイト目のデータを受信し(ステップS703)、ACKを返す。
次に、スレーブデバイスsjは、2バイト目のデータが、0x2E(00101110)であるか、すなわち、図13の禁止コマンドであるか判定する(ステップS704)。2バイト目のデータが禁止コマンドである場合(ステップS704のYES)、スレーブデバイスsjは、マスタデバイスmiから3バイト目のデータを受信し(ステップS705)、ACKを返す。ここで受信する3バイト目のデータは、禁止期間を示すデータである。
スレーブデバイスsjは、3バイト目のデータを受信すると、当該データが示す禁止期間の間、対応するマスタデバイスmjにI2C通信を禁止する(ステップS706)。これにより、マスタデバイスmjは、禁止期間の間、外部装置にアクセス不能となり、マスタデバイスmiは、外部装置に排他的にアクセス可能となる。ただし、マスタデバイスmjは、禁止期間が経過すると、自動的にI2C通信の禁止を解除される。
その後、スレーブデバイスsjは、マスタデバイスmiから4バイト目のデータ(マスタデバイスmiのアドレス)を受信し(ステップS707)、ACKを返し、マスタデバイスmiからストップコンディションPを受信する(ステップS708)。
一方、2バイト目のデータが禁止コマンドでない場合(ステップS704のNO)、スレーブデバイスsjは、2バイト目のデータが0xAE(10101110)であるか、すなわち、図13の解除コマンドであるか判定する(ステップS709)。2バイト目のデータが解除コマンドでない場合(ステップS709のNO)、スレーブデバイスsjは、受信したデータに応じた所定の処理を実行する(ステップS712)。
一方、2バイト目のデータが解除コマンドである場合(ステップS709のYES)、スレーブデバイスsjは、対応するマスタデバイスmjのI2C通信の禁止を解除する(ステップS710)。これにより、マスタデバイスmjは、外部装置にアクセス可能となり、マスタデバイスmiによる外部装置への排他的なアクセスが終了する。マスタデバイスmiは、禁止期間の間に解除コマンドを送信することにより、マスタデバイスmjがI2C通信できない期間を短縮することができる。なお、マスタデバイスmiは、禁止コマンドの送信後、禁止期間が経過した場合、解除コマンドを送信してもよいし、しなくてもよい。
その後、スレーブデバイスsjは、マスタデバイスmiから3バイト目のデータ(マスタデバイスmiのアドレス)を受信し(ステップS711)、ACKを返し、マスタデバイスmiからストップコンディションPを受信する(ステップS708)。
以上説明した通り、本実施形態によれば、通信システムを構成する各マスタデバイスmiは、禁止コマンド及び解除コマンドを利用することにより、通信システムに接続された外部装置に排他的にアクセスすることができる。したがって、排他的なアクセスが必要な外部装置を、通信システムに接続し、I2C通信のスレーブデバイスとして使用することができる。
なお、以上では、外部装置が1つだけ接続されている場合を例に説明したが、通信装置には複数の外部装置が接続されてもよい。この場合であっても、各マスタデバイスmiは、禁止コマンド及び解除コマンドを利用することにより、接続された任意の外部装置に対して、排他的にアクセスすることができる。また、第2実施形態に係る画像形成装置が備える通信システムとして、本実施形態に係る通信システムを利用することも可能である。
なお、上記実施形態に挙げた構成等に、その他の要素との組み合わせなど、ここで示した構成に本発明が限定されるものではない。これらの点に関しては、本発明の趣旨を逸脱しない範囲で変更することが可能であり、その応用形態に応じて適切に定めることができる。