最終更新: cielo_cielo 2015年02月14日(土) 01:56:39履歴
- 使用する線は2本(SDAとSCA)のオープンドレイン
- 速度は以下
# | name | 名前 | 速度 |
1 | low-speed mode | 低速モード | 10kbit/s |
2 | standard mode | 標準モード | 100kbit/s |
3 | Fast mode | ファーストモード | 400kbit/s |
4 | High Speed mode | 高速モード | 3.4Mbit/s |
- アドレス空間は7bit又は10bit
- マルチマスタも可
- SCLがクロックでSCAはデータ
- SCAは、スタート/ストップ時を除き、SCLがLOWの時しか変化させてはならない
- SCLがHIGHの時にSCAをHIGHからLOWに遷移させると、「これから通信を開始するよ(スタート)」という意味になる ("S"で表される。スタートコンディション)
- SCLがHIGHの時にSCLをLOWからHIGHに遷移させると、「これで通信を終了するよ(ストップ)」という意味になる。("P"で表される。ストップコンディション)
- 通信の手順は下記の通り。
- マスターがSCLがHの時にSCAをHからLにする(S)
- 次にSCLがLになった時から、スレーブのアドレスを1bitずつ送信する(7bitなので7サイクル)
- 続いて、ReadなのかWriteなのかを送信する(RがHでWがL)
- 次に、スレーブがデータを正常に受け取ったかを送信する。(ACK)(成功ならL)
- スレーブの処理が間に合わない場合は、スレーブがSCLをLOWに落とす。マスタがSCLをHにしようとしてもHにならない時は、スレーブがbusyだと判断して処理を待つ。
- 最後にSCLがHの時にSCAをLからHにする(P)
- 同じマスタが続けて通信を行いたい場合は、ストップコンディションを出さないでそのままスタートコンディションを出せば続けて通信できる。
調停はbitごとに行われる。
2つのマスタが同時にSCAに違う値を出そうとすると、オープンドレインなのでLowが優先される。
マスタはじぶんが出力した値と違う値になっていることが分かったら、そこで通信をやめる。
2つのマスタが同時に通信を始めると、スレーブアドレスが小さいほうが有線されることになる。
スレーブアドレスが同じだと、ReadよりWriteが優先される
2つのマスタが同時にSCAに違う値を出そうとすると、オープンドレインなのでLowが優先される。
マスタはじぶんが出力した値と違う値になっていることが分かったら、そこで通信をやめる。
2つのマスタが同時に通信を始めると、スレーブアドレスが小さいほうが有線されることになる。
スレーブアドレスが同じだと、ReadよりWriteが優先される
タグ
コメントをかく