I2C - I²Cマスター
I2C - I²Cマスター
Information
本ページは私家版のため、誤り等あればご指摘ください。
最新の情報は公式のドキュメントをご参照ください。
http://mbed.org/handbook/I2C
I2Cマスター (I-squared-C)
SDA、SCLは、それぞれ2.2kΩ程度の抵抗器でプルアップしておきましょう。
連続送信・受信は、スタートコンディション・ストップコンディション・アドレスは自動的に発行されます。
1バイトずつ送受信する場合は、スタートコンディション・ストップコンディション・アドレス送信などの制御が必要です。
初期化
I2C name(sda, scl);
name: 名前
sda: SDAピン名(p9, p28)
scl: SCLピン名(p10, p27)
クロックレート
name.frequency(hz);
hz: クロック周波数
連続受信
val = name.read(address, data, length, ack);
address: I2Cアドレス(1~7bit)
data: 受信データを格納する配列(char *)
length: 受信データのバイト数
ack: false=ack、true=nack(省略時=false)
val: 結果 0=成功、0以外=失敗
連続送信
val = name.write(address, data, length, repeated);
address: I2Cアドレス(1~7bit)
data: 送信データの配列(char *)
length: 送信データのバイト数
repeated: false=ストップコンディション出力、true=ストップコンディション省略、リ ピー ト ス ター ト用(省略時=false)
val: 結果 0=成功、0以外=失敗
スタートコンディション出力
name.start();
ストップコンディション出力
name.stop();
受信
val = name.read(ack);
ack: false=ack、true=nack
val: 受信データ
送信
val = name.write(data);
data: 送信データ
val: 1=ack受信、0=他(nack)
参考
例
超音波センサーSRF05の値を読み込む
#include "mbed.h" I2C i2c(p9, p10); // sda, scl Serial pc(USBTX, USBRX); // tx, rx const int addr = 0x70; // define the I2C Address int main() { char cmd[2]; while(1) { cmd[0] = 0x0; // pointer to command register cmd[1] = 0x51; // Start ranging, results in cm i2c.write(addr, cmd, 2); // Send command string wait(0.07); // Could also poll, 65ms is typical // Set pointer to location 2 (first echo) cmd[0] = 0x2; i2c.write(addr, cmd, 1); i2c.read(addr | 1, cmd, 2); // read the two-byte echo result // print the ranging data to the screen float echo = 0.01 * ((cmd[0] << 8) + cmd[1]); pc.printf("Range = %.2f\n", echo); wait(0.1); } }
ストップコンディションを省略し、アドレスが同じデバイスや別のデバイスと通信を続けることができる (対応していないデバイスもあるっぽい)
リ
i2c.write(addr, cmd, 1, true); // *** true i2c.read(addr | 1, cmd, 2);
2 comments on I2C - I²Cマスター:
Please log in to post comments.
ドキュメントありがとうございます。 たいへん参考になりました。