(57)【要約】  コマンドを受信し、解析し、その結果をマスターデバイス（１０）に返信する通信装置であるスレーブデバイス（２０）であって、制御部を構成するＩＩＣ制御部（２０５）及びＣＰＵ（２１０）は、コマンド解析期間中、ＳＣＬ信号を停止するように、ＳＣＬ制御部（２０１）を制御し、タイマー（２０６）の値が閾値以下であれば、送信するデータを送信ＦＩＦＯ（２０３）に保存し、ＳＣＬ信号を停止させる制御を解除し、ＳＣＬ信号に同期して、ＳＤＡ制御部（２０２）が送信ＦＩＦＯ（２０３）に保存されているデータを、マスターデバイス（１０）に送信し、タイマー（２０６）の値が閾値を超えていれば、ＳＣＬ信号を停止させる制御を解除してクロック制御部を前記クロック信号を受信する状態にし、また、ＳＤＡ制御部（２０２）をスレーブモードで動作する通信装置を示すスレーブアドレスを受信する状態に設定する。
2013077012.tif 000002
【特許請求の範囲】
【請求項１】
クロック信号を伝送するためのクロック信号線及びデータを伝送するためのデータ信号線からなる同期式シリアル通信用のバスを用いて、マスターモードで動作する通信装置であるマスターデバイスから送信されるコマンドを受信し、該コマンドを解析し、前記バスを用いて、前記解析の結果を前記マスターデバイスに返信する、スレーブモードで動作する通信装置であって、
前記マスターデバイスが、前記スレーブモードで動作する通信装置に通信を開始したことによりスタートするタイマーと、
予め決められた閾値を保存するタイマー閾値記憶部と、
前記マスターデバイスからの前記クロック信号を前記クロック信号線を通して受信し、及び、前記マスターデバイスからの前記クロック信号を停止させる制御を行うクロック制御部と、
前記マスターデバイスに対し、前記データ信号線を通してデータの送受信を行うデータ制御部と、
前記データ制御部によって送信されるデータを一時的に保存する送信用一時記憶部と
前記マスターデバイスから送信されたコマンドを解析するコマンド解析部と、
制御部と
を有し、
前記制御部は、
前記マスターデバイスが前記コマンド解析部の解析結果を返信することを求めたときに、前記コマンド解析部がコマンドを解析している期間中、前記マスターデバイスが前記クロック信号を停止するように、前記クロック制御部を制御し、
前記タイマーの値を前記タイマー閾値記憶部に記憶されている閾値と比較し、
前記比較の結果、前記タイマーの値が前記閾値以下であれば、送信するデータを前記送信用一時記憶部に保存し、前記クロック制御部による前記クロック信号を停止させる制御を解除し、前記クロック制御部が受信する前記クロック信号に同期して、前記データ制御部が前記送信用一時記憶部に保存されているデータを、前記マスターデバイスに送信し、
前記比較の結果、前記タイマーの値が前記閾値を超えていれば、前記クロック制御部による前記クロック信号を停止させる制御を解除して前記クロック制御部を前記クロック信号を受信する状態にし、また、前記データ制御部をスレーブモードで動作する通信装置を示すスレーブアドレスを受信する状態にする
ことを特徴とする通信装置。
【請求項２】
前記制御部は、前記コマンド解析部による前記コマンドの解析を完了した後に、前記タイマーの値を前記閾値と比較する前記処理を行うことを特徴とする請求項１に記載の通信装置。
【請求項３】
前記制御部は、
前記コマンド解析部による前記コマンドの解析の完了の前に、前記タイマーの値を前記閾値と比較する前記処理を開始し、
前記比較の結果、前記タイマーの値が前記閾値を超えていれば、前記コマンド解析部により前記コマンドの解析は完了しているかいないかに関係なく、前記クロック制御部による前記クロック信号を停止させる制御を解除して前記クロック制御部を前記クロック信号を受信する状態にし、また、前記データ制御部をスレーブモードで動作する通信装置を示すスレーブアドレスを受信する状態にする
ことを特徴とする請求項１に記載の通信装置。
【請求項４】
前記マスターデバイスから送信されるデータを一時的に保存する受信用一時記憶部をさらに有し、
前記マスターデバイスから送信されるデータを受信するときに、前記タイマーの値を前記タイマー閾値記憶部に記憶されている閾値と比較する処理を行い、前記タイマーの値が前記閾値を超えていれば、前記受信用一時記憶部のデータをクリアし、前記クロック制御部による前記クロック信号を停止させる制御を解除して前記クロック制御部を前記クロック信号を受信する状態にし、また、前記データ制御部をスレーブモードで動作する通信装置を示すスレーブアドレスを受信する状態にする
ことを特徴とする請求項１から３までのいずれか１項に記載の通信装置。
【請求項５】
前記制御部は、前記受信用一時記憶部からデータを読み出すことが可能な状態になってから、前記マスターデバイスからの受信処理を開始させることを特徴とする請求項４に記載の通信装置。
【請求項６】
前記制御部は、
前記コマンド解析部によるコマンドの解析を開始した後に、コマンド送信フラグを未送信を示すフラグに設定し、
前記コマンド解析部によるコマンドの解析を完了し、前記マスターデバイスに前記解析の結果を送信した後に、前記コマンド送信フラグを送信済を示すフラグに設定し、
前記マスターデバイスが前記コマンド解析部の解析結果を返信するように求めたときに、前記コマンド送信フラグに基づいて、返信するデータを決定する
ことを特徴とする請求項１から５までのいずれか１項に記載の通信装置。
【請求項７】
前記クロック信号線は、ＳＣＬ信号線であり、
前記データ信号線は、ＳＤＡ信号線であり、
前記同期式シリアル通信用のバスは、ＩＩＣバスである
ことを特徴とする請求項１から６までのいずれか１項に記載の通信装置。
【請求項８】
クロック信号を伝送するためのクロック信号線及びデータを伝送するためのデータ信号線からなる同期式シリアル通信用のバスを用いて、マスターモードで動作する通信装置であるマスターデバイスから送信されるコマンドを受信し、該コマンドを解析し、前記バスを用いて、前記解析の結果を前記マスターデバイスに返信する、スレーブモードで動作する通信装置における通信方法であって、
前記マスターデバイスが、前記スレーブモードで動作する通信装置に通信を開始したことによりタイマーをスタートするステップと、
クロック制御部が、前記マスターデバイスからの前記クロック信号を、前記クロック信号線を通して受信し、又は、前記マスターデバイスからの前記クロック信号を停止させる制御を行うステップと、
データ制御部が、前記マスターデバイスに対し、前記データ信号線を通してデータの送受信を行うステップと、
前記データ制御部によって送信されるデータを送信用一時記憶部に一時的に保存するステップと、
前記マスターデバイスから送信されたコマンドを解析するステップと
を有し、
前記マスターデバイスが前記コマンドの解析結果を返信することを求めたときに、前記コマンドを解析している期間中、前記マスターデバイスが前記クロック信号を停止するように制御し、
前記タイマーの値をタイマー閾値記憶部に予め記憶されている閾値と比較し、
前記比較の結果、前記タイマーの値が前記閾値以下であれば、送信するデータを前記送信用一時記憶部に保存し、前記クロック信号を停止させる制御を解除し、前記受信するクロック信号に同期して、前記送信用一時記憶部に保存されているデータを、前記マスターデバイスに送信し、
前記比較の結果、前記タイマーの値が前記閾値を超えていれば、前記クロック制御部による前記クロック信号を停止させる制御を解除して前記クロック制御部を前記クロック信号を受信する状態にし、また、前記データ制御部をスレーブモードで動作する通信装置を示すスレーブアドレスを受信する状態にする
ことを特徴とする通信方法。
【請求項９】
前記コマンド解析部による前記コマンドの解析を完了した後に、前記タイマーの値を前記閾値と比較する前記処理を行うことを特徴とする請求項８に記載の通信方法。
【請求項１０】
前記コマンド解析部による前記コマンドの解析の完了の前に、前記タイマーの値を前記閾値と比較する前記処理を開始し、
前記比較の結果、前記タイマーの値が前記閾値を超えていれば、前記コマンド解析部により前記コマンドの解析は完了しているかいないかに関係なく、前記クロック制御部による前記クロック信号を停止させる制御を解除して前記クロック制御部を前記クロック信号を受信する状態にし、また、前記データ制御部をスレーブモードで動作する通信装置を示すスレーブアドレスを受信する状態にする
ことを特徴とする請求項８に記載の通信方法。
【請求項１１】
前記マスターデバイスから送信されるデータを一時的に保存する受信用一時記憶部をさらに有し、
前記マスターデバイスから送信されるデータを受信するときに、前記タイマーの値を前記タイマー閾値記憶部に記憶されている閾値と比較する処理を行い、前記タイマーの値が前記閾値を超えていれば、前記受信用一時記憶部のデータをクリアし、前記クロック制御部による前記クロック信号を停止させる制御を解除して前記クロック制御部を前記クロック信号を受信する状態にし、また、前記データ制御部をスレーブモードで動作する通信装置を示すスレーブアドレスを受信する状態にする
ことを特徴とする請求項８から１０までのいずれか１項に記載の通信方法。
【請求項１２】
前記受信用一時記憶部からデータを読み出すことが可能な状態になってから、前記マスターデバイスからの受信処理を開始させることを特徴とする請求項１１に記載の通信方法。
【請求項１３】
前記コマンドの解析を開始した後に、コマンド送信フラグを未送信を示すフラグに設定し、
前記コマンドの解析を完了し、前記マスターデバイスに前記解析の結果を送信した後に、前記コマンド送信フラグを送信済を示すフラグに設定し、
前記マスターデバイスが前記解析結果を返信するように求めたときに、前記コマンド送信フラグに基づいて、返信するデータを決定する
ことを特徴とする請求項８から１２までのいずれか１項に記載の通信方法。
【請求項１４】
前記クロック信号線は、ＳＣＬ信号線であり、
前記データ信号線は、ＳＤＡ信号線であり、
前記同期式シリアル通信用のバスは、ＩＩＣバスである
ことを特徴とする請求項８から１３までのいずれか１項に記載の通信方法。
【請求項１５】
クロック信号を伝送するためのクロック信号線及びデータを伝送するためのデータ信号線からなる同期式シリアル通信用のバスを用いて、マスターモードで動作する通信装置であるマスターデバイスと、
前記マスターデバイスから送信されるコマンドを受信し、該コマンドを解析し、前記バスを用いて、前記解析の結果を前記マスターデバイスに返信する、スレーブモードで動作する通信装置であるスレーブデバイスと
を有し、
前記スレーブデバイスは、請求項１から７までのいずれか１項に記載の通信装置である
ことを特徴とする通信システム。
【請求項１６】
前記マスターデバイスは、
前記スレーブモードで動作する通信装置に通信を開始したことによりスタートする第１のタイマーと、
予め決められた第１の閾値を保存する第１のタイマー閾値記憶部と、
前記クロック信号線を通して送信される前記クロック信号を制御する第１のクロック制御部と、
前記データ信号線を通してデータの送受信を行う第１のデータ制御部と、
前記第１のデータ制御部によって送信されるデータを一時的に保存する第１の送信用一時記憶部と、
第１の制御部と
を有し、
前記マスターデバイスは、前記スレーブデバイスにデータの送信、又は、前記スレーブデバイスからのデータ受信を行うたびに、前記第１のタイマーの値を前記第１のタイマー閾値記憶部に記憶されている第１の閾値と比較し、前記第１のタイマーの値が前記第１の閾値を越えていれば、前記第１のクロック制御部と前記データ制御部を初期状態に変更する
ことを特徴とする請求項１５に記載の通信システム。
【請求項１７】
前記マスターデバイスの前記第１のタイマー閾値記憶部に記憶されている前記第１の閾値と、前記スレーブデバイスの前記タイマー閾値記憶部に記憶されている前記閾値とが、同じ値であること特徴とする請求項１６に記載の通信システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信装置、通信方法、及び通信システムに関するものである。
【背景技術】
【０００２】
電子機器内におけるデバイス同士のデータ通信規格としてＩＩＣ（Ｉｎｔｅｒ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）規格（フィリップス社が開発したシリアル通信規格）がある。ＩＩＣでは、複数のデバイスは、ＳＣＬ（シリアルクロック）信号用のＳＣＬ信号線とＳＤＡ（シリアルデータ）信号用のＳＤＡ信号線で接続されており、それぞれの信号線は、抵抗を介して電源によってプルアップされた双方向のオープンコレクタ信号線である。ＳＣＬ信号線及びＳＤＡ信号線で構成されるバスを、「ＩＩＣバス」と言い、ＩＩＣバスを用いる通信規格を、「ＩＩＣプロトコル」と言う。また、ＩＩＣバスに接続されている複数のデバイスには、ＳＣＬ信号とＳＤＡ信号を制御して他のデバイスを制御することができるマスターデバイスと、マスターデバイスによって制御されるスレーブデバイスとがあり、それぞれのデバイスは、固有のアドレスを有している。また、１つのＩＩＣバスには、複数のマスターデバイスと複数のスレーブデバイスとを接続することができる。【０００３】
ＩＩＣにおいて、マスターデバイスは、例えば、以下のように動作する。通信を開始する場合、マスターデバイスは、他のデバイスがＩＩＣバスにアクセスしていないかを確認する。アクセスが無いことの確認は、ＩＩＣバスのＳＣＬ信号線及びＳＤＡ信号線の両方の状態がハイ（ｈｉｇｈ）であることを検出することによって、行うことができる。次に、マスターデバイスは、ＩＩＣバスにいずれのデバイスもアクセスしていなければ、ＩＩＣにおけるスタートコンディションを発行し、通信したい相手のアドレスとリード／ライト方向を指定する情報を送信し、相手のスレーブデバイスから応答を受信すれば、次に相手のスレーブデバイスに必要なデータを送信する。この必要なデータは、デバイス間のプロトコルに基づいて決めることができる。ＩＩＣでは、通信終了時には、マスターデバイスは、ストップコンディションを生成して、ＳＣＬ信号線及びＳＤＡ信号線の両方の状態をハイにする。【０００４】
また、ＩＩＣでは、マスターデバイスが、スレーブデバイスにデータを送信し、スレーブデバイスが、データを正しく受け取ったかどうかの応答をマスターデバイスに返信するように構成することもできる。この場合、マスターデバイスは、スタートコンディションを発行し、スレーブデバイスのアドレスとライト（ｗｒｉｔｅ）方向を指定する情報とを送信し、続いて、データを送信する。次に、マスターデバイスは、再度スタートコンディションを発行して、スレーブアドレスとリード（ｒｅａｄ）方向を指定する情報を送信し、スレーブデバイスは、そのデータを正しく受信できたかどうかの応答をマスターデバイスに送信する。ＩＩＣ規格に準拠した通信システムをこのように構成することで、マスターデバイスは、スレーブデバイスにデータが確実に送信できていることを確認することができる（例えば、特許文献１参照）。【０００５】
また、ＩＩＣでは、スレーブデバイスが何らかの理由でマスターデバイスからの信号を正常に受信できない、又は、ＳＣＬ信号線及びＳＤＡ信号線のいずれかの状態をロー（ｌｏｗ）に固定してしまい、通信不能状態に陥る場合がある。これに対し、ＩＩＣバスとは別の信号線を用いて、通信不能状態になったスレーブデバイスをリセットするという方法が提案されている（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００９−２４４９９１号公報（段落００５０−００５１、図１）
【特許文献２】特開２００８−１９７７５２号公報（段落０２０６−０２０８、図１）
【発明の概要】
【発明が解決しようとする課題】
【０００７】
特許文献１の通信システムにおいては、スレーブデバイスがマスターデバイスにデータを送信する場合、その送信データの準備のために、マスターデバイスを待たせる方法として、スレーブデバイスが、ＳＣＬ信号線をローにドライブする方法が提案されている。しかし、スレーブデバイスが、ＳＣＬ信号線をローにドライブしてＩＩＣバスを占有している期間、すなわち、ＩＩＣバス上の他の通信装置が通信できない状態にある期間が、例えば、負荷の高い処理をしているために、長くなることがあるという問題点がある。【０００８】
また、特定のマスターデバイスとスレーブデバイスとの間の通信により、長い期間、ＩＩＣバスが占有されることは、システム上好ましくないことであるから、特許文献２のように、別の信号線によりスレーブデバイスをリセットすることでＩＩＣバスの占有を解除することも可能である。しかし、スレーブデバイスが外部からの信号線を通した信号によりリセットされると、そのリセットされたスレーブデバイスが再起動して、起動処理が完了するまでの期間（長い期間の場合がある）、ＩＩＣの通信エラーが発生して通信システムの動作が停止するので、ＩＩＣバス上の他の通信装置が通信できない状態にある期間が、長くなることがあるという問題点がある。【０００９】
そこで、本発明は、クロック信号線及びデータ信号線からなる同期式シリアル通信用のバスを占有している期間を短縮することができる通信装置、通信方法、及び通信システムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明に係る通信装置は、クロック信号を伝送するためのクロック信号線及びデータを伝送するためのデータ信号線からなる同期式シリアル通信用のバスを用いて、マスターモードで動作する通信装置であるマスターデバイスから送信されるコマンドを受信し、該コマンドを解析し、前記バスを用いて、前記解析の結果を前記マスターデバイスに返信する、スレーブモードで動作する通信装置であって、前記マスターデバイスが、前記スレーブモードで動作する通信装置に通信を開始したことによりスタートするタイマーと、予め決められた閾値を保存するタイマー閾値記憶部と、前記マスターデバイスからの前記クロック信号を前記クロック信号線を通して受信し、及び、前記マスターデバイスからの前記クロック信号を停止させる制御を行うクロック制御部と、前記マスターデバイスに対し、前記データ信号線を通してデータの送受信を行うデータ制御部と、前記データ制御部によって送信されるデータを一時的に保存する送信用一時記憶部と前記マスターデバイスから送信されたコマンドを解析するコマンド解析部と、制御部とを有し、前記制御部は、前記マスターデバイスが前記コマンド解析部の解析結果を返信することを求めたときに、前記コマンド解析部がコマンドを解析している期間中、前記マスターデバイスが前記クロック信号を停止するように、前記クロック制御部を制御し、前記タイマーの値を前記タイマー閾値記憶部に記憶されている閾値と比較し、前記比較の結果、前記タイマーの値が前記閾値以下であれば、送信するデータを前記送信用一時記憶部に保存し、前記クロック制御部による前記クロック信号を停止させる制御を解除し、前記クロック制御部が受信する前記クロック信号に同期して、前記データ制御部が前記送信用一時記憶部に保存されているデータを、前記マスターデバイスに送信し、前記比較の結果、前記タイマーの値が前記閾値を超えていれば、前記クロック制御部による前記クロック信号を停止させる制御を解除して前記クロック制御部を前記クロック信号を受信する状態にし、また、前記データ制御部をスレーブモードで動作する通信装置を示すスレーブアドレスを受信する状態にすることを特徴とする。【００１１】
本発明に係る通信方法は、クロック信号を伝送するためのクロック信号線及びデータを伝送するためのデータ信号線からなる同期式シリアル通信用のバスを用いて、マスターモードで動作する通信装置であるマスターデバイスから送信されるコマンドを受信し、該コマンドを解析し、前記バスを用いて、前記解析の結果を前記マスターデバイスに返信する、スレーブモードで動作する通信装置における通信方法であって、前記マスターデバイスが、前記スレーブモードで動作する通信装置に通信を開始したことによりタイマーをスタートするステップと、クロック制御部が、前記マスターデバイスからの前記クロック信号を、前記クロック信号線を通して受信し、又は、前記マスターデバイスからの前記クロック信号を停止させる制御を行うステップと、データ制御部が、前記マスターデバイスに対し、前記データ信号線を通してデータの送受信を行うステップと、前記データ制御部によって送信されるデータを送信用一時記憶部に一時的に保存するステップと、前記マスターデバイスから送信されたコマンドを解析するステップとを有し、前記マスターデバイスが前記コマンドの解析結果を返信することを求めたときに、前記コマンドを解析している期間中、前記マスターデバイスが前記クロック信号を停止するように制御し、前記タイマーの値をタイマー閾値記憶部に予め記憶されている閾値と比較し、前記比較の結果、前記タイマーの値が前記閾値以下であれば、送信するデータを前記送信用一時記憶部に保存し、前記クロック信号を停止させる制御を解除し、前記受信するクロック信号に同期して、前記送信用一時記憶部に保存されているデータを、前記マスターデバイスに送信し、前記比較の結果、前記タイマーの値が前記閾値を超えていれば、前記クロック制御部による前記クロック信号を停止させる制御を解除して前記クロック制御部を前記クロック信号を受信する状態にし、また、前記データ制御部をスレーブモードで動作する通信装置を示すスレーブアドレスを受信する状態にすることを特徴とする。
【発明の効果】
【００１２】
本発明に係る通信装置、通信方法、及び通信システムによれば、クロック信号線及びデータ信号線からなる同期式シリアル通信用のバスを占有している期間を短縮することができるので、同期式シリアル通信用のバス上の他の通信装置が通信できない状態にある期間を減らすことができるという効果がある。
【図面の簡単な説明】
【００１３】
【図１】本発明の実施の形態１に係る通信装置及び通信システムの構成を概略的に示すブロック図である。
【図２】実施の形態１におけるマスターデバイスとスレーブデバイスとの間のＩＩＣ通信を示す図である。
【図３】（ａ）〜（ｃ）は、図２のＩＩＣ通信における波形の一例を示すタイミング図である。
【図４】実施の形態１におけるマスターデバイスの処理を示すフローチャートである。
【図５】実施の形態１におけるスレーブデバイスの処理を示すフローチャート（その１）である。
【図６】実施の形態１におけるスレーブデバイスの処理を示すフローチャート（その２）である。
【図７】図５の受信処理ルーチンの内容を示すフローチャートである。
【図８】本発明の実施の形態２におけるスレーブデバイスの処理を示すフローチャート（その１）である。
【図９】実施の形態２におけるスレーブデバイスの処理を示すフローチャート（その２）である。
【図１０】本発明の実施の形態４におけるスレーブデバイスの処理を示すフローチャート（その１）である。
【図１１】実施の形態４におけるスレーブデバイスの処理を示すフローチャート（その２）である。
【発明を実施するための形態】
【００１４】
実施の形態１．
図１は、本発明の実施の形態１に係る通信装置及び通信システムの構成を概略的に示すブロック図である。図１において、通信システムは、マスターモードで動作する通信装置としてのマスターデバイス１０と、スレーブモードで動作する通信装置としてのスレーブデバイス２０とを有する。マスターデバイス１０は、同期式のシリアル通信規格（本実施の形態においては、ＩＩＣ規格）に準拠したマスターデバイスであり、スレーブデバイス２０は、同期式のシリアル通信規格（本実施の形態においては、ＩＩＣ規格）に準拠したスレーブデバイスである。マスターデバイス１０及びスレーブデバイス２０は、ＩＩＣのクロック信号であるＳＣＬ信号を伝送するＳＣＬ信号線（同期式のシリアル通信規格におけるクロック信号線）３０と、ＩＩＣのデータ信号であるＳＤＡ信号を伝送するＳＤＡ信号線（同期式のシリアル通信規格におけるデータ信号線）３１とに接続されている。マスターデバイス１０とスレーブデバイス２０とは、ＳＣＬ信号線３０とＳＤＡ信号線３１とを用いることによって互いに通信可能である。ＳＣＬ信号及びＳＤＡ信号は、オープンコレクタ信号であるので、ＳＣＬ信号線３０及びＳＤＡ信号線３１はそれぞれ、抵抗３２，３３を介して電源電圧にプルアップされている。電源電圧は、一般的に、＋３．３Ｖ又は＋５Ｖが使用されるが、他の電圧であってもよい。図１では、１つのＩＩＣバス（ＳＣＬ信号線及びＳＤＡ信号線で構成される）に１台のマスターデバイス１０と１台のスレーブデバイス２０とが接続されている場合を示しているが、１つのＩＩＣバスには、複数のマスターデバイスと複数のスレーブデバイスとを接続することができる。なお、図１に示される通信装置であるスレーブデバイス２０は、実施の形態１における通信方法を実施することができる装置である。
【００１５】
次に、マスターデバイス１０の構成を説明する。図１に示されるように、マスターデバイス１０は、クロック制御部としてのＳＣＬ制御部１０１と、データ制御部としてのＳＤＡ制御部１０２と、送信用データ一時記憶部としての送信ＦＩＦＯ１０３と、受信用データ一時記憶部としての受信ＦＩＦＯ１０４と、送受信制御部としてのＩＩＣ制御部１０５と、タイマー１０６と、タイマー閾値記憶部１０７と、ＣＰＵ（中央演算処理装置）１１０と、リードオンリーメモリ（ＲＯＭ）１１１と、ランダムアクセスメモリ（ＲＡＭ）１１２と、演算処理部１１３とを有する。なお、本出願において、ＣＰＵ１１０とＩＩＣ制御部１０５とを含む構成を、マスターデバイス１０の「制御部」１２０とも言う。
【００１６】
ＳＣＬ制御部１０１は、ＳＣＬ信号線のハイ／ロー制御（ハイ又はローにドライブする制御）と、ＳＣＬ信号線３０の状況（ハイ又はローのいずれの状態か）の読み出しとを行う。ＳＤＡ制御部１０２は、ＳＤＡ信号のハイ／ロー制御（ハイ又はローにドライブする制御）と、ＳＤＡ信号線３１の状況（ハイ又はローのいずれの状態か）の読み出しとを行う。
【００１７】
送信ＦＩＦＯ１０３は、ＳＤＡ制御部１０２からデータを送信するときに、そのデータを一時的に保存する。受信ＦＩＦＯ１０４は、ＳＤＡ制御部１０２で受信したデータを一時的に保存する。
【００１８】
ＩＩＣ制御部１０５は、ＳＣＬ制御部１０１、ＳＤＡ制御部１０２、送信ＦＩＦＯ１０３、及び受信ＦＩＦＯ１０４を制御する。ＩＩＣ制御部１０５は、ＩＩＣの送信及び受信を行うときに、これらを制御して通信を行う。また、タイマー閾値記憶部１０７は、タイマー１０６の値と比較するための閾値を記憶する。ＩＩＣ制御部１０５は、タイマー１０６の開始、停止、初期化を制御し、及び、タイマー閾値記憶部１０７に記憶されている閾値を参照する。
【００１９】
ＣＰＵ１１０は、マスターデバイス１０の制御を行う。ＣＰＵ１１０は、プログラムを記憶したＲＯＭ１１１と、プログラムを実行するためのＲＡＭ１１２、及び、演算処理を行う演算処理部１１３とともにマスターデバイス１０の動作を制御する。ＣＰＵ１１０は、ＲＯＭ１１１に記録されたプログラムを、ＲＡＭ１１２を用いて実行し、ＩＩＣ制御部１０５を制御して、ＩＩＣバスへのデータの書込みや、ＩＩＣバスからのデータの読み出しを行う。演算処理部１１３は、例えば、グラフィックスの処理や圧縮された映像信号のエンコード処理及びデコード処理等を行う。
【００２０】
次に、スレーブデバイス２０の構成を説明する。図１に示されるように、スレーブデバイス２０は、クロック制御部としてのＳＣＬ制御部２０１と、データ制御部としてのＳＤＡ制御部２０２と、送信用データ一時記憶部としての送信ＦＩＦＯ２０３と、受信用データ一時記憶部としての受信ＦＩＦＯ２０４と、送受信制御部としてのＩＩＣ制御部２０５と、タイマー２０６と、タイマー閾値記憶部２０７と、ＣＰＵ２１０と、ＲＯＭ２１１と、ＲＡＭ２１２と、演算処理部２１３と、コマンド解析部２１４と、スレーブアドレス記憶部２１５とを有する。なお、本出願において、ＣＰＵ２１０とＩＩＣ制御部２０５とを含む構成を、スレーブデバイス２０の「制御部」２２０とも言う。
【００２１】
ＳＣＬ制御部２０１は、ＳＣＬ信号線のハイ／ロー制御（ハイ又はローにドライブする制御）と、ＳＣＬ信号線３０の状況（ハイ又はローのいずれの状態か）の読み出しとを行う。ＳＤＡ制御部２０２は、ＳＤＡ信号のハイ／ロー制御（ハイ又はローにドライブする制御）と、ＳＤＡ信号線３１の状況（ハイ又はローのいずれの状態か）の読み出しとを行う。
【００２２】
送信ＦＩＦＯ２０３は、ＳＤＡ制御部２０２からデータを送信するときに、そのデータを一時的に保存する。受信ＦＩＦＯ２０４は、ＳＤＡ制御部２０２で受信したデータを一時的に保存する。スレーブアドレス記憶部２１５は、スレーブデバイス２０のアドレス（「スレーブアドレス」と言う）を記憶する。ＳＤＡ制御部２０２は、マスターデバイス１０から送信されたスレーブアドレスを受信したときに、受信したスレーブアドレスが、スレーブアドレス記憶部２１５に記憶されているスレーブアドレスと一致しているかどうかを判定する。
【００２３】
ＩＩＣ制御部２０５は、ＳＣＬ制御部２０１、ＳＤＡ制御部２０２、送信ＦＩＦＯ２０３、及び受信ＦＩＦＯ２０４を制御する。ＩＩＣ制御部２０５は、ＩＩＣの送信及び受信を行うときに、これらを制御して通信を行う。また、タイマー閾値記憶部２０７は、タイマー２０６の値（タイマーの動作開始からの経過時間に応じた値）と比較する閾値を記憶する。ＩＩＣ制御部２０５は、タイマー２０６の動作の開始及び停止、初期化、並びに、タイマー閾値記憶部２０７に記憶されている閾値の参照を行う。
【００２４】
ＣＰＵ２１０は、スレーブデバイス２０の制御を行う。ＣＰＵ２１０は、プログラムを記憶したＲＯＭ２１１と、プログラムを実行するためのＲＡＭ２１２、及び、演算処理を行う演算処理部２１３とともにスレーブデバイス２０を制御する。ＣＰＵ２１０は、ＲＯＭ２１１に記録されたプログラムを、ＲＡＭ２１２を用いて実行し、ＩＩＣ制御部２０５を制御して、ＩＩＣバスにデータの書込みや、ＩＩＣバスからのデータの読み出しを行う。また、演算処理部２１３は、例えば、グラフィックスの処理や圧縮された映像信号のエンコード処理及びデコード処理等を行う。
【００２５】
コマンド解析部２１４は、マスターデバイス１０からスレーブデバイス２０に送信されたコマンドを解析し、その解析の結果として、ＯＫのデータ（コマンドを正しく解釈できたことを示すデータ）又はＮＧのデータ（コマンドの解釈に失敗したことを示すデータ）を返信する。
【００２６】
次に、マスターデバイス１０及びスレーブデバイス２０の動作について説明する。例えば、マスターデバイス１０は、スレーブデバイス２０に、３バイトのデータからなるコマンドを送信し（すなわち、マスターデバイス１０によるライト処理を行い）、スレーブデバイス２０は、そのコマンドを受け取り、コマンド内容を解釈して、コマンドを正しく解釈できた場合には、ＯＫのデータを、コマンドの解釈が失敗した場合には、ＮＧのデータを返信する（すなわち、マスターデバイス１０によるリード処理を行う）。
【００２７】
図２は、実施の形態１におけるマスターデバイス１０とスレーブデバイス２０との間のＩＩＣ通信の流れを示す図である。まず、マスターデバイス１０は、ライト（ｗｒｉｔｅ）処理を行うために、スレーブデバイス２０のスレーブアドレス７ビットと、ライト制御を行うことを示したビット（「ライト制御ビット」とも言う）とを含む８ビットのデータを、スレーブデバイス２０に送信する（ステップＳ３０１）。ＩＩＣプロトコルでは、通信装置としてのデバイスは、自身のアドレスに合致するスレーブアドレスを受信した場合に、スレーブデバイスとして動作するために、ＡＣＫ（ＡＣＫｎｏｗｌｅｄｇｅｍｅｎｔ）信号を返信する（ステップＳ３０２）。
【００２８】
次に、マスターデバイス１０は、８ビットのデータ１を送信し（ステップＳ３０３）、スレーブデバイス２０は、その８ビットのデータを正しく受信できれば、ＡＣＫ信号を返信する（ステップＳ３０４）。同様に、マスターデバイス１０は、データ２を送信し、スレーブデバイス２０からＡＣＫ信号を受信し、さらに、データ３を送信し、スレーブデバイス２０からＡＣＫ信号を受信する（ステップＳ３０５〜Ｓ３０８）。以上の処理によって、マスターデバイス１０からスレーブデバイス２０へのライト処理についての、コマンド送信が完了する。
【００２９】
次に、マスターデバイス１０は、先のライト処理で送信したコマンドに対するスレーブデバイス２０の応答を確認するためのリード（ｒｅａｄ）処理を行うために、再度、スレーブアドレス２０のスレーブアドレス７ビットと、リード制御を行うことを示したビット（「リード制御ビット」とも言う）とを含む８ビットのデータをスレーブデバイスに送信する（ステップＳ３０９）。
【００３０】
これに対して、スレーブデバイス２０は、受信したアドレスが自身のアドレスに合致するため、ＡＣＫ信号を返信し（ステップＳ３１０）、さらに、マスターデバイス１０に対して、ＯＫのデータ又はＮＧのデータを送信する（ステップＳ３１１）。この処理は、マスターデバイス１０がスレーブデバイス２０のデータを読み取るリード処理である。例えば、スレーブデバイス２０は、ＯＫのデータを“０ｘ０５”とし、ＮＧのデータを、“０ｘＡ０”として返信する。マスターデバイス１０は、ＯＫのデータとしての“０ｘ０５”、又は、ＮＧのデータとしての“０ｘＡ０”を受信して、スレーブデバイス２０にＡＣＫ信号を返して通信処理を終了する（ステップＳ３１２）。
【００３１】
図３（ａ）〜（ｃ）は、図２のＩＩＣ通信における波形の一例を示すタイミング図である。図３（ａ）は、図２におけるステップＳ３０１〜Ｓ３０４に対応し、図３（ｂ）は、図２におけるステップＳ３０５〜Ｓ３０８に対応し、図３（ｃ）は、図２におけるステップＳ３０９〜Ｓ３１２に対応する。図３（ａ）〜（ｃ）において、ＩＩＣの初期状態は、ＳＣＬ信号線３０及びＳＤＡ信号線３１の両方がハイ（ｈｉｇｈ）の状態である（図３（ａ）の３３０の状態）。このときに、マスターデバイス１０は、ライト処理を行うために、まず、ＳＣＬ制御部１０１及びＳＤＡ制御部１０２が、ＳＣＬ信号線３０及びＳＤＡ信号線３１の状態をそれぞれ確認して、ＩＩＣバス上にアクセスしているデバイスがないことを確認する。
【００３２】
次に、ＳＤＡ制御部１０２は、ＳＤＡ信号線３１をロー（ｌｏｗ）にし、ＳＣＬ制御部１０１は、ＳＣＬ信号線３０をローにする。これにより、ＩＩＣバスは、スタートコンディションとなる（図３（ａ）の３３１）。その後、ＳＣＬ制御部１０１は、ＳＣＬ信号線３０のハイ／ロー制御を行うことによってクロック波形を供給し、ＳＤＡ制御部１０２は、ＳＣＬ信号線３０の制御に同期して、通信相手のデバイスのスレーブアドレスを示す７ビットのデータを送信する（図３（ａ）の３３２）。さらに、マスターデバイス１０は、ライト制御ビットを送信する（ロー信号、図３（ａ）の３３３）。スレーブアドレスが合致したスレーブデバイス２０は、ＳＣＬ信号線３０が次にハイになるときに、ＡＣＫ信号を返信する（図３（ａ）の３３４）。図３（ａ）の例では、ＡＣＫ信号は、ロー信号である。
【００３３】
ＩＩＣ信号はプルアップされたオープンコレクタ信号であるため、マスターデバイス１０が送信したスレーブアドレスに一致したスレーブアドレスを持つデバイス（通信装置）が存在しない場合には、いずれのデバイスもＳＤＡ信号線３１をローにドライブしないため、ＳＤＡ信号線３１はハイとなる。スレーブアドレスに一致したアドレスのデバイス（例えば、スレーブデバイス２０）があると、そのデバイスがＳＤＡ信号線３１をローにドライブするので、マスターデバイス１０は、スレーブデバイス２０がＩＩＣバス上に存在することを確認することができる。また、スレーブデバイス２０は、ＳＤＡ制御部２０２がマスターデバイス１０からのスレーブアドレスを受信して、受信したスレーブアドレスがスレーブアドレス記憶部２１５に記憶されているスレーブアドレスと一致する場合に、ＡＣＫ信号を送信し（すなわち、ＳＤＡ信号線３１をローにし）、一致しない場合には、何も送信しない（ＳＤＡ信号線３１に対して何もしない）。
【００３４】
次に、マスターデバイス１０は、ライト処理としてデータ１の送信を行い（図３（ａ）の３４１）、データ１を受信したスレーブデバイス２０は、ＡＣＫ信号を返信する（図３（ａ）の３４２）。次に、マスターデバイス１０は、データ２を送信し（図３（ｂ）の３５１）、スレーブデバイス２０は、ＡＣＫ信号を返信し（図３（ｂ）の３５２）、マスターデバイス１０は、データ３を送信し（図３（ｂ）の３６１）、スレーブデバイス２０は、ＡＣＫ信号を返信する（図３（ｂ）の３６２）。ここで、マスターデバイス１０からのデータの送信は終了し、マスターデバイス１０は、スレーブデバイス２０からのＯＫのデータ又はＮＧのデータの返信を受けるためのリード処理を行うために、一旦スタートコンディション（「リスタートコンディション」とも言う。）を生成する（図３（ｃ）の３７１）。
【００３５】
そして、マスターデバイス１０は、再度、スレーブアドレスを示す７ビットのデータを送信し（図３（ｃ）の３８１）、マスターデバイス１０がリード制御ビット（ハイ信号、図３（ｃ）の３８２）を送信する。スレーブデバイス２０は、自身のアドレスに合致するので、ＡＣＫ信号としてロー信号を返信する（図３（ｃ）の３８３）。
【００３６】
次に、ＩＩＣバスが待ち状態（図３（ｃ）の３９０）のときに、スレーブデバイス２０は、先にマスターデバイス１０から送信されたデータ１、データ２、データ３からなるコマンドを解釈して、ＯＫのデータ又はＮＧのデータ（“０ｘ０５”又は“０ｘＡ０”）をマスターデバイス１０に返信する（図３（ｃ）の３９１）。マスターデバイス１０は、ＯＫ又はＮＧのデータを受信して、スレーブデバイス２０に対してＡＣＫ信号の返信を行う（図３（ｃ）の３９２）。
【００３７】
次に、マスターデバイス１０は、ＳＤＡ信号線３１を一旦ローにした後、ＳＣＬ信号線３０及びＳＤＡ信号線３１の両方をハイにすることによって、ストップコンディションを生成し（図３（ｃ）の３９５）、ＩＩＣ通信を終了する。ＳＣＬ信号線３０は、通常は、マスターデバイス１０のＳＣＬ制御部１０１によって制御されるが、スレーブデバイス２０によるデータ送信の準備ができていないときには、スレーブデバイス２０のＳＣＬ制御部２０１がＳＣＬ信号線３０をローにドライブする。このとき、マスターデバイス１０のＳＣＬ制御部１０１は、ＳＣＬ信号線３０のハイ／ロー制御を行うことができない状態になることを認識でき、マスターデバイス１０は、スレーブデバイス２０が待ち状態になっていることを、認識することができる。図３（ｃ）においては、待ち状態３９０の部分で、スレーブデバイス２０がＳＣＬ信号線３０をドライブして待ち状態になることがある。
【００３８】
また、上記のように、マスターデバイス１０がライト処理でコマンドを送信し、リスタートコンディションを発行して、リード処理に変わってスレーブデバイス２０のコマンドに対する応答を確認するところまで一連のＩＩＣ通信処理として実行でき、通信のセッションが明確になるため、マスターデバイス１０が送信したコマンドに対するスレーブデバイス２０のＯＫ又はＮＧのデータの応答を確実に返信することができる。
【００３９】
なお、ＩＩＣプロトコルでは、ライト処理とリード処理をそれぞれ単独で使用してもよいが、実施の形態１では、マスターデバイス１０が送信したコマンドに対して、確実にスレーブデバイス２０が応答するために、ライト処理とリード処理を組み合わせている。
【００４０】
次に、マスターデバイス１０が行う一連のＩＩＣ通信の動作を、図１、図４、図５、図６及び図７を用いて説明する。図１において、マスターデバイス１０のＣＰＵ１１０は、ＲＯＭ１１１に記録されているプログラムに基づいて、ＩＩＣ通信の処理を実行する。図４は、実施の形態１におけるマスターデバイス１０の処理を示すフローチャートである。また、図５及び図６は、実施の形態１におけるスレーブデバイス２０の処理を示すフローチャートであり、ＣＰＵ２１０が、ＲＯＭ２１１の記録されているプログラムに基づいて、上記ＩＩＣ通信の処理を行う場合の処理が示されている。また、図７は、図５の受信処理ルーチンの内容を示すフローチャートである。
【００４１】
図４に示されるように、まず、ＣＰＵ１１０は、処理を開始すると（ステップＳ４０１）、ＲＯＭ１１１のプログラムに基づいて、ＩＩＣ制御部１０５に対して、タイマー１０６のスタートを指示する（ステップＳ４０２）。次に、ＣＰＵ１１０は、ＩＩＣ制御部１０５に対して、スタートコンディションを生成するように指示し、ＩＩＣ制御部１０５は、ＳＣＬ制御部１０１とＳＤＡ制御部１０２を制御して、ＩＩＣバスが解放されていることを確認し、スタートコンディションを生成する（ステップＳ４０３）。
【００４２】
次に、ＣＰＵ１１０は、ＩＩＣ制御部１０５に対して、スレーブアドレスを送信し（ステップＳ４０４）、マスターデバイス１０がライト処理を行うことを示すライト制御ビットを送信するようにＩＩＣ制御部１０５に対して指示する（ステップＳ４０５）。ＩＩＣ制御部１０５は、送信ＦＩＦＯ１０３に、スレーブアドレスとライト制御ビットとで構成される８ビットのデータを書き込む。そして、ＳＤＡ制御部１０１は、送信ＦＩＦＯ１０３からデータを読み出し、ＳＣＬ制御部１０１によるＳＣＬ信号線３０の制御と同期して、ＳＤＡ信号線３１の制御を行うことで、スレーブアドレスとライト制御ビットとを送信する。
【００４３】
次に、ＣＰＵ１１０は、ＩＩＣ制御部１０５を制御して、ＡＣＫ信号を受信したかどうかを確認し（ステップＳ４０６）、ＡＣＫ信号を受信していない場合は、ストップコンディションを生成して（ステップＳ４０７）、ＩＩＣ通信を終了する（ステップＳ４０８）。ＡＣＫ信号を受信している場合は、ＣＰＵ１１０は、Ｎ＝０として（ステップＳ４０９）、ＩＩＣ制御部１０５にデータを書き込み、ＩＩＣ制御部１０５は、送信ＦＩＦＯ１０３にデータを送信し、ＳＤＡ制御部１０１は、送信ＦＩＦＯ１０３からデータを読み出して、ＳＣＬ制御部１０１によるＳＣＬ信号線３０の制御と同期して、データの送信を行う（ステップＳ４１０）。
【００４４】
そして、ＣＰＵ１１０は、ＩＩＣ制御部１０５を制御して、ＡＣＫ信号を受信したかどうかを確認し（ステップＳ４１１）、ＡＣＫ信号を受信していない場合は、ストップコンディションを生成して（ステップＳ４０７）、ＩＩＣ通信を終了する（ステップＳ４０８）。ＣＰＵ１１０は、ＡＣＫ信号を受信している場合は、ＩＩＣ制御部１０５を制御して、タイマー１０６を確認し（ステップＳ４１２）、タイマー１０６の値がタイマー閾値記憶部１０７に予め記憶されている閾値以下かどうか確認する（ステップＳ４１３）。この閾値は、ＩＩＣ通信を完了するためには十分に長い時間であって、かつ、ＩＩＣ通信が終了しないことによって通信システムの他の利用者に悪影響を与えることがない程度に短い時間であることが望ましい。タイマー１０６の値がタイマー閾値記憶部１０７の閾値を超えているときには、ＣＰＵ１１０は、ＩＩＣ制御部１０５を制御して、ＩＩＣバスの通信や、スレーブデバイス２０の処理に何らかの問題があり、システムに影響を与えると判断して、ＳＣＬ制御部１０１及びＳＤＡ制御部１０２に、ストップコンディションの発行を行わせ（ステップＳ４０７）、ＩＩＣ通信を終了する（ステップＳ４０８）。
【００４５】
次に、ＣＰＵ１１０は、Ｎ＝Ｎ＋１（ステップＳ４１４）として、Ｎ＞Ｍであるか否かの確認（ステップＳ４１５）を行い、Ｎ≦Ｍであれば、再度、ステップＳ４１０に処理を戻して、データの送信を行う。実施の形態１においては、Ｍ＝３である。ステップＳ４１５でＮ＞Ｍとなると、ＣＰＵ１１０は、リード処理を行うために、ＩＩＣ制御部１１５にスタートコンディションを発行するように指示し、ＩＩＣ制御部１０５は、ＳＣＬ制御部１０１及びＳＤＡ制御部１０２を制御して、再度、スタートコンディション（「リスタートコンディション」とも言う）を生成する（ステップＳ４１６）。
【００４６】
そして、ＣＰＵ１１０は、ＩＩＣ制御部１０５に対してスレーブアドレスの送信（ステップＳ４１７）と、マスターデバイス１０がリード処理を行うことを示すリード制御ビットを送信するように指示する（ステップＳ４１８）。ＩＩＣ制御部１０５は、送信ＦＩＦＯ１０３にスレーブアドレスとリード制御ビットとで構成される８ビットのデータを書き込む。そして、ＳＤＡ制御部１０１は、送信ＦＩＦＯ１０３からデータを読み出し、ＳＣＬ制御部１０１によるＳＣＬ信号線３０の制御と同期して、ＳＤＡ信号線３１の制御を行うことで、スレーブアドレスとリード制御ビットを送信する。
【００４７】
次に、ＣＰＵ１１０は、ＩＩＣ制御部１０５を制御して、ＡＣＫ信号を受信したかどうかを確認し（ステップＳ４１９）、ＡＣＫ信号を受信していなければ、ＳＣＬ制御部１０１及びＳＤＡ制御部１０２にストップコンディションを生成させ（ステップＳ４２０）、ＩＩＣ通信を終了する（ステップＳ４２１）。ステップＳ４１９でＡＣＫ信号を受信している場合は、ＣＰＵ１１０は、ＩＩＣ制御部１０５を制御して、タイマー１０６の値を確認し（ステップＳ４２２）、タイマー１０６の値が、タイマー閾値記憶部１０７に予め記憶されている閾値以下であるかどうかを確認する（ステップＳ４２３）。ＣＰＵ１１０は、タイマー１０６の値が閾値を超えているときは、スレーブデバイス２０の処理に何らかの問題があり、通信システムに影響を与えると判断して、ＩＩＣ制御部１０５を制御して、ＳＣＬ制御部１０１及びＳＤＡ制御部１０２にストップコンディションを発行させ（ステップＳ４２０）、ＩＩＣ通信を終了する（ステップＳ４２１）。
【００４８】
ＣＰＵ１１０は、タイマー１０６の値が閾値を超えていなければ、ＩＩＣ制御部１０５を制御して、データ受信したかを確認する（ステップＳ４２４）。データ受信に際しては、ＳＣＬ制御部１０１がクロック制御を行い、ＳＤＡ制御部１０２が、ＳＣＬ信号線３０のハイ／ローに同期して、データを受信して、受信ＦＩＦＯ１０４にデータを書き込む。ＣＰＵ１１０は、ＩＩＣ制御部１０５を制御して、受信ＦＩＦＯ１０４にデータが書き込まれたことを検知する。ＣＰＵ１１０は、ＩＩＣ制御部１０５を介して、受信ＦＩＦＯ１０４のデータを読み出す。この受信ＦＩＦＯ１０４のデータは、送信したコマンドが、スレーブデバイス２０で、正しく解釈されたことを示す「ＯＫ」のデータ（“０ｘ０５”）か、又は、正しく解釈されなかったことを示す「ＮＧ」のデータ（“０ｘＡ０”）である。データを受信していなければ、ＣＰＵ１１０は、再び、処理をステップＳ４２２に戻す。
【００４９】
このデータを受信して、ＣＰＵ１１０は、ＩＩＣ制御部１０５を制御し、ＳＣＬ制御部１０１とＳＤＡ制御部１０２を制御してストップコンディションを生成させ（ステップＳ４２５）、ＩＩＣ通信を終了する（ステップＳ４２６）。
【００５０】
次に、スレーブデバイス２０の処理を、図５及び図６を用いて、ＣＰＵ２１０が、ＲＯＭ２１１に記録されているプログラムに基づいて、上記ＩＩＣ通信を行う場合を説明する。また、なお、図７には、図５の受信処理ルーチン（ステップＳ５０９）の内容が示されている。スレーブデバイス２０は、マスターデバイス１０からのアクセスが、いつ行われるかわからないため、常時、受信できる状態である必要がある。また、スレーブデバイス２０のＣＰＵ２１０は、ＩＩＣ制御部２０５及びＳＤＡ制御部２０２を介して、スレーブアドレス記憶部２１５に、スレーブデバイス２０のスレーブアドレスを予め記憶させている。
【００５１】
ＩＩＣ通信は、ＳＣＬ制御部２０１及びＳＤＡ制御部２０２が、マスターデバイス１０からの信号変化（ＳＣＬ信号線３０及びＳＤＡ信号線３１の状態のハイ又はローへの変化）を受信することで、開始する（ステップＳ５０１）。マスターデバイス１０がＩＩＣバスをスタートコンディションにして、最初に送信するデータは、スレーブアドレスと、ライト制御ビット又はリード制御ビットとを含んでいるため、ＳＤＡ制御部２０２は、スタートコンディションを検出（ステップＳ５０２）して、スレーブアドレスを受信する（ステップＳ５０３）。ＩＩＣ制御部２０５は、受信したスレーブアドレスを、スレーブアドレス記憶部２１５に記憶されているスレーブアドレスと比較して、これらが一致するかどうかを判定する（ステップＳ５０４）。ＩＩＣ制御部２０５は、これらが一致しなければ、ＩＩＣ通信を終了する（ステップＳ５０５）。
【００５２】
受信したスレーブアドレスが、スレーブアドレス記憶部２１５に記憶されているスレーブアドレスと一致している場合には、ＣＰＵ２１０は、ＩＩＣ制御部２０５を制御して、ＡＣＫ信号を返信し（ステップＳ５０６）、タイマー２０６をスタートする（ステップＳ５０７）。ここで、タイマー２０６は、一旦、値を初期値にしてから（初期化してから）、動作（例えば、経過時間を示す値を増加させる動作）を開始する。
【００５３】
次に、ＣＰＵ２１０は、ＩＩＣ制御部２０５を制御して、スレーブアドレスとともに送信されてくるライト制御ビット又はリード制御ビットの判定を行う（ステップＳ５０８）。ここで、ライト制御ビットが設定されている場合、マスターデバイス１０からスレーブデバイス２０へのライト処理になり、リード制御ビットが設定されていれば、マスターデバイス１０はスレーブデバイス２０からデータをリードする処理を行う。
【００５４】
ＣＰＵ２１０は、ライト処理の場合、ＩＩＣ制御部２０５を制御して、受信処理ルーチンを実行する（ステップＳ５０９）。受信処理ルーチンでは、図７のステップＳ５５０で処理を開始し、Ｎ＝０とする（ステップＳ５５１）。次に、ＣＰＵ２１０は、ＩＩＣ制御部２０５を制御して、データ受信を行い（ステップＳ５５２）、正しくデータを受信できたかどうかを確認し（ステップＳ５５３）、正しく受信できていなければ、受信処理ルーチン終了フラグを立てる（ステップＳ５５４）。ＣＰＵ２１０は、ＩＩＣ制御部２０５を制御して、正しくデータを受信できていれば、ＡＣＫ信号を返信し、データを受信ＦＩＦＯ２０４に送信し（ステップＳ５５５）、Ｎ＝Ｎ＋１とする（ステップＳ５５６）。図７において、Ｎは、受信したデータのバイト数に一致する。
【００５５】
なお、受信ＦＩＦＯ２０４のデータは、ＣＰＵ２１０がＩＩＣ制御部２０５を介して、ＲＡＭ２１２に順次転送するが、ＣＰＵ２１０が他の処理で、受信ＦＩＦＯ２０５からのデータ読み出しを行うことができない場合、ＩＩＣ制御部２０５は、ＳＣＬ制御部２０１に対して、ＳＣＬ信号線３０をローにドライブするように制御し、マスターデバイス１０のＳＣＬ制御部１０１が行うＳＣＬ信号線３０のハイ／ロー制御（すなわち、ＳＣＬ信号線３０のクロック動作）を止めることができる。ＩＩＣ制御部２０５は、受信ＦＩＦＯ２０４のデータがＣＰＵ２１０によって、ＲＡＭ２１２にコピーされ、受信ＦＩＦＯ２０４の容量に空きができたら、ＳＣＬ制御部２０１によるＳＣＬ信号線３０のロー制御を解除し、受信動作を再開する。
【００５６】
次に、ＣＰＵ２１０は、受信が正しく終了して、ＩＩＣ制御部２０５を制御して、ＩＩＣバスがストップコンディションになっているかを確認する（ステップＳ５５７）。ＣＰＵ２１０は、受信が正しく終了して、ＩＩＣバスがストップコンディションになっていれば、受信処理ルーチン終了フラグを立てる（ステップＳ５５８）。また、ＣＰＵ２１０は、受信が正しく終了せず、ＩＩＣバスがストップコンディションになっていなければ、ＩＩＣバスが、リスタートコンディションになっているかを確認する（ステップＳ５５９）。ＣＰＵ２１０は、ＩＩＣバスが、リスタートコンディションになっていれば、受信処理ルーチン終了フラグを立てて、受信処理ルーチンを終了する（ステップＳ５６０）。ＣＰＵ２１０は、ＩＩＣバスが、リスタートコンディションになっていなければ（ステップＳ５５９）、データ受信を行うために、処理をステップＳ５５２に戻す。
【００５７】
ＣＰＵ２１０は、ＩＩＣ制御部２０５を制御して、受信処理ルーチンを実行しながら、図５のステップＳ５１０で、受信処理ルーチン終了フラグが立ったかを確認する。ここで、受信処理ルーチン終了フラグが立っていれば、ＣＰＵ２１０は、ＩＩＣ制御部２０５を制御して、ＩＩＣバスに、リスタートコンディションが発生していたかどうかを再度確認し（ステップＳ５１１）、ＩＩＣバスに、リスタートコンディションではなく、ストップコンディションが発生していれば、処理を終了する（ステップＳ５１３）。また、ＣＰＵ２１０は、ＩＩＣ制御部２０５を制御して、ＩＩＣバスに、リスタートコンディションが発生していれば、受信したデータで構成されるコマンドの解析をコマンド解析部２１４に開始させ（ステップＳ５１２）、処理をスレーブアドレスの受信のステップに戻す（ステップＳ５０３）。
【００５８】
ＣＰＵ２１０は、受信ＦＩＦＯ２０４に保存されたマスターデバイス１０から送信されたデータをＩＩＣ制御部２０５を介して読み出し、コマンド解析部２１４にこのデータのコマンド解析を実行させる。コマンド解析において、先の受信処理ルーチン（ステップＳ５０９）でカウントされたＮは、受信したバイト数であるから、コマンド解析部２１４は、例えば、マスターデバイス１０から送信され受信したデータの中に、送信バイト数を指定するパラメータを用意して、そのパラメータと、Ｎを比較することで、受信したデータの数に問題がないかどうかの判断をすることができる。
【００５９】
コマンド解析は、コマンド解析部２１４で実行されるが、スレーブデバイス２０において、例えば、演算処理部２１３の処理が重くなることにより、コマンド解析部２１４の処理に時間がかかることがある。
【００６０】
ＣＰＵ２１０は、ステップＳ５１０で受信処理ルーチン終了フラグが立っているかを確認し、立っていなければ、タイマー２０６の値の確認を行う（ステップＳ５１４）。ＣＰＵ２１０は、ＩＩＣ制御部２０５を制御して、タイマー２０６の値がタイマー閾値記憶部２０７に予め記憶された閾値を超えていないか確認する（ステップＳ５１５）。この閾値は、ＩＩＣ通信を完了するためには十分に長い時間であって、かつ、ＩＩＣ通信が終了しないことによって通信システムの他の利用者に悪影響を与えることがない程度に短い時間であることが望ましい。
【００６１】
ＣＰＵ２１０は、タイマー２０６の値が閾値を超えているときは、マスターデバイス１０のライト処理に何らかの問題があり、システムに影響を与えると判断して、ＩＩＣ制御部２０５を制御して、送信ＦＩＦＯ２０３と受信ＦＩＦＯ２０４をクリアし（ステップＳ５１６）、ＳＣＬ制御部２０１、ＳＤＡ制御部２０２を初期状態に変更して（ステップＳ５１７）、ＩＩＣ通信を終了する（ステップＳ５１８）。言い換えれば、タイマー２０６の値が閾値を超えていれば、ＣＰＵ２１０は、ＩＩＣ制御部２０５を制御して、送信ＦＩＦＯ２０３と受信ＦＩＦＯ２０４をクリアし（ステップＳ５１６）、ＳＣＬ制御部２０１によるクロック信号を停止させる制御を解除してＳＣＬ制御部２０１をクロック信号を受信する状態（クロック受信可能な状態）にし、また、ＳＤＡ制御部２０２をスレーブモードで動作する通信装置を示すスレーブアドレスを受信する状態（スレーブアドレスを受信可能な状態）にする。
また、ＣＰＵ２１０は、ステップＳ５１４で、タイマー２０６の値が閾値を越えていない場合は、ＩＩＣ制御部２０５を制御して、再度ステップＳ５１０に戻り、受信処理ルーチン終了フラグが立ったかを確認し、受信処理ルーチンが終了したか確認する。
【００６２】
以上のように、マスターデバイス１０からのライト処理に対するスレーブデバイス２０の処理は、コマンド解析を開始して（ステップＳ５１２）、リスタートコンディションが発生していて、再度ステップＳ５０３に移行するか、タイマー２０６の値が閾値を越えて送信ＦＩＦＯ２０３及び受信ＦＩＦＯ２０４をクリア（ステップＳ５１６）、ＳＣＬ制御部２０１及びＳＤＡ制御部２０２を初期状態に変更して（ステップＳ５１７）、処理を終了する（ステップＳ５１８）かのいずれかである。
【００６３】
この終了処理（ステップＳ５１８）を実行後、スレーブデバイス２０では、いつマスターデバイス１０から次のスタートコンディションが送信されるか分からないので、ステップＳ５０１から処理を開始し、ＩＩＣバスがスタートコンディションにならないか確認する。
【００６４】
次に、スレーブデバイス２０が、マスターデバイス１０からリード制御ビットが設定されたときの動作を説明する。なお、実施の形態１では、マスターデバイス１０が送信したコマンドに対して、スレーブデバイス２０が応答するために、マスターデバイスのライト処理後に、リスタートコンディションで、リード処理を行う例を示す。
【００６５】
まず、ＳＣＬ制御部２０１とＳＤＡ制御部２０２が、マスターデバイス１０からの信号（ＳＣＬ信号線３０及びＳＤＡ信号線３１のハイ又はローへの変化）を受信する。マスターデバイス１０がＩＩＣバスをスタートコンディション、又は、リスタートコンディションにした後に送信するデータには、スレーブアドレス２０と、リード制御ビットを含んでいるため、ＳＤＡ制御部２０２は、スタートコンディション又はリスタートコンディションを検出（ステップＳ５０２）して、スレーブアドレスを受信する（ステップＳ５０３）。既にライト処理を実行している場合には、受信処理ルーチンのステップＳ５５９や、ステップＳ５１１でリスタートコンディションを検出しているので、ＣＰＵ２１０は、スレーブアドレスの受信（ステップＳ５０３）から処理を進める。
【００６６】
ＣＰＵ２１０は、受信したスレーブアドレスと、スレーブアドレス記憶部２１５に記憶されているスレーブアドレスを比較して、一致するかどうか判定する（ステップＳ５０４）。もし一致しなければ、ＣＰＵ２１０は、通信処理を終了する（ステップＳ５０５）。ＣＰＵ２１０は、スレーブアドレスが一致している場合には、ＩＩＣ制御部２０５を制御してＡＣＫ信号を返信し（ステップＳ５０６）、タイマー２０６をスタートさせる（ステップＳ５０７）。ここで、タイマー２０６は、開始していなければ一旦初期化して開始する。本実施の形態ではリスタートコンディションで、リード処理が実行されているので、既にライト処理が実行された後であり、タイマー２０６は既にスタートしているので、ここでは改めてスタートしない。
【００６７】
次に、ＣＰＵ２１０は、スレーブアドレスとともに送信されているデータが、ライト制御ビットであるかリード制御ビットであるかの判定を行う（ステップＳ５０８）。ここで、リード制御ビットが設定されているので、ＣＰＵ２１０は、マスターデバイス１０にデータを送信するための準備を開始するが、スレーブデバイス内で先のコマンド解析処理を行い、その解析処理が終了するまでは、ＯＫ又はＮＧのデータのいずれを送信すべきか決定できない。そのため、まず、ＣＰＵ２１０は、ＩＩＣ制御部２０５を制御して、ＳＣＬ信号線３０をローにドライブすることで、マスターデバイス１０のＳＣＬ制御部１０１が制御するＳＣＬ信号線３０をハイ又はローにする制御、すなわち、ＩＩＣのクロック信号を変化させる処理を止める（ステップＳ５２０）。
【００６８】
次に、ＣＰＵ２１０は、コマンド解析が完了したかどうかを確認し（ステップＳ５２１）、完了していなければ、処理を再びステップＳ５２０に戻す。ＣＰＵ２１０は、コマンド解析が完了していれば、ＯＫ又はＮＧのデータいずれを送信すべきか決定し、次に、タイマー２０６の値の確認を行う（ステップＳ５２２）。ＣＰＵ２１０は、タイマー２０６の値がタイマー閾値記憶部２０７に予め記憶された閾値以下かを確認する（ステップＳ５２３）。この閾値は、ＩＩＣ通信を完了するためには十分に長い時間であって、かつ、ＩＩＣ通信が終了しないことによって通信システムの他の利用者に悪影響を与えることがない程度に短い時間であることが望ましい。
【００６９】
タイマー２０６の値が閾値を超えているときは、コマンド解析の処理時間がかかりすぎた可能性があり、マスターデバイス１０も同様にタイマー１０６でリード処理に要した時間を確認しているので（図４のステップＳ４１８）、それぞれの閾値が同じであれば、マスターデバイス１０がＩＩＣ通信を終了していることになる。よって、タイマー２０６の値が閾値を越えているときは、ＣＰＵ２１０は、ＩＩＣ制御部２０５を制御して、送信ＦＩＦＯ２０３、受信ＦＩＦＯ２０４のデータをクリアし（ステップＳ５２４）、ＳＣＬ制御部２０１がＳＣＬ信号線３０をローにドライブしている状態を解除し（ステップＳ５２５）、ＳＣＬ制御部２０１、ＳＤＡ制御部２０２を初期状態に変更（初期化）して、（ステップＳ５２６）、処理を終了する（ステップＳ５２７）。
【００７０】
ステップＳ５２３で閾値を超えていなければ、ＣＰＵ２１０は、ＩＩＣ制御部２０５を制御して、送信ＦＩＦＯ２０３にコマンド解析の結果（ＯＫ又はＮＧのデータ）を送信し（ステップＳ５２８）、ＳＣＬ制御部２０１のロードライブを解除する（ステップＳ５２９）と、マスターデバイス１０のＳＣＬ制御部１０１がＳＣＬ信号線３０をハイ又はローにする制御を行うことによって、スレーブデバイス２０のＳＣＬ制御部２０１はＳＣＬ信号線３０の変化を検出し、それに同期して、ＳＤＡ制御部２０２が送信ＦＩＦＯ２０３のデータをＳＤＡ信号線３１に送出することで、スレーブデバイス２０からマスターデバイスへのデータ送信が行われる（ステップＳ５３０）。データ送信が完了することで、処理を終了する（ステップＳ５３１）。
【００７１】
なお、この終了処理（ステップＳ５２７、Ｓ５３１）を実行後、スレーブデバイス２０では、いつマスターデバイス１０から次のスタートコンディションが送信されるか分からないので、ステップＳ５０１から処理を開始する。また、マスターデバイス１０から送信されたコマンドに対して、スレーブデバイス２０がＮＧのデータの応答を返した場合には、マスターデバイス１０は、再度スレーブデバイス２０に対して同じコマンドを送信するように構成する。このように構成することで、マスターデバイス１０からのコマンドをスレーブデバイス２０に確実に送信することができる。
【００７２】
また、このように構成することで、マスターデバイス１０からスレーブデバイス２０に送信したコマンドが、スレーブデバイス２０において正しく解析されたか否かをすぐに確認することができる。また、マスターデバイス１０が、スレーブデバイス２０からの応答が予め決められた時間以上ないためにＩＩＣ通信の処理を途中で終了しても、スレーブデバイス２０でも、予め決められた時間以内に応答できなかったと認識できるため、ＩＩＣバスへのアクセスを解除する（実施の形態１では、ＳＣＬ信号線３０をローにドライブすることを解除する、また、ＳＣＬ制御部２０１及びＳＤＡ制御部２０２を初期状態に変更する）ことができ、ＩＩＣバスのＳＣＬ信号線３０又はＳＤＡ信号線３１をローにドライブしたままになる状態を回避することができる。
【００７３】
また、スレーブデバイス２０の処理の過程で問題が発生した場合に、ＳＣＬ制御部２０１、ＳＤＡ制御部２０２、送信ＦＩＦＯ２０３、受信ＦＩＦＯ２０４を初期化しているため、スレーブデバイス２０で実行している処理のすべてをリセットする必要がなく、ＣＰＵ２１０で実行している他の処理に影響を与えることがない。
【００７４】
また、マスターデバイス１０での送信で問題が発生した場合においても、マスターデバイス１０及びスレーブデバイス２０のそれぞれが、タイマーの値が閾値を越えたことで、ＩＩＣ通信に関する処理だけを終了できるので、マスターデバイス及びスレーブデバイスのＩＩＣ以外の処理に影響を与えることがなく、マスターデバイス及びスレーブデバイスのＩＩＣ以外の処理を継続することができる。
【００７５】
また、マスターデバイス１０のタイマー閾値記憶部１０７に保存されている閾値と、スレーブデバイス２０のタイマー閾値記憶部２０７に保存されている閾値とを同じ値にすることが望ましい。これは、これらの閾値を同じ値にすることによって、マスターデバイス１０、スレーブデバイス２０のいずれかで不具合が発生しても、それぞれのタイマーの値に基づいてＩＩＣ通信を終了するタイミングが同じになるため、ＩＩＣが通信不能状態となっている期間を最小限にすることができるからである。
【００７６】
実施の形態２．
図８及び図９は、本発明の実施の形態２におけるスレーブデバイスの処理を示すフローチャートである。図８及び図９において、図５及び図６に示されるステップと同じステップには、同じ符号を付す。また、実施の形態２の説明に際しては、図１をも参照する。
【００７７】
実施の形態１においては、スレーブデバイスのコマンド解析処理が完了してから（図６のステップＳ５２１）、タイマー２０６の値を参照している。これに対し、実施の形態２においては、図８及び図９に示されるように、コマンド解析処理が完了しているかどうかを確認し（図９のステップＳ５４０）、完了していなければ、タイマー２０６の値を参照して、タイマー２０６の値が閾値を越えたか否かを確認する（図９のステップＳ５４１）ように構成している。
【００７８】
すなわち、図９のステップＳ５２０において、ＣＰＵ２１０は、ＩＩＣ制御部２０５を制御して、ＳＣＬ信号線３０をローにドライブし、コマンド解析が完了したかを確認し（ステップＳ５４０）、コマンド解析が完了していなければ、タイマー２０６の値の確認を行う（ステップＳ５４１）。次に、ＣＰＵ２１０は、タイマー２０６の値が閾値を超えていなければ、処理をステップＳ５２０に戻し、タイマー２０６の値が閾値を超えていれば、処理をステップＳ５２４に進める。また、ＣＰＵ２１０は、ステップＳ５４０において、コマンド解析が完了していれば、処理をステップＳ５２８に進める。
【００７９】
このように構成することで、ＣＰＵ２１０は、コマンド解析が完了する前に、タイマー２０６の値が閾値を超えてしまった場合を検出することができる。このため、タイマー２０６の値が閾値を超えてしまった場合、行う必要が無くなったコマンド解析処理をキャンセルすることができ、スレーブデバイス２０の処理負荷を低減することができる。
【００８０】
上記以外の点について、実施の形態２は、実施の形態１と同じである。
【００８１】
実施の形態３．
実施の形態１においては、スレーブデバイス２０の処理が終了したとき（ステップＳ５０５、ステップＳ５１２、ステップＳ５１７、ステップＳ５２５、ステップＳ５２９を実行後）、スレーブデバイス２０では、いつマスターデバイス１０から次のスタートコンディションが送信されるか分からないので、ＩＩＣ通信処理を開始（ステップＳ５０１）している。これに対し、実施の形態３においては、コマンドを受信するための処理が完了したことに基づいて、ＩＩＣ通信処理を開始（ステップＳ５０１）するように構成している。なお、実施の形態３の説明に際しては、図１、図５、図６を参照する。
【００８２】
実施の形態３の処理を詳細に説明する。ＣＰＵ２１０によって受信ＦＩＦＯ２０４のデータをＲＡＭ２１２にコピーする準備が整う前に、ステップＳ５０１の処理を開始すると、マスターデバイス１０からのコマンド受信で、受信ＦＩＦＯ２０４にデータが溜まってしまい、ＩＩＣ制御部２０５が、ＳＣＬ制御部２０１を制御して、ＳＣＬ信号線３０をローにドライブさせ、マスターデバイス１０のＳＣＬ制御部１０１が行うＳＣＬ信号線３０のハイ／ロー制御（すなわち、ＳＣＬ信号線３０のクロック動作）を止めることができる。しかし、このとき、他のマスターデバイス（図示せず）は、ＩＩＣバスにアクセスできなくなり、ＩＩＣバスとそれに接続される通信装置からなる通信システム全体のパフォーマンスを落とすことになる。
【００８３】
このため、実施の形態３においては、ＣＰＵ２１０は、スレーブデバイス２０において、マスターデバイス１０からの受信処理を行うことができない状態では、ＩＩＣの受信処理を開始しないように制御し、マスターデバイス１０からのコマンドを受信するための処理が完了した状態になったときに、ＩＩＣの受信処理を開始するように制御する。
【００８４】
このように構成することで、スレーブデバイスがマスターデバイスからのコマンドを確実に受信できる状態になってから受信処理を行うことができ、より確実にマスターデバイスからのコマンドを受信することができる。
【００８５】
上記以外の点について、実施の形態３は、実施の形態１と同じである。
【００８６】
実施の形態４．
図１０及び図１１は、本発明の実施の形態４におけるスレーブデバイスの処理を示すフローチャートである。図１０及び図１１において、図５及び図６に示されるステップと同じステップには、同じ符号を付す。また、実施の形態４の説明に際しては、図１をも参照する。
【００８７】
実施の形態１においては、スレーブデバイス２０は、マスターデバイス１０のライト制御でデータを受信し、コマンド解析を開始してから（図５のステップＳ５１２）、すぐにマスターデバイス１０のリード制御が開始され、コマンド解析の完了を確認する（図６のステップＳ５２１）例を示した。
【００８８】
しかし、実施の形態１では、スレーブデバイス２０は、マスターデバイス１０からのリード制御に対してはコマンド解析結果に基づいて、ＯＫ又はＮＧのデータを返信しているため、解析結果のない状態では、ＯＫ又はＮＧのデータのいずれも返信することができない。したがって、スレーブデバイスが、マスターデバイス１０からのライト処理がなく、いきなりリード処理が実行したときには、ＯＫ又はＮＧのデータのいずれも返信することができない。実施の形態４においては、スレーブデバイスが、マスターデバイス１０からのライト処理がなく、いきなりリード処理が実行したときには、ＮＧのデータを返信できるようにしている。
【００８９】
図１０及び図１１において、ＣＰＵ２１０は、コマンド解析開始（ステップＳ５１２）の後、コマンド送信フラグを「未送信」に設定する（ステップＳ５８０）。また、ＣＰＵ２１０は、データ送信（ステップＳ５３０）の後に、コマンド送信フラグを「送信」に設定する（ステップＳ５８２）。なお、ＣＰＵ２１０は、スレーブデバイス２０が最初の状態のとき（すなわち、デフォルト）のコマンド送信フラグを「送信」としておく。
【００９０】
また、ＣＰＵ２１０は、受信したデータがライト制御ビット又はリード制御ビットのいずれであるかの判定をし（ステップＳ５０８）、リード制御ビットと判定した後に、コマンド送信フラグが「未送信」か「送信」かの判定を行い（ステップＳ５８１）、判定結果が「未送信」の場合は、ＩＩＣ制御部２０５を制御して、ＳＣＬ信号線をローにドライブさせ（ステップＳ５２０）、判定結果が「送信」の場合は、ＩＩＣ制御部２０５を制御して、ＳＣＬ３０をローにドライブし（ステップＳ５８３）、送信ＦＩＦＯ２０３にＮＧのデータを送信し（ステップＳ５８４）、以下、図１１のステップＳ５２９以降の処理を行う。そして、ＣＰＵ２１０は、ステップＳ５８２で、コマンド送信フラグを、「送信」に変更する。
【００９１】
このように構成することで、マスターデバイス１０からいきなりリード処理が実行されても、ＮＧのデータの返信を行うことができ、ＩＩＣのデータ通信誤動作を防止することができる。
【００９２】
上記以外の点について、実施の形態４は、実施の形態１と同じである。
【符号の説明】
【００９３】
１０  マスターデバイス、  ２０  スレーブデバイス、  ３０  ＳＣＬ信号線（クロック信号線）、  ３１  ＳＤＡ信号線（データ信号線）、  ３２  ＳＣＬ信号線用プルアップ抵抗、  ３３  ＳＤＡ信号線用プルアップ抵抗、  １０１  ＳＣＬ制御部（クロック制御部）、  １０２  ＳＤＡ制御部（データ制御部）、  １０３  送信ＦＩＦＯ（送信用データ一時記憶部）、  １０４  受信ＦＩＦＯ（受信用データ一時記憶部）、  １０５  ＩＩＣ制御部、  １０６  タイマー、  １０７  タイマー閾値記憶部、  １１０  ＣＰＵ、  １１１  ＲＯＭ、  １１２  ＲＡＭ、  １１３  演算処理部、  １２０  制御部（ＣＰＵ１１０及びＩＩＣ制御部１０５）、  ２０１  ＳＣＬ制御部（クロック制御部）、  ２０２  ＳＤＡ制御部（データ制御部）、  ２０３  送信ＦＩＦＯ（送信用データ一時記憶部）、  ２０４  受信ＦＩＦＯ（受信用データ一時記憶部）、  ２０５  ＩＩＣ制御部、  ２０６  タイマー、  ２０７  タイマー閾値記憶部、  ２１０  ＣＰＵ、  ２１１  ＲＯＭ、  ２１２  ＲＡＭ、  ２１３  演算処理部、  ２１４  コマンド解析部、  ２１５  スレーブアドレス記憶部、  ２２０  制御部（ＣＰＵ２１０及びＩＩＣ制御部２０５）。
【図１】
2013077012.tif 000003
【図２】
2013077012.tif 000004
【図３】
2013077012.tif 000005
【図４】
2013077012.tif 000006
【図５】
2013077012.tif 000007
【図６】
2013077012.tif 000008
【図７】
2013077012.tif 000009
【図８】
2013077012.tif 000010
【図９】
2013077012.tif 000011
【図１０】
2013077012.tif 000012
【図１１】
2013077012.tif 000013
【手続補正書】
【提出日】平成27年1月26日(2015.1.26)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
クロック信号を伝送するためのクロック信号線及びデータを伝送するためのデータ信号線からなる同期式シリアル通信用のバスを用いて、マスターモードで動作する通信装置であるマスターデバイスから送信されるコマンドを受信し、該コマンドを解析し、前記バスを用いて、前記解析の結果を前記マスターデバイスに返信する、スレーブモードで動作する通信装置であって、
前記マスターデバイスが、前記スレーブモードで動作する通信装置に通信を開始したことによりスタートするタイマーと、
予め決められた閾値を保存するタイマー閾値記憶部と、
前記マスターデバイスからの前記クロック信号を、前記クロック信号線を通して受信し、及び、前記マスターデバイスからの前記クロック信号を停止させる制御を行うクロック制御部と、
前記マスターデバイスに対し、前記データ信号線を通してデータの送受信を行うデータ制御部と、
前記データ制御部によって送信されるデータを一時的に保存する送信用一時記憶部と、
前記マスターデバイスから送信されたコマンドを解析するコマンド解析部と、
制御部と
を有し、
前記制御部は、
前記マスターデバイスから送信されるコマンドがライト制御又はリード制御のいずれを設定されているコマンドであるかの判定を行い、リード制御が設定されていると判定した場合、前記コマンド解析部がコマンドを解析している期間中、前記マスターデバイスからの前記クロック信号を停止するように、前記クロック制御部を制御し、
前記タイマーの値を前記タイマー閾値記憶部に記憶されている閾値と比較し、
前記比較の結果、前記タイマーの値が前記閾値以下であれば、送信するデータを前記送信用一時記憶部に保存し、前記クロック制御部による前記クロック信号を停止させる制御を解除し、前記クロック制御部が受信する前記クロック信号に同期して、前記データ制御部が前記送信用一時記憶部に保存されているデータを、前記マスターデバイスに送信し、
前記比較の結果、前記タイマーの値が前記閾値を超えていれば、前記クロック制御部による前記クロック信号を停止させる制御を解除して前記クロック制御部を前記クロック信号を受信する状態にし、また、前記データ制御部をスレーブモードで動作する通信装置を示すスレーブアドレスを受信する状態にする
ことを特徴とする通信装置。
【請求項２】
前記制御部は、前記コマンド解析部による前記コマンドの解析を完了した後に、前記タイマーの値を前記閾値と比較する前記処理を行うことを特徴とする請求項１に記載の通信装置。
【請求項３】
前記制御部は、
前記コマンド解析部による前記コマンドの解析の完了の前に、前記タイマーの値を前記閾値と比較する前記処理を開始し、
前記比較の結果、前記タイマーの値が前記閾値を超えていれば、前記コマンド解析部により前記コマンドの解析は完了しているかいないかに関係なく、前記クロック制御部による前記クロック信号を停止させる制御を解除して前記クロック制御部を前記クロック信号を受信する状態にし、また、前記データ制御部をスレーブモードで動作する通信装置を示すスレーブアドレスを受信する状態にする
ことを特徴とする請求項１に記載の通信装置。
【請求項４】
前記マスターデバイスから送信されるデータを一時的に保存する受信用一時記憶部をさらに有し、
前記マスターデバイスから送信されるデータを受信するときに、前記タイマーの値を前記タイマー閾値記憶部に記憶されている閾値と比較する処理を行い、前記タイマーの値が前記閾値を超えていれば、前記受信用一時記憶部のデータをクリアし、前記クロック制御部による前記クロック信号を停止させる制御を解除して前記クロック制御部を前記クロック信号を受信する状態にし、また、前記データ制御部をスレーブモードで動作する通信装置を示すスレーブアドレスを受信する状態にする
ことを特徴とする請求項１から３までのいずれか１項に記載の通信装置。
【請求項５】
前記制御部は、前記受信用一時記憶部からデータを読み出すことが可能な状態になってから、前記マスターデバイスからの受信処理を開始させることを特徴とする請求項４に記載の通信装置。
【請求項６】
前記制御部は、
前記コマンド解析部によるコマンドの解析を開始した後に、コマンド送信フラグを、未送信を示すフラグに設定し、
前記コマンド解析部によるコマンドの解析を完了し、前記マスターデバイスに前記解析の結果を送信した後に、前記コマンド送信フラグを、送信済を示すフラグに設定し、
前記マスターデバイスが前記コマンド解析部の解析結果を返信するように求めたときに、前記コマンド送信フラグに基づいて、返信するデータを決定する
ことを特徴とする請求項１から５までのいずれか１項に記載の通信装置。
【請求項７】
前記クロック信号線は、ＳＣＬ信号線であり、
前記データ信号線は、ＳＤＡ信号線であり、
前記同期式シリアル通信用のバスは、ＩＩＣバスである
ことを特徴とする請求項１から６までのいずれか１項に記載の通信装置。
【請求項８】
クロック信号を伝送するためのクロック信号線及びデータを伝送するためのデータ信号線からなる同期式シリアル通信用のバスを用いて、マスターモードで動作する通信装置であるマスターデバイスから送信されるコマンドを受信し、該コマンドを解析し、前記バスを用いて、前記解析の結果を前記マスターデバイスに返信する、スレーブモードで動作する通信装置における通信方法であって、
前記マスターデバイスが、前記スレーブモードで動作する通信装置に通信を開始したことによりタイマーをスタートするステップと、
クロック制御部が、前記マスターデバイスからの前記クロック信号を、前記クロック信号線を通して受信し、又は、前記マスターデバイスからの前記クロック信号を停止させる制御を行うステップと、
データ制御部が、前記マスターデバイスに対し、前記データ信号線を通してデータの送受信を行うステップと、
前記データ制御部によって送信されるデータを送信用一時記憶部に一時的に保存するステップと、
コマンド解析部が、前記マスターデバイスから送信されたコマンドを解析するステップと
を有し、
前記マスターデバイスから送信されるコマンドがライト制御又はリード制御のいずれを設定されているコマンドであるかの判定を行い、リード制御が設定されていると判定した場合、前記コマンドを解析している期間中、前記マスターデバイスからの前記クロック信号を停止するように、前記クロック制御部を制御し、
前記タイマーの値をタイマー閾値記憶部に予め記憶されている閾値と比較し、
前記比較の結果、前記タイマーの値が前記閾値以下であれば、送信するデータを前記送信用一時記憶部に保存し、前記クロック信号を停止させる制御を解除し、前記受信するクロック信号に同期して、前記送信用一時記憶部に保存されているデータを、前記マスターデバイスに送信し、
前記比較の結果、前記タイマーの値が前記閾値を超えていれば、前記クロック制御部による前記クロック信号を停止させる制御を解除して前記クロック制御部を前記クロック信号を受信する状態にし、また、前記データ制御部をスレーブモードで動作する通信装置を示すスレーブアドレスを受信する状態にする
ことを特徴とする通信方法。
【請求項９】
前記コマンド解析部による前記コマンドの解析を完了した後に、前記タイマーの値を前記閾値と比較する前記処理を行うことを特徴とする請求項８に記載の通信方法。
【請求項１０】
前記コマンド解析部による前記コマンドの解析の完了の前に、前記タイマーの値を前記閾値と比較する前記処理を開始し、
前記比較の結果、前記タイマーの値が前記閾値を超えていれば、前記コマンド解析部により前記コマンドの解析は完了しているかいないかに関係なく、前記クロック制御部による前記クロック信号を停止させる制御を解除して前記クロック制御部を前記クロック信号を受信する状態にし、また、前記データ制御部をスレーブモードで動作する通信装置を示すスレーブアドレスを受信する状態にする
ことを特徴とする請求項８に記載の通信方法。
【請求項１１】
前記マスターデバイスから送信されるデータを一時的に保存する受信用一時記憶部をさらに有し、
前記マスターデバイスから送信されるデータを受信するときに、前記タイマーの値を前記タイマー閾値記憶部に記憶されている閾値と比較する処理を行い、前記タイマーの値が前記閾値を超えていれば、前記受信用一時記憶部のデータをクリアし、前記クロック制御部による前記クロック信号を停止させる制御を解除して前記クロック制御部を前記クロック信号を受信する状態にし、また、前記データ制御部をスレーブモードで動作する通信装置を示すスレーブアドレスを受信する状態にする
ことを特徴とする請求項８から１０までのいずれか１項に記載の通信方法。
【請求項１２】
前記受信用一時記憶部からデータを読み出すことが可能な状態になってから、前記マスターデバイスからの受信処理を開始させることを特徴とする請求項１１に記載の通信方法。
【請求項１３】
前記コマンドの解析を開始した後に、コマンド送信フラグを、未送信を示すフラグに設定し、
前記コマンドの解析を完了し、前記マスターデバイスに前記解析の結果を送信した後に、前記コマンド送信フラグを、送信済を示すフラグに設定し、
前記マスターデバイスが解析結果を返信するように求めたときに、前記コマンド送信フラグに基づいて、返信するデータを決定する
ことを特徴とする請求項８から１２までのいずれか１項に記載の通信方法。
【請求項１４】
前記クロック信号線は、ＳＣＬ信号線であり、
前記データ信号線は、ＳＤＡ信号線であり、
前記同期式シリアル通信用のバスは、ＩＩＣバスである
ことを特徴とする請求項８から１３までのいずれか１項に記載の通信方法。
【請求項１５】
クロック信号を伝送するためのクロック信号線及びデータを伝送するためのデータ信号線からなる同期式シリアル通信用のバスを用いて、マスターモードで動作する通信装置であるマスターデバイスと、
前記マスターデバイスから送信されるコマンドを受信し、該コマンドを解析し、前記バスを用いて、前記解析の結果を前記マスターデバイスに返信する、スレーブモードで動作する通信装置であるスレーブデバイスと
を有し、
前記スレーブデバイスは、請求項１から７までのいずれか１項に記載の通信装置である
ことを特徴とする通信システム。
【請求項１６】
前記マスターデバイスは、
前記スレーブモードで動作する通信装置に通信を開始したことによりスタートする第１のタイマーと、
予め決められた第１の閾値を保存する第１のタイマー閾値記憶部と、
前記クロック信号線を通して送信される前記クロック信号を制御する第１のクロック制御部と、
前記データ信号線を通してデータの送受信を行う第１のデータ制御部と、
前記第１のデータ制御部によって送信されるデータを一時的に保存する第１の送信用一時記憶部と、
第１の制御部と
を有し、
前記マスターデバイスは、前記スレーブデバイスにデータの送信、又は、前記スレーブデバイスからのデータ受信を行うたびに、前記第１のタイマーの値を前記第１のタイマー閾値記憶部に記憶されている第１の閾値と比較し、前記第１のタイマーの値が前記第１の閾値を越えていれば、前記第１のクロック制御部と前記データ制御部を初期状態に変更する
ことを特徴とする請求項１５に記載の通信システム。
【請求項１７】
前記マスターデバイスの前記第１のタイマー閾値記憶部に記憶されている前記第１の閾値と、前記スレーブデバイスの前記タイマー閾値記憶部に記憶されている前記閾値とが、同じ値であること特徴とする請求項１６に記載の通信システム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００１０
【補正方法】変更
【補正の内容】
【００１０】
本発明に係る通信装置は、クロック信号を伝送するためのクロック信号線及びデータを伝送するためのデータ信号線からなる同期式シリアル通信用のバスを用いて、マスターモードで動作する通信装置であるマスターデバイスから送信されるコマンドを受信し、該コマンドを解析し、前記バスを用いて、前記解析の結果を前記マスターデバイスに返信する、スレーブモードで動作する通信装置であって、前記マスターデバイスが、前記スレーブモードで動作する通信装置に通信を開始したことによりスタートするタイマーと、予め決められた閾値を保存するタイマー閾値記憶部と、前記マスターデバイスからの前記クロック信号を、前記クロック信号線を通して受信し、及び、前記マスターデバイスからの前記クロック信号を停止させる制御を行うクロック制御部と、前記マスターデバイスに対し、前記データ信号線を通してデータの送受信を行うデータ制御部と、前記データ制御部によって送信されるデータを一時的に保存する送信用一時記憶部と、前記マスターデバイスから送信されたコマンドを解析するコマンド解析部と、制御部とを有し、前記制御部は、前記マスターデバイスから送信されるコマンドがライト制御又はリード制御のいずれを設定されているコマンドであるかの判定を行い、リード制御が設定されていると判定した場合、前記コマンド解析部がコマンドを解析している期間中、前記マスターデバイスからの前記クロック信号を停止するように、前記クロック制御部を制御し、前記タイマーの値を前記タイマー閾値記憶部に記憶されている閾値と比較し、前記比較の結果、前記タイマーの値が前記閾値以下であれば、送信するデータを前記送信用一時記憶部に保存し、前記クロック制御部による前記クロック信号を停止させる制御を解除し、前記クロック制御部が受信する前記クロック信号に同期して、前記データ制御部が前記送信用一時記憶部に保存されているデータを、前記マスターデバイスに送信し、前記比較の結果、前記タイマーの値が前記閾値を超えていれば、前記クロック制御部による前記クロック信号を停止させる制御を解除して前記クロック制御部を前記クロック信号を受信する状態にし、また、前記データ制御部をスレーブモードで動作する通信装置を示すスレーブアドレスを受信する状態にすることを特徴とする。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００１１
【補正方法】変更
【補正の内容】
【００１１】
本発明に係る通信方法は、クロック信号を伝送するためのクロック信号線及びデータを伝送するためのデータ信号線からなる同期式シリアル通信用のバスを用いて、マスターモードで動作する通信装置であるマスターデバイスから送信されるコマンドを受信し、該コマンドを解析し、前記バスを用いて、前記解析の結果を前記マスターデバイスに返信する、スレーブモードで動作する通信装置における通信方法であって、前記マスターデバイスが、前記スレーブモードで動作する通信装置に通信を開始したことによりタイマーをスタートするステップと、クロック制御部が、前記マスターデバイスからの前記クロック信号を、前記クロック信号線を通して受信し、又は、前記マスターデバイスからの前記クロック信号を停止させる制御を行うステップと、データ制御部が、前記マスターデバイスに対し、前記データ信号線を通してデータの送受信を行うステップと、前記データ制御部によって送信されるデータを送信用一時記憶部に一時的に保存するステップと、コマンド解析部が、前記マスターデバイスから送信されたコマンドを解析するステップとを有し、前記マスターデバイスから送信されるコマンドがライト制御又はリード制御のいずれを設定されているコマンドであるかの判定を行い、リード制御が設定されていると判定した場合、前記コマンドを解析している期間中、前記マスターデバイスからの前記クロック信号を停止するように、前記クロック制御部を制御し、前記タイマーの値をタイマー閾値記憶部に予め記憶されている閾値と比較し、前記比較の結果、前記タイマーの値が前記閾値以下であれば、送信するデータを前記送信用一時記憶部に保存し、前記クロック信号を停止させる制御を解除し、前記受信するクロック信号に同期して、前記送信用一時記憶部に保存されているデータを、前記マスターデバイスに送信し、前記比較の結果、前記タイマーの値が前記閾値を超えていれば、前記クロック制御部による前記クロック信号を停止させる制御を解除して前記クロック制御部を前記クロック信号を受信する状態にし、また、前記データ制御部をスレーブモードで動作する通信装置を示すスレーブアドレスを受信する状態にすることを特徴とする。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００４２
【補正方法】変更
【補正の内容】
【００４２】
次に、ＣＰＵ１１０は、ＩＩＣ制御部１０５に対して、スレーブアドレスを送信し（ステップＳ４０４）、マスターデバイス１０がライト処理を行うことを示すライト制御ビットを送信するようにＩＩＣ制御部１０５に対して指示する（ステップＳ４０５）。ＩＩＣ制御部１０５は、送信ＦＩＦＯ１０３に、スレーブアドレスとライト制御ビットとで構成される８ビットのデータを書き込む。そして、ＳＤＡ制御部１０２は、送信ＦＩＦＯ１０３からデータを読み出し、ＳＣＬ制御部１０１によるＳＣＬ信号線３０の制御と同期して、ＳＤＡ信号線３１の制御を行うことで、スレーブアドレスとライト制御ビットとを送信する。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００４３
【補正方法】変更
【補正の内容】
【００４３】
次に、ＣＰＵ１１０は、ＩＩＣ制御部１０５を制御して、ＡＣＫ信号を受信したかどうかを確認し（ステップＳ４０６）、ＡＣＫ信号を受信していない場合は、ストップコンディションを生成して（ステップＳ４０７）、ＩＩＣ通信を終了する（ステップＳ４０８）。ＡＣＫ信号を受信している場合は、ＣＰＵ１１０は、Ｎ＝０として（ステップＳ４０９）、ＩＩＣ制御部１０５にデータを書き込み、ＩＩＣ制御部１０５は、送信ＦＩＦＯ１０３にデータを送信し、ＳＤＡ制御部１０２は、送信ＦＩＦＯ１０３からデータを読み出して、ＳＣＬ制御部１０１によるＳＣＬ信号線３０の制御と同期して、データの送信を行う（ステップＳ４１０）。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】００４５
【補正方法】変更
【補正の内容】
【００４５】
次に、ＣＰＵ１１０は、Ｎ＝Ｎ＋１（ステップＳ４１４）として、Ｎ＞Ｍであるか否かの確認（ステップＳ４１５）を行い、Ｎ≦Ｍであれば、再度、ステップＳ４１０に処理を戻して、データの送信を行う。実施の形態１においては、Ｍ＝３である。ステップＳ４１５でＮ＞Ｍとなると、ＣＰＵ１１０は、リード処理を行うために、ＩＩＣ制御部１０５にスタートコンディションを発行するように指示し、ＩＩＣ制御部１０５は、ＳＣＬ制御部１０１及びＳＤＡ制御部１０２を制御して、再度、スタートコンディション（「リスタートコンディション」とも言う）を生成する（ステップＳ４１６）。
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】００４６
【補正方法】変更
【補正の内容】
【００４６】
そして、ＣＰＵ１１０は、ＩＩＣ制御部１０５に対してスレーブアドレスの送信（ステップＳ４１７）と、マスターデバイス１０がリード処理を行うことを示すリード制御ビットを送信するように指示する（ステップＳ４１８）。ＩＩＣ制御部１０５は、送信ＦＩＦＯ１０３にスレーブアドレスとリード制御ビットとで構成される８ビットのデータを書き込む。そして、ＳＤＡ制御部１０２は、送信ＦＩＦＯ１０３からデータを読み出し、ＳＣＬ制御部１０１によるＳＣＬ信号線３０の制御と同期して、ＳＤＡ信号線３１の制御を行うことで、スレーブアドレスとリード制御ビットを送信する。
【手続補正８】
【補正対象書類名】明細書
【補正対象項目名】００６５
【補正方法】変更
【補正の内容】
【００６５】
まず、ＳＣＬ制御部２０１とＳＤＡ制御部２０２が、マスターデバイス１０からの信号（ＳＣＬ信号線３０及びＳＤＡ信号線３１のハイ又はローへの変化）を受信する。マスターデバイス１０がＩＩＣバスをスタートコンディション、又は、リスタートコンディションにした後に送信するデータには、スレーブアドレスと、リード制御ビットを含んでいるため、ＳＤＡ制御部２０２は、スタートコンディション又はリスタートコンディションを検出（ステップＳ５０２）して、スレーブアドレスを受信する（ステップＳ５０３）。既にライト処理を実行している場合には、受信処理ルーチンのステップＳ５５９や、ステップＳ５１１でリスタートコンディションを検出しているので、ＣＰＵ２１０は、スレーブアドレスの受信（ステップＳ５０３）から処理を進める。
【手続補正９】
【補正対象書類名】明細書
【補正対象項目名】００８１
【補正方法】変更
【補正の内容】
【００８１】
実施の形態３．
実施の形態１においては、スレーブデバイス２０の処理が終了したとき（ステップＳ５０５、ステップＳ５１３、ステップＳ５１８、ステップＳ５２７、ステップＳ５３１を実行後）、スレーブデバイス２０では、いつマスターデバイス１０から次のスタートコンディションが送信されるか分からないので、ＩＩＣ通信処理を開始（ステップＳ５０１）している。これに対し、実施の形態３においては、コマンドを受信するための処理が完了したことに基づいて、ＩＩＣ通信処理を開始（ステップＳ５０１）するように構成している。なお、実施の形態３の説明に際しては、図１、図５、図６を参照する。
【手続補正１０】
【補正対象書類名】図面
【補正対象項目名】図２
【補正方法】変更
【補正の内容】
【図２】
2013077012.tif 000014
【国際調査報告】
2013077012.tif 000015
2013077012.tif 000016
2013077012.tif 000017
2013077012.tif 000018