Atmel Xmega256A3을 사용하여 잠자기에서 깨어 난 TWI/I2C에 몇 가지 문제가있었습니다. TWI/I2C의 세부 사항을 파헤 치지 않고 AVR1308 애플리케이션 노트에 첨부 된 Atmel에서 제공 한 twi_master_driver를 사용하기로 결정했습니다.Xmega에서 수면 후 TWI 처리에 실패했습니다
문제는 잠자기에서 깨어 난 직후에 하나 또는 몇 개의 실패한 TWI 트랜잭션입니다. XMega에 연결된 I2C 버스에는 몇 가지 전위차계, 온도계 및 RTC가 있습니다. XMega는 버스의 유일한 마스터 역할을합니다. 핀 높이를 설정 RTC가 잠에서 깨어으로
{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}
XMEGA :
우리 AVRLIBC 검색된 절전 기능을 사용한다. XMega가 잠자기에서 깨어 난 후에는 전위차계 중 하나에 값을 설정하려고하지만 실패합니다. 어떤 이유로 TWI 트랜잭션 결과는 첫 번째 트랜잭션의 TWIM_RESULT_OK 대신 TWIM_RESULT_NACK_RECEIVED입니다. 그 후 모든 것이 다시 작동하는 것 같습니다.
여기에 뭔가가 빠졌습니까? XMega, 수면 및 TWI에 대해 알려진 문제가 있습니까? 수면에서 깨어 난 후 어떤 플래그를 지우는 TWI를 재설정해야합니까?
안부 프레드릭
팁 주셔서 감사합니다. 우리는 문제를 해결 한 것으로 보이는 Peter Fleurys I2C lib로 전환했습니다. – Fredrik