(58)【調査した分野】(Int.Cl.,DB名)
前記第2のマスターがスレーブデバイスにアクセスすることを意図していることを示している場合には、第1のマスターはバスの使用を試みないし、前記第1のマスターがスレーブデバイスにアクセスすることを意図していることを示している場合には、第2のマスターはバスの使用を試みないことを特徴とする請求項1に記載の装置。
各マスターは、他のマスターの介入なしでバスマスターになる連続する複数の時間、そのそれぞれのI/Oライン上の信号をアサートしてバスマスターになるように適合されていることを特徴とする請求項1に記載の装置。
前記第1のマスターは、第2のマスターに信号を送ってバスマスターにならないようにするように適合されていて、前記第1のマスターは、スレーブデバイスとの中断されないリードモディファイライト処理を実行するように更に適合されていることを特徴とする請求項1に記載の装置。
前記スレーブデバイスに接続されたI/Oラインは、スレーブデバイスに、どのマスターがスレーブデバイスにアクセスしているかを示すように適合されていることを特徴とする請求項1に記載の装置。
各マスターは、他のマスターの介入なしでバスマスターになる連続する複数の時間、そのそれぞれのI/Oライン上の信号をアサートしてバスマスターになるように適合されていることを特徴とする請求項8に記載のシステム。
各マスターは、他の全てのマスターに信号を送ってバスマスターにならないようにするように適合されていて、少なくとも1つのマスターは、スレーブデバイスとの中断されないリードモディファイライト処理を実行するように更に適合されていることを特徴とする請求項8に記載のシステム。
前記第2のマスターがスレーブデバイスにアクセスすることを意図していることを示している場合には、第1のマスターはバスの使用を試みないし、前記第1のマスターがスレーブデバイスにアクセスすることを意図していることを示している場合には、第2のマスターはバスの使用を試みないことを特徴とする請求項15に記載の方法。
前記スレーブデバイスにアクセスすることを意図していることを示すために、各マスターのそれぞれのI/Oライン上の信号をアサートするステップを更に有していることを特徴とする請求項15に記載の方法。
【発明を実施するための形態】
【0010】
本発明の実施形態は、スレーブデバイスとの他のマスターによるいかなる介入処理もなしで、I
2Cバス上でのスレーブデバイスとの複数の、中断されない処理を実行することを可能にする、改良されたI
2Cマルチマスターバス排他(exclusion)方法および装置を提供する。標準I
2C仕様は、スレーブデバイスとの単一の処理の前に複数のマスターのうちの1つがI
2Cバスの制御を得るためのアービトレーション方法を提供するが、例えば、リードモディファイライト(read-modify-write)処理のような中断されない複数の処理のシーケンスを完了するために、マスターが排他的(exclusive)制御を維持することを可能にするいかなる手段も提供しない。本発明は、マスター(例えば、マイクロコントローラ)が、他のマスターによるスレーブに対するアクセスの競合なしで、複数の連続する処理のためにスレーブデバイス(例えば、メモリ)に対する排他的アクセスを保持することを可能にする。ここで用いた用語「単一の処理」は、スタート(START)マーカーとストップ(STOP)マーカーの間の単一の読み出し命令、単一の書き込み命令、または単一の複合フォーマット命令(これは、2つの読み出し、2つの書き込み、または1つの読み出し及び1つの書き込みに限られる)を意味することに注意されたい。
【0011】
従来のI
2Cは、抵抗によってプルアップされる、2本の双方向オープンドレインライン、シリアルデータライン(SDA)およびシリアルクロック(SCL)のみを使用する。他の電圧を有するシステムも可能であるが、使用される典型的な電圧は+5Vまたは+3.3Vである。
【0012】
I
2C基準設計は、7ビットまたは10ビット(使用するデバイスによる)のアドレス空間を有する。一般的なI
2Cバス速度は、100kbit/s標準モードおよび10kbit/s低速モードであるが、任意の低クロック周波数も許容される。I
2Cの最近の改訂は、より多くのノードのホストを務めることができ、かつより速い速度で動作することができる(例えば、400kbit/sファストモード、1Mbit/sファストモードプラス又はFm+、および3.4Mbit/s高速モード)。これらの速度は、PCより組み込みシステムに、より広く用いられる。利用可能な他の特徴、例えば16ビットアドレス指定もある。
【0013】
ビットレートは、クロックストレッチング(clock stretching)または他のハードウェアオーバーヘッドなしで、マスターとスレーブの間の処理に対して提示されることに注意されたい。プロトコルオーバーヘッドは、バイト当たりのACK/NACKビットに加えて、スレーブデバイス内のスレーブアドレスおよびおそらくはレジスタアドレスを含む。このように、ユーザーデータの実際の転送レートは、ピークビットレートのみが意味するものより低い。例えば、スレーブとの各インタラクション(interaction)が、非効率的に、1バイトのデータのみが転送されることを許可する場合には、データレートはピークビットレートの半分より小さい。
【0014】
ノードの最大数はアドレス空間によって制限され、更に400pFの全体のバスキャパシタンスによって制限される。それは実質的な通信距離を2、3メートルに制限する。
【0015】
基準設計は、7ビットアドレス指定のクロック(SCL)およびデータ(SDA)ラインを有するバスである。バスは、ノードに対して2つの役割を有する:マスターおよびスレーブ。マスターノードは、クロックを生成して、スレーブとの通信を開始するノードである。スレーブノードは、マスターによってアドレス指定された時に、クロックを受信して応答するノードである。
【0016】
バスはマルチマスターバスであり、これは任意の数のマスターノードが存在し得ることを意味する。加えて、マスターとスレーブの役割は、メッセージ間で(例えば、ストップが送信された後で)変わり得る。ほとんどのデバイスは単一の役割およびその2つのモードを用いるだけであるが、与えられたバスデバイスに対して4つの潜在的動作モードがある。モードは、マスター送信、マスター受信、スレーブ送信、およびスレーブ受信を含む。マスター送信モードにおいては、マスターノードはスレーブにデータを送信している。マスター受信モードにおいては、マスターノードはスレーブからデータを受信している。スレーブ送信モードにおいては、スレーブノードはマスターにデータを送信していて、スレーブ受信モードにおいては、スレーブノードはマスターからデータを受信している。
【0017】
マスターは、最初は、スタートビットを送信することによってマスター送信モードの状態にあり、スタートビットの後には、通信することを望むスレーブの7ビットアドレスが続く。最後に、スレーブへの書き込み(0)を望むのか、またはスレーブからの読み出し(1)を望むのかを表す単一のビットが続く。
【0018】
スレーブがバス上に存在する場合には、それはそのアドレスに対するACKビット(アクノリッジのためのアクティブロー)で応答する。そしてマスターは、(それが送信した読み出し/書き込みビットに従って)送信または受信モードにとどまり、スレーブは、その補完的なモード(それぞれ受信または送信)にとどまる。
【0019】
アドレスおよびデータバイトは、最初に最上位ビットが送信される。スタートビットは、SCLがハイの時のSDAのハイからローへの移行によって示される。ストップビットは、SCLがハイの時のSDAのローからハイへの移行によって示される。SDAの他の全ての移行は、SCLがローの時に行われる。
【0020】
マスターがスレーブに書き込みをしたい場合には、それはACKビットを送信するスレーブに1バイトを繰り返し送信する。(この状況では、マスターはマスター送信モードにあり、スレーブはスレーブ受信モードにある。)
【0021】
マスターがスレーブから読み出しをしたい場合には、それはスレーブから1バイトを繰り返し受信し、マスターは最後のもの以外の全てのバイトの後にACKビットを送信する。(この状況では、マスターはマスター受信モードにあり、スレーブはスレーブ送信モードにある。)
【0022】
そしてマスターは、ストップビットによって送信を終了するか、または、それがもう1つの転送(「複合メッセージ」)のためにバスの制御を保持することを望むのであれば、それはもう1つのスタートビットを送信することができる。
【0023】
I
2Cはメッセージの基本型を規定し、その各々はスタートマーカーによって開始し、ストップマーカーによって終了する。これらのメッセージ型は、マスターがデータをスレーブに書き込む単一のメッセージ、マスターがスレーブからデータを読み出す単一のメッセージ、およびマスターが多くても2つの読み出し及び/又は書き込みを1つ以上のスレーブに発行する複合メッセージを含む。
【0024】
複合メッセージにおいて、各読み出し又は書き込みは、スタートマーカーおよびスレーブアドレスによって開始する。複合メッセージ内の最初のスタートマーカーの後、これらは反復スタートビットとも呼ばれる。反復スタートビットは、ストップビットの後にはなく、これは、スレーブが、次の転送が同じメッセージの一部であることを知る方法である。従来、複合メッセージは、スタートとストップのマーカー間の、2つの読み出し、2つの書き込み、または1つの読み出し及び1つの書き込み(いずれの順序でもよい)に限られる。このように、複合フォーマットを用いる単一の処理の間に、最高で2つの命令が、スタートとストップのマーカー間に送信され得る。
【0025】
その製品ドキュメンテーションによって定義されるように、いかなる所与のスレーブも特定のメッセージに応答するだけである。I
2Cシステムは、任意の(arbitrary)メッセージ構造をサポートする。ほんの少しの例外はあるが、I
2C仕様は、メッセージのセマンティックス、例えばメッセージ内のデータバイトの意味を規定していない。さもなければ、メッセージのセマンティックスは、製品固有のものである。これらの例外は、I
2Cの通常呼び出しアドレス(0x00)にアドレス指定されるメッセージを含む。
【0026】
実際には、大部分のスレーブは、要求/応答制御モデルを採用していて、書き込み命令に続く1つ以上のバイトは、命令またはアドレスとして扱われる。これらのバイトは、次の書き込まれるバイトが扱われる方法および/またはスレーブが次の読み出しに応答する方法を決定する。大部分のI
2C動作は、単一のバイト命令を含む。
【0027】
物理層において、SCLおよびSDAラインはオープンドレイン設計であるので、プルアップ抵抗が必要である。ラインをフロートにすることは論理1である一方で、ラインをグラウンドへ引き下げることは論理0と考えられる。これがチャネルアクセス方法として用いられる。高速システム(及びいくつかの他のもの)は、さらに、少なくともSCLに電流源プルアップを追加する。これは、より高いバスキャパシタンスに適応して、より速い立ち上がり時間を可能にする。
【0028】
これの重要な結果は、複数のノードが同時にラインを駆動していることができるということである。任意のノードがラインをローに駆動している場合、それはローであろう。論理1を送信(すなわち、ラインをフロートハイに)しようとしているノードは、これを見ることができ、これにより、もう1つのノードが同時にアクティブであることを知る。
【0029】
SCL上で用いられる時、これはクロックストレッチングと呼ばれ、スレーブにフロー制御メカニズムを与える。SDA上で用いられる時、これはアービトレーションと呼ばれ、一度に1つの送信器のみが存在することを保証する。
【0030】
アイドル(idle)の時、両方のラインはハイである。処理を開始するために、SCLがハイのままである間にSDAがローに引き下げられる。SDAを解放して再びフロートハイにすることはストップマーカーであり、バス処理の終了の信号を送ることである。合法ではあるが、これはスタートの直後では通常は無意味であるので、次のステップはSCLをローに引き下げることである。
【0031】
スタートおよびストップ信号を除いて、SDAラインはクロックがローの間に変化するのみである。データビットを送信することは、データラインを所望のレベルで安定した状態に保つと共に、クロックラインにハイのパルスを送ること(pulsing)から成る。
【0032】
SCLがローの間、送信器(最初はマスター)はSDAを所望の値にセットし、(値を伝搬させるための小さな遅延の後に)SCLをフロートハイにする。そしてマスターは、SCLが実際にハイになるのを待つ。これは、SCL信号の有限の立ち上り時間(プルアップ抵抗およびバスの寄生キャパシタンスのRC時定数)によって遅延され、スレーブのクロックストレッチングによって更に遅延され得る。
【0033】
一旦SCLがハイになると、マスターは最小限の時間(例えば、標準速度のI
2Cに対しては4μs)待ち、受信器がこのビットを見ることを確実にして、それを再びローに引き下げる。これで1ビットの送信を完了する。
【0034】
一方向への毎8データビットの後に、「アクノリッジ(acknowledge)」ビットが他方向に送信される。送信器と受信器は、1ビットの間に役割を切り替え、かつての受信器は、単一の0のビット(ACK)を返送する。そうではなく送信器が1のビット(NACK)を見る場合には、それはスレーブがデータを受け入れることができないことを知る。その理由は、例えば、このようなスレーブが存在しない、命令が理解されなかった、または、マスターがスレーブに送信している時に、受信器がこれ以上のデータを受け入れることができない、などである。スレーブがマスターに送信していて、NACKが返されてスレーブによって受信される場合には、これは、マスターが現在のデータバイトの後にストップへの移転を望んでいることを示している。
【0035】
アクノリッジビットの後に、マスターは、3つのことのうちの1つをすることができる:(1)他のデータのバイトを転送する準備をする:送信器はSDAをセットし、マスターはSCLにハイのパルスを送る;(2)「ストップ」を送信する:SDAをローにセットし、SCLをハイに変化させ、そしてSDAをハイに変化させ、これはI
2Cバスを解放する;または(3)「反復スタート」を送信する:SDAをハイにセットし、SCLをハイに変化させ、そしてSDAを再びローに引き下げる。これは、バスを解放することなく、新しいI
2Cバス処理を開始する。
【0036】
I
2Cプロトコルのより重要な特徴の1つは、クロックストレッチングである。アドレス指定されたスレーブデバイスは、1バイトを受信(または送信)した後に、クロックライン(SCL)をローに保持することができ、それは、まだ、更なるデータを処理する準備ができていないことを示している。スレーブと通信しているマスターは、現在のビットの送信を終えることができず、クロックラインが実際にハイになるまで待たなければならない。スレーブがクロックストレッチングをしている場合には、クロックラインは依然としてローである(接続がオープンドレインであるので)。第2の、より遅いマスターが同時にクロックを駆動しようとする場合も同様である。(複数のマスターが存在する場合には、それらのうちの一つ以外は通常アービトレーションを失う。)
【0037】
マスターは、クロックラインがハイになっているのを認めるまで、かつクロックを再びローに引き下げる前の追加の最小限の時間(例えば、標準の100kbit/sのI
2Cに対しては4μs)、待たなければならない。
【0038】
マスターが所望の間SCLラインをローに保持することもできるが、用語「クロックストレッチング」は、通常、スレーブがそれをする時にだけ使われる。理論的には任意のクロックパルスを伸ばすことができるが、通常はアクノリッジ(acknowledgment)ビットの前か後の間隔が用いられる。例えば、スレーブがマイクロコントローラである場合には、そのI
2Cインターフェースは、ソフトウェアが肯定的なアクノリッジを送信するか又はNACKを送信するかを決めるまで、各バイトの後のクロックを伸ばすことができる。
【0039】
クロックストレッチングは、I
2Cにおいて、スレーブがSCLを駆動する唯一の時間である。多くのスレーブは、クロックストレッチをする必要はなく、従って、それを駆動する回路はなく、SCLをもっぱら入力として処理する。いくつかのマスター、例えばカスタムASICの内部で見つかるものは、クロックストレッチングをサポートしないかもしれない。これらのデバイスは、しばしば「二線式インターフェース」と呼ばれ、I
2Cではない。
【0040】
全てのマスターは、スタートおよびストップビットのためにバスを監視していて、通常、他のマスターが単一の処理の間バスをビジーに保っている間はメッセージを開始しない。しかし、2つのマスターが、ほぼ同じ時間に送信を開始するかもしれない。この場合、アービトレーションが起こる。1つのマスターが複数のスレーブのアドレス指定を行う時には、スレーブ送信モードも調停され得るが、これは、いっそう一般的ではない。再試行を発行する前にランダム引き下がり遅延(random back-off delays)を用いるプロトコル(例えばイーサネット(登録商標))とは対照的に、I
2Cは、決定論的なアービトレーション方針を有している。各送信器は、データライン(SDA)のレベルをチェックして、それをそれが予想するレベルと比較する。それらが合わない場合、その送信器は、アービトレーションを失って、このプロトコルインタラクションから抜ける。
【0041】
1つの送信器がSDAを1にセットし(信号を駆動しない)、第2の送信器がそれを0にセットする(グラウンドに引き下げる)場合、その結果は、ラインがローである。そして第1の送信器は、ラインのレベルが予想されるものとは異なることに気づき、他のノードが送信していると結論する。このような違いに気づいた第1のノードは、アービトレーションを失い、SDAの駆動を停止する。それがマスターである場合には、SCLの駆動も停止して、ストップを待つ。それから、それは、その全メッセージを再発行しようとするかもしれない。それまでは、他のノードは、予想されるものとSDA上の実際のレベルとの違いに気づかず、従って送信を続ける。それは、問題なく、そうすることができる。なぜなら、ここまでは信号は正確に予想される通りであったからである。他のいかなる送信器も、そのメッセージを妨害しなかった。
【0042】
2つのマスターが2つの異なるスレーブにメッセージを送信している場合には、より低いスレーブアドレスを送信しているものが、常にアドレス段階のアービトレーションに「勝つ」。2つのマスターが同じスレーブアドレスにメッセージを送信することはでき、そしてアドレスは時々複数のスレーブを指すので、アービトレーションはデータ段階まで続かなければならない。
【0043】
アービトレーションは、非常にまれにしか発生しないが、適切なマルチマスターサポートのために必要である。クロックストレッチングと同様に、全てのデバイスがアービトレーションをサポートしているというわけではない。それをするものは、通常、それ自身を「マルチマスター」通信をサポートするものと呼ぶ。
【0044】
2つのマスターが並行して同一のメッセージを同時に送信するという極めてまれな場合においては、両方が、通信が成功したと考えるが、スレーブは1つのメッセージしか見ない。複数のマスターによってアクセスされ得るスレーブは、この理由のために冪等(idempotent)である命令を有していなければならない。I
2Cは、それをいくつかの応用に対して不適当にし得る他の制限も有している。
【0045】
図1は、標準I
2Cバス102を含む従来技術の標準マルチマスターI
2Cシステム100のブロック図を示している。標準I
2Cバス102は、複数のマスター104、106(この例では2つのみが示されている)と1つ以上のスレーブデバイス108(この例では1つのみが示されている)との間の通信を可能にする。スレーブデバイス108は、固定された数のアドレスピン(例えば、この例では3つが示されている)を含む。
【0046】
図2は、
図1の標準マルチマスターI
2Cシステム100で使用する標準I
2Cバスアービトレーション処理200を示すフローチャートである。いずれのマスター104、106もスレーブデバイス108にアクセスしたい時には、マスター(例えば、マスターA 104またはマスターB 106)は、スタート命令(202)を発行して、該マスターが現在のバスマスター(204)であるかどうかを判定する。もしそうであれば、該マスターは、スレーブデバイス108のアドレスを用いて所望のスレーブデバイス108を選択する(206)。そうでない場合には、処理200は終了する(214)。マスターがスレーブデバイス108を選択する場合には、次に、スレーブが正しく選択されたことを判定するためにチェックが実行され(208)、エラーがない場合には、選択されたスレーブとの単一の処理(例えば、読み出し、書き込み、または複合)が実行される(210)。しかし、スレーブ選択エラーが発生した場合には、処理は実行されない。どちらの場合にも、ストップ命令が発行され(212)、処理200は終了する(214)。
【0047】
並行してこの標準I
2Cバスアービトレーション処理200を実行するマスター104、106の各々で、マスター104、106のうちの1つが、選択されたスレーブデバイスとの単一の処理の前に、I
2Cバスの制御を得る。しかし、従来技術のこのアービトレーション処理200の重要な制限は、一度マスターがバスマスターになると、該マスターが、選択されたスレーブデバイス108との単一の処理を実行することのみができるということである。そうすると、該マスターが単一の処理を完了した時に、他のマスターがバスマスターになって、例えば、スレーブデバイスに書き込みを行うことができるかもしれない。問題は、スレーブデバイス108が例えばメモリデバイスであって、中断されないリードモディファイライト処理のシーケンスが、例えばデータの整合性を保証するために必要である場合に、標準I
2Cバスアービトレーション処理200が、第2のマスターがI
2Cバス102の制御を得て、最初のマスターがリードモディファイライト処理のシーケンスの全ての部分を完了する前に、最初のマスターを遮って、メモリを変更することがないことを保証することができないことである。このように、システム100は、中断が不可能な複数の処理シーケンスを提供しないので、標準I
2Cバスアービトレーション処理200は、データの不整合の問題という結果になり得る。
【0048】
よりよくこの問題を示すために、以下の2つの例のスレーブアクセスシーケンスを考える。第1の例のシーケンスにおいては、マスターA 104が、最初にスレーブから0x01に等しいデータを読み出し、それからマスターA 104が、0x02に等しいデータをスレーブに書き込み、最後にマスターB 106が、スレーブから0x02に等しいデータを読み出す。この第1のシーケンスは、所望の結果になる。両方のマスター104、106は、スレーブが、整合性のあるデータを提供することを発見する。
【0049】
しかし、第2の例のシーケンスにおいては、マスターA 104が、最初にスレーブから0x01に等しいデータを読み出し、それからマスターB 106が、スレーブから0x01に等しいデータを読み出し、最後にマスターA 104が、0x02に等しいデータをスレーブに書き込む。第2の例のシーケンスは、問題がある結果になる。2つのマスター104、106は、スレーブが、2つの異なる値、従って整合性のないデータを有することを経験する。
【0050】
本発明の実施形態は、他の全てのI
2Cマスターが、いかなる介入するI
2C処理も実行することを防止すると共に、I
2Cバスマスターが、複数の、連続するI
2C処理を実行することを可能にする能力をシステム100に加えることによって、標準I
2Cバスアービトレーション処理200を改良することによって、この潜在的データ不整合の問題に対処する。各マスターに対する1本の追加の汎用入出力(I/O)ピンおよびいくつかのソフトウェアロジックを加えることによって、本発明は、マスターが、他の介入するマスターによって中断されることなく、複数の処理(例えば、リードモディファイライト処理シーケンス)を実行する能力を提供する。
【0051】
図3は、改良されたマルチマスターI
2Cシステム300の例示的な実施形態を示していて、これは、スレーブに対するアクセスの相互排他性(exclusion)の機能を提供する。従来技術の標準システム100と同様に、本発明の実施形態の改良されたマルチマスターI
2Cシステム300は、複数のマスター304、306(説明を簡単にするため、この例では2つのみが示されている)と、1つ以上のスレーブデバイス308(説明を簡単にするため、この例では1つのみが示されている)との間の通信を可能にするI
2Cバス302を含む。更なるマスターおよびスレーブがシステム300に含まれ得るが、
図3に示した単純な例は、より明確に本発明の特徴を示すために用いられることは理解されよう。標準I
2Cシステム100の要素に加えて、本発明の実施形態の改良されたマルチマスターI
2Cシステム300は、さらに、他のマスターの各々に各々接続されたシステム300内の各マスター304、306から来るI/OラインADDR1およびADDR2と、スレーブデバイス308の動的アドレスピン(例えば、アドレス1、アドレス2)とを含む。この構成は、各マスター304、306に、アクセスの前にスレーブデバイス308を独自にアドレス指定する能力を提供する。更なるマスターを有するシステムにおいては、更なるマスター毎の更なるI/Oラインが加えられる。
【0052】
各マスター304、306がスレーブデバイス308にアクセスするために独自のアドレスを有するこの能力は、以下の規則のセットを課すことによって実現され得る。マスター304、306のいずれもスレーブデバイス308にアクセスしていない時、I/OラインADDR1、ADDR2は、通常、アイドル状態のハードウェアを介して論理1に保たれる。ADDR1は、マスターA 304上で実行するソフトウェア命令によって論理0に駆動され得るのみである。(I
2Cバス302上の)アドレス1は、マスターA 304上で実行するソフトウェア命令によって用いられ得るのみである。ADDR2は、マスターB 306上で実行するソフトウェア命令によって論理0に駆動され得るのみである。(I
2Cバス302上の)アドレス2は、マスターB 306上で実行するソフトウェア命令によって用いられ得るのみである。以下の表は、この規則のセットをまとめている。
【0054】
マスター304、306が両方ともそれらのI/OラインADDR1、ADDR2を論理0のローに駆動しているまれなケースにおいては、スレーブアドレスはアドレス0であり、アドレス0に応答するのみであるので、どちらのマスター304、306もスレーブデバイス308にアクセスすることはできないことに注意されたい。なぜなら、それらは、I
2Cバス302上で、合っていないアドレス(アドレス1またはアドレス2)を使用しているからである。この機能は、従来のI
2Cマルチマスターサポートなしのマスターが本発明の実施形態によって用いられることも可能にする。アイドル状態の間はI/Oラインを論理1のハイに保って、マスターがスレーブにアクセスしていることを示すためにI/Oラインを論理0のローへ引き下げる代わりに、システム300は、論理0が、I/Oラインのアイドル状態値であり、論理1が、マスターがスレーブにアクセスしていることを示すために用いられるように実施され得ることにも注意されたい。
【0055】
以下の疑似コードの例は、各マスター304、306がスレーブデバイス308にアクセスするために従うプロトコルを示している。マスターA 304がスレーブデバイス308にアクセスしたい時、マスターA 304は以下のようにふるまう:
ADDR2 = 1である場合、以下へ: /*マスターBはスレーブと通信していない)*/
1. ADDR1 = 0に駆動する /*マスターAは排他的アクセスを望んでいる*/
2. スタート状態を発行する
3. マスターAがI
2Cバスマスターになる場合、以下へ:
●I
2C上でアドレス1を用いてスレーブを選択する
●I
2C上でスレーブにアクセスする
●ストップ状態を発行する
●さらなる処理のためにステップ2へ行く)
4. ADDR1 = 1に駆動する /*マスターAが終了*/
【0056】
マスターB 306がスレーブデバイス308にアクセスしたい時、マスターB 306は以下のようにふるまう:
ADDR1 = 1である場合、以下へ: /*マスターAはスレーブと通信していない)*/
1. ADDR2 = 0に駆動する /*マスターBが排他的アクセスを望んでいる*/
2. スタート状態を発行する
3. マスターBがI
2Cバスマスターになる場合、以下へ:
●I
2C上でアドレス2を用いてスレーブを選択する
●I
2C上でスレーブにアクセスする
●ストップ状態を発行する
●さらなる処理のためにステップ2へ行く)
4. ADDR2 = 1に駆動する /*マスターBが終了*/
【0057】
上記の疑似コードセグメントの中で実施される本発明のこれらの例示的な方法が、
図4〜6のフローチャートの中で更に示される。再試行の回数および遅延の長さは、システム300の特定のハードウェア実施態様の詳細に基づいて決定されることに注意されたい。いくつかの実施形態において、遅延は、不必要な余分の再試行/タイムアウトおよび潜在的競争状態を避けるために調和的(harmonic)間隔ではない長さに設定され得る。
【0058】
図4は、マスターA 304が本発明の実施形態の改良されたI
2Cシステム300のスレーブデバイス308にアクセスするために使用する例示的な方法400を示すフローチャートである。マスターA 304は、まず、ADDR2が論理1であるかどうかをチェックすることによって、他のマスター、マスターB 306がスレーブデバイス308に現在アクセスしているかどうかを判定する(402)。システムが他のマスターを含む場合、マスターA 304は他のマスターのI/Oラインもチェックする。ADDR2が論理1である場合、すなわちマスターB 306がスレーブデバイス308にアクセスしていないことを意味する場合、マスターA 304はADDR1を論理0に引き下げる(404)。これは、マスターAがスレーブデバイス308にアクセスしていることをマスターB 306に知らせる。マスターAは、それから、
図6および以下に示すような標準I
2Cプロトコルの改良されたバージョンを用いて、アドレス1を介してスレーブデバイス308にアクセスする(406)。マスターA 304は、それからエラーをチェックして(408)、なされるべき更なるスレーブアクセスがあるかどうかをチェックする(410)。スレーブデバイス308とのこれ以上の処理がない場合には、マスターA 304はADDR1を論理1に戻して(412)、この方法は終了する(414)。
【0059】
スレーブデバイス308へのアクセス後にエラーがある場合、マスターA 304は、スレーブデバイス308へのアクセスをやめ、ADDR1を論理1に戻して(412)、この方法は終了する(414)。最初のアクセス(406)およびエラーチェック(408)の後に、実行されるべき更なるスレーブアクセスがある場合には、マスターA 304は、標準I
2Cプロトコルを用いて、アドレス1を介してスレーブデバイス308に再度アクセスし(406)、フローはそこから続く。
【0060】
マスターA 304がADDR2をチェックした(402)時に(ADDR2が論理0であることによって示されるように)マスターB 306がスレーブデバイス308にアクセスしている場合には、マスターA 304は、遅延期間の間、引き下がり(back off)(416)、それから最大再試行制限を超えたかどうかをチェックする(418)。最大再試行制限を超えていない場合、マスターA 304は再度ADDR2をチェックして(402)、フローはそこから続く。最大再試行制限を超えた場合、この方法は終了する(414)。
【0061】
同様に、
図5は、マスターB 306が本発明の実施形態の改良されたI
2Cシステム300のスレーブデバイス308にアクセスするために使用する例示的な方法500を示すフローチャートである。マスターB 306は、まず、I/OラインADDR1が論理1であるかどうかをチェックする(502)ことによって、他のマスター、マスターA 304がスレーブデバイス308に現在アクセスしているかどうかを判定する。システムが他のマスターを含む場合、マスターB 306は他のマスターのI/Oラインもチェックする。I/OラインADDR1が論理1である場合、すなわちマスターA 304がスレーブデバイス308にアクセスしていないことを意味する場合、マスターB 306はADDR2を論理0に引き下げる(504)。これは、マスターB 306がスレーブデバイス308にアクセスしていることをマスターA 304に知らせる。マスターB 306は、それから、
図6および以下に示すような標準I
2Cプロトコルの改良されたバージョンを用いて、アドレス2を介してスレーブデバイス308にアクセスする(506)。マスターB 306は、それからエラーをチェックして(508)、なされるべき更なるスレーブアクセスがあるかどうかをチェックする(510)。スレーブデバイス308とのこれ以上の処理がない場合には、マスターB 306はADDR2を論理1に戻して(512)、この方法は終了する(514)。
【0062】
スレーブデバイス308へのアクセス後にエラーがある場合、マスターB 306は、スレーブデバイス308にアクセスするのをやめ、ADDR2を論理1に戻して(512)、この方法は終了する(514)。最初のアクセス(506)およびエラーチェック(508)の後に、実行されるべき更なるスレーブアクセスがある場合には、マスターB 306は、標準I
2Cプロトコルを用いて、アドレス2を介してスレーブデバイス308に再度アクセスし(506)、フローはそこから続く。
【0063】
マスターB 306がADDR1をチェックした(502)時に(ADDR1が論理0であることによって示されるように)マスターA 304がスレーブデバイス308にアクセスしている場合には、マスターB 306は、遅延期間の間、引き下がり(back off)(516)、それから最大再試行制限を超えたかどうかをチェックする(518)。最大再試行制限を超えていない場合、マスターB 306は再度ADDR1をチェックして(502)、フローはそこから続く。最大再試行制限を超えた場合、この方法は終了する(514)。
【0064】
図6は、
図4および5それぞれの上述した方法400および500の(406)および(506)で呼び出される改良された標準I
2Cバスアービトレーションプロトコルを示すフローチャートである。
図6の方法600は、
図2の従来技術の方法200と似ているが、引き下がり(back off)遅延ならびに再試行カウンタおよび制限を有していることに注意されたい。いずれのマスター304、306もスレーブデバイス308にアクセスする準備ができている時、マスター(例えば、マスターA 304またはマスターB 306)はスタート命令を発行して(602)、マスターが現在のバスマスターであるかどうかを判定する(604)。そうである場合は、バスマスターは、スレーブデバイス308に対する呼び出し方法400、500の中で示されたアドレスを用いて、所望のスレーブデバイス308を選択する(606)。マスターが現在のバスマスターになってスレーブデバイス308を選択する場合、次に、スレーブデバイス308が正しく選択されたことを判定するためにチェックが実行され(608)、エラーがない場合は、選択されたスレーブとの単一の処理(例えば、読み出し、書き込み、または複合)が実行される(610)。しかし、スレーブ選択エラーが発生した場合は、処理は実行されない。どちらの場合も、ストップ命令が発行され(612)、処理600は終了する(614)。
【0065】
マスターが(604)で現在のバスマスターにならない場合、マスターは、遅延期間の間、引き下がり(back off)(616)、それから最大バスマスター再試行制限を超えたかどうかをチェックする(618)。最大バスマスター再試行制限を超えていない場合、マスターは新たなスタート命令を発行し(602)、マスターがバスマスターになったかどうかを見るために再度チェックを行い(604)、フローはそこから続く。最大バスマスター再試行制限を超えた場合、この方法は終了する(614)。
【0066】
前述の説明は、本発明の例示的な実施形態を開示しているだけである。本発明の範囲内に入る上記で開示された装置、システムおよび方法の変形は、当業者に直ちに明らかである。従って、本発明が例示的な実施形態と関連して開示されたが、請求項によって定義されるような、他の実施形態も本発明の範囲内に入り得ることは理解されるべきである。