Team GRA・CHAN!

Robocup Junior サッカーに挑戦しているTeam”GRA・CHAN!”ロボ日記

Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

GRA・CHAN!ロボ 技術公開 番外編-I2Cとは?-

こんにちは、GRA父です。

今日は最近、書いている”技術公開”で頻繁に出てくるI2C通信の事です。

番外編なので、ちょっと一息というか書籍ならば”コラム”や”雑学”のような内容になります。
(興味がない方は、速攻ですっ飛ばして下さいな。)

今更ながらですけど近年のロボカップジュニアのロボットは、I2C通信を利用したセンサーを沢山使う様になりました。

皆さんはI2C通信ってなんなのか知ってて使っているのでしょうか?
自作チームを除くと普通は知らずに使っていますよね。

悪い言い方をすると、名前は知ってるけど中身は?で、センサーや基板がその通信方式で繋がっているのは知っているという事でしょうか。

そんな事をふと思い、今回の記事にしてみようかと思った次第です。

せっかく使っているのですから、雑学程度はお勉強の一環と思って身につけましょう!!

さて、I2Cというは何でしょうか?
I2Cとは、Inter-Integrated Circuitの略で、I2Cと書くのでI-squared-C(アイ・スクエアド・シー)と読むのが正解です。
普通、皆さん”アイ・ツー・シー”と呼んでいますよね。
私も面倒なんでそう呼びます(笑)
またI2Cと書くと思いますが、本当は”I²C”と”2”を小さく書くのが本当の書き方です。

元々は”フィリップス”という会社で製造・販売しているICチップとICチップ間を通信接続する為の独自規格です。
その内”フィリップス”という会社のICと他のICメーカーが通信接続したいという要望から徐々に標準規格化され現在の規格になりました。
現在は、”フィリップス”のI2Cに関する特許の期限切れ(2004~2005年頃に切れたはず!)から自由に使える規格となったので、2005年頃から一般的にこの規格が聞こえ出しました。
身近なものでいうと”携帯電話”でよく使われています。

それ以前はI2Cといえば”フィリップス”の製品を繋ぐモノと思っていましたので、NXTに実装された時にはビックリしました(笑)

I2C規格に準拠している別名通信規格で”TWI”という規格というか言い方もあります。
といってもほぼ同じものです。
これはAVRマイコンでの呼び方です。(他にもあるかも)

I2C通信は、SCL(シリアル・クロック)と、双方向のSDA(シリアル・データ)の2本の信号線(GNDは含まず)で通信する同期式のシリアル通信の規格で、非同期式シリアル通信(RS-232Cなどのシリアル通信)に比べて、高速で通信でき、また複数のスレーブ(確か最大112だったと思います)を接続することができます。
I2C通信
↑↑ネットで調べたら書こうとしていた図(元ネタサイト不明)を発見↑↑
      (元ネタ作者様、利用させて頂きます)

ライン上には複数のスレーブを接続でき、マスタは個別に決められたスレーブのアドレスを指定してスレーブを選択してからそのスレーブと通信します。

通信速度は4種類のモードがあり、低速モード(10kbit/s)、標準モード(100kbit/s)、ファースト・モード(400kbit/s )、ハイスピード・モード(3.4Mbit/s)があります。(今の最新規格では低速モードは規格としては無くなりました。)
恐らく普通は標準モードの速度で繋がっていると思います。
(NXTは・・・・別としましょう!)

ただし距離は短い(規定はないですが、一般的には数mぐらいといわれています。私の会社では数十cm程度の通信用途に使用するとしています)のため、以前にも書いた通り、通信は基板内や近くにある基板間といった近距離のものに限られます。
元々”フィリップス”でも、メインCPUチップとメモリーICチップ間で利用することがメインだったと思います。
(?若い頃にそう教わったので・・・。)

通信規格といっているのは、通信をする手順が決まっているからで、以下の様な手順を踏んで通信します。
いままでの説明で”マスタ”といわれるモノが”GRA・CHAN!ロボ”でいうところの”NXT”。
”スレーブ”といわれているのが”オリジナル基板”とか”NXTコンパスセンサー”や”NXT超音波センサ”となります。

(1)通信の開始
マスタは通信を始める際に、スレーブに対して通信の始まりを教えるために、スタート・コンディションを発行します。
スタート・コンディションというのは、SCLが“H”(=出力ON)レベルのときに、SDAを“H”レベルから"L"(=出力OFF)レベルに変化させた状態をいいます。
スタート・コンディションは、すべてのスレーブへ一斉に通知されます。

(2)スレーブの選択
次に、マスタは全スレーブへアドレス情報を送信します。
すべてのスレーブはスタート・コンディションを受信したあと、マスタが送信したアドレス情報を受信します。
このアドレス情報には、マスタが通信したいスレーブのアドレス番号とそれ以外に送受信の向きを示すR/Wフラグ(この通信が命令する通信なのか、それともスレーブの情報が欲しい通信なのかの意味)が含まれています。

各スレーブはアドレス情報を受信すると、アドレス情報内のアドレスと自分のアドレスか一致しているかどうかを調べ、一致している場合はデータの送受信の処理に備えます。
アドレスが不一致のときはそのスレーブは自分じゃないので待機状態へ戻り、再びスタート・コンディションが発行されるまで待機します。

(3)データの送受信
アドレスが一致したスレーブは、アドレス情報内のR/Wフラグの値に応じてデータを送信または受信します。
データの受信をした場合には、スレーブのプログラムで、その命令に則した動作を行うになります。

(4)通信の終了
通信の終わりは、マスタがストップ・コンディションを発行して通信の終わりをスレーブに知らせます。
これはSCLが“H”レベルのときに、スタート・コンディションのときとは逆にSDAを“L”レベルから“H”レベルに変化させることで成立します。
これにより通信手順が一巡したことを知らせて、今まで通信していたスレーブは待機状態へ戻ります。

ちょっと難しかったかな?

他にもいろいろなモードがあるのですが、基本手順は上記の通りです。
もっと詳しく知りたい方は、ネットや書籍で調べて下さいね。

以上、盆休みまであっちこっち出張がつづいて、ナゼか忙しいGRA父でした~。
スポンサーサイト

Comment

参考になります。

GRA父様

参考になります。これで、1号に説明するのが楽になります。

今週末体験教室です。こちらのブログも紹介させてもらってよろしいでしょうか。

運営で手一杯で、このての情報提供できそうもありません。他力本願です。

(^O^)
  • posted by union12の父
  • URL
  • 2011.07/22 07:40分
  • [Edit]

Re: 参考になります。

union12の父さん、こんにちは。


> 参考になります。

そう言って頂けると大変嬉しいです。
UPしたかいがあります。

> こちらのブログも紹介させてもらってよろしいでしょうか。

娘達のログブック代わりの活動記録と私のつまらん一人言が、果たして皆さんの参考になるか?ですけど、喜んで!(笑)

運営(本業も)、大変そうですが頑張って下さいね。
  • posted by GRA父
  • URL
  • 2011.07/22 20:51分
  • [Edit]

リンク

こんにちは。
ISMKのMです。
リンクに載せてもいいですか?
  • posted by ISMK
  • URL
  • 2011.07/25 19:24分
  • [Edit]

Re: リンク

ISMKのMさん。
こんにちは。Yです。

> リンクに載せてもいいですか?

はい。とっても嬉しいです。
よろしくお願いします。

こちらもリンクさせてくださいね。
  • posted by Yです。
  • URL
  • 2011.07/26 19:40分
  • [Edit]

Re:リンク

こちらもリンク大歓迎です。
http://blog.livedoor.jp/ismk_/
『ロボカップ日和』というブログです。
  • posted by ISMKのM
  • URL
  • 2011.07/27 20:35分
  • [Edit]

Comment_form

管理者のみ表示。 | 非公開コメント投稿可能です。

左サイドMenu

黒ねこ時計 くろック

最新記事

最近のコメント

データ取得中...

右サイドメニュー

アクセス カウンター

検索フォーム

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。