I2C 通信のサポート
I2C (Inter-Integrated Circuit とも呼ばれる) は、集積回路と低速の周辺デバイスにおける通信のためのチップ間同期プロトコルです。一般的な I2C ベースのデバイスには、EEPROM、熱センサー、リアルタイム クロックなどが含まれます。I2C Controller Write ブロックと I2C Controller Read ブロックは、I2C デバイスとの通信を可能にします。
デバイス上の I2C バスは、Serial Data Line (SDA) と Serial Clock Line (SCL) の 2 本の双方向のラインに接続された I2C コントローラーをもちます。これらの 2 本のラインは、アタッチされた I2C 周辺デバイス上のピンのペアに接続されています。I2C 周辺デバイスは、製造元によって提供された一意の 7 ビットまたは 10 ビットのアドレスをもちます。アドレスが一意でない場合は、デバイス データ シートを参照してアドレスを再構成してください。
コントローラー ノードはクロックを生成し、周辺デバイスとの通信を開始します。周辺デバイス ノードはクロックを受信し、I2C コントローラーに ACK で応答します。
I2C は、次の通信モードを使用します。
コントローラー送信: I2C コントローラーが I2C 周辺デバイスにデータを書き込む
コントローラー受信: I2C コントローラーが I2C 周辺デバイスからデータを読み取る
周辺デバイス送信: I2C 周辺デバイスが I2C コントローラーにデータを書き込む
周辺デバイス受信: I2C 周辺デバイスが I2C コントローラーからデータを読み取る
スタート コンディションおよびストップ コンディション
I2C メッセージは、スタート ビット、送信されるデータ、ストップ ビットで構成されます。
SCL が HIGH の状態で SDA が HIGH から LOW になった場合は、スタート コンディションを示します。SCL が HIGH の状態で SDA が LOW から HIGH になった場合、ストップ コンディションを示します。その他のすべての SDA の遷移は、SCL が LOW の状態で起こります。
データの ACK
I2C 通信では、データ バイトが 8 ビット長になるように定義されます。I2C ではシングル バイトのデータでもマルチ バイトのデータでも送信できます。データ送信の間、肯定応答の ACK 信号がすべてのバイトの後に続きます。ACK のクロックはコントローラーによって生成されますが、受信側 (コントローラーまたは周辺デバイス) は ACK クロック パルスが高い間に SDA を引き下げて LOW に保つことで ACK を生成します。
ACK の期間中に SDA が LOW に下げられなかった場合は、受信側による NACK (Not Acknowledge/応答なし) を示しています。周辺デバイスが、次のデータ バイトの送信または受信の準備ができていない場合、SCL が LOW に保たれ、コントローラーは待機状態になります。周辺デバイスの準備が整い SCL をリリースすると、通常のデータ送信が再開されます。
I2C の読み取り/書き込み
I2C の読み取り/書き込み操作は次のように行われます。
I2C コントローラーが、スタート コンディションと、その後に続けて 7 ビットの周辺デバイス アドレスおよび書き込み (0)/読み取り (1) を示す 8 番目のビットを送信することで、通信を開始します。
コントローラーは SDA をリリースし、周辺デバイスからの ACK を待機します。
周辺デバイスがバス上に存在する場合、ACK で応答します。
コントローラーは (送信したのが読み取りビットか書き込みビットかに応じて) 送信モードまたは受信モードで続行し、周辺デバイスはその相補モード (それぞれ受信モードまたは送信モード) で続行します。
コントローラーはストップ コンディションを送信することでデータ送信を終了します。
次のイメージは、I2C 周辺デバイス上のシングル バイトの読み取りおよび書き込みを示しています。
I2C レジスタの読み取り/書き込み
I2C レジスタの読み取り/書き込み操作は次のように行われます。
I2C コントローラーが、スタート コンディションと、その後に続けて 7 ビットの周辺デバイス アドレスおよび書き込み (0)/読み取り (1) を示す 8 番目のビットを送信することで、通信を開始します。
コントローラーは SDA をリリースし、周辺デバイスからの ACK を待機します。
周辺デバイスがバス上に存在する場合、ACK で応答します。
次に、コントローラーが、アクセスする周辺デバイスのレジスタ アドレスを書き込みます。
周辺デバイスがレジスタ アドレスを肯定応答すると、コントローラーは書き込み/読み取りの各バイトの後に ACK を含むデータ バイトを送信します。
コントローラーはストップ コンディションを送信することでデータ送信を終了します。
次のイメージは、I2C 周辺デバイスに存在するレジスタ上のシングル バイトの読み取りおよび書き込みを示しています。