■ 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ビットアドレスのものには対応できません。
|