【初心者向け】I2C通信を理解する(概要、通信手順)

■キーワード
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となることでストップコンディションとなります。

 

moun45.hatenablog.com

moun45.hatenablog.com

moun45.hatenablog.com

■この2つがあれば開発体験できます!