Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
9 years, 10 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;で設定されているようですが、うまく動いていないようです。この後、どの様にして良いか分からずご質問させて頂きました。
よろしくお願いします。
1 Answer
9 years, 10 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
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 29 Dec 2014
こちらに移動しました。
http://developer.mbed.org/forum/ja/topic/5395/
posted by Manabu Taniguchi 30 Dec 2014