■キーワード
I2C、マスター、スレーブ、同期式通信、クロック(CLC)
■I2Cとは?
◯概要説明
シリアル通信の一種であり、1つのマスターで複数のスレーブデバイスとの通信が可能である。
クロック信号に同期して通信をする同期式通信をする。
◯どんな信号線?
2本の信号線を用いて通信を行う。
・SDL:主にデータを送受信する信号線。マスターとスレーブ双方向。
・SCL:クロック信号を送信する信号線。マスターからスレーブへ一方通行。
基本的に以下の構成で接続する。
◯どんな時に使う?
組み込みシステムなどにおいて、マイコン(マスター)とセンサ(スレーブ)の通信方式としてI2Cを使用する。
■I2Cの通信手順
◯大前提基礎知識
I2C通信ではSDAでデータ(スレーブアドレスやセンサデータ)を送受信することになる。
そのデータをSDAの信号ラインで電気的にHighかLowかで表すことになるため、データを電気的に確認するときは2進数でデータを捉える必要がある。
◯信号の読み方
SCL立ち上がりの時のSDAの値を見て、データを把握する。
◯手順
①スタートコンディション送信
②スレーブアドレス送信
③書き込みビットor読み込みビット
④ACK or NACK
⑤データ送信
⑥ACK or NACK
⑦ストップコンディション
①スタートコンディション送信
通信開始時に、「これから通信を始める」という合図が必要となります。
マスター側がSCLがHIGHの時にSDAをLOWにすることでスタートコンディションとなります。
②スレーブアドレスを送信
スレーブ側にはそれぞれのデバイスを区別するためのスレーブアドレスというものがあります。1つのマスターに対して複数のスレーブが繋がっていても、通信したいスレーブのアドレスを送信することで、対象スレーブのみとの通信が可能です。
1つ注意点があります。一般的にスレーブアドレスは「0x48」などのような16進数で表記されることが多いですが、8bitではなく7bitで考える必要があります。
つまり、0x48は01001000ではなく、1001000となります。
③書き込み/読み出しビット送信
I2C通信では基本的にマスター側がスレーブ側に「書き込み要求」or「読み出し要求」を送信し、スレーブはそれに応じた対応をします。
書き込み要求の場合は0を、読み込み要求の場合は1を指定する必要があります。
この時、②のスレーブアドレスが7bitだったため、8bit目に書き込み/読み出しbitが入ります。
つまり、スレーブアドレス0x48で書き込み要求の場合、1001000と0で10010000となり、8bit分で捉えると0x90となります。
④ACK/NACK受信
マスター側からスレーブ側に②スレーブアドレスと③書き込み/読み込みを送信すると、スレーブ側は一度応答を返します。
通信可能であることを示すACKの場合は0、通信不可能の場合であるNACKでは1が返されます。
定期的にセンサから値を取得する場合などに、スレーブ側がデータを送信する準備が整っていないのに受信要求などを送るとNACKが返ってきたりします。
⑤データ
送信データ等を8bitでやりとりします。
⑥ACK
8bit分のデータのやりとりごとに必ず1回のACKまたはNACKが送信されます。
⑦ストップコンディション
スタートコンディションと同様に、通信終了の合図が必要となります。
SCLがHIGHの時にSDAがHIGHとなることでストップコンディションとなります。