(57)【要約】【課題】クロックとデータとの２本のラインに複数のデバイスがワイヤードＡＮＤで接続されるシリアルバスにおいて、バス権獲得を保証する仕組みを提供する。【解決手段】第１のデバイスのバス制御回路は、データ転送のためのバス権獲得に失敗した場合に、クロックラインをローに保持することにより、他のデバイスによる現在の転送処理を一時的に停止しつつ第１のデバイスの識別データをデータラインに出力する出力制御回路と、第１のデバイス又は他のデバイスによりクロックラインがローに保持されて現在の転送処理が一時的に停止している期間にデータラインに現れた第１のデータを読み込んで格納するメモリ回路とを含み、出力制御回路は、メモリ回路に格納される第１のデータが識別データと異なる場合、現在の転送処理の終了後、他のデバイスによる転送処理が実行されるのを待つ。【選択図】図２
2019211817.tif 000002
【特許請求の範囲】
【請求項１】
正の電源電圧にプルアップされるクロックラインとデータラインとにオープンドレイン又はオープンコレクタで接続される第１のデバイスのバス制御回路であって、
データ転送のためのバス権獲得に失敗した場合に、前記クロックラインをローに保持することにより、他のデバイスによる現在の転送処理を一時的に停止しつつ前記第１のデバイスの識別データを前記データラインに出力する出力制御回路と、
前記第１のデバイス又は他のデバイスにより前記クロックラインがローに保持されて現在の転送処理が一時的に停止している期間に前記データラインに現れた第１のデータを読み込んで格納するメモリ回路と、
を含み、前記出力制御回路は、前記メモリ回路に格納される前記第１のデータが前記識別データと異なる場合、現在の転送処理の終了後、他のデバイスによる転送処理が実行されるのを待つバス制御回路。
【請求項２】
前記出力制御回路は、バス権獲得に失敗した場合に、前記クロックラインをローに保持することにより現在の転送処理を一時的に停止しつつ所定のビットパターンを有するデータを前記識別データと共に前記データラインに出力し、
前記メモリ回路は、前記第１のデバイス又は他のデバイスにより前記クロックラインがローに保持されて現在の転送処理が一時的に停止している期間に前記データラインに現れた第２のデータの一部が前記所定のビットパターンである場合に、前記第２のデータの一部である前記第１のデータを格納する
請求項１記載のバス制御回路。
【請求項３】
前記出力制御回路がバス権獲得に失敗した場合に前記クロックラインをローに保持するタイミングは、現在の転送処理が開始されたタイミングから所定の時間後のクロックサイクルである請求項１記載のバス制御回路。
【請求項４】
前記出力制御回路がバス権獲得に失敗した場合に前記クロックラインをローに保持するタイミングは、現在の転送処理におけるアクノリッジサイクル及び読み書きデータの転送サイクル以外のクロックサイクルである請求項１乃至３のいずれか一項記載のバス制御回路。
【請求項５】
前記出力制御回路は、前記識別データを前記データラインに出力した後に転送処理の必要が無くなった場合、現在の転送処理の終了後、転送処理の開始及び終了を示す信号を実際のデータを転送することなく前記データラインに出力する請求項１乃至４のいずれか一項記載のバス制御回路。
【請求項６】
前記出力制御回路は、前記識別データを前記データラインに出力するためのバス権獲得に失敗した場合に、前記クロックラインを再度ローに保持することにより、他のデバイスによる現在の転送処理を一時的に停止しつつ前記識別データを前記データラインに出力する請求項１乃至５のいずれか一項記載のバス制御回路。
【請求項７】
前記メモリ回路は、前記データラインに前記第１のデータが複数回現れると、現れた順番に複数の前記第１のデータを格納可能であり、
前記出力制御回路は、前記メモリ回路に格納された複数の前記第１のデータを現在の転送処理が終了する度に格納順に１つずつ読み出し、該読み出された１つの第１のデータが前記識別データと異なる場合、他のデバイスによる転送処理が実行されるのを待つ
請求項１乃至６のいずれか一項記載のバス制御回路。
【請求項８】
正の電源電圧にプルアップされるクロックラインとデータラインとにオープンドレイン又はオープンコレクタで接続される複数のデバイスによるバスアクセスを制御するバス制御方法であって、
前記複数のデバイスのうちの第１のデバイスと第２のデバイスとを含む少なくとも２つのデバイスが転送処理を同時に開始して前記第１のデバイスがバス権を獲得した場合、前記第１のデバイスが転送処理を続行し、且つ前記第２のデバイスが転送処理を中断し、
前記第２のデバイスが前記クロックラインをローに保持することにより、前記第１のデバイスにより実行されている現在の転送処理を一時的に停止しつつ前記第２のデバイスの識別データを前記データラインに出力し、
前記複数のデバイスのうち前記第２のデバイス以外のデバイスは、前記クロックラインがローに保持されている間に前記データラインに現れた前記識別データを読み込んで認識すると、前記第１のデバイスによる現在の転送処理が終了した後に、前記第２のデバイスによる転送処理が実行されるのを待つ、
各段階を含むバスの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本願開示は、バス制御回路及びバスの制御方法に関する。
【背景技術】
【０００２】
シリアルバスの仕様であるＩ２Ｃインタフェースは、開発されてから長い年月が経つが、現在でも重要なデバイスアクセスのインタフェースとして使用され続けている。Ｉ２Ｃインターフェースは、例えば１０ＧｂＥ光モジュールのような最先端のデバイスからメモリ関連のデバイスに至るまで、多種多様なデバイスに実装される主要なインタフェースの１つであり、ハードウェア回路において重要な役割を担っている。
【０００３】
Ｉ２Ｃインターフェースでは、シリアルデータライン（ＳＤＡ）とシリアルクロックライン（ＳＣＬ）との２本のバスラインに対して、複数のデバイスがワイヤードＡＮＤ（負論理のワイヤードＯＲ）で接続されている。各バスラインは双方向の信号ラインであり、電流源又はプルアップ抵抗を介してプラスの電源電圧に接続される。
【０００４】
近年、マスタデバイスが複数接続されるマルチマスタ構成でＩ２Ｃインターフェースを使用することが多くなっている。マルチマスタ構成は、Ｉ２Ｃインターフェースの仕様上規定された構成ではあるが、各マスタデバイスが独自のタイミングで転送処理を開始するため、転送処理の開始タイミングが重なった場合にバスの競合が発生する。このとき、調停の仕様に従って、１つのマスタデバイスのみがバス権を獲得して転送処理を続行し、残りのマスタデバイスは転送処理を中断する。しかしながらこの調停の仕様では、バス権の獲得のみが規定されており、バス権を獲得できなかったマスタに対して次のバス権獲得が保証されるものではない。次に転送処理を開始した時においても競合が発生し、再度、バス権が獲得できない場合も起こりうる。即ち、長期にわたりバス権を獲得できずに転送処理を実行できないという場合も考えられる。
【０００５】
現状の仕様では、バス権を獲得できなかったマスタは、一定時間待ってから転送処理を再度開始することにより、バス権を獲得して転送処理を完遂できるまで、何度も転送処理を試みる。この方法では、所望の時間内に確実にバス権を獲得できる保証は無く、決められた時間内でアクセスを完了させる必要があるシステムにおいては、無理が生じることになる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開昭６０−９１７４３号公報
【特許文献２】特開２０１３−１７５１２８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
以上を鑑みると、バス権獲得を保証する仕組みを提供することが望まれる。
【課題を解決するための手段】
【０００８】
正の電源電圧にプルアップされるクロックラインとデータラインとにオープンドレイン又はオープンコレクタで接続される第１のデバイスのバス制御回路は、データ転送のためのバス権獲得に失敗した場合に、前記クロックラインをローに保持することにより、他のデバイスによる現在の転送処理を一時的に停止しつつ前記第１のデバイスの識別データを前記データラインに出力する出力制御回路と、前記第１のデバイス又は他のデバイスにより前記クロックラインがローに保持されて現在の転送処理が一時的に停止している期間に前記データラインに現れた第１のデータを読み込んで格納するメモリ回路とを含み、前記出力制御回路は、前記メモリ回路に格納される前記第１のデータが前記識別データと異なる場合、現在の転送処理の終了後、他のデバイスによる転送処理が実行されるのを待つ。
【０００９】
正の電源電圧にプルアップされるクロックラインとデータラインとにオープンドレイン又はオープンコレクタで接続される複数のデバイスによるバスアクセスを制御するバス制御方法は、前記複数のデバイスのうちの第１のデバイスと第２のデバイスとを含む少なくとも２つのデバイスが転送処理を同時に開始して前記第１のデバイスがバス権を獲得した場合、前記第１のデバイスが転送処理を続行し、且つ前記第２のデバイスが転送処理を中断し、前記第２のデバイスが前記クロックラインをローに保持することにより、前記第１のデバイスにより実行されている現在の転送処理を一時的に停止しつつ前記第２のデバイスの識別データを前記データラインに出力し、前記複数のデバイスのうち前記第２のデバイス以外のデバイスは、前記クロックラインがローに保持されている間に前記データラインに現れた前記識別データを読み込んで認識すると、前記第１のデバイスによる現在の転送処理が終了した後に、前記第２のデバイスによる転送処理が実行されるのを待つ各段階を含む。
【発明の効果】
【００１０】
少なくとも１つの実施例によれば、バス権獲得を保証する仕組みを提供することができる。
【図面の簡単な説明】
【００１１】
【図１】バスシステムの構成の一例を示す図である。
【図２】図１のバスシステムにおけるバス制御方法の一例を示す図である。
【図３】図１のバスシステムにおけるバス制御方法の別の一例を示す図である。
【図４】Ｉ２Ｃバスの転送処理の開始から終了までにおいてバスラインに出力される信号の一例を示す図である。
【図５】第１のマスタデバイスが出力するクロック信号とデータ信号とを示す図である。
【図６】第２のマスタデバイスが出力するクロック信号とデータ信号とを示す図である。
【図７】図５の第１のマスタデバイスの出力信号と図６の第２のマスタデバイスの出力信号とが競合する際にバスラインに実際に現れる信号を示す図である。
【図８】バス権獲得に失敗したマスタデバイスが実行する予約動作について説明するための図である。
【図９】第１乃至第３のマスタデバイス間でバスの競合が発生した場合の予約動作の一例を示す図である。
【図１０】マスタデバイスのバス制御回路の構成の一例を示す図である。
【図１１】マスタデバイスによる予約動作の一例を示すフローチャートである。
【図１２】ＦＩＦＯに予約登録する処理の一例を示すフローチャートである。
【図１３】転送処理を実行する場合の処理の流れの一例を示すフローチャートである。
【図１４】転送処理における出力信号の一例を示す図である。
【図１５】固定のクロックサイクル位置でバス権の予約動作を実行する場合の転送処理における出力信号の一例を示す図である。
【図１６】固定のクロックサイクル位置でバス権の予約動作を実行する場合に用いられるバス制御回路の構成の一例を示す図である。
【図１７】予約登録の解除動作の一例を示す図である。
【発明を実施するための形態】
【００１２】
以下に、本発明の実施例を添付の図面を用いて詳細に説明する。
【００１３】
図１は、バスシステムの構成の一例を示す図である。図１に示すバスシステムは、クロックライン１０、データライン１１、第１のマスタデバイス１２、第２のマスタデバイス１３、第３のマスタデバイス１４、第１のスレーブデバイス１５、及び第２のスレーブデバイス１６を含む。図１に示すバスシステムは更に、プルアップ抵抗１７及びプルアップ抵抗１８を含む。２本のバスラインであるクロックライン１０及びデータライン１１は、プルアップ抵抗１７及びプルアップ抵抗１８を介して正の電源電圧に接続される。
【００１４】
第１のマスタデバイス１２、第２のマスタデバイス１３、第３のマスタデバイス１４、第１のスレーブデバイス１５、及び第２のスレーブデバイス１６は、クロックライン１０及びデータライン１１にオープンドレイン又はオープンコレクタで接続される。即ち、これらのデバイスは、ワイヤードＡＮＤ（負論理のワイヤードＯＲ）でクロックライン１０及びデータライン１１に接続される。
【００１５】
第１乃至第３のマスタデバイス１２乃至１４は、例えばマイクロコントローラなどの装置である。マスタデバイスは、開始を示す信号をバスラインに出力して転送処理を開始し、転送処理中にクロック信号をクロックライン１０に出力し、終了を示す信号をバスラインに出力して転送処理を終了させる。第１及び第２のスレーブデバイス１５及び１６は、例えばＬＣＤドライバ、メモリ、又はキーボードインターフェース等の装置である。スレーブデバイスは、マスタデバイスによりアドレス指定されるデバイスである。
【００１６】
図１に示すバスは、Ｉ２Ｃバス仕様に従ったバスであってよい。以下の説明において、図１に示すバスがＩ２Ｃバスである場合を例として説明をするが、図１に示すバスが必ずしもＩ２Ｃバス仕様である必要はない。図１に示すバスがＩ２Ｃバス仕様と類似の仕様を有する２線式の双方向バスであり、複数のデバイスがワイヤードＡＮＤでクロックとデータとの２本のバスラインに接続される構成であればよい。以降の説明において、Ｉ２Ｃバスの仕様における表記にしたがって、クロックライン１０をＳＣＬ（シリアルクロックライン）、データライン１１をＳＤＡ（シリアルデータライン）と表記する場合がある。なお第1乃至第3のマスタデバイス１２乃至１４のよるクロックライン１０及びデータライン１１への信号出力は、具体的には、各マスタデバイスの出力制御回路（例えば図８に示すＩ２Ｃ出力制御部４０）により制御される。
【００１７】
図２は、図１のバスシステムにおけるバス制御方法の一例を示す図である。図２に示すバス制御方法では、２つのマスタデバイスが略同時に転送処理の開始を試み、一方のマスタデバイスがバス権を獲得し、バス権の獲得に失敗したもう一方のマスタデバイスが次回の転送処理に関するバス権を予約する動作が示される。
【００１８】
複数のマスタデバイスのうちの第１のマスタデバイス１２と第２のマスタデバイス１３とが転送処理を同時に開始する。具体的には、第１のマスタデバイス１２と第２のマスタデバイス１３とが開始を示す信号をバスラインに出力する（Ｓ１及びＳ２）。Ｉ２Ｃバス仕様に規定される調停に従って、図２に示す例では第１のマスタデバイス１２がバス権を獲得する。バス権を獲得した第１のマスタデバイス１２が転送処理を続行し、且つ第２のマスタデバイス１３が転送処理を中断する。調停の詳細については後ほど説明する。
【００１９】
第２のマスタデバイス１３は、その後、次回の転送処理に関するバス権を予約する（Ｓ３）。具体的には、第２のマスタデバイス１３は、クロックライン１０をローに保持することにより、第１のマスタデバイス１２により実行されている現在の転送処理を一時的に停止しつつ第２のマスタデバイス１３の識別データをデータライン１１に出力する。この予約動作については後ほど詳細に説明する。
【００２０】
バスラインに接続されている全てのマスタデバイスは、上記バス権の予約を検知して受け付ける（Ｓ４）。具体的には、第２のマスタデバイス１３以外のマスタデバイスは、クロックライン１０がローに保持されている間にデータライン１１に現れた識別データを読み込んで認識する。これにより第２のマスタデバイス１３による予約がされたことを認識し、第２のマスタデバイス１３以外のマスタデバイスは、第１のマスタデバイス１２による現在の転送処理が終了した後に、第２のマスタデバイス１３による転送処理が実行されるのを待つ。
【００２１】
第１のマスタデバイス１２は、データ転送が完了すると、終了を示す信号をバスラインに出力し（Ｓ５）、バスラインを開放する。その後、第２のマスタデバイス１３以外のマスタデバイスは、第２のマスタデバイス１３による転送処理が実行されるのを待つ。自らのバス権の予約が有効であることを認識している第２のマスタデバイス１３は、開始を示す信号をバスラインに出力することにより（Ｓ６）、他のマスタデバイスと競合することなくバス権を獲得する。データ転送を実行した後、第２のマスタデバイス１３は、終了を示す信号をバスラインに出力し（Ｓ７）、バスラインを開放する。
【００２２】
図３は、図１のバスシステムにおけるバス制御方法の別の一例を示す図である。図３に示すバス制御方法では、３つのマスタデバイスが略同時に転送処理の開始を試み、１つのマスタデバイスがバス権を獲得し、バス権の獲得に失敗した残りの２つのマスタデバイスが次回の転送処理に関するバス権を予約する動作が示される。
【００２３】
第１乃至第３のマスタデバイス１２乃至１４が転送処理を同時に開始する（Ｓ１１乃至Ｓ１３）。図３に示す例では第１のマスタデバイス１２がバス権を獲得し、転送処理を続行する。第２及び第３のマスタデバイス１３及び１４は、転送処理を中断した後、次回の転送処理に関するバス権の予約を試みる（Ｓ１４及びＳ１５）。具体的な予約動作は図２の場合と同様であり、その詳細は後ほど説明する。
【００２４】
図３に示す例では、第３のマスタデバイス１４がバス権の予約に成功し、第２のマスタデバイス１３はバス権の予約に失敗する。バスラインに接続されている全てのマスタデバイスは、第３のマスタデバイス１４によるバス権の予約を検知して受け付ける（Ｓ１６）。その後、第２のマスタデバイス１３は、バス権の予約に成功する（Ｓ１７）。バスラインに接続されている全てのマスタデバイスは、第２のマスタデバイス１３によるバス権の予約を検知して受け付ける（Ｓ１８）。
【００２５】
第１のマスタデバイス１２は、データ転送が完了すると、終了を示す信号をバスラインに出力し（Ｓ１９）、バスラインを開放する。その後、第１番目の予約に成功した第３のマスタデバイス１４以外のマスタデバイスは、第３のマスタデバイス１４による転送処理が実行されるのを待つ。自らのバス権の予約が第１番目であることを認識している第３のマスタデバイス１４は、開始を示す信号をバスラインに出力することにより（Ｓ２０）、他のマスタデバイスと競合することなくバス権を獲得する。データ転送を実行した後、第３のマスタデバイス１４は、終了を示す信号をバスラインに出力し（Ｓ２１）、バスラインを開放する。
【００２６】
その後、第２番目の予約に成功した第２のマスタデバイス１３以外のマスタデバイスは、第２のマスタデバイス１３による転送処理が実行されるのを待つ。自らのバス権の予約が第２番目であることを認識している第２のマスタデバイス１３は、開始を示す信号をバスラインに出力することにより（Ｓ２２）、他のマスタデバイスと競合することなくバス権を獲得する。データ転送を実行した後、第２のマスタデバイス１３は、終了を示す信号をバスラインに出力し（Ｓ２３）、バスラインを開放する。
【００２７】
以上のように、各マスタデバイスは、バス権の獲得に失敗した場合であっても、バス権を予約することにより、確実に転送処理を実行することができる。バス権の予約時に競合してバス権の予約に失敗しても、繰り返しバス権の予約を試みることにより、最終的にはバス権を予約することができる。したがって、バスに３個以上のデバイスが接続されている構成においても、確実に転送処理を実行することができる。
【００２８】
図４は、Ｉ２Ｃバスの転送処理の開始から終了までにおいてバスラインに出力される信号の一例を示す図である。図４の（ａ）ＳＣＬ（シリアルクロックライン）にはクロックライン１０の信号が示され、（ｂ）ＳＤＡ（シリアルデータライン）にはデータライン１１の信号が示される。
【００２９】
バスマスタは、まずクロックライン１０がハイ（論理１）である状態において、データライン１１をハイ（論理１）からロー（論理０）に変化させるスタートビットＳｔａｒｔを送出し、転送処理を開始する。このスタートビットが、転送処理の開始として他のデバイスに認識される。転送処理の開始後、当該バスマスタはクロック信号をクロックライン１０に出力する。クロック信号がハイである期間において、データライン１１のデータは安定していることが要求される。データライン１１のデータの変化は、クロック信号がローである期間において行われる。
【００３０】
図４に示されるように第１クロックサイクルから第７クロックサイクルにおいて、マスタデバイスが、７ビットのスレーブアドレスをデータライン１１に出力する。マスタデバイスは、第８クロックサイクルにおいて、データ転送の方向（読み出し又は書き込み）を示すビットＲ／Ｗをデータライン１１に出力する。論理０は書き込みを示し、論理１は読み出しを示す。
【００３１】
第９クロックサイクルにおいては、上記スレーブアドレスにより指定されたスレーブデバイスが、アクノレッジをデータライン１１に出力する。具体的には、第９クロックサイクルのクロックパルスの期間、マスタデバイスがデータライン１１をリリース（開放）し、スレーブデバイスがローを出力する。このロー出力により、スレーブデバイスは、バイト受信の成功と次のバイトを送信して構わないことを通知する。
【００３２】
第１０クロックサイクルから第１７クロックサイクルにおいて、マスタデバイスが、８ビットのアクセスアドレスをデータライン１１に出力する。次の第１８クロックサイクルにおいて、スレーブデバイスが、アクノレッジをデータライン１１に出力する。
【００３３】
第１９クロックサイクルから第２６クロックサイクルにおいて、マスタデバイスが、８ビットの書き込みデータをデータライン１１に出力する。次の第２７クロックサイクルにおいて、スレーブデバイスが、アクノレッジをデータライン１１に出力する。データ読み出しの場合であれば、第１９クロックサイクルから第２６クロックサイクルにおいて、スレーブデバイスが、８ビットの読み出しデータをデータライン１１に出力する。次の第２７クロックサイクルにおいて、マスタデバイスが、アクノレッジをデータライン１１に出力する。
【００３４】
データ転送が終了すると、バスマスタは、クロックライン１０がハイ（論理１）である状態において、データライン１１をロー（論理０）からハイ（論理１）に変化させるストップビットＳｔｏｐを送出し、転送処理を終了する。このストップビットが、転送処理の終了として他のデバイスに認識される。以上で一連の転送処理（トランザクション）が終了する。Ｉ２Ｃバスの仕様では、データライン１１に転送される全てのデータは８ビット長のバイト単位であり、各バイトの直後にはアクノリッジビットが設けられる。一回の転送処理（ＳｔａｒｔからＳｔｏｐ迄）において転送するバイト数に制限はなく、連続して所望の数のバイトを転送することが可能である。
【００３５】
以下に、２つのバスマスタが同時に転送処理を開始した場合の調停について説明する。
【００３６】
図５は、第１のマスタデバイス１２が出力するクロック信号とデータ信号とを示す図である。図６は、第２のマスタデバイス１３が出力するクロック信号とデータ信号とを示す図である。図７は、図５の第１のマスタデバイス１２の出力信号と図６の第２のマスタデバイス１３の出力信号とが競合する際にバスラインに実際に現れる信号を示す図である。各デバイスはオープンドレイン又はオープンコレクタでクロックライン１０とデータライン１１とに接続される。したがって、複数のデバイスが異なる論理値の出力をデータライン１１に同時に出力した場合、データライン１１の値はロー（論理０）となる。即ち、ローを出力するデバイスが、優先的にデータライン１１を制御できることになる。
【００３７】
図５に示されるタイミング図では、（ａ）ＳＣＬには第１のマスタデバイス１２が出力するクロックライン１０の信号が示され、（ｂ）ＳＤＡには第１のマスタデバイス１２が出力するデータライン１１の信号が示される。第１のマスタデバイス１２は、第１クロックサイクルから第７クロックサイクルにおいて、７ビットのスレーブアドレス"１０００１００"をデータライン１１に出力する。
【００３８】
図６に示されるタイミング図では、（ａ）ＳＣＬには第２のマスタデバイス１３が出力するクロックライン１０の信号が示され、（ｂ）ＳＤＡには第２のマスタデバイス１３が出力するデータライン１１の信号が示される。第２のマスタデバイス１３は、第１クロックサイクルから第７クロックサイクルにおいて、７ビットのスレーブアドレス"１００１０００"をデータライン１１に出力しようとする。
【００３９】
ここで、図５に示す転送処理と図６に示す転送処理とが略同時に開始された場合、第１のマスタデバイス１２と第２のマスタデバイス１３との２つのデバイスがクロック信号をクロックライン１０に出力することになる。この場合、Ｉ２Ｃバスの仕様に従って、各マスタデバイスは互いに同期をとるようにクロック信号の出力を制御する。具体的には、全てのマスタデバイスのクロック出力のロー状態が終了するとクロックライン１０がハイに変化するので、このタイミングから各マスタデバイスがクロック信号出力のハイ期間をカウントすることにより、クロックタイミングを制御する。
【００４０】
図５に示す転送処理と図６に示す転送処理とが略同時に開始された場合、第１クロックサイクルから第７クロックサイクルにおいて、データライン１１上において異なるスレーブアドレス同士が衝突することになる。このように複数のデバイスが異なる論理値の出力（ハイ及びロー）をデータライン１１に同時に出力した場合、データライン１１の値はローとなる。即ち、第４クロックサイクルにおける実際のデータライン１１の値は、第１のマスタデバイス１２が出力するロー値となり、第２のマスタデバイス１３が出力するハイ値はデータライン１１に現れない。
【００４１】
図７に示されるタイミング図では、（ａ）ＳＣＬにはクロックライン１０に出現する信号が示され、（ｂ）ＳＤＡにはデータライン１１に出現する信号が示される。図５に示される（ｂ）ＳＤＡの第４クロックサイクルの出力値はローであり、図６に示される（ｂ）ＳＤＡの第４クロックサイクルの出力値はハイである。このとき、図７に示される（ｂ）ＳＤＡの第４クロックサイクルの出現値、即ちＴ１で示されるタイミングでのデータライン１１の値はローとなる。
【００４２】
第２のマスタデバイス１３は、図７に示される（ｂ）ＳＤＡの第４クロックサイクルの出現値ローを検出すると、バス権獲得に失敗したことを認識し、第５クロックサイクル以降のデータライン１１への出力を中断する。第２のマスタデバイス１３は、バス権獲得の失敗が発生したバイトの最後まで、クロックライン１０へのクロック信号出力を継続してよい。第１のマスタデバイス１２は、データライン１１の出現値が自らの出力値と一致し続けるので、クロックライン１０へのクロック出力とデータライン１１へのデータ出力とをそのまま継続する。即ち、第１のマスタデバイス１２はバス権の獲得に成功する。
【００４３】
図８は、バス権獲得に失敗したマスタデバイスが実行する予約動作について説明するための図である。図８の（ａ）ＳＣＬにはクロックライン１０に出現するクロック信号が示される。また図８の（ｂ）ＳＤＡ２には第２のマスタデバイス１３がデータライン１１に出力するデータ信号が示され、（ｃ）ＳＤＡ１には第１のマスタデバイス１２がデータライン１１に出力するデータ信号が示される。
【００４４】
第２のマスタデバイス１３は、データ転送のためのバス権獲得に失敗した場合に、図８の（ａ）ＳＣＬ及び（ｂ）ＳＤＡ２に示される信号出力動作を実行する。即ち、第２のマスタデバイス１３は、クロックライン１０をローに保持することにより、他のデバイスによる現在の転送処理を一時的に停止しつつ、自らの識別データをデータライン１１に出力する。具体的には、第２のマスタデバイス１３は、第７クロックサイクルから第１４クロックサイクルまでクロックライン１０をローに保持することにより、第１のマスタデバイス１２による現在の転送処理を一時的に停止させる。
【００４５】
更に、第２のマスタデバイス１３は、第７クロックサイクルから第１４クロックサイクルに相当するタイミングにおいて、同期パターン"１０１０"と第２のマスタデバイス１３を特定するマスタデバイス認識ＩＤとをデータライン１１に出力する。図８に示す例では、マスタデバイス認識ＩＤは４ビットのデータＩＤ０乃至ＩＤ３である。同期パターンは予め決められた所定のビットパターンであればよく、"１０１０"はそのような所定のビットパターンの一例である。また第１のマスタデバイス１２は、第７クロックサイクルにおいてクロックライン１０がローに保持されたことを認識すると、第７クロックサイクルから第１４クロックサイクルにおいて（ｃ）ＳＤＡ１に示されるようにデータライン１１へのデータ出力を中断する。
【００４６】
上記のようにクロックライン１０を一時的にローを保持する動作は、クロックストレッチとしてＩ２Ｃバスの仕様に定められている。このクロックストレッチでは、クロックライン１０がリリースされるまで転送処理（トランザクション）が中断される。したがってスレーブデバイスは、例えば次のバイト転送の準備ができるまで、転送処理を中断させることができる。
【００４７】
図８に示される例では、第２のマスタデバイス１３が、クロックストレッチにより転送処理を中断し、その間に同期パターンとマスタデバイス認識ＩＤとをデータライン１１に出力する。これにより、第２のマスタデバイス１３は、当該マスタデバイス認識ＩＤにより特定されるマスタデバイスが現在の転送処理の次の転送処理におけるバス権を予約したことを、他の全てのマスタデバイスに対してアナウンスする。アナウンスを受領した他のマスタデバイスは、バス権が予約されたことを認識し、現在の転送処理の終了後自らはバスへの出力を行わず、他のデバイスによる転送処理が実行されるのを待つ。
【００４８】
具体的には、各マスタデバイスは、データライン１１がローに保持されて現在の転送処理が一時的に停止している期間にデータライン１１に現れたマスタデバイス認識ＩＤのデータを読み込んで格納するメモリ回路を含んでよい。このメモリ回路は、例えば図１０に示す予約ＦＩＦＯ部５２である。各マスタデバイスの出力制御回路は、メモリ回路に格納された認識ＩＤのデータが自らのＩＤと異なる場合、現在の転送処理の終了後、他のデバイスによる転送処理が実行されるのを待ってよい。
【００４９】
バス権の予約動作において、他のデバイスにバス権の予約をアナウンスする目的のために前述の同期パターンを必ずしも用いる必要はない。例えば、スレーブデバイスによるクロックストレッチが発生しない筈の特定のクロックサイクルにおいてバス権の予約を実行することを決めておけば、バス権の予約に伴うクロックストレッチをスレーブデバイスによるクロックストレッチと混同することはない。当該所定のクロックサイクルにおいてクロックストレッチが発生した場合、他のデバイスは、バス権の予約動作が実行されていることを認識し、クロックストレッチの期間にデータライン１１に現れたデータをマスタデバイス認識ＩＤとして取り込むことができる。この場合には、同期パターンを用いる必要はない。このように、バス権獲得に失敗した場合にクロックライン１０をローに保持するタイミングは現在の転送処理が開始されたタイミングから所定の時間後のクロックサイクルであると決めておけば、同期パターンを使用しない短期間での迅速な予約動作が可能となる。
【００５０】
それに対し、図８に示すように所定のビットパターン（同期パターン）を用いることにすれば、予約動作を特定のタイミングに限定することなく、確実にマスタデバイスによる予約動作を検出することができる。即ち、クロックストレッチにより現在の転送処理を一時的に停止しつつ所定のビットパターンを有するデータが識別データと共にデータライン１１に出力されると、他のデバイスは、当該所定のパターンを検出することによりバス権予約動作を認識できる。即ち他のマスタデバイスは、クロックストレッチにより現在の転送処理が一時的に停止している期間にデータライン１１に現れたデータの一部が所定のビットパターンである場合に、当該データの一部である認識ＩＤのデータをメモリ回路に格納すればよい。
【００５１】
図９は、図３の場合のように第１乃至第３のマスタデバイス間でバスの競合が発生した場合の予約動作の一例を示す図である。図９の（ａ）ＳＣＬにはクロックライン１０に出現するクロック信号が示される。図９の（ｂ）ＳＤＡ１には第１のマスタデバイス１２がデータライン１１に出力するデータ信号が示される。更に図９の（ｃ）ＳＤＡ３には第３のマスタデバイス１４がデータライン１１に出力するデータ信号が示され、（ｄ）ＳＤＡ２には第２のマスタデバイス１３がデータライン１１に出力するデータ信号が示される。
【００５２】
図９に示される例では、第１乃至第３の第１のマスタデバイス１２乃至１４がほぼ同時に転送処理を開始し、第１のマスタデバイス１２がバス権を獲得した場合が示される。第１のマスタデバイス１２がバス権を獲得してデータバス出力２１を実行している際に、第３のマスタデバイス１４が、期間Ｔ２の間クロックストレッチすることにより転送処理を中断させる。この期間Ｔ２の間に、第３のマスタデバイス１４が、データバス出力２５として示されように、同期パターンとマスタデバイス認識ＩＤとをデータライン１１に出力する。その後、第１のマスタデバイス１２がデータバス出力２２を再開して実行している際に、第２のマスタデバイス１３が、期間Ｔ３の間クロックストレッチすることにより転送処理を中断させる。この期間Ｔ３の間に、第２のマスタデバイス１３が、データバス出力２６として示されるように、同期パターンとマスタデバイス認識ＩＤとをデータライン１１に出力する。
【００５３】
その後第１のマスタデバイス１２はデータバス出力２３を再開して実行し、データ転送を完了して転送処理を終了する。第１のマスタデバイス１２による転送処理終了後、第１番目にバス予約をした第３のマスタデバイス１４が、他のマスタデバイスと競合することなく転送動作を開始して、データ転送動作２４を実行する。
【００５４】
上記説明した動作において、第２のマスタデバイス１３は第３のマスタデバイス１４と同時に期間Ｔ２において同期パターンとマスタデバイス認識ＩＤとのデータライン１１への出力を試みて、バス競合によりバス権を失った状況であってよい。即ち、図５と図６とに示した例においてスレーブアクセスが競合してバス権の制御を失った場合と同様に、同期パターンとマスタデバイス認識ＩＤとが競合して、第２のマスタデバイス１３がバス権の制御を失った状況であってよい。この状況において、第３のマスタデバイス１４によるバス権の予約が期間Ｔ２において成功した後に、期間Ｔ３において第２のマスタデバイス１３がバス権の予約を実行してよい。あるいは第２のマスタデバイス１３は、自らのバス権の予約を開始する前に期間Ｔ２において他のデバイスによるクロックストレッチが開始されたことを検出し、当該検出に応じて、当該クロックストレッチの期間Ｔ２が終了するまで待った状況であってもよい。この場合であっても、第２のマスタデバイス１３は、期間Ｔ２が終了した後に、自らの予約動作を開始することになる。
【００５５】
図９に示されるような順番での予約動作を実現するために、各マスタデバイスのメモリ回路（例えば図１０に示す予約ＦＩＦＯ部５２）は、データライン１１に認識ＩＤのデータが複数回現れると、現れた順番に複数の認識ＩＤのデータを格納可能であってよい。各マスタデバイスは、メモリ回路に格納された複数の認識ＩＤのデータを現在の転送処理が終了する度に格納順に１つずつ読み出し、読み出された１つの認識ＩＤのデータが自らのＩＤと異なる場合、他のデバイスによる転送処理が実行されるのを待ってよい。
【００５６】
上記のように、メモリ回路に複数の認識ＩＤ（マスタデバイス認識ＩＤ）を格納し、格納順に読み出して予約主体のデバイスを認識することにより、図９に示すような複数のマスタデバイスによる順番の予約動作を実現することができる。したがって、予約動作が競合してバス権の予約に失敗した場合や、予約動作が遅れて先に他のマスタデバイスに予約された場合であっても、その後に予約動作を実行することにより、確実に転送処理を実行することが可能となる。
【００５７】
図１０は、マスタデバイスのバス制御回路の構成の一例を示す図である。図１に示す第１乃至第３のマスタデバイス１２乃至１４の各々は、図１０に示す構成のバス制御回路を有してよい。
【００５８】
各ボックスで示される各回路又は機能ブロックと他の回路又は機能ブロックとの境界は、基本的には機能的な境界を示すものであり、物理的な位置の分離、電気的な信号の分離、制御論理的な分離等に対応するとは限らない。各回路又は機能ブロックは、他のブロックと物理的にある程度分離された１つのハードウェアモジュールであってもよいし、或いは他のブロックと物理的に一体となったハードウェアモジュール中の１つの機能を示したものであってもよい。
【００５９】
図１０に示すバス制御回路は、ＳＣＬ監視部３１、ＳＣＬ入力監視部３２、クロックストレッチ検出部３３、スレーブクロックストレッチ部３４、Ｉ２Ｃ入力制御部３５、制御ブロック部３６、ＳＣＬ生成部３８、及びＳＣＬ出力制御部３９を含む。バス制御回路は更に、Ｉ２Ｃ出力制御部４０、ＳＤＡ監視部４１、ＳＤＡ入力監視部４２、競合調停部４３、Ｉ２Ｃアクセス監視部４４、ＳＤＡ生成部４５、ＳＤＡ出力制御部４６、スタートビット検出部４７、及びストップビット検出部４８を含む。バス制御回路は更に、同期パターン検出部４９、ＦＩＦＯ読み出し部５０、マスタＩＤ取得部５１、及び予約ＦＩＦＯ部５２を含む。バス制御回路は更に、入出力バッファ１０１及び１０２を含む。
【００６０】
入出力バッファ１０１を介してクロックライン１０から入力されたクロック信号のハイ又はローが、ＳＣＬ監視部３１により監視される。ＳＣＬ入力監視部３２は、ＳＣＬ監視部３１から通知されたハイ又はローの信号により、クロック信号のハイ又はローを検出する。ＳＣＬ出力制御部３９は、Ｉ２Ｃ出力制御部４０からのＳＣＬ出力制御信号に基づいて、ＳＣＬ生成部３８にオン又はオフの制御信号を供給する。ＳＣＬ生成部３８は、ＳＣＬ出力制御部３９からのオン又はオフの制御信号に応じて入出力バッファ１０１の出力バッファを駆動することにより、クロックライン１０を開放するか又はロー（論理値０）に接続する。
【００６１】
クロックストレッチ検出部３３は、ＳＣＬ出力制御部３９の出力するオン又はオフの制御信号と、ＳＣＬ入力監視部３２が検出したクロックライン１０のクロック信号のハイ又はローとを比較することにより、クロックストレッチの有無を検出する。スレーブクロックストレッチ部３４は、クロックストレッチ検出部３３からの信号と同期パターン検出部４９からの信号とに基づいて、スレーブデバイスによるクロックストレッチの有無を検出する。スレーブクロックストレッチ部３４は、スレーブデバイスによるクロックストレッチを検出すると、Ｉ２Ｃ入力制御部３５とＩ２Ｃ出力制御部４０とにクロックストレッチを通知する。このクロックストレッチの通知に応じて、Ｉ２Ｃ入力制御部３５はデータライン１１からの入力データの取り込みを停止し、Ｉ２Ｃ出力制御部４０はデータライン１１へのデータ出力を停止する。スレーブクロックストレッチ部３４は、同期パターン検出部４９からの信号が同期パターン未検出であることを示す場合に、スレーブデバイスによるクロックストレッチを検出してよい。あるいはスレーブクロックストレッチ部３４は、スレーブデバイスからのクロックストレッチが発生する可能性があるタイミングでクロックストレッチが発生した場合に、スレーブデバイスによるクロックストレッチを検出してよい。
【００６２】
Ｉ２Ｃ入力制御部３５は、Ｉ２Ｃ出力制御部４０が指定するリードタイミングに応じて、データライン１１からの入力データにおけるリードデータ及びアクノリッジビットを取り込む。Ｉ２Ｃ入力制御部３５は、取り込んだリードデータを制御ブロック部３６に送信する。
【００６３】
制御ブロック部３６は、ＣＰＵ等のファームウエアあるいはハードウェアによりクロックライン１０及びデータライン１１のアクセスを制御する。制御ブロック部３６は、所望のデバイスの所望のアドレスに対する読み出し又は書き込み命令をＩ２Ｃ出力制御部４０に送信する。制御ブロック部３６は、Ｉ２Ｃ出力制御部４０からのビジー信号Ｂｕｓｙを監視し、ビジー中は次のアクセス指示を待つ。
【００６４】
入出力バッファ１０２を介してデータライン１１から入力されたデータ信号はＳＤＡ監視部４１によりハイ又はローが監視される。ＳＤＡ入力監視部４２は、ＳＤＡ監視部４１から通知されたハイ又はローの信号により、データ信号のハイ又はローを検出する。ＳＤＡ出力制御部４６は、Ｉ２Ｃ出力制御部４０からのＳＤＡ出力制御信号に基づいて、ＳＤＡ生成部４５にオン又はオフの制御信号を供給する。ＳＤＡ生成部４５は、ＳＤＡ出力制御部４６からのオン又はオフの制御信号に応じて入出力バッファ１０２の出力バッファを駆動することにより、データライン１１を開放するか又はロー（論理値０）に接続する。競合調停部４３は、ＳＤＡ出力制御部４６の出力するオン又はオフの制御信号と、ＳＤＡ入力監視部４２が検出したデータライン１１のデータ信号のハイ又はローとを比較することにより、バス権の獲得の成否を検出する。競合調停部４３は、バス権獲得の成否をＩ２Ｃ出力制御部４０に通知する。バス権獲得に失敗した場合、Ｉ２Ｃ出力制御部４０はクロックライン１０及びデータライン１１への出力を停止する。
【００６５】
Ｉ２Ｃ出力制御部４０は、バス権獲得に失敗した場合に、バス権の予約を行う。即ちＩ２Ｃ出力制御部４０は、クロックライン１０をローに保持することにより他のデバイスによる現在の転送処理を一時的に停止しつつ、自デバイスの識別データをデータライン１１に出力する。この予約動作は、現在の転送処理におけるアクノリッジサイクル及び読み書きデータの転送サイクル以外のクロックサイクルであることが好ましい。このようなタイミングで予約動作を実行することにより、現在転送処理を実行しているマスタデバイスからスレーブデバイスへのアクセスを妨げることなく、スムーズなアクセス動作を保証することができる。
【００６６】
スタートビット検出部４７は、ＳＤＡ入力監視部４２から供給されるデータ信号のハイ又はローの状態に基づいてスタートビットを検出する。ストップビット検出部４８は、ＳＤＡ入力監視部４２から供給されるデータ信号のハイ又はローの状態に基づいてストップビットを検出する。Ｉ２Ｃアクセス監視部４４は、スタートビット検出部４７及びストップビット検出部４８からの検出結果並びにＳＣＬ入力監視部３２からのクロック信号状態を示す信号に基づいて、バスの現在のアクセス状態（転送処理実行中か否か等）を示す検出結果を出力する。Ｉ２Ｃ出力制御部４０は、Ｉ２Ｃアクセス監視部４４の出力する検出結果に基づいてバスの状態を認識し、認識結果に基づいてバスを適宜制御する。
【００６７】
同期パターン検出部４９は、クロックストレッチ検出部３３からのクロックストレッチの有無を示す信号と、ＳＤＡ入力監視部４２からのデータ信号のハイ又はローを示す信号とを受け取る。これらの信号に基づいて、同期パターン検出部４９は、クロックストレッチ期間中に発生した所定の同期パターンを検出する。
【００６８】
マスタＩＤ取得部５１は、同期パターン検出部４９から同期パターン検出を示す信号を受け取ると、ＳＤＡ入力監視部４２からのデータ信号のハイ又はローを示す信号からマスタデバイス認識ＩＤを抽出する。マスタＩＤ取得部５１は、抽出した認識ＩＤを予約ＦＩＦＯ部５２に供給する。
【００６９】
予約ＦＩＦＯ部５２は、自デバイス又は他のデバイスによりクロックライン１０がローに保持されて現在の転送処理が一時的に停止している期間（クロックストレッチの期間）にデータライン１１に現れた認識ＩＤのデータを読み込んで格納する。予約ＦＩＦＯ部５２は、データライン１１に認識ＩＤのデータが複数回現れると、現れた順番に複数の認識ＩＤのデータを格納する。
【００７０】
ＦＩＦＯ読み出し部５０は、スタートビット検出部４７からのスタートビット検出結果及びストップビット検出部４８からのストップビット検出結果に基づいて、予約ＦＩＦＯ部５２からの読み出しを制御する。ＦＩＦＯ読み出し部５０は、予約ＦＩＦＯ部５２に格納されている認識ＩＤが存在する場合、現在の転送処理が終了する度に認識ＩＤを格納順に１つずつ予約ＦＩＦＯ部５２から出力させる。予約ＦＩＦＯ部５２から出力される認識ＩＤはＩ２Ｃ出力制御部４０に読み込まれる。
【００７１】
Ｉ２Ｃ出力制御部４０は、現在の転送処理の終了後に予約ＦＩＦＯ部５２から読み出された認識ＩＤのデータが自デバイスの識別データである場合、予約対象である転送処理を実行する。Ｉ２Ｃ出力制御部４０は、現在の転送処理の終了後に予約ＦＩＦＯ部５２から読み出された認識ＩＤのデータが自デバイスの識別データと異なる場合、他のデバイスによる転送処理が実行されるのを待つ。他デバイスにより転送処理が実行されるのを待っている状態において制御ブロック部３６から転送処理の実行命令を受け取った場合、Ｉ２Ｃ出力制御部４０は、適切なタイミングで予約動作を実行してよい。Ｉ２Ｃ出力制御部４０は、実行を指示された転送処理が完了するまで、制御ブロック部３６に対してビジー信号をアサートする。
【００７２】
図１１は、マスタデバイスによる予約動作の一例を示すフローチャートである。図１１及び以降の図において、フローチャートに記載された各ステップの実行順序は一例にすぎず、本願の意図する技術範囲が、記載された実行順番に限定されるものではない。例えば、Ａステップの次にＢステップが実行されるように本願に説明されていたとしても、Ａステップの次にＢステップを実行することが可能なだけでなく、Ｂステップの次にＡステップを実行することが、物理的且つ論理的に可能である場合がある。この場合、どちらの順番でステップを実行しても、当該フローチャートの処理に影響する全ての結果が同一であるならば、本願に開示の技術の目的のためには、Ｂステップの次にＡステップが実行されてもよいことは自明である。Ａステップの次にＢステップが実行されるように本願に説明されていたとしても、上記のような自明な場合を本願の意図する技術範囲から除外することを意図するものではなく、そのような自明な場合は、当然に本願の意図する技術範囲内に属する。
【００７３】
ステップＳＴ１で、Ｉ２Ｃ出力制御部４０は競合調停部４３を介してデータライン１１を監視する。ステップＳＴ２で、Ｉ２Ｃ出力制御部４０は競合調停部４３を介してデータライン１１からの入力データ値が自アクセスの出力データ値と一致するか否かを判断する。両者が一致する場合、Ｉ２Ｃ出力制御部４０はバス権を獲得したと判断して、実行中の転送処理をそのまま継続する。両者が一致しない場合、処理はステップＳＴ３に進む。
【００７４】
ステップＳＴ３で、Ｉ２Ｃ出力制御部４０は実行中の転送処理を中断し、クロックライン１０及びデータライン１１への出力アクセスを停止する。ステップＳＴ４で、Ｉ２Ｃ出力制御部４０は予約可能タイミングであるか否かを判定する。前述のように、現在転送処理を実行しているマスタデバイスからスレーブデバイスへのアクセスを妨げることのないタイミングにおいて、予約動作が実行される。
【００７５】
ステップＳＴ５で、Ｉ２Ｃ出力制御部４０はクロックストレッチ制御を実行する。即ちＩ２Ｃ出力制御部４０は、クロックライン１０をローに保持することにより現在実行中の転送処理を一時的に中断させる。ステップＳＴ６で、Ｉ２Ｃ出力制御部４０はデータライン１１に同期パターンを出力する。ステップＳＴ７で、Ｉ２Ｃ出力制御部４０は同期パターンに続いてデータライン１１に自デバイスのマスタデバイス認識ＩＤを出力する。
【００７６】
ステップＳＴ８で、Ｉ２Ｃ出力制御部４０は競合調停部４３を介してデータライン１１からの入力データ値が自アクセスの出力データ値と一致するか否かを判断する。両者が一致する場合、ステップＳＴ１１で、Ｉ２Ｃ出力制御部４０はクロックストレッチを終了し、クロックライン１０とデータライン１１とを開放する。以上で予約動作を完了する。
【００７７】
ステップＳＴ８において両者が一致しないと判断された場合、他のデバイスと予約動作が競合してバス権獲得に失敗したことになる。この場合、ステップＳＴ９で、Ｉ２Ｃ出力制御部４０は、クロックライン１０とデータライン１１とを開放する。ステップＳＴ１０で、Ｉ２Ｃ出力制御部４０は、他のマスタデバイスによる予約動作が完了したか否かを判断する。Ｉ２Ｃ出力制御部４０は、他のマスタデバイスによる予約動作が完了するまでステップＳＴ１０の判断を繰り返す。他のマスタデバイスによる予約動作が完了すると、処理はステップＳＴ４に戻り、以降の処理を繰り返す。この以降の処理において、Ｉ２Ｃ出力制御部４０は、クロックライン１０を再度ローに保持することにより、他のデバイスによる現在の転送処理を一時的に停止しつつ自デバイスのマスタデバイス識別ＩＤをデータライン１１に出力することになる。これにより、バス権を予約する処理において競合が発生してバス権獲得に失敗しても、後ほどバス権予約処理を再度実行することで、確実に転送処理を実行できることになる。
【００７８】
図１２は、ＦＩＦＯに予約登録する処理の一例を示すフローチャートである。
【００７９】
ステップＳＴ２１で、クロックストレッチ検出部３３はクロックライン１０を監視する。ステップＳＴ２２で、クロックストレッチ検出部３３がクロックストレッチ状態の有無を検出する。クロックストレッチが検出されない場合は通常の処理を続行する。当該通常の処理において、転送処理を実行する必要があるのであれば、通常の転送処理を実行する。クロックストレッチ状態を検出するまでステップＳＴ２２の判定を繰り返してもよい。クロックストレッチが検出された場合、処理はステップＳＴ２３に進む。
【００８０】
ステップＳＴ２３で、同期パターン検出部４９が同期パターンを検出すると、処理はステップＳＴ２４に進む。同期パターンが検出されない場合、処理はステップＳＴ２１に戻る。
【００８１】
ステップＳＴ２４で、マスタＩＤ取得部５１はデータライン１１の入力データからマスタデバイス認識ＩＤを取得する。ステップＳＴ２５で、予約ＦＩＦＯ部５２はマスタデバイス認識ＩＤを格納する。以上で予約登録処理を終了する。
【００８２】
図１３は、転送処理を実行する場合の処理の流れの一例を示すフローチャートである。図１３に示す処理は、Ｉ２Ｃ出力制御部４０が制御ブロック部３６から転送処理の実行を指示された場合に実行されてよい。
【００８３】
ステップＳＴ３１で、Ｉ２Ｃ出力制御部４０はＩ２Ｃアクセス監視部４４を介して、クロックライン１０とデータライン１１とが開放されているか否かを判断する。具体的には、Ｉ２Ｃアクセス監視部４４がスタートビットとストップビットとを監視することにより、現在実行中の転送処理が存在しないか否かを判断する。バスラインが開放されていない場合、即ち現在実行中の転送処理が存在する場合、Ｉ２Ｃ出力制御部４０はステップＳＴ３１の判断を繰り返す。バスラインが開放されている場合、即ち転送処理が終了して現在実行中の転送処理が存在しない場合、処理はステップＳＴ３２に進む。
【００８４】
ステップＳＴ３２で、ＦＩＦＯ読み出し部５０は、予約ＦＩＦＯ部５２に登録されているアクセス予約があるか否かを判断する。即ちＦＩＦＯ読み出し部５０は、予約ＦＩＦＯ部５２に格納されているマスタデバイス認識ＩＤが存在するか否かを判定する。アクセス予約が存在しない場合、Ｉ２Ｃ出力制御部４０は、予約ＦＩＦＯ部５２からマスタデバイス認識ＩＤを受信することはなく、通常通りに転送処理を開始して実行する。
【００８５】
アクセス予約が存在する場合、ステップＳＴ３３で、ＦＩＦＯ読み出し部５０は、格納されてるマスタデバイス認識ＩＤの中で最初に格納されたマスタデバイス認識ＩＤを予約ＦＩＦＯ部５２から出力される。出力されたマスタデバイス認識ＩＤはＩ２Ｃ出力制御部４０に読み込まれる。
【００８６】
ステップＳＴ３４で、Ｉ２Ｃ出力制御部４０は、予約ＦＩＦＯ部５２から読み出されたマスタデバイス認識ＩＤが自デバイスの認識ＩＤと一致するか否かを判断する。両者が一致する場合、Ｉ２Ｃ出力制御部４０は転送処理を開始して実行する。両者が一致しない場合、Ｉ２Ｃ出力制御部４０は、自らは転送処理を実行せずに他のマスタデバイスにより転送処理が実行されるのを待つ。その後処理はステップＳＴ１に戻り、Ｉ２Ｃ出力制御部４０はバスが開放されるのを待つ。
【００８７】
ここまで説明した実施例では、バス予約動作において所定のビットパターンを同期パターンとしてデータライン１１に出力する構成について説明した。しかしながら前述のように、予約動作において必ずしも同期パターンを使用する必要はない。以下において、同期パターンを用いない実施例について説明する。
【００８８】
図１４は、転送処理における出力信号の一例を示す図である。図１４の（ａ）ＳＣＬ（シリアルクロックライン）にはクロックライン１０の信号が示され、（ｂ）ＳＤＡ（シリアルデータライン）にはデータライン１１の信号が示される。
【００８９】
典型的な転送処理においては、第１クロックサイクルから第７クロックサイクルにおいて、７ビットのスレーブアドレスＤＥＶ＿ＡＤＤ６乃至ＤＥＶ＿ＡＤＤ０がデータライン１１に出力される。次の第８クロックサイクルにおいて、データ転送の方向を示すビットＲ／Ｗがデータライン１１に出力され、更に第９クロックサイクルにおいて、アクノレッジがデータライン１１に出力される。
【００９０】
第１０クロックサイクルから第１７クロックサイクルにおいて、８ビットのアクセスアドレスＡＣＣ＿ＡＤＤ７乃至ＡＣＣ＿ＡＤＤ０がデータライン１１に出力される。次の第１８クロックサイクルにおいて、アクノレッジがデータライン１１に出力される。
【００９１】
第１９クロックサイクルから第２６クロックサイクルにおいて、８ビットの書き込みデータＷＲ＿ＤＴ７乃至ＷＲ＿ＤＴ０がデータライン１１に出力される。次の第２７クロックサイクルにおいて、アクノレッジがデータライン１１に出力される。
【００９２】
図１４に示すような典型的な転送処理において、例えば第１７クロックサイクル、即ちアクセスアドレスの最後の１ビットの位置において、予約動作を開始するように決めておいてよい。
【００９３】
図１５は、固定のクロックサイクル位置でバス権の予約動作を実行する場合の転送処理における出力信号の一例を示す図である。図１５の（ａ）ＳＣＬ１には、転送処理を実行しているマスタデバイスからクロックライン１０に出力する信号が示され、（ｂ）ＳＤＡ１には、転送処理を実行しているマスタデバイスからデータライン１１に出力する信号が示される。（ｃ）ＳＤＡ２には、予約処理を実行するマスタデバイスからデータライン１１に出力する信号が示され、（ｄ）ＳＣＬ２には、予約処理を実行するマスタデバイスからクロックライン１０に出力する信号が示される。
【００９４】
図１５に示されるように、第１７クロックサイクルから第２０クロックサイクルに相当する時間位置において、予約処理を実行するマスタデバイスがクロックライン１０にローを出力することによりクロックストレッチを行う。このクロックストレッチの期間において、予約処理を実行するマスタデバイスは、当該デバイスのマスタデバイス認識ＩＤである４ビットデータＩＤ３乃至ＩＤ０をデータライン１１に出力する。
【００９５】
このように予め決められた固定のタイミングで予約動作を実行することにより、同期パターンを用いる必要は無くなり、予約動作に必要なクロックサイクル数がマスタデバイス認識ＩＤのビット数と等しくなる。即ち、短い期間で予約動作を終了することが可能となり、現在実行中の転送処理を中断している期間を短くして、転送処理を実行中のマスタデバイスに対する影響を最小限に留めることが可能となる。
【００９６】
なお上記の例のように予約動作を固定のタイミングに制限するだけでなく、予約動作実行のための専用の期間が常時存在するように、転送動作を規定してしまうことも可能である。例えば、スレーブアドレス転送とアクセスアドレス転送との間において、４クロックサイクルに相当する期間を予約動作専用に割り当ててしまうことが可能である。この場合、予約を行うマスタデバイスが１つもないのであれば、当該予約動作専用の期間は何もデータが現れない期間として時間が経過する。予約を行うマスタデバイスが１つもない場合、データライン１１は４ビットのハイデータとなるので、各マスタデバイス認識ＩＤとしては"１１１１"以外のデータを割り当てるようにすればよい。
【００９７】
図１６は、固定のクロックサイクル位置でバス権の予約動作を実行する場合に用いられるバス制御回路の構成の一例を示す図である。図１６に示すバス制御回路では、図１０に示す同期パターン検出部４９が設けられていない。またスレーブクロックストレッチ部３４と、Ｉ２Ｃアクセス監視部４４と、マスタＩＤ取得部５１とが、スレーブクロックストレッチ部３４Ａと、Ｉ２Ｃアクセス監視部４４Ａと、マスタＩＤ取得部５１Ａとによりそれぞれ置き換えられている。それ以外の構成は、図１６に示すバス制御回路と図１０に示すバス制御回路とで同一である。
【００９８】
スレーブクロックストレッチ部３４Ａは、クロックストレッチ検出部３３からの信号に基づいて、スレーブデバイスによるクロックストレッチの有無を検出する。スレーブクロックストレッチ部３４Ａは、予約動作用の固定のクロックサイクル位置（例えば図１４に示す第１６クロックサイクル）以外でクロックストレッチが発生した場合に、スレーブデバイスによるクロックストレッチを検出してよい。
【００９９】
Ｉ２Ｃアクセス監視部４４Ａは、スタートビット検出部４７及びストップビット検出部４８からの検出結果並びにＳＣＬ入力監視部３２からのクロック信号状態を示す信号に基づいて、バスの現在のアクセス状態を示す検出結果を出力する。Ｉ２Ｃアクセス監視部４４Ａは、スタートビット検出から所定数のクロックサイクル後にクロック信号のロー固定が検出されると、マスタＩＤ取得部５１Ａに対して予約用認識ＩＤ出力タイミングであることを通知する信号を供給する。
【０１００】
マスタＩＤ取得部５１Ａは、Ｉ２Ｃアクセス監視部４４Ａから予約用認識ＩＤ出力タイミングであることを通知する信号を受け取ると、ＳＤＡ入力監視部４２からのデータ信号のハイ又はローを示す信号からマスタデバイス認識ＩＤを抽出する。マスタＩＤ取得部５１Ａは、抽出した認識ＩＤを予約ＦＩＦＯ部５２に供給し格納する。これにより、固定のタイミングでデータライン１１に現れたマスタデバイス認識ＩＤを予約ＦＩＦＯ部５２に格納することができる。
【０１０１】
図１６に示すバス制御回路が予約動作を実行する側である場合には、Ｉ２Ｃ出力制御部４０が、Ｉ２Ｃアクセス監視部４４Ａからバスが転送処理中の状態に置かれたことを通知されてから所定のクロックサイクル後に、予約動作を実行するようにすればよい。即ち、Ｉ２Ｃ出力制御部４０は、他のマスタデバイスによる転送処理が開始されてから所定のクロックサイクル後（例えば図１４に示す第１６クロックサイクルに）、予約動作を実行すればよい。
【０１０２】
図１７は、予約登録の解除動作の一例を示す図である。バス権を予約する処理を行ったマスタデバイスが、その後転送処理を実行する必要が無くなる場合が有り得る。その場合、当該マスタデバイスにより転送処理が実行されるのを当該マスタデバイスは待ち続けるため、各マスタデバイスがバスにアクセスできない状態が継続する可能性がある。したがって、バス権を予約する処理を行ったマスタデバイスが、その後転送処理を実行する必要が無くなったばあい、登録済みの予約を解除することが好ましい。
【０１０３】
図１７に示す例では、予約処理を実行したマスタデバイスが、スタートビットＳｔａｒｔを送出して転送処理を開始する。マスタデバイスは、その後７ビットのスレーブアドレス、１ビットのＲ／Ｗ信号、及び１ビットのアクノレッジを通常であれば送出する期間においてデータライン１１を開放したままとする。マスタデバイスは、その後アクセスアドレスの指定や読み書きデータの転送をすることなく再度スタートビットＳｔａｒｔを送出し、１クロックサイクルのみデータライン１１がローである状態を見せてから、ストップビットＥｎｄを送出する。ここで２つ目のスタートビットを送出する理由は、データライン１１を一旦ローにして、その後クロックライン１０がハイの間にデータライン１１をハイに変化させて転送処理を終了させることにより、予期せぬモードに固定されることを防ぐためである。
【０１０４】
このように識別データをデータライン１１に出力した後に転送処理の必要が無くなった場合、現在の転送処理の終了後、マスタデバイスは転送処理の開始及び終了を示す信号を実際のデータを転送することなくデータライン１１に出力してよい。これにより、他のデバイスには転送処理が完了したように見せかけて、他のデバイスが予約対象の転送処理の実行を待ち続ける状態を解除することができる。
【０１０５】
以上、本発明を実施例に基づいて説明したが、本発明は上記実施例に限定されるものではなく、特許請求の範囲に記載の範囲内で様々な変形が可能である。
【符号の説明】
【０１０６】
１０  クロックライン
１１  データライン
１２  第１のマスタデバイス
１３  第２のマスタデバイス
１４  第３のマスタデバイス
１５  第１のスレーブデバイス
１６  第２のスレーブデバイス
１７  プルアップ抵抗
１８  プルアップ抵抗
３１  ＳＣＬ監視部
３２  ＳＣＬ入力監視部
３３  クロックストレッチ検出部
３４  スレーブクロックストレッチ部
３５  Ｉ２Ｃ入力制御部
３６  制御ブロック部
３８  ＳＣＬ生成部
３９  ＳＣＬ出力制御部
４０  Ｉ２Ｃ出力制御部
４１  ＳＤＡ監視部
４２  ＳＤＡ入力監視部
４３  競合調停部
４４  Ｉ２Ｃアクセス監視部
４５  ＳＤＡ生成部
４６  ＳＤＡ出力制御部
４７  スタートビット検出部
４８  ストップビット検出部
４９  同期パターン検出部
５０  ＦＩＦＯ読み出し部
５１  マスタＩＤ取得部
５２  予約ＦＩＦＯ部
１０１，１０２  入出力バッファ
【図１】
2019211817.tif 000003
【図２】
2019211817.tif 000004
【図３】
2019211817.tif 000005
【図４】
2019211817.tif 000006
【図５】
2019211817.tif 000007
【図６】
2019211817.tif 000008
【図７】
2019211817.tif 000009
【図８】
2019211817.tif 000010
【図９】
2019211817.tif 000011
【図１０】
2019211817.tif 000012
【図１１】
2019211817.tif 000013
【図１２】
2019211817.tif 000014
【図１３】
2019211817.tif 000015
【図１４】
2019211817.tif 000016
【図１５】
2019211817.tif 000017
【図１６】
2019211817.tif 000018
【図１７】
2019211817.tif 000019