(58)【調査した分野】(Int.Cl.,DB名)
【背景技術】
【0002】
I2Cバス通信とは、シリアル・データライン(SDA)とシリアル・クロックライン(SCL)の2本のみで動作することを特徴とする通信形態である。また、I2Cバスは、複数のマスタデバイスをバスに接続することが出来るマルチマスタバスである。I2C通信において、システム内で複数のマスタデバイスを使用している場合、2つ以上のマスタデバイスが同時に通信を行った際、バスの使用権を制御するための調停という機能が存在する。
【0003】
調停において、各マスタデバイスは1ビット毎にSDAのレベルが自分の送信した内容と一致するかのチェックを行い、自分が1を送信しているにも関わらずSDAが0状態であることを検出したマスタデバイスは、調停に負けたことを認識し、SDA出力をオフにする。これを繰り返し、最後まで残ったマスタデバイスが調停に勝ったことになり、バスの使用権を得ることができる。
【0004】
従来のI2Cの調停機能では、マスタデバイスが送信するスレーブアドレスとデータのみによってバスの使用権が決定されるため、バスの使用権が均等に割り振られないという問題がある。これを解決するための一例が下記特許文献1に記載されている。
【0005】
特許文献1記載のI2Cバス通信用デバイスは、スレーブアドレスのうち調停ビットに割り振ったビットを記憶する上位ビット記憶部と、マスタデバイスとして通信を行う相手であるスレーブデバイスのアドレスを記憶する下位ビット記憶部と、を備えている。そして、I2Cバス通信用デバイスにおける制御部は、記憶された調停ビットと、記憶されたスレーブデバイスのアドレスとを統合してスレーブアドレスとする。また、I2Cバス通信システムでは、マスタデバイスの制御部は、通信部を制御して、スレーブアドレスを出力し、調停結果に基づいて調停ビットに所定の演算を行い、バスの使用権を均等に割り振っている。
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかしながら、上述の文献に記載された技術は、複数のマスタデバイスに均等に割り振るためには、マスタデバイスの数に応じて調停ビットの数を増やす必要がある。マスタデバイスの数に対して調停ビットの数が少ない場合、バスの使用権を均等に割り振ることができない。制御するマスタデバイスを増やし、かつ、優先権を均等に割り振るためには、調停ビットを増加させる必要があり、その場合、使用できるスレーブアドレスを減少させてしまうという問題がある。
【0008】
本発明は、以上のような課題を解決するためになされたものであり、優先権を均等に割り振るために、調停ビットを増加させる必要がなく、使用できるスレーブアドレスを減少させることのないI2Cバス通信用デバイス、I2Cバス通信システム、I2Cバス通信方法、およびI2Cバス通信プログラムを提供することにある。
【課題を解決するための手段】
【0009】
上記課題を解決するため、本発明の一態様は、他のデバイスとデータラインを介してI2Cバス通信を行う通信部と、調停ビット
を最上位ビットとした所定ビット数のスレーブアドレスを記憶する記憶部と、前記通信部を制御して前記他のデバイスとのI2Cバス通信を制御する制御部と、を備え、前記制御部は、前記調停ビットを第1の値に設定して
、通信の開始後に前記調停ビットを前記データラインに出力し、前記データラインの信号レベルと一致するか判断する第1の判断を行い、
前記第1の判断に失敗すると通信の終了まで待機し、前記第1の判断に成功すると前記調停ビット
以降の前記スレーブアドレスの
各ビットの値が前記データラインの信号レベルと一致するか判断する第2の判断を行い、
前記第2の判断に失敗すると調停負けと判断して前記調停ビットを第2の値に設定して通信の終了まで待機し、前記第2の判断に成功すると調停勝ちと判断して前記調停ビットを第1の値に維持する、ことを特徴とするI2Cバス通信用デバイスである。
【0010】
また、本発明の一態様は、複数のデバイス間でデータラインを介してI2Cバス通信を行うI2Cバス通信方法であって、
調停ビットを最上位ビットとした所定ビット数のスレーブアドレスを記憶し、前記調停ビットを第1の値に設定して
、通信の開始後に前記調停ビットを前記データラインに出力し、前記データラインの信号レベルと一致するか判断する第1の判断を行い、
前記第1の判断に失敗すると通信の終了まで待機し、前記第1の判断に成功すると前記調停ビット
以降の前記スレーブアドレスの
各ビットの値が前記データラインの信号レベルと一致するか判断する第2の判断を行い、
前記第2の判断に失敗すると調停負けと判断して前記調停ビットを第2の値に設定して通信の終了まで待機し、前記第2の判断に成功すると調停勝ちと判断して前記調停ビットを第1の値に維持する、ことを特徴とするI2Cバス通信方法である。
【0011】
また、本発明の一態様は、複数のデバイス間でデータラインを介してI2Cバス通信をコンピュータに実行させるI2Cバス通信プログラムであって、
調停ビットを最上位ビットとした所定ビット数のスレーブアドレスを記憶し、前記調停ビットを第1の値に設定して
、通信の開始後に前記調停ビットを前記データラインに出力し、前記データラインの信号レベルと一致するか判断する第1の判断を行い、
前記第1の判断に失敗すると通信の終了まで待機し、前記第1の判断に成功すると前記調停ビット
以降の前記スレーブアドレスの
各ビットの値が前記データラインの信号レベルと一致するか判断する第2の判断を行い、
前記第2の判断に失敗すると調停負けと判断して前記調停ビットを第2の値に設定して通信の終了まで待機し、前記第2の判断に成功すると調停勝ちと判断して前記調停ビットを第1の値に維持する、ことを特徴とするI2Cバス通信プログラムである。
【発明の効果】
【0012】
本発明の一態様によれば、優先権を均等に割り振るため、調停ビットをマスタデバイスの数に依存しない1ビットで行うことにより、使用できるスレーブアドレスを減少させることをなくすことができる。
【発明を実施するための形態】
【0014】
以下、まず、I2Cバス通信システムのマスタデバイスが、調停結果に応じてバスの使用権を得る場合の一般的な動作について説明し、その後、本発明の実施形態について順番に図面を参照して説明する。
【0015】
I2Cバス通信システムは、信号線をオープンドレイン接続することで、複数のデバイスで1本の信号線を共有して使用することができる。また、オープンドレインはLow駆動であるため、I2Cバス通信用デバイスが信号を駆動していない場合、信号線はプルアップ抵抗によって自動的に1の状態となる。よって、I2Cバス通信用デバイスが信号線に1の値を送信したい場合は駆動を行わず、デバイスが0の値を送信したい場合にはLow駆動を行う。これにより、複数のI2Cバス通信用デバイスのうち1つが1の値を、他の1つが0の値を送信したい場合、信号線はI2Cバス通信用デバイスによるLow駆動によって0の状態になるため、0の値を送信するI2Cバス通信用デバイスにおけるマスタデバイスがバスの使用権を得ることが出来る。
【0016】
I2Cバス通信において、複数のマスタデバイスが同時にデータの送信を行った場合、一度のデータ転送で信号線を使用できるデバイスは1つであるため、どのマスタデバイスの転送を完遂させるかを決定するために、上記で説明したオープンドレインの特性を利用した調停機能が存在する。調停において、各マスタデバイスは1ビット毎にSDA(一方の信号線)のレベルが自分の送信した内容と一致するかのチェックを行う。信号線はLow駆動であるため、自分が0の値を送信する場合、信号線は必ず0の状態になるが、自分が1の値を送信する場合は、他のデバイスのLow駆動により信号線は0の状態になる場合がある。自分が1の値を送信しているにも関わらず、信号線が0の状態であることを検出したマスタデバイスは、調停に負けたことを認識し、データの転送を中断する。これを繰り返し、最後まで残ったマスタデバイスが調停に勝ったことになり、バスの使用権を得ることができる。
【0017】
図1は、本発明の一実施形態に係るI2Cバス通信システムの構成の一例を示すブロック図である。
図1に示すように、I2Cバス通信システム100においては、3つのマスタデバイス(マスタ1、マスタ2、マスタ3)、および3つのスレーブデバイス(スレーブ1、スレーブ2、スレーブ3)にクロックライン(SCL)、データライン(SDA)の2本が接続され、2本のバスがそれぞれプルアップ抵抗Rpを介して電源電圧Vddに接続されている。
なお、以下、マスタ1、マスタ2、マスタ3を、デバイス10、デバイス20、デバイス30と、スレーブ1、スレーブ2、スレーブ3を、デバイス40、デバイス50、デバイス60ということもある。
ここで、SCLとSDAとが、I2Cバスである。なお、本実施形態ではデバイス(I2Cバス通信用デバイス)の数を6台としているが、5台以下もしくは7台以上接続していても構わない。また、I2Cバス通信システム100は、マルチマスタシステムである。すなわち、デバイス10〜60は、全てI2Cバス通信におけるマスタとしてデータを転送することができる。ここで、
図1において示すように、本実施形態の説明においては、I2Cバス通信システム100は、マスタデバイスであるデバイスを複数含み(デバイス10〜30の3台)、スレーブデバイスであるデバイスを複数(デバイス40〜60の3台)含むものとする。
【0018】
また、
図2は、本発明の一実施形態に係るI2Cバス通信用デバイスの基本構成例を示すブロック図である。なお、
図1に示すデバイス20〜60の構成も同様とする。
図2を参照すると、デバイス10は、通信部11と、制御部12と、記憶部13と、を含んで構成される。
通信部11は、他のデバイス(デバイス20〜60)と、SCL上におけるクロック信号、SDA上におけるデータ信号の送受信を行う。データ、調整ビット、およびI2Cバス通信におけるスレーブアドレスは、データ信号で送受信される。
制御部12は、I2Cバス通信における他のデバイスとの通信を制御する。また、制御部12は、通信部11を制御してデータライン(SDA)の信号レベルを確認する。本実施の形態はI2Cバス通信の通信優先順位の制御に関する技術である。
【0019】
図3は、
図1に示すI2Cバス通信用デバイスのうちのマスタデバイスが、スタートコンディション後に送信するデータの最初のバイトフォーマットを示す。
一般的なI2Cバス通信システムでは、通常スタートコンディション後の7ビットをスレーブアドレスとして使用する。しかしながら、本発明のI2Cバス通信システムにおいては、
図3に示すように、スタートコンディション後の最初の1ビット、すなわちスレーブアドレス(7ビット)のうち最上位の1ビット(Most Significant Bit)を調停ビットとする。また、調停ビットより下位の6ビットをスレーブアドレスとする。
すなわち、記憶部13は、
図3に示すように、スレーブアドレスと、スレーブアドレスより1ビット上位のビットである調停ビットと、の値(7ビットのデータ)を、少なくともデータ13aとして記憶する。さらに、6ビットのスレーブアドレスより下位の(
図3に示すバイトフォーマットの最下位の)ビット(Least significant Bit)を、R/W決定ビット(リードまたはライト命令を行うビット)とする。
つまり、記憶部13は、
図3に示す調停ビット、スレーブアドレスの6ビット、R/W決定ビットを、データ13aとして記憶する。
【0020】
そして、制御部12は、記憶部13に記憶された調停ビットの値とデータライン(SDA)の信号レベルとが一致するか否かを判断する第1の判断を行い、続いて、記憶部13に記憶されたスレーブアドレスの値とデータライン(SDA)の信号レベルとが一致するか否かを判断する第2の判断を行う。これにより、制御部12は、他のデバイスに含まれるマスタデバイス(デバイス20、およびデバイス30)との調停における勝敗を、第1の判断の判断結果または第2の判断の判断結果に応じて判断し、判断結果が勝ちの場合、データラインの使用権を得ることができる。
【0021】
以上のように構成されたI2Cバス通信システム100の動作について、
図4のフローチャートを参照して説明する。
図4は、本発明の実施形態におけるI2Cバス通信システムでの各デバイスの通信の優先順位の制御の動作の概要を示すフローチャートである。ここで、各デバイスとは、マスタデバイス(デバイス10、デバイス20、およびデバイス30)のうちのいずれか1台のデバイスを意味する。
制御部12は、調停ビットの初期値を1とする(ステップST41)。
具体的には、制御部12は、
図3に示す調停ビット(MSB)に1を設定する。
次に、マスタデバイスにおける制御部12は、通信部11を制御して、スタートコンディションを出力し、通信の開始を宣言する(ステップST42)。
その後、制御部12は、通信部11を制御して、スタートコンディション後の最初の1ビット、すなわち調停ビットの出力を行う(ステップST43)。
【0022】
ここで、制御部12は、出力した調停ビットの値と、SDAの信号レベルが一致しているか否かの判断(第1の判断)を行う(ステップST44)。
制御部12は、出力した調停ビットの値と、SDAの信号レベルとが一致していなかった場合(ステップST44−No)、自デバイスは調停に負けたと判断し、ストップコンディションを検出するまで待機する(ステップST45)。
制御部12は、ストップコンディション検出後(ステップST45)、再びスタートコンディションの出力(ステップST42)に戻る。
【0023】
制御部12は、出力した調停ビットの値と、SDAの信号レベルとが一致していた場合(ステップST44−Yes)、次に、通信部11を制御して、スレーブアドレスとデータの出力を行う(ステップST46)。
具体的には、制御部12は、通信部11を制御して、スレーブアドレスとスレーブアドレスより下位にあるデータを出力データとして1ビット毎に上位のビットから複数ビット出力するデータ転送を行う。
【0024】
制御部12は、1ビット毎に出力ビットとSDAのレベルが一致しているか否かの判断(第2の判断)を行い(ステップST47)、この判断をデータの転送が完了するか(ステップST49−Yes)、出力ビットとSDAのレベルの不一致を検出する(ステップST47−No)まで行う。
【0025】
制御部12は、データ転送の完了(ステップST49−Yes)までに出力ビットとSDAの信号レベルが一致しないビットがあった場合(ステップST47−No、あるいはステップST47−Yes→ステップST49−No→ステップST46→ステップST47−No)、自デバイスは調停に負けたと判断する。
ここで、制御部12は、自デバイスの調停ビットが1であった場合は、記憶部13における調停ビットを0にする(ステップST48)。
制御部12は、自デバイスの調停ビットが0であった場合は調停ビットを0のままにする(ステップST48)。
ステップST48の後、制御部12は、ストップコンディションを検出するまで待機し(ステップST45)、検出後(ステップST45)は再びスタートコンディションの出力(ステップST42)に戻る。
【0026】
制御部12は、データ転送の完了(ステップST49−Yes)まで出力ビットとSDAの信号レベルが一致していた場合(ステップST47−Yes)、自デバイスは調停勝ちとなり(調停勝ちと判断し)、調停ビットが0であった場合は調停ビットを1にする(ステップST50)。
制御部12は、調停ビットが1であった場合は調停ビットを1のままにする(ステップST50)。
【0027】
以上説明した様に、本発明を利用することで、I2Cバス通信システムの調停における各デバイスの通信機会を、必要最小限の情報(1ビットの調整ビット)で均等に割り振ることができる。この理由は下記の通りである。
本発明では、調停に勝ったデバイスは次回の調停において優先度が下がる。また、全てのデバイスが調停に勝つまで調停に勝ったデバイスの優先度は下がったままである。この2つを両立することで、各デバイスは調停に負ける度に優先度が上がることになり、結果として通信機会を均等に割り振ることができるという効果が得られる。
【0028】
この得られる効果について
図5を参照しつつ説明する。
図5は、通信回数1回目、2回目、3回目、4回目、および5回目の時のマスタ1から3(デバイス10〜デバイス30)までの調停ビットの動作と調停結果を表した図である。
【0029】
1回目の調停では、全ての調停ビットが1のため、調停ビットにおける調停では勝敗が付かず(
図4に示すステップST44−Yes)、スレーブアドレスによる調停となる(
図4に示すステップST46→ステップST47)。2ビット目、すなわちスレーブアドレスの上位1ビット目の比較により、マスタ1が調停勝ちとなる(
図4に示すステップST47−Yes→ステップST49−Yes)。この時、マスタ2とマスタ3は自身の調停ビットを0にする(
図4に示すステップST47−No→ステップST48)。
【0030】
2回目の調停では、マスタ1の調停ビットのみ1のため(1回目の調停における
図4に示すステップST50)、1ビット目で調停負けとなる(
図4に示すステップST44−No)。マスタ2、マスタ3の3ビット目の比較により(
図4に示すステップST47)、マスタ2が調停勝ちとなる(
図4に示すステップST47−Yes→ステップST49−Yes)。この時、マスタ2は自身の調停ビットを1に戻す(
図4に示すステップST50)。
【0031】
3回目の調停では、マスタ3のみが調停ビット0であるため(2回目の調停における
図4に示すステップST47−No→ステップST48)、調停ビットの比較により(
図4に示すステップST44)、マスタ3が調停勝ちとなる(ステップST44−Yes→ステップST46→ステップST47−Yes→ステップST49−Yes)。この時、マスタ3は自身の調停ビットを1に戻す(ステップST50)。
【0032】
3回の調停(1回目の調停〜3回目の調停)で各マスタに通信機会が均等に割り振られており、さらに4回目の調停では、全てのマスタの調停ビットが1に戻っている、すなわち1回目の調停と同様の調停結果が得られるため、今後通信回数が増えたとしても、調停に勝ったデバイスは次回の調停において優先度が下がる。また、全てのデバイスが調停に勝つまで調停に勝ったデバイスの優先度は下がったままである。この2つを両立することで、各デバイスは調停に負ける度に優先度が上がることになり、結果として通信機会が均等に割り振られる。
【0033】
以上の本発明の実施形態の構成によれば、優先権を均等に割り振るため、調停ビットをマスタデバイスの数に依存しない1ビットで行うことにより、使用できるスレーブアドレスを減少させることをなくすことができる。
【0034】
なお、本発明は、上述の実施形態に限定されるものではなく、本発明の目的を達成できる範囲での変形、改良等は本発明に含まれるものである。
【0035】
例えば、本発明によれば、マスタのバスの使用権を均等にするだけでなく、設定によってバスの使用権を偏らせることもできる。例えば、3つのマスタを制御する際、調停が起きた時に必ずマスタ1が勝つようなシステムを作りたいとする。その場合、マスタ1の調停ビットを常に0と設定することで、必ずマスタ1が調停に勝つようなシステムにすることができる。
また、通常1回勝つと調停ビットの値を0から1にするところを、マスタ1だけが2回勝った時に初めて調停ビットの値を1とする設定にすることで、マスタ2、マスタ3が1回の使用権を得る間に、マスタ1に2回の使用権を与えることができる。