Sprawa wygląda następująco:
Mam Atmegę8, którą programuję w C (avr-libc). Zapisuję 20 bajtów danych do pamięci eeprom za pomocą funkcji eeprom_write_byte pod określone adresy. Następnie, nie wyłączając zasilania, w dalszej części kodu odczytuję te dane przez eeprom_read_byte. Wyświetlam je, wszystko jest ok.
Kolejno, wyłączam zasilanie, włączam ponownie, pomijam etap zapisywania za pomocą przycisku i znów odczytuję te same komórki EEPROM. Tym razem, jakieś 25% odczytów jest niepoprawnych.
Samo zresetowanie uC (bez wyłączania zasilania) nie powoduje błędnych odczytów.
Dodam, że na czas zapisów i odczytów wyłączam przerwania. Dokumentacja avr-libc mówi, że funkcje obsługi EEPROMu same dbają o to, żeby pamięć była gotowa do odczytu/zapisu (eeprom_is_ready()).
Co może być przyczyną takiego działania? Czy to wina uC?
Nie używałem wcześniej EEPROMu w tym uC, więc na pewno przeszedł więcej niż 100 cykli zapisu.
Mam Atmegę8, którą programuję w C (avr-libc). Zapisuję 20 bajtów danych do pamięci eeprom za pomocą funkcji eeprom_write_byte pod określone adresy. Następnie, nie wyłączając zasilania, w dalszej części kodu odczytuję te dane przez eeprom_read_byte. Wyświetlam je, wszystko jest ok.
Kolejno, wyłączam zasilanie, włączam ponownie, pomijam etap zapisywania za pomocą przycisku i znów odczytuję te same komórki EEPROM. Tym razem, jakieś 25% odczytów jest niepoprawnych.
Samo zresetowanie uC (bez wyłączania zasilania) nie powoduje błędnych odczytów.
Dodam, że na czas zapisów i odczytów wyłączam przerwania. Dokumentacja avr-libc mówi, że funkcje obsługi EEPROMu same dbają o to, żeby pamięć była gotowa do odczytu/zapisu (eeprom_is_ready()).
Co może być przyczyną takiego działania? Czy to wina uC?
Nie używałem wcześniej EEPROMu w tym uC, więc na pewno przeszedł więcej niż 100 cykli zapisu.