(57)【特許請求の範囲】
【請求項１】
Ｉ２Ｃバスを制御し送受信を管理し、ＣＰＵから指示されたデータを送信するマスタデバイスと、データの送受信を行うスレーブデバイスがＩ２Ｃバスを介して接続されるＩ２Ｃバス制御回路において、
前記ＣＰＵと前記マスタデバイスとの間に設置され、前記マスタデバイスを制御し、
前記ＣＰＵから送られてきた送信データとその長さ、および前記スレーブデバイスから受信した受信データとその長さが格納されるメモリと、
前記スレーブデバイスのアドレスと前記メモリに格納された送信データを順次前記マスタデバイスに出力して送信させ、送信が終了すると引き続いて前記マスタデバイスにスレーブデバイスのアドレスを送信させてこのスレーブデバイスからの受信を待ち、受信が終了すると前記ＣＰＵに割り込みを発生させて、前記メモリに格納された受信データを一括して前記ＣＰＵに出力する制御部と、
を具備した送受信制御部と、
を備えたことを特徴とするＩ２Ｃバス制御回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、Ｉ２Ｃバスを用いてデータを送受信する回路に関し、送信と受信を一連の動作で実行することができるＩ２Ｃバス制御回路に関するものである。
【背景技術】
【０００２】
Ｉ２ＣはＩｎｔｅｒ−Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔとも言い、フィリップス社で開発されたシリアルバスである。Ｉ２Ｃはシリアルデータ（ＳＤＡ）とシリアルクロック（ＳＣＬ）の２本の信号線でデータの伝送を行う。Ｉ２Ｃは７ビットのアドレス空間を有し、最大１１２個のスレーブデバイスを同じバスに接続して通信を行うことができる。
【０００３】
図６に、Ｉ２Ｃバスを用いてデータを送受信するＩ２Ｃバス制御回路の構成を示す。図６において、ＣＰＵ１０はマスタデバイス１１にデータの送受信を指示する。マスタデバイス１１には、Ｉ２Ｃバス１２を介して複数のスレーブデバイス１３が接続されている。
【０００４】
マスタデバイス１１はＩ２Ｃバス１２を制御し、データの送受信を管理する。マスタデバイス１１は、ＣＰＵ１０の指示によりスレーブデバイス１３の１つを選択し、この選択したスレーブデバイス１３とデータの送受信を行う。
【０００５】
Ｉ２Ｃバスを用いた通信では、スレーブデバイス１３にデータを送信し、この結果を受信するという、送信と受信が連続して発生することが多々ある。図７を用いて、データを送信した後受信する手順を示す。
【０００６】
図７において、工程（Ｐ７−１）で送信の準備を行う。具体的には、ＣＰＵ１０はデータを送信するスレーブデバイス１３のアドレスをマスタデバイス１１に設定する。マスタデバイス１１はスタートコンディションを生成し、ＣＰＵ１０が設定したスレーブデバイスのアドレスを、Ｉ２Ｃバス１２を経由してスレーブデバイス１３に送信する。
【０００７】
スレーブデバイス１３はマスタデバイス１１から送信されたアドレスを受信し、自身のアドレスと一致しているとアクノリッジ（ＡＣＫ）を返信する。マスタデバイス１１は、アクノリッジを受け取ったことをＣＰＵ１０に通知する。
【０００８】
次に、工程（Ｐ７−２）で、ＣＰＵ１０はマスタデバイス１１に送信するデータ（１バイト）を設定し、工程（Ｐ７−３）で割り込みが発生するまで待機する。マスタデバイス１１は設定されたデータを送信し、データを受信したスレーブデバイス１３はマスタデバイス１１にアクノリッジを返す。
【０００９】
アクノリッジを受信したマスタデバイス１１は、ＣＰＵ１０に送信完了の割り込みを通知する。ＣＰＵ１０は、工程（Ｐ７−４）で全てのデータを送信したかをチェックし、未送信のデータがあると（ＮＯ）、工程（Ｐ７−２）に戻って次の送信データをマスタデバイス１１に設定する。
【００１０】
工程（Ｐ７−４）で送信が完了すると（ＹＥＳ）、工程（Ｐ７−５）で停止処理を行う。ＣＰＵ１０はマスタデバイス１１に停止処理を設定する。マスタデバイス１１はストップコンディションを生成し、所定の待ち時間の経過後、送信完了をＣＰＵ１０に通知する。
【００１１】
送信が完了したことを確認したＣＰＵ１０は、工程（Ｐ７−６）で受信準備を行う。具体的には、ＣＰＵ１０はデータを受信するスレーブデバイス１３のアドレスをマスタデバイス１１に設定する。マスタデバイス１１はスタートコンディションを生成し、ＣＰＵ１０が設定したアドレスをスレーブデバイス１３に送信する。
【００１２】
マスタデバイス１１から送信されたアドレスを受け取ったスレーブデバイス１３は、自身のアドレスと一致しているとアクノリッジを返す。マスタデバイス１１は、アクノリッジを受け取ったことをＣＰＵ１０に通知する。これによって受信準備が完了する。
【００１３】
ＣＰＵ１０は、工程（Ｐ７−７）で割り込みが発生するまで待機する。マスタデバイス１１は、スレーブデバイス１３からデータを受信するとアクノリッジを返し、ＣＰＵ１０に割り込みを通知する。
【００１４】
工程（Ｐ７−８）で、ＣＰＵ１０はマスタデバイス１１から受信データを読み込む。そして、工程（Ｐ７−９）で必要なデータを全て受信したかをチェックし、受信が完了していないと（ＮＯ）アクノリッジを有効（ＡＣＫ）に保ち、工程（Ｐ７−７）に戻って次の割り込みが発生するまで待機する。
【００１５】
工程（Ｐ７−９）で受信が完了すると（ＹＥＳ）、工程（Ｐ７−１０）で停止処理を行う。ＣＰＵ１０は最終データの直前のデータを受信すると、データ転送を止めるためにアクノリッジを無効（ＮＡＣＫ）にする。そして、マスタデバイス１１に停止処理を設定する。マスタデバイス１１はストップコンディションを生成し、所定の待ち時間が経過後ＣＰＵ１０に受信完了を通知する。
【００１６】
図８は送信時と受信時の動作を示すデータフロー図である。図８において、上段は送信時、下段は受信時の動作であり、いずれもバイト単位でデータを送受信する。２０で送信準備を行う。ＣＰＵ１０は送信するアドレスをマスタデバイス１１に設定し、マスタデバイス１１はスタート（ＳＴＡＲＴ）コンディションを生成する。
【００１７】
２１でマスタデバイス１１はアドレスを送信し、２２でアクノリッジ（ＡＣＫ）が帰ってくるとＣＰＵ１０に割り込みを通知する。ＣＰＵ１０はマスタデバイス１１に送信するデータを書き込み、２３でマスタデバイス１１はこのデータを送信する。
【００１８】
２４で送信が完了し、アクノリッジ（ＡＣＫ）が帰ってくると、マスタデバイス１１はＣＰＵ１０に割り込みを通知する。ＣＰＵ１０は次の送信データを書き込み、２５でマスタデバイス１１はこのデータを送信する。
【００１９】
２６で送信が完了してアクノリッジ（ＡＣＫ）が帰ってくると、マスタデバイス１１はＣＰＵ１０に割り込みを通知する。ＣＰＵ１０は停止処理を指示し、マスタデバイス１１はストップ（ＳＴＯＰ）コンディションを生成して、これが終了するとＣＰＵ１０に割り込みを通知する。
【００２０】
受信動作では、３０で受信準備を行う。ＣＰＵ１０は受信するスレーブデバイス１３のアドレスをマスタデバイス１１に通知する。マスタデバイス１１はスタートコンディションの終了後、３１でこのアドレスを送信する。
【００２１】
アドレス送信が終了すると、スレーブデバイスは３２でＡＣＫを返す。マスタデバイス１１はスレーブデバイス１３からデータが送信されるまで待機する。３３でデータを受信すると、マスタデバイス１１はＣＰＵ１０に割り込みを通知し、スレーブデバイス１３にＡＣＫを返す。ＣＰＵ１０は、マスタデバイス１１が受信したデータを読み込み、アクノリッジを無効（ＮＡＣＫ）にする。
【００２２】
３４でデータを受信すると、マスタデバイス１１はＣＰＵ１０に割り込みを通知し、ＣＰＵ１０はデータを読み込む。ＣＰＵ１０が出力するアクノリッジが無効（ＮＡＣＫ）なので、マスタデバイス１１はストップコンディション生成し、それが終了するとＣＰＵ１０に割り込みを通知する。
【００２３】
特許文献１には、複数バイトのデータを連続送信できるようにして、割り込み処理のオーバーヘッドを削減できるＩ２Ｃバス制御回路の発明が記載されている。この発明では、連続送信するバイト数と送信データを連続送信制御部に格納し、この送信データを順次送信制御部に転送して送信する。また、アクノリッジをシーケンス制御部で処理して割り込みを連続送信制御部に通知し、連続送信制御部は次の送信データを送信制御部に転送するようにすることにより、連続送信を可能にしている。
【００２４】
特許文献２には、ストップコンディションの生成タイミングを最適化することにより、通信時間を短縮することができるＩ２Ｃバス制御回路の発明が記載されている。この発明では、デバイス毎に最適なストップコンディション出力タイミングをストップコンディションタイミングテーブルに格納し、送信が終了すると、このストップコンディションタイミングテーブルから送信したデバイスのストップコンディション出力タイミングを読み出して、このタイミングでストップコンディションを生成するようにする。
【先行技術文献】
【特許文献】
【００２５】
【特許文献１】特開２００８−１８６１３０号公報
【特許文献２】特開２００８−２４２８８４号公報
【発明の概要】
【発明が解決しようとする課題】
【００２６】
しかしながら、このようなＩ２Ｃバス制御回路には、次のような課題があった。図６〜図８で説明したＩ２Ｃバス制御回路は１バイトの送受信毎に割り込みが発生し、この割り込みで送信データの書き込み、受信データの読み込みを行わなければならない。このため、この割り込み処理のオーバーヘッドのために、通信時間に無駄が発生してしまうという課題があった。
【００２７】
また、送信動作と受信動作を別々に行う必要があるので、それぞれの動作完了前後に送受信の準備処理や停止処理を行わなければならない。このため、送受信が連続して発生する場合にこれらの処理でオーバーヘッドが生じ、通信時間が長くなってしまうという課題もあった。
【００２８】
特許文献１および２に記載された発明はいずれも通信時間の短縮を目的とする発明であるが、送受信が連続して発生する場合のオーバーヘッドを削減することはできないという課題があった。
【００２９】
本発明の目的は、送信と受信を一連の動作として行う送受信制御部を具備し、送信と受信を一度の開始処理で実行でき、またデータ受信後のみ割り込みを発生させることにより、通信時間を短縮することができるＩ２Ｃバス制御回路を実現することにある。
【課題を解決するための手段】
【００３０】
このような課題を達成するために、本発明のうち請求項１記載の発明は、
Ｉ２Ｃバスを制御し送受信を管理し、ＣＰＵから指示されたデータを送信するマスタデバイスと、データの送受信を行うスレーブデバイスがＩ２Ｃバスを介して接続されるＩ２Ｃバス制御回路において、
前記ＣＰＵと前記マスタデバイスとの間に設置され、前記マスタデバイスを制御し、
前記ＣＰＵから送られてきた送信データとその長さ、および前記スレーブデバイスから受信した受信データとその長さが格納されるメモリと、
前記スレーブデバイスのアドレスと前記メモリに格納された送信データを順次前記マスタデバイスに出力して送信させ、送信が終了すると引き続いて前記マスタデバイスにスレーブデバイスのアドレスを送信させてこのスレーブデバイスからの受信を待ち、受信が終了すると前記ＣＰＵに割り込みを発生させて、前記メモリに格納された受信データを一括して前記ＣＰＵに出力する制御部と、
を具備した送受信制御部と、
を備えたものである。送受信を連続して行うことができるので、通信時間を短縮することができる。また、ＣＰＵへの割り込みを１回にすることができるので、ＣＰＵの負荷を大幅に削減することができる。
【発明の効果】
【００３２】
本発明によれば以下のような効果がある。
請求項１の発明によれば、送信データ、送信データ長さ、および受信データ長さをメモリに格納し、スレーブデバイスのアドレスと送信データを順次出力し、送信が終了するとスレーブデバイスのアドレスを出力した後データが受信されるのを待ち、全てのデータが受信されると受信データを一括して出力する送受信制御部によってマスタデバイスを制御するようにした。
【００３３】
送信と受信を一連の動作で行い、受信が終了した後一括して受信データを出力するので、受信動作開始までの待ち時間および割り込み処理による時間を削減することができる。このため、通信時間を短縮することができるという効果がある。
【図面の簡単な説明】
【００３４】
【図１】本発明の一実施例を示した構成図である。
【図２】送受信制御部の構成図である。
【図３】本発明の一実施例の動作を示すフローチャートである。
【図４】本発明の一実施例の動作を示すデータフロー図である。
【図５】本発明の一実施例に係る送受信制御部の状態遷移図である。
【図６】従来のＩ２Ｃバス制御回路の構成図である。
【図７】従来のＩ２Ｃバス制御回路の動作を示すフローチャートである。
【図８】従来のＩ２Ｃバス制御回路の動作を示すデータフロー図である。
【発明を実施するための形態】
【００３５】
以下本発明を、図面を用いて詳細に説明する。図１は本発明に係るＩ２Ｃバス制御回路の一実施例を示した構成図である。なお、図６と同じ要素には同一符号を付し、説明を省略する。
【００３６】
図１において、４０は送受信制御部であり、ＣＰＵ１０の出力が入力され、この出力に基づいてマスタデバイス１１を制御して送受信を行う。送受信制御部４０は、送信データおよび受信データとそれらの長さを保存するメモリを具備している。
【００３７】
マスタデバイス１１と複数のスレーブデバイス１３はＩ２Ｃバス１２で接続される。マスタデバイス１１は、送受信制御部４０の出力に基づいてスレーブデバイス１３の１つを選択し、このスレーブデバイス１３にデータを送信し、またこのスレーブデバイス１３が送信したデータを受信する。この送受信は一連の動作で行われる。
【００３８】
図２に、送受信制御部４０の構成を示す。図２において、４１はＣＰＵインターフェイスであり、ＣＰＵ１０に接続される。送受信部４０は、このＣＰＵインターフェイス４１を介してＣＰＵとデータを交換する。
【００３９】
４２はメモリであり、送信データバッファ４３と受信データバッファ４４で構成される。送信データバッファ４３にはスレーブデバイス１３に送信するデータとその長さが格納され、受信データバッファ４４にはスレーブデバイス１３から受信したデータおよびその長さが格納される。
【００４０】
４５はマスタデバイスインターフェイス、４６は制御部である。制御部４６はマスタデバイスインターフェイス４５を介してマスタデバイス１１とデータを交換し、送受信動作を実行する。また、ＣＰＵ１０から送られてきた送信データと長さを送信データバッファ４３に格納し、スレーブデバイス１３から受信したデータおよびその長さを受信データバッファ４４に格納する。
【００４１】
次に、図３フローチャートに基づいて、この実施例の動作を説明する。図３において、工程（Ｐ３−１）で転送準備を行う。具体的には、ＣＰＵ１０はデータを送受信するスレーブデバイス１３のアドレス、送信データ、送信データの長さ、受信データの長さを送受信制御部４０に設定し、転送開始指令を出力する。送信データとその長さは送信データバッファ４３に格納される。
【００４２】
工程（Ｐ３−２）で、転送開始指令を受け取った送受信制御部４０は、ＣＰＵ１０によって設定されたスレーブデバイス１３のアドレス、送信データ、送信データの長さ、受信データの長さに基づいて、マスタデバイス１１を制御する。マスタデバイス１１は指定されたスレーブデバイスと通信し、データの送受信を行う。データ送受信の詳細は後述する。マスタデバイス１１が受信したデータは送受信制御部４０に出力され、受信データバッファ４４に格納される。
【００４３】
スレーブデバイスとの通信が終了すると、工程（Ｐ３−３）で、送受信制御部４０はデータ転送完了の割り込みをＣＰＵ１０に通知する。そして、受信データバッファ４４に格納した受信データをＣＰＵ１０に出力する。
【００４４】
図８に示すように、従来のＩ２Ｃバス制御回路では１バイトのデータを送受信する毎にＣＰＵ１０に割り込みが発生させていたので、この割り込み処理のオーバーヘッドのために通信時間が長くなってしまうという課題があった。
【００４５】
図３からわかるように、この実施例ではＣＰＵ１０の割り込み発生は工程（Ｐ３−３）の一回のみである。このため、ＣＰＵ１０の割り込み処理の負担が軽減され、通信時間を短縮することができる。
【００４６】
次に、図４データフロー図に基づいて送受信制御部４０の動作を説明する。このデータフロー図は、２バイトのデータを送信し、続いて２バイトのデータを受信する場合の例である。
【００４７】
図４において、５０で転送準備がされる。すなわち、ＣＰＵ１０は通信するスレーブデバイスのアドレス、送信データ、送信データの長さ、受信データの長さを送受信制御部４０に設定、転送開始指令を出力する。送信データとその長さは送信データバッファ４３に格納され、受信データの長さは受信データバッファ４４に格納される。
【００４８】
制御部４６は転送するスレーブデバイスのアドレスをマスタデバイス１１に設定し、転送開始を指示する。マスタデバイス１１はスタート（ＳＴＡＲＴ）コンディション５０を生成する。スタートコンディションが終了すると、制御部４６は通信するスレーブデバイスのアドレスをマスタデバイス１１に設定する。マスタデバイス１１は５１でこのアドレスを送信する。
【００４９】
スレーブデバイスからＡＣＫが返ってくると、制御部４６は最初の送信データをマスタデバイス１１に設定する。マスタデバイス１１は、５２でこのデータを送信する。スレーブデバイスからＡＣＫが返ってくると、制御部４６は次の送信データをマスタデバイス１１に設定し、マスタデバイス１１は５３でこのデータを送信する。
【００５０】
スレーブデバイスから２バイト目のデータ送信のＡＣＫが帰ってくると、制御部４６はマスタデバイス１１に停止処理を設定する。マスタデバイス１１はストップ（ＳＴＯＰ）コンディション５４を生成する。このストップコンディション５４は、所定の待ち時間の後終了する。
【００５１】
ストップコンディション５４が終了すると、続いて受信動作に入る。制御部４６はマスタデバイス１１にスレーブデバイスのアドレスを設定し、受信開始を指示する。マスタデバイス１１はスタートコンディション５５を生成し、その後５６でスレーブデバイスのアドレスを送信する。
【００５２】
スレーブデバイス１３からＡＣＫが帰ってくるとデータが送信されるのを待ち、データを受信すると、送信元のスレーブデバイスにＡＣＫを返す。受信したデータは、受信データバッファ４４に格納される。
【００５３】
５８でＣＰＵ１０のアクノリッジが無効（ＮＡＣＫ）になると、制御部４６はマスタデバイス１１に停止処理を指示する。５９で、マスタデバイス１１はストップコンディションを生成する。ストップコンディション終了後、制御部４６はＣＰＵ１０に転送が終了した旨の割り込みを通知する。そして、受信データバッファ４４に格納されている受信データをＣＰＵ１０に出力する。ＣＰＵ１０はこの受信データを読み込む。
【００５４】
このように、ＣＰＵ１０がデータの転送に関与するのは転送を開始する前と全ての受信データを受信した後のみであり、転送途中の制御は送受信制御部４０がＣＰＵ１０とは独立に行う。このため、割り込みに要する時間や転送準備の待ち時間を短くすることができるので、通信時間を短縮できる。
【００５５】
図５に、送受信制御部４０の状態遷移図を示す。図５において、待機状態６０でＣＰＵ１０から転送開始指令が入力されると、転送先アドレス設定６１でアドレスが設定され、続いて転送先アドレス送信６２でこのアドレスが送信される。
【００５６】
アドレスの送信が完了し、ＡＣＫを受信すると、送信データ設定６３が実行され、続いてデータ送信６４が実行されてデータが送信される。送信データ設定では、送信完了フラグがクリアされるのを待ってデータを設定する。
【００５７】
送信が完了してＡＣＫを受信し、かつ未送信のデータがあると６５でバイトカウントがインクリメントされ、送信データ設定６３に戻る。バイトカウント６５は送信済みバイト数をカウントする。
【００５８】
全送信データが送信されると、６６でストップコンディションを生成する。ストップコンディションはバスビジーの間、および所定の待ち時間継続する。ストップコンディションが完了すると、データ送信が終了する。なお、データ送信６４または転送先アドレス送信６２でＮＡＣＫを受信したときは、ストップコンディション生成６６に遷移する。
【００５９】
転送先アドレス設定６１が終了した時点でＩ２Ｃバスが使用中である（バスビジー）か、転送先アドレス送信６２あるいはデータ送信６４でバス権を失うと、バスエラー７３に遷移する。また、ストップコンディション生成６６でバスがビジーでなく、かつＮＡＣＫを受信すると、転送先アドレス設定６１に遷移する。
【００６０】
バスエラー７３ではエラーの発生を通知して、バス停止処理（ストップ処理）を開始する。所定の時間内にバスビジーが解消されると待機状態６０に遷移し、所定の時間バスビジーが続くと（タイムアウト）、７４でバスをリセットし、所定の時間経過後（タイムアウト）、Ｉ２Ｃバスの信号線ＳＤＡを高レベルにして待機状態６０に戻る。
【００６１】
ストップコンディション６６が完了すると、受信データの転送元を設定するために転送元アドレス設定６７を実行し、バスがビジーでないと転送元アドレス送信６８でこのアドレスを送信する。ＡＣＫが帰ってくると、データ受信６９を実行してデータを受信し、受信が完了すると受信データ取得７０で受信したデータを保存する。なお、転送元アドレス設定６７では、受信関係のデータレジスタを初期化する。
【００６２】
受信データ取得７０で未受信のデータあると、７１でバイトカウンタをインクリメントし、データ受信６９に戻る。バイトカウンタは受信したデータ数を数えるために用いられる。
【００６３】
全てのデータを受信すると、ＮＡＣＫを送信して７２でストップコンディションを生成する。このストップコンディションが終了し、受信データ数が指定のデータ数と合っており、かつバスがビジーでないと待機状態６０に遷移し、合っていない（受信データ長エラー）と送信元アドレス設定６７に遷移する。
【００６４】
転送元アドレス送信６８、および受信データ取得７０でバス権を損失すると、バスエラー７３に遷移して前述した処理を行う。また、転送元アドレス送信６８でＮＡＣＫを受信すると、７２に遷移してストップコンディションを生成する。
【００６５】
このようにすることにより、データの送受信の間マスタデバイス１１は送受信制御部４０によって制御される。このため、ＣＰＵ１０の負荷が軽減されて通信時間を短縮することができる。
【符号の説明】
【００６６】
１０  ＣＰＵ
１１  マスタデバイス
１２  Ｉ２Ｃバス
１３  スレーブデバイス
４０  送受信制御部
４１  ＣＰＵインターフェイス
４２  メモリ
４３  送信データバッファ
４４  受信データバッファ
４５  マスタデバイスインターフェイス
４６  制御部
【図１】
0005397614.tif 000002
【図２】
0005397614.tif 000003
【図３】
0005397614.tif 000004
【図４】
0005397614.tif 000005
【図５】
0005397614.tif 000006
【図６】
0005397614.tif 000007
【図７】
0005397614.tif 000008
【図８】
0005397614.tif 000009