Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

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

rafcio363 23 May 2011 01:27 5040 25
  • #1
    rafcio363
    Level 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
    Code: vbnet
    Log in, to see the code


    Code: vbnet
    Log in, to see the code


    Code: vbnet
    Log in, to see the code
  • #2
    dondu
    Moderator on vacation ...
    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 :)
  • #3
    domansolarpower
    Level 13  
    nie spawdzam ale zaznaczam ze mi zaczelo dzialac jak wywalilem rezystory, po prostu isp do karty + odpowiednie zasilanie 3,3V
  • #4
    rafcio363
    Level 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

    Code: vbnet
    Log in, to see the 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
  • #6
    rafcio363
    Level 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.
  • #7
    drzasiek
    CNC specialists
    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"?
  • #8
    rafcio363
    Level 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.
  • Helpful post
    #10
    drzasiek
    CNC specialists
    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.
  • #11
    rafcio363
    Level 30  
    drzasiek wrote:
    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
  • #12
    piotrva
    VIP Meritorious for electroda.pl
    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...
  • #13
    drzasiek
    CNC specialists
    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 wrote:
    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.
  • #14
    piotrva
    VIP Meritorious for electroda.pl
    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.
  • #15
    rafcio363
    Level 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.
  • #16
    drzasiek
    CNC specialists
    piotrva wrote:
    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.
  • #18
    manekinen
    Level 29  
    rafcio363 wrote:
    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 wrote:
    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ść :)
  • #19
    rafcio363
    Level 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.
  • #20
    manekinen
    Level 29  
    Wypróbuj zmiany w programie jakie zaproponowałem wyżej.
  • #21
    rafcio363
    Level 30  
    Oczywiście próbowałem ale bez efektu, sprawdzę jeszcze na tych tranzystorach.
    Jak nie zatrybi to zostanie mi chyba tylko dobudować bufor.
  • Helpful post
    #22
    manekinen
    Level 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.
  • #23
    rafcio363
    Level 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.
  • Helpful post
    #24
    drzasiek
    CNC specialists
    rafcio363 wrote:
    Diód zenera 3v3 nie mam na stanie

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

    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.
  • #25
    rafcio363
    Level 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.
  • #26
    rafcio363
    Level 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).