Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[atmega328][bascom][avr-dos]Odczyt karty mmc nie działa

rafcio363 23 Maj 2011 01:27 4740 25
  • #1 23 Maj 2011 01:27
    rafcio363
    Poziom 30  

    Witam.
    Mam problem z odczytem karty mmc, miałem już działający układ z dobrym kodem ale gdzieś się zawieruszył w gąszczu plików i musiałem się za to wziąść od nowa.
    Jednak niechce mi działać.
    Karty mam 2 (32mb mmc sanyo i siemens, obie w fat 16).
    Na jednej dostaje error init file system 229
    a na drugiej error during drivie init 225

    Co najciekawsze wczesniej działały mi obie na starym projekcie teraz nie chce żadna...
    Połączenia sprawdzone 100razy, zasilanie 3v3 100n i elektrolit przy samym czytniku,dwie masy na czytnik podane.


    [atmega328][bascom][avr-dos]Odczyt karty mmc nie działa

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0 25
  • #2 23 Maj 2011 08:29
    dondu
    Moderator Mikrokontrolery Projektowanie

    By mikrokontroler działał, niezbędne jest jego prawidłowe zasilenie, ale tego na schemacie nie widać. Gratuluję uporu 100-krotnego sprawdzania podłączenia, ale może jednak włąśnie tu jest problem?

    Programu nie sprawdzałem, bo niestety tego "narzecza" nie znam :)

    0
  • #3 23 Maj 2011 08:52
    domansolarpower
    Poziom 13  

    nie spawdzam ale zaznaczam ze mi zaczelo dzialac jak wywalilem rezystory, po prostu isp do karty + odpowiednie zasilanie 3,3V

    0
  • #4 23 Maj 2011 11:30
    rafcio363
    Poziom 30  

    Zasilania są ok,mam podpięte inne rzeczy i reszta działa ok.
    Na rezystorach działało wcześniej i tym samym procku.
    Podmienilem czytnik sd na próbę.
    Wydaje mi się że źle mam config mmc

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod
    Code:
    'Res/Cs    Ss B.2
    
    'Cmd/Di  Mosi B.3
    'Clk/Sck  Sck B.5
    'Dat/Do  Miso B.4
    [atmega328][bascom][avr-dos]Odczyt karty mmc nie działa

    0
  • #6 24 Maj 2011 16:05
    rafcio363
    Poziom 30  

    Dalej niestety nic nie ruszyłem,chyba podmienię procka bo skończyły mi się pomysły (może go za bardzo przygrzałem hotem bo lutowałem go kilka razy..)
    Ciągle dostaję błąd 229 przy inicjacji systemu plików.

    Dodano po 1 [minuty]:

    Chociaż napięcia są wszędzie 3,2V i + 5V na MISO gdzie niema dzielnika na rezystorach.

    0
  • #7 24 Maj 2011 16:08
    drzasiek
    Specjalista - Mikrokontrolery

    Jak podłączasz kwarc to jeszcze kondensatory do masy mają być.
    Co do karty, to widzę po dzielniku napięcia, że uC zasilacz 5V a kartę 3,3V. Linia MISO podłączona jest bezpośrednio a więc stan wysoki ( "1" ) na tej linii to 3,3V. Nie wiadomo jak uC zasilany z 5V odbiera to napięcie, czy jeszcze "1" czy już może "0"?

    0
  • #8 24 Maj 2011 16:20
    rafcio363
    Poziom 30  

    Tak wiem ale kondensatory są teraz nie istotne bo taktuje go wewn. oscylatorem.Pod wsadzeniu karty na miso mam 3.7V
    Najdziwniejsze jest to że mi to wszystko działało na pająku,teraz zrobiłem płytkę napisałem kod od nowa i klapa.

    0
  • Pomocny post
    #10 24 Maj 2011 16:44
    drzasiek
    Specjalista - Mikrokontrolery

    To ja powtórzę jeszcze raz, choć może nie dokładnie to jest przyczyną ale strasznie to gryzie i ja to bym najpierw sprawdził. Układy CMOS (czyli np Atmega) mają poziom napięcia wysoki równy 0,7 napięcia zasilania. Czyli dla napięcia zasilania uC = 5V powinno być min 3,5V. Na pająku mogło działać bo może zasilałeś z innego zasilacza, innego stabilizatora (innego egzemplarza) a że wszystko akurat mogło jechać po granicy a teraz może już tak nie jest i są problemy. Masz jakiś konkretny powód zasilania uC z 5V? Spróbuj na chwilę wywalić dzielniki i obniżyć napięcie do 3,3V na całości albo na MISO daj tranzystor.
    A co do napięcia 3,7V jakie zmierzyłeś na MISO to skąd ono się tam mogło wziąć? pewnie mierzyłeś stan wysokiej impedancji uC na wejściu czyli przypadkowe wartości.

    0
  • #11 24 Maj 2011 18:55
    rafcio363
    Poziom 30  

    drzasiek napisał:
    To ja powtórzę jeszcze raz, choć może nie dokładnie to jest przyczyną ale strasznie to gryzie i ja to bym najpierw sprawdził. Układy CMOS (czyli np Atmega) mają poziom napięcia wysoki równy 0,7 napięcia zasilania. Czyli dla napięcia zasilania uC = 5V powinno być min 3,5V. Na pająku mogło działać bo może zasilałeś z innego zasilacza, innego stabilizatora (innego egzemplarza) a że wszystko akurat mogło jechać po granicy a teraz może już tak nie jest i są problemy. Masz jakiś konkretny powód zasilania uC z 5V? Spróbuj na chwilę wywalić dzielniki i obniżyć napięcie do 3,3V na całości albo na MISO daj tranzystor.
    A co do napięcia 3,7V jakie zmierzyłeś na MISO to skąd ono się tam mogło wziąć? pewnie mierzyłeś stan wysokiej impedancji uC na wejściu czyli przypadkowe wartości.

    ojj Kolego masz u mnie duuuże piwo :) :popcorn:
    Podpiąłem na krótko 3.3V i układ ruszył :!:
    Wcześniej tak jak wspomniałeś zasilałem układ z innego źródła 5V.
    Muszę jednak zostać przy zasilaniu 5V docelowo bo mam kilka układów i minium zasilania to 4.1V (em4095).Ale wolałbym zostać przy 5V bo mam docelowo tam mieć lm2940-5.
    Czy dodanie tranzystora na miso może rozwiązać problem?
    [atmega328][bascom][avr-dos]Odczyt karty mmc nie działa

    0
  • #12 24 Maj 2011 19:02
    piotrva
    Moderator na urlopie...

    Hmm, ja mam parę kart SD/MMC na dzielnikach rezystancyjnych podpiętych do układów 5V i działają... Czy na 100% poprawnie zbudowałeś dzielniki? Bo ja kiedyś na początku pomyliłem i zamiast do masy podpiąłem do zasilania drugi koniec dzielnika...

    0
  • #13 24 Maj 2011 19:06
    drzasiek
    Specjalista - Mikrokontrolery

    Lepszy byłby MOS bo w bipolarnym masz spadek napięcia na CE. Ale nie powinno aż tak przeszkadzać. Próbuj, uC ani karty tym nie uszkodzisz :)

    Dodano po 2 [minuty]:

    piotrva napisał:
    Hmm, ja mam parę kart SD/MMC na dzielnikach rezystancyjnych podpiętych do układów 5V i działają... Czy na 100% poprawnie zbudowałeś dzielniki? Bo ja kiedyś na początku pomyliłem i zamiast do masy podpiąłem do zasilania drugi koniec dzielnika...

    Może masz właśnie te przypadki w których napięcie jedzie po granicy i działa. Dużo zależy od stabilizatora i napięcia wejściowego, zobacz sobie na LM7805 albo chociażby LF33 jak się rozjeżdża napięcie wyjściowe przy zmianie wejściowego.

    0
  • #14 24 Maj 2011 19:12
    piotrva
    Moderator na urlopie...

    No jeśli VIN jest ok 9V przed LM7805 to później LF33CV podpięty za LM7805 (czyli do +5V) daje równiutkie +3,3V, napięcia na pinach IN karty są też ok, a procesor bez problemu rozpoznaje 3,3V jako logiczną jedynkę (wszystko powyżej 0,7V to logiczne jeden dla tych układów)... Stąd moje zdziwienie dlaczego koledze nie działa, skoro w teorii i praktyce działa i to nie jednej osobie... Stąd prośba o dodatkowe sprawdzenie tego dzielnika.

    0
  • #15 24 Maj 2011 19:36
    rafcio363
    Poziom 30  

    Dzielniki były podłączone dobrze, podpięte jak wspomniałeś "9V przed LM7805 to później LF33CV podpięty za LM7805 (czyli do +5V) daje równiutkie +3,3V" LF nie dawał idealnie 3.3 tylko 3.2 jak dobrze pamiętam.Jutro powalczę i dam znać czy był jakiś błąd.

    0
  • #16 24 Maj 2011 19:36
    drzasiek
    Specjalista - Mikrokontrolery

    piotrva napisał:
    a procesor bez problemu rozpoznaje 3,3V jako logiczną jedynkę (wszystko powyżej 0,7V to logiczne jeden dla tych układów)

    Ale 3.3 V w stosunku do 5V to jest 0.66 a nie 0.7 więc ma prawo nie działać. Stabilizator 5V lubi czasem dać nieco ponad, stabilizator 3,3V bywa, że daje ok 3,25 i stosunek jeszcze gorszy się robi.

    0
  • #18 26 Maj 2011 22:08
    manekinen
    Poziom 29  

    rafcio363 napisał:
    Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 4 , Noss = 1

    Spróbuj tak:
    Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 4 , Noss = 1
    Może nawet z tymi dzielnikami ruszy, jest to poprawne ustawienie.

    Polarity (CPOL) = Low - w czasie bezczynności linia zegarowa powinna mieć stan niski
    Phase (CPHA) = 0 - dane odczytywane przy drugim zboczu zegara (opadającym, jeśli CPOL=0)
    (chyba nie pokręciłem)


    rafcio363 napisał:
    Czy dodanie tranzystora na miso może rozwiązać problem?

    Sądzę że narobi więcej kłopotów jak pomoże. Te tranzystory wprowadzą ogromne opóźnienie (ogromne, jak na zegar 2MHz). Przerabiałem już takie rzeczy i wypadają okropnie. Jeśli już, to opóźniaj również mosi i sck. Albo ustaw baaaardzo małą prędkość :)

    0
  • #19 28 Maj 2011 19:36
    rafcio363
    Poziom 30  

    Obniżyłem zasilanie do 4.2V , zmieniłem dzielnik lini z karty z 3,3k na 5,6k co dało podział napięć na 3.15v. Ale dalej mam błąd przy odczycie.
    0.7 z 4.2V daje 2.9 jak stan wysoki ale i tak nie trybi..

    Jak podam 3.1 =3.5V na procek i kartę bez dzielników to działa bez problemu.

    0
  • #20 29 Maj 2011 11:37
    manekinen
    Poziom 29  

    Wypróbuj zmiany w programie jakie zaproponowałem wyżej.

    0
  • #21 29 Maj 2011 11:41
    rafcio363
    Poziom 30  

    Oczywiście próbowałem ale bez efektu, sprawdzę jeszcze na tych tranzystorach.
    Jak nie zatrybi to zostanie mi chyba tylko dobudować bufor.

    0
  • Pomocny post
    #22 29 Maj 2011 12:11
    manekinen
    Poziom 29  

    A najlepiej to jak byś miał możliwość podglądnięcia tych sygnałów na oscyloskopie, bo podejrzewam że tu chodzi o zbocza sygnałów CLK i MISO - na pewno nie idą w parze z tak dużym zegarem. Zmniejszenie prędkości SPI rozwiązałoby problem, potrzebne Ci aż 2MHz?

    I nie wiem jak z tymi dzielnikami bo nigdy w ten sposób nie łączyłem, ale bezpośrednio to lata mi nawet przy SPI 10MHz (wyżej nie sprawdzałem).

    A może wypróbuj diody zenera zamiast dzielników? Rezystory 220ohm powinny być ok. Lub nawet mniejsze. Tak jak jest to zrobione w USBASP przy konwersji napięcia dla USB.

    0
  • #23 29 Maj 2011 12:42
    rafcio363
    Poziom 30  

    Niestety nie posiadam oscyloskopu,obecnie mam ustawiony zegar 1mhz i clockrate 4. Diód zenera 3v3 nie mam na stanie więc i tak czeka mnie wizyta w sklepie jutro więc może dostanę ten bufor.

    Konwerter poziomów z tranzystorami nie dał poprawy.
    Może problem tkwi w przewodach do czytnika.Obecnie mam podłaczony czytnik do pcb tasiemką komputerową 4żyłową + osobną zasilanie długość ok.20cm.

    0
  • Pomocny post
    #24 29 Maj 2011 13:00
    drzasiek
    Specjalista - Mikrokontrolery

    rafcio363 napisał:
    Diód zenera 3v3 nie mam na stanie

    A jak pójdziesz do sklepu to będziesz kupował diódy czy diody? :)
    Cytat:

    Może problem tkwi w przewodach do czytnika.Obecnie mam podłaczony czytnik do pcb tasiemką komputerową 4żyłową + osobną zasilanie długość ok.20cm.

    Daj na krótkich przewodach (nie na taśmie ), długie przewody blisko połączone w taśmie dają jakieś tam pojemności.

    0
  • #25 29 Maj 2011 19:57
    rafcio363
    Poziom 30  

    Wymiana przewodów :scatter: na grubsze i połowe krótsze pomogła :rofl:
    Docelowo i tak muszę mieć dłuższe więc dam znać o efektach i nie zamykam tematu.

    0
  • #26 06 Cze 2011 16:29
    rafcio363
    Poziom 30  

    Kluczowa jest długość przewodów,bynajmniej w moim zestawieniu max 5-10cm. Czym mniej tym lepiej i działa na większej ilości kart (dodam że stabilizator 3v3 mam przy samym czytniku).

    0