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

ATMEGA128 vs SD - Inicjalizacja ok, po kilku zapisach błąd zapisu

pawel_5 18 Wrz 2012 12:53 1305 5
REKLAMA
  • #1 11322982
    pawel_5
    Poziom 13  
    Witam,

    Dane projektu:
    Atmega128 zasilana 3,3V
    Karta uSD 1GB wlutowana na płytkę jako główna pamięć zapisu zdarzeń
    Gniazdo karty SD do kopiowania danych z uSD na SD

    SD co działa:

    Inicjalizacja - działa zawsze bez problemu
    Zapisywanie - przy 250kHz zapis drugiego bajtu kończy się niepowodzeniem, przy 100kHz co dziesiąty kończy się niepowodzeniem
    Odczytywanie - dziala zawsze prawidłowo niezależnie od szybkości


    uSD co działa:

    Inicjalizacja - działa zawsze bez problemu
    Zapisywanie - przy 250kHz zapis drugiego bajtu kończy się niepowodzeniem,przy 100kHz co dziesiąty kończy się niepowodzeniem
    Odczytywanie - działa zawsze bez problemu

    Kartę uSD inicjalizuję zaraz po włączeniu układu.
    Kartę SD inicjalizuję z każdorazowym jej włożeniem.

    Nie używam żadnego konwertera napięć, gdyż układ działa na 3,3V.

    Ze względu na to, że inicjalizacja jak i sam odczyt działają zawsze prawidłowo umieszczam jedynie kod odpowiedzialny za zapis pojedynczego bajtu.


    funkcja sector write:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod



    funkcja SEND CMD

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Analizowałęm ten kod już wiele razy i nic. Proszę o sugestie.
  • REKLAMA
  • REKLAMA
  • #3 11323078
    pawel_5
    Poziom 13  
    Bo aplikacja w ogóle nie wymaga FAT, a na to szkoda cennego miejsca.
  • REKLAMA
  • Pomocny post
    #4 11327973
    zbv
    Poziom 20  
    Jeżeli masz możliwość to sprawdz z inną kartą.
    Czy jak wywołujesz procedurę zapisu i zapis się nie uda od razu przerywasz zapis czy robisz jeszcze kilka prób?
    Czasem jest tak że wywołanie procedury zapisu kończy się niepowodzeniem, ale wywołanie jej po raz drugi czy nawet trzeci skutkuje zapisem danych na kartę, jak ja się bawiłem kartami sd to ten efekt występował w różnym nasileniu w zależności od karty sd.
  • REKLAMA
  • Pomocny post
    #5 11328826
    krru
    Poziom 33  
    Trochę mało czytelne te kody, ale wydaje mi się, że w funkcji SectorWrite nie inkre/dekrementujesz zmiennej index w pętli oczekiwania na kod po wysłaniu bloku danych.
    Cytat:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

  • #6 11336763
    pawel_5
    Poziom 13  
    Dziękuję za chęć pomocy krru i zbv . Problem okazał się w zbyt małej deklaracji tablicy. Zmiana częstotliwości SPI powodowała zmianę nasilenia problemu wyłącznie przypadkowo.
    Jeszcze raz dzięki, czasem po prostu trzeba się wygadać na forum i pomysł przychodzi sam do głowy.
REKLAMA