Renesas Synergy™

FAQ 1006743 : 外部の EEPROMに I2Cバスで接続する場合の処理例(マスタとしての動作)を教えてください。

1.処理の概略手順

 

通信を行うには、以下の手順となります。
(0)ポートの設定   (PM32,33を 1、P32,33を 0に設定)
(1)転送クロックの設定
(2)コントロール・レジスタの設定
(3)PM32, 33を 0に設定
(4)ストップ・コンディションを発行し、バスが解放されているのを確認
(割り込み又は SPD0がセットされることで確認する)
(5)スタート・コンディションを発行し、バスの占有を行う    (STD0がセットされた事を確認する)
(6)スレーブのアドレスを送信し、スレーブの存在を確認(ACK)
(割り込みのタイミングで ACKD0を確認する。ACKがなければ転送を中止する)
(7)EEPROMのアドレスを送信する

書き込みの場合には引き続き
(8)書き込むデータを送信して、割り込みで ACKを確認する
(ACKがなければ、転送動作を終了)
(9)ページ・ライトで書き込むデータが残っていれば(7)を繰り返す
(10)ストップ・コンディションを発行して書き込みを終了する

読み出しの場合には
(11)スタート・コンディションを発行して、データ転送を読み出し方向に
(12)8クロック・ウエイト、自動ACK応答をセット
(13)ダミー・データ(0FFH)を書いて転送をスタート
(14)受信完了したらデータを読み出す
(15)全データの受信が完了したら、自動ACK応答をキャンセルし、9クロック・ウエイトにして、 8クロック目でウエイト解除
(16)ストップ・コンディションを発行する

 

2.処理フロー
以上の処理を行う場合のフローをPDFに示します。
なお、ここでは簡単のために、データは全て連続して読み出したり、書き込んだりできるものとします。

 

3.注意点
(1) ACKについての誤解
  ACKを受信しなかった時に ACK待ちでループしてはいけません。 I2Cでは ACKのタイミングは固定されており、 そのタイミングで ACKが来なければ、もう ACKと認識されることはありません。 ACKが来なければ通信は中止してください。
(2) 転送方向についての誤解
  スレーブからデータを読み出す際に、スレーブ(EEPROM)に 2バイトのアドレスをデータとして送信して、 そのままデータの受信動作には移りません。 I2Cバスとしてこのような動作はあり得ません。 EEPROMのアドレスを指定した後、リスタートを行い、データのリードで再度通信を再開する必要があります。  使用される EEPROMの仕様を御確認ください。

適用製品

UPD78003xA
他にご質問がございましたら、リクエストを送信してください