I2Cバスの基本 anchor.png

I2Cバスは,フィリップスが開発した2線式双方向のシリアル通信バスです。
マスターから,バスに並列に接続された複数のスレーブに対して,読み取りと書き込み操作を行うことができる。

マスター,スレーブともに,入力兼オープンドレイン出力のシリアルクロック(SCL),シリアルデータ(SDA)の2つのラインを持っていて,これを並列に接続する。

i2c.gif

スレーブは,7bitのスレーブアドレスによって選択できる。
この7bitのスレーブアドレスに,Read/Writeフラグを追加して,スレーブの選択の読み書きの方向を変更している。

同じ基板内などのように,比較的近距離で直結したデバイスと,100kbpsまたは400kbpsの低速度でシリアル通信を行うように使われるように規定されている。

Page Top

バス信号 anchor.png

シリアルクロック(SCL)は,マスターから出力される。スレーブは,このマスターからのSCLに合わせて,SDAの入出力を行う。すなわち,SCLに合わせてSDAからデータを読み取り,あるいはSCLに合わせてSDAにデータを出力する。

バス上の通信は,マスター側からのSTARTコンディション(SCLが1の間にSDAが1→0に変化)で始まり,STOPコンディション(SCLが1の間にSDAが0→1に変化)で終了します。 データビットは,SCLが1レベルの間に確定されます*1 データビットでは,SCLが1の間はSDAは変化してはいけません。SDAのレベルの変更,入出力の切り替えは,SCLが0の間に行います。

i2c_timing1.gif

データの単位は,1byte(8bit)で,上位bitから順に転送される。1byteごとに受信側は送信側にACK(1bitの0)を返します。

i2c_timing2.gif

1byte受信後に,NAK(1bitの1)を返すこともできます。通常これは,スレーブからマスターへのデータ転送において,マスターがデータ転送終了をスレーブに伝える時に使います。

i2c_timing3.gif


*1 立ち上がり・立ち下がりエッジではないので注意。

SPIと大きく違うのは,個々のスレーブがアドレスを持っていて,データの中にアドレスが含まれていることと,1bute転送毎に受信側からACK信号を返信して,互いに確認を取りながらデータ転送を行っている。

Page Top

通信の基本 anchor.png

一連の通信は,必ずマスターからのSTARTコンディションを送ることで始る。
STARTコンディションの直後の1byteは,7bitのスレーブアドレスと,1bitのRead/Writeフラグです。
Read/Writeフラグには,マスターからスレーブに転送する場合は0を,スレーブからマスターへ転送する場合は1を設定します。
接続されている全スレーブは,この時のSCLのクロックを元にSDAのデータを受信するが,自分のアドレスと一致したデバイスだけが,その後の送受信を行うようになっている。
スレーブアドレスを受信したスレーブが,マスターに対してACKを返すことで,マスター・スレーブ間の通信が確立される。

マスターからスレーブへの転送(書き込み)では,スレーブがスレーブアドレスに対してACKを返した後,そのままマスターからスレーブへデータを送信していきます。1バイトごとにスレーブがACKを返す
データを送り終わったら,マスターからSTOPコンディションを送り,通信を終了する。

i2c_通信1.gif

スレーブからマスターへの転送(読み取り)では,スレーブがスレーブアドレスに対してACKを返した後,スレーブからマスターへデータが送信される。マスターはこれに対してACKを返すが,最後のバイトの場合のみ,NAKを返すことで,スレーブに対してデータ転送の終了を伝える。

i2c_通信2.gif

例えば,EEPROMのように,読み取る前に読み取るROM上のアドレスを指定する必要があるような場合は,書き込みと読み取りを複合して通信します。
この場合では,一旦書き込みで開始し,読み取りたいアドレスなどの情報をスレーブに送信した後,STOPコンディションを送らずに,再度STARTコンディションを送って,読み取りに移行します。

i2c_通信3.gif
Page Top

バスタイミング anchor.png

i2c_bustiming.gif

新しくコメントをつける

題名
ゲスト名
投稿本文
より詳細なコメント入力フォームへ

トップ   凍結 差分 バックアップ 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom
Counter: 1116, today: 2, yesterday: 0
最終更新: 2020-12-26 (土) 16:07:35 (JST) (1217d) by yuji