PIC32MXのI2C通信不良?

PIC32MX220F032BのI2Cモジュールを使うときにハマったこと

・Harmony Library使用条件
・I2CはI2C1

リスト1
DRV_I2C0_MasterStart();
DRV_I2C0_WaitForStartComplete();

だけで,スタートコンディションが生成されると思っていたが,この後,

リスト2
DRV_I2C0_ByteWrite(0b01000000);
DRV_I2C0_WaitForByteWriteToComplete();

を実行すると,I2CSTATのIWCOL<7>が"1"となり,衝突する.

デバッガで調べるとリスト1の実行後,I2CCONのSEN<0>が"1"となっている.
スタート信号が送られたら,自動的に"0"になるとデータシートに書かれているのに・・・

結論,
DRV_I2C0_WaitForByteWriteToComplete();
で,スタート信号を送り終わるまで待つかと思ったが,
送り終わるまで待っているが,バスがアイドルになるまでは待っていない事が判明.
よって,この後に
while(!DRV_I2C0_MasterBusIdle());
を突っ込んで,バスアイドルを待てば,そのうちI2CCONのSEN<0>が"0"に戻り,データ送信が可能となる.


コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください