O problema parece estar na lógica, pois voce está usando a mesma variável
i tanto como indexador de endereço, como também do conteúdo do dado lido/gravado. Não é uma boa prática usar variáveis sem nome. Eu já teria feito algo assim :
cpp code
void main( ) {
char cEndereco = 0 ;
char cDado ;
while(1){
Delay_ms ( 1 ) ; // valor hipotetico
cDado =eeprom_read( cEndereco ); // lê endereço 0 da eeprom
cDado++ ; // incrementa a variável
Delay_ms ( 1 ) ; // valor hipotetico
eeprom_write( cEndereco , cDado ); // escreve valor incrementado no endereço 0
} // retorna ao loop para fazer tudo novamente
}
A dica do MOR_AL é fundamental, pois não sabemos se essas APIs que voce tá usando já implementam alguma verificação do status da Flash.
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."