Atmel Xmega256A3でスリープから復帰した後、TWI/I2Cでいくつかの問題が発生しました。TWI / I2Cの詳細を掘り下げる代わりに、AVR1308アプリケーションノートに添付されたAtmelから提供されたtwi_master_driverを使用することにしました。
問題は、スリープから復帰した直後に1つまたはいくつかのTWIトランザクションが失敗したことです。XMegaに接続されたI2Cバスには、いくつかのポテンショメータ、温度計、RTCがあります。XMegaはバス上の唯一のマスターとして機能します。
AVRLIBCにあるスリープ関数を使用します。
{code for turning of VCC to all I2C connected devices}
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_enable();
sleep_cpu();
{code for turning on VCC to all I2C connected devices}
ピンを高く設定するRTCによってスリープから復帰したXMega。XMegaがスリープから復帰した後、ポテンショメータの1つに値を設定したいのですが、これは失敗します。何らかの理由で、TWIトランザクションの結果は、最初のトランザクションではTWIM_RESULT_OKではなくTWIM_RESULT_NACK_RECEIVEDになります。その後、すべてが再び機能するようです。
ここで何かを逃したことがありますか?XMega、スリープ、TWIに既知の問題はありますか?スリープから復帰した後、フラグをクリアするTWIをリセットする必要がありますか?
よろしくフレドリック