個人的なメモ置き場ブログに書くほどのものでもないことを書きます

概要

  • 使用する線は2本(SDAとSCA)のオープンドレイン
  • 速度は以下
#name名前速度
1low-speed mode低速モード10kbit/s
2standard mode標準モード100kbit/s
3Fast modeファーストモード400kbit/s
4High Speed mode高速モード3.4Mbit/s
  • アドレス空間は7bit又は10bit
  • マルチマスタも可

プロトコル

  • SCLがクロックでSCAはデータ
  • SCAは、スタート/ストップ時を除き、SCLがLOWの時しか変化させてはならない
  • SCLがHIGHの時にSCAをHIGHからLOWに遷移させると、「これから通信を開始するよ(スタート)」という意味になる ("S"で表される。スタートコンディション)
  • SCLがHIGHの時にSCLをLOWからHIGHに遷移させると、「これで通信を終了するよ(ストップ)」という意味になる。("P"で表される。ストップコンディション)
  • 通信の手順は下記の通り。
  1. マスターがSCLがHの時にSCAをHからLにする(S)
  2. 次にSCLがLになった時から、スレーブのアドレスを1bitずつ送信する(7bitなので7サイクル)
  3. 続いて、ReadなのかWriteなのかを送信する(RがHでWがL)
  4. 次に、スレーブがデータを正常に受け取ったかを送信する。(ACK)(成功ならL)
  5. スレーブの処理が間に合わない場合は、スレーブがSCLをLOWに落とす。マスタがSCLをHにしようとしてもHにならない時は、スレーブがbusyだと判断して処理を待つ。
  6. 最後にSCLがHの時にSCAをLからHにする(P)
  7. 同じマスタが続けて通信を行いたい場合は、ストップコンディションを出さないでそのままスタートコンディションを出せば続けて通信できる。

調停の方法

調停はbitごとに行われる。
2つのマスタが同時にSCAに違う値を出そうとすると、オープンドレインなのでLowが優先される。
マスタはじぶんが出力した値と違う値になっていることが分かったら、そこで通信をやめる。

2つのマスタが同時に通信を始めると、スレーブアドレスが小さいほうが有線されることになる。
スレーブアドレスが同じだと、ReadよりWriteが優先される

参考

タグ

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

メニューバーA

ここは自由に編集できるエリアです。

管理人/副管理人のみ編集できます