Причину не понял, происходит следующее: после записи или чтения массива в/из шины I2C, линия SDA остается в нуле.
Вылечил путем принудительной выдачи импульсов на линию SCL. Схема: ATmega128 (master) + FM24CL64 + DS1307. Скорость 100 кбод.
Код
void i2cSendStop(void)
{
TWCR = (i2cCheck() & TWCR_CMD_MASK) | _BV(TWINT) | _BV(TWEA) | _BV(TWSTO);
}
uint8_t i2cCheck(void){
uint8_t temp = TWCR;
if(!(PIND & _BV(PD1))){
TWCR = 0;
uint8_t i = 0;
PORTD &= ~_BV(PD0);
while(!(PIND & _BV(PD1))){
DDRD |= _BV(PD0);
Delay_5us();
DDRD &= ~_BV(PD0);
Delay_5us();
i++;
if(i > 15) break; //Fatal error, число 15 от фонаря. В моем случае i не более 2
}
PORTD |= _BV(PD0);
}
return temp;
}