koheiと申します。
現在RL78/G13マイコンとEEPROM間でI2C通信を実施していますが、上手くいかない点がありましたので質問します。
【問題点】
EEPROMから8bitのデータをReadできたら、マイコン側はACKを出力時、その後ストップコンディションを生成することで通信が終了します。
しかしマイコン側はSDAラインにACKを出力(Low)にすると、そのままSDAラインがLowに固定されてしまいます。
結果、ストップコンディション(SDAラインをLow⇒High)が生成されず通信を正常に終了させることができません。
【プログラムの流れ】
ACKE0 = 1; //アクノリッジを許可する。
IICA0 = 00; //クロックを出力する
ウェイト
SPT0 = 1; //ストップコンディションを生成する。
【質問事項】
①I2C通信でスレーブ側(EEPROM)がデータを送信する場合、マイコン側はクロックのみを出力しなくてはなりません。
この場合、IICA0=00でクロックを出力していますが、このやり方は正しいですか?
②ACKをCPU側が生成する場合、ACKEnを1に設定する必要はありますか?
③CPUがACKを出力後、SDAラインがLow固定になってしまうのを解除する方法はありますか?
大変恐縮ですが、ご回答頂けると幸いです。
チョコです。
この現象は、EEPROMがSDAをLowに引っ張っているものです。
SCLラインをポートとしてダミークロックを出してください。
ハードウェアマニュアルの「図13-28 シングルマスタ・システムでのマスタ動作」の「注」に書かれている状態だと思います。
これから出かけるので、詳細は後ほど。