2011-03-31 77 views
1

從Atmel Xmega256A3睡眠中醒來後,TWI/I2C出現了一些麻煩。我們沒有深入討論TWI/I2C的細節,而是決定使用Atmel提供的twi_master_driver附加到AVR1308應用筆記。Xmega睡眠後失敗的TWI交易

問題是一個或幾個失敗的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從睡眠中醒來後,我們想要在其中一個電位計上設置一個值,但是失敗。出於某種原因,TWI事務結果在第一個事務中是TWIM_RESULT_NACK_RECEIVED而不是TWIM_RESULT_OK。之後,一切似乎再次起作用。

我們在這裏錯過了什麼嗎? XMega,睡眠和TWI有什麼已知問題嗎?我們是否需要重新設置從睡眠中醒來後清除任何標誌的TWI?

問候 弗雷德裏克

回答

2

有一種情況,內部狀態機卡在中間的狀態,如果交易沒有完全完成I2C/TWI的通病。當從機在下一個事務中尋址時,從機不會正確響應。當主器件復位或停止通過讀或寫部分輸出SCK信號時,通常會發生這種情況。一種解決方案是在啓動任何數據事務之前手動切換SCK行8或9次,以使從站中的內部狀態機全部重置爲傳輸點的開始,然後他們都在查找其地址字節。

+0

感謝您的提示。我們最終轉而使用Peter Fleurys I2C lib,這似乎解決了這個問題。 – Fredrik 2011-04-04 09:29:14