logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[C]Atmega16A,TWI i 24C512

krzemowy 23 Gru 2010 09:01 1411 2
REKLAMA
  • #1 8903366
    krzemowy
    Poziom 19  
    Uchędożyłem sobie układzik w którym Atmega zapisuje sobie dwunastobajtowe paczki danych do czterech EEPROMów 24C512. Całość zasadniczo ładnie działa, jednak sporadycznie zdarza się błąd TWI nr 0x38 oznaczający "Arbitration lost in SLA+W or data bytes". Jak zdołałem ustalić, błąd ten występuje w trakcie wysyłania danych do pamięci, mniej więcej w środku paczki danych(między 2 a 6 bajtem). Niestety nie zdołałem zaobserwować czy błąd jest wywołany szpilkowym zakłóceniem(chociaż w układzie nie ma niczego mocno siejącego) czy innymi złymi mocami. Dodatkowo zauważyłem że po wystąpieniu tego błędu(w odróżnieniu od innych błędów) TWI się blokuje i po zapisie do TWCR polecenia wysłania sekwencji START nic się nie dzieje, stan linii SCL I SDA pozostaje wysoki i nie jest generowane przerwanie od TWI.

    Przechodząc do meritum - czy ktoś spotkał się z podobnym problemem? Chodzi mi tylko o proste rozstrzygnięcie czy przyczyna występowania takiego błędu jest natury elektrycznej(zakłócenia szyny, skoki zasilania, supełki na ścieżkach itp.) czy powinienem skupić się na programie.

    EDIT: ww. problem występuje stosunkowo często przy zapisie co 100ms, rzadziej przy zapisie co 0.5s a przy zapisie co 1s jak na razie nie zauważyłem go w ogóle.
  • REKLAMA
  • #2 8903407
    Konto nie istnieje
    Konto nie istnieje  
  • #3 8903479
    krzemowy
    Poziom 19  
    Adresy mają ustawione kolejno 0, 1, 2 i 3, co oznacza że piny adresowe jak i piny WP są odpowiednio podłączone do plusa bądź masy ;) Program również po kolei je obsługuje, jak zapisze w całości jedną to zaczyna zapisywać następną. Błąd występuje zazwyczaj po zapisaniu kilkudziesięciu bajtów, niekiedy po kilkuset a zdarzało się że zdążył zapisać prawie połowę pamięci. Czy zostawienie jednego usuwa problem nie wiem, musiałbym wylutować pozostałe pamięci.
REKLAMA