PSoCまつり明けの記事としてはちょっと高難易度かもしれません。
さて、I2Cはアイ・ツー・シー、もしくは
アイ・スケア(スクエア)・シーと読みます。
I2Cはフィリップス・セミコンダクター(今のNXP)が開発した
2線式の双方向バスです。
シリアルデータライン(SDA)とシリアルクロックライン(SCL)の
2本を用いて通信をし100kbit/s,400kbit/s,1Mbit/s,3.4Mbit/s,5Mbit/s
の4つの通信スピードがあります。
UART(シリアル通信)と同じようにデバイス間の通信方式ですが
UARTとは異なり複数のデバイスとも通信することが出来ます。
I2Cには、デバイス同士にマスターとスレーブと言う関係性を持っています。
マスターのデバイスはスレーブに対する設定をしたり、スレーブが作ったデータを取ったりします。
スレーブのデバイスはスレーブ同士を見分けるための固定のアドレスと
レジスター(メモリーの集合郵便ポストみたいなもの)を持っています。
レジスターに設定やスレーブが用意したデータが格納され、
レジスター内のデータを返してマスター側とデータのやり取りをします。
多くの場合、I2Cの接続にはマスターが1つに対して
複数のスレーブが接続する単一マスター接続があります。
場合によって、複数のマスターと複数のスレーブを接続する
マルチマスター接続と言うのもあります。
I2Cで難しいのは8bitのセットで格納されているスレーブ側のレジスターです。
レジスターには0,1のビットが8個セットで格納されており、
格納してあるビット列で設定やデータの受け渡しをしています。
スレーブ側のレジスターに格納されているビット列を変更する事によって
スレーブ側の設定が変更されます。
また、一つのビットだけでも大きい意味を持つので、設定に関しては
スレーブ側のデーターシートを良く見る必要があります。
受け渡すデータも格納されている8bitだけでは無く、16bit,24bitと長くなる場合には
マスター側が「ビット演算子」を使ってデータを復元する必要性もあります。
ここまで分かっていればPSoCでI2Cを使う場合には問題ないかなと思います。
PSoCではCapSenseのモニターにもI2Cは使われており、何かとI2Cは登場する機会が
多いかなと思いますので、習得しておくと便利だと思います。
もしも、I2Cの細かい所を知りたい場合には
NXPの中の人が書いた解説を読むのが良いと思います。
https://developer.mbed.org/users/okano/notebook/i2c-access-examples/
次回は実際にPSoC5LPをマスター、スレーブ側を
センサーモジュールでI2Cの通信してみたいと思います。
0 件のコメント:
コメントを投稿