9 years, 3 months ago.  This question has been closed. Reason: Duplicate question

LPC82XでI2Cのリスタートコンディションがうまく動いていないようです。

こんにちは

Switch Science mbed LPC824を入手しまして、MMA8451とI2Cで通信しようとしたところ、うまく動かず次の質問をしました。 測定器やデバッガなど持ち合わせていないので、他のmbedでInteruptInを利用しI2Cの周波数を低くして、SCLとSDAを見たところ、リスタートコンデションがうまく動いていないようです。

http://developer.mbed.org/questions/5761/I2C-Problem/

mbed-srcのtargets/hal/TARGET_NXP/TARGET_LPC82X/i2c_api.cを確認しましたが、 repeated_startを1にするコードは存在していません。

static uint8_t repeated_start = 0;
~省略~
inline int i2c_start(i2c_t *obj)
{
    int status = 0;
    if (repeated_start) {
        obj->i2c->MSTCTL = (1 << 1) | (1 << 0);
        repeated_start = 0;
    } else {
        obj->i2c->MSTCTL = (1 << 1);
    }
    return status;
}

また、複数バイトの処理であるi2c_read、i2c_writeでは、i2c_param.stop_flag = stop;で設定されているようですが、うまく動いていないようです。この後、どの様にして良いか分からずご質問させて頂きました。

よろしくお願いします。

こちらに移動しました。

http://developer.mbed.org/forum/ja/topic/5395/

posted by Manabu Taniguchi 30 Dec 2014

1 Answer

9 years, 3 months ago.

LPC812ですが以前I2Cの挙動で不思議なことがあったときに調べたものです。 参考になるでしょうか http://pukiwiki.mujirushi.org/index.php?%A4%B3%A4%B3%A4%ED%A4%CE%A4%C8%A4%D3%A4%E9%2F2014-01-30

Accepted Answer

KAWAMOTOさん

情報有り難うございます。LPC812と同じように、LPC82x User manual Rev. 1 — 18 September 2014の15.3.1 I2C transmit/receive in master modeにMSTDATにスレーブアドレスを書き込んでから (MSTCTLレジスタの)MSTSTARTビットを1にセットすると書いてありました。

この処理は、mbed-srcを見ますとLPC81XとLPC82Xで同じ処理をしていました。LPC82Xには、I2C-bus ROM APIというものがあるようで、i2c_read、i2c_writeの処理が違っていました。やはり、何かこの辺りの記述に問題があるようです。この部分をユーザが修正することは可能なのでしょうか。

posted by Manabu Taniguchi 29 Dec 2014

Questionsに質問したのですが、相談した場所が適切でなかったようなので、日本語フォーラムに再度アップさせて頂きます。

posted by Manabu Taniguchi 30 Dec 2014