I2Cについて

I2Cの仕様

I2CはInter-Integrated Circuit の略でオランダのフィリップス社が提唱した基板内のデバイス間通信のシリアル通信規格です。
現在は様々な機器に広く使われており、クロック同期式で、主にデーターラインを双方向に使って通信する方式で、正式名はアイスケアードシーと呼んで IIC と書いたり、I2Cと書いてアイツーシーと呼んだりもする。(正式にはIに二乗を表す上付きの2が必要なのですが、通常テキストでは表現できないので I2Cとしています)
I2Cの信号仕様は NXP社のものを見つけました。
スクリーンショット 2011-08-24 16.24.13.png
上記仕様書の図面ですが、仕様上は SDA 、SCLともに双方向オープンドレイン出力になるそうで、デバイスの自己クロックと同期させるためCLKのLow期間を伸ばす仕様もあるので、CLKの立ち上がりはマスターがHighにしたからといっても、周辺がLow期間を伸ばすことがあり得るので、マスターと言えどもCLKラインがちゃんとHighになったか確認しなければいけないそうです。
 とはいえ、通常はCLKなんかは 出力だけしか見てない場合が多いのですが、PICなんかは自分でちゃんとやってるのかな?と確認する必要が出てきました。I2C_Ref.png
 右図はポートの電圧的仕様です。電源電圧は2V以下の低い電圧から 16V程度まで広範な電圧に対応されていますが、通常 5Vや3.3Vではプルアップ抵抗を使います。そこでの入力範囲は図の黄色い範囲で、電源電圧より上下に0.5Vマージンがありますが、Vdd=5Vで Lowは 1.5V以下、Highは3V以上と結構制限されてます。また、出力ではLowにするだけなのですが、3mAを流した時でも0.4V以下というけっこう厳しいスペックです。 実際は電圧スペックだけでなく、問題になるのがバスに繋がるデバイスの容量によって波形が鈍ってしまうことです。
 I2Cには通常 100kHz と 400kHzのクロックスピードと、より早いHsモード(3.4Mbit/s)がありますが、通常使われる100kと400kの立ち上がり、立ち下がりのスペックを図に示します。
 バスラインの容量性負荷の最大値は 400pFなので、立ち上がり・立ち下がりが遅い時には容量を減らせられればそのほうが有利ですが、減らせられない場合は通常 4.7kΩ程度のプルアップ抵抗を 1kΩぐらいまで下げて高速に対応します。それでも鈍って読めない場合はI2Cのクロックの設定を下げて遅いスピードで使うことも考えられます。また、バスラインに高電圧スパイクを受ける可能性がある場合にはデバイスを守るため、バスラインとデバイスに直列に保護用抵抗を入れます。あまり大きな抵抗を入れると上記入出力電圧から外れたり、立ち上がり、立ち下がりが満足しなくなるので、注意が必要です。
 I2Cの大前提として、「CLKのLow期間のみに SDAを変化できる」というものがあります。ですからクロックがLowから High に変わったときはスレーブとしてはデーター読むのに良いタイミングなのですが、これから外れているのが START と STOP コンディションです。スレーブはスタートコンディションを見つけるのにCLKが HighでもじっとSDAがLowになるのをを監視しているなんて、けっこうすごい(実はハードでやっているから関係ないけど)と思ってしまうのですが...。
 昔はすべてソフトでポート制御して I2C組んでたけど、たいへんだったなぁ..

次回はもうちょっと補足追記します。….

ページの先頭へ

ページの先頭へ

参考資料

Information

RF POWER AMPなら
Rf Amprefire Design

ZEN_AMP3U_CS.png
 RADは、高周波電力増幅器(Solid State RF Power Amplifier)や高周波コンポーネント(Passive Component)で長年培った経験による卓越した高周波技術で、お客様に貢献します。LinkIcon詳しくはこちら

Amazon

RAKUTEN

ページの先頭へ