マイクロテクニカ製品サポートFAQ
[一覧] [1つ前に戻る] [マニュアル及び各種ダウンロードページへ]
I2CREAD,I2CWRITE命令の詳しい解説はありますか?
PBPでは2線式のI2C通信を行えるI2CREADとI2CWRITE命令があります。共にスレーブアドレスを送信して任意のI2C機器と通信ができます。

I2CREAD,I2CWRITE命令で指定するControl値はスレーブアドレスです。通信相手のスレーブ機器に割り振られたアドレスを指定します。EEPROMの場合には上位4ビットが1010となることが多いです。(データシートに記載があります)

I2C通信では最初にスタートコンディションがあります。SCLがHで、SDAがLになったところからスタートコンディションです。

下記にI2CREAD命令で24LC64(EEPROM)の12番地からデータを受信した場合のプログラム例と、その時の波形をロジアナで観測した図を示します。
また、同様にして12番地に0xAAのデータをI2CWRITE命令で書き込んだ場合のロジアナのデータも示します。


・スレーブアドレス1010000(0x50)のEEPROMの12番地からデータを受信した場合

addr var word
Rec_Data var word
addr = 12
I2CREAD SDA,SCL,%10100000,addr,[Rec_Data]

・12番地に0xAAのデータを書き込んだ場合

addr var word
addr = 12
I2CWRITE SDA,SCL,%10100000,addr,[$AA]

ロジアナで観察したデータは下記の通りです。
http://www.microtechnica.tv/support/ds/i2c_pbp.jpg

■通信スピードについて
PBPのI2C通信関連命令は、クロック周波数が最低8MHzから動作します。それ以上のクロック周波数でないとこの命令は使用できません。8MHzクロック
時は、I2C通信のクロックは100KHzとなります。

PICの動作クロックが20MHzの時は400KHzとなります。PICの動作クロックが8MHz以上の時に、I2C通信のクロック周波数を100KHzにしたい場合には、下記のDEFINEで調整できます。

DEFINE I2C_SLOW 1

なお、I2Cの1MHzクロックには対応していません。

PBPのI2CREAD及びI2CWRITE命令はEEPROMに限らず色々なI2Cデバイスと通信する時に使用できますが、スレーブアドレスは8ビットにしか対応していません。10ビットアドレスのものには対応できません。
オリジナル - FAQみたいです - 猫でいいです