pp.608-609
非公式訳
スレーブモードのときは、I2Cの初期化とデータの送受信とができなければなりません。STARTコンディションもSTOPコンディションも送信できません。スレーブデバイスはバスをlistenしながら、マスターデバイス、general callのどちらかによってアドレス指定されるのを待っていなければなりません。
初期化する
I2Cモジュールをスレーブモードとして初期化するときは、下の手順を実行しなければなりません。
TWAR
レジスタに値を設定してスレーブアドレスを設定する。前に述べたように、TWAR
の上位7ビットがスレーブアドレスであり、残りの1ビットがTWGCE
ビットです。このビットを1にセットした場合は、general callアドレス($00)に応答します。それ以外の場合はgeneral callアドレスは無視されます。TWCR
レジスタのTWEN
ビットを1にセットしてI2Cモジュールを有効化する。TWCR
レジスタのTWEN
、TWINT
、TWEA
の各ビットを1にセットする。これで、I2Cが有効化されるとともにACKが生成される設定になります。
手順2、3は一度には実行できませんので注意してください。I2Cモジュールを有効化してから手順3を実行しなければなりません。
バスをlistenする
スレーブデバイスは、I2Cモジュールが初期化されたあと、バスをlistenしながらマスターデバイスからアドレス指定されるのを待たなければなりません。スレーブデバイスは、自分のアドレスがバスに流れてきたのを見つけると、ACKを返してからTWCR
レジスタのTWINT
フラグを1にセットします。スレーブがマスターデバイスからアドレス指定されたかどうかを知るためには、TWINT
フラグをポーリングで監視している必要があります。
データを送信する
マスターデバイスからアドレス指定され、読み出し要求を受けた場合は、以下の手順を実行して1バイトのデータを送信しなければなりません。
- 1バイトデータを
TWDR
にコピーする。 TWCR
レジスタのTWEN
、TWEA
、TWINT
の各ビットを1にセットしてバイトデータの送信を開始する。データを受信したあとにACKを受信しなくてもよい場合は、TWEA
はクリアしたままにしておいても問題ありません。その理由は、マスター側でのACKの生成には影響しないからであり、I2Cモジュールの内部状態が変化するにすぎないからです。ただしTWCR
レジスタのTWEA
ビットはとにかく1にセットすることを推奨します。TWCR
レジスタのTWINT
フラグをポーリングで監視しながら、バイトデータの送信が完了したかどうかを確認する。
データを受信する
マスターデバイスからアドレス指定され、書き込み要求を受けた場合は、以下の手順を実行して1バイトのデータを受信しなければなりません。