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

[Atmega8][asm] Nie mogę odczytać z karty MMC

01 Sty 2012 16:54 2856 9
REKLAMA
  • #1 10334118
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #2 10335507
    rad231276
    Poziom 12  
    Drążyłem kiedyś temat Link ale jakoś nikt nie był w stanie mi pomóc więc musiałem go sam zgłębić i się udało....
    Proponuje przeanalizować poniższy kod funkcji który działa w 100% na ATmedze128 w CodeVision i z niego korzystam od dłuższego czasu...
    W Atmedze8 da się go upchnąć w ASM na pewno w C tez jeśli nie będzie funkcji printf. Bascoma się nie dotykam bo to już nie ta epoka... MMC często łapią zawiechy jeśli nie wykona się do końca pewnych poleceń
    np. właściwego resetu, bądź odczytania r1 wtedy tylko odcięcie zasilania pomaga... Ustawiania sektora na 512 nie robię bo zawsze mam sektor 512...


    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #3 10335612
    Mundi1970
    Poziom 24  
    Saabotaz napisał:
    Natomiast nadal jest problem z odczytem. Otrzymuję odpowiedź na komendę odczytu pojedyńczego bloku:
    &H FF 80 FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00....
    te zera ciągną się ponad 250 bajtów, w pewnym momencie dostaję token &HFE i odbieram dane. Ale nie zgadzają się one z tym co powinno być na karcie. Ta odpowiedź nie powinna tak wygladać.

    Jesteś pewny że dane się nie zgadzają? Pierwszy sektor dysku logicznego nie jest pierwszym sektorem dysku fizycznego.
  • REKLAMA
  • #4 10335638
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #5 10336157
    rad231276
    Poziom 12  
    Proponuje odczytać informacje o karcie jeśli wszytko jest poprawne
    istnieje możliwość ze karta może być np. zabezpieczona bądź też źle jest zaprojektowane podłączenie samej karty do procka... Sprawdź czy producent tego nie zaleca bo na przykład dla Hitachi zalecane są podciągnięcia do plusa linii SPI i pojedyncze komendy chodzą a już przesyłanie dużych ilości danych daje marne efekty (z autopsji)... Problemem jest też czasami różnica potencjałów 5V na 3,3V bo na takim chodzą kary MMC ja zastosowałem dzielnik napięcia dla linii SPI natomiast zasilanie przez stabilizator.... Czasami CS warto podciągnąć do "0".
    Możesz jeszcze spróbować z różnymi częstotliwościami SPI czasami karty SD nie lubią zbyt małych częstotliwości...
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #6 10339875
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #7 10341185
    rad231276
    Poziom 12  
    U mnie parametry transmisji dla ATMegi128 mam takie ustawienia z zegarem 11,052MHz
    // SPI initialization
    // SPI Type: Master
    // SPI Clock Rate: 4608,000 kHz
    // SPI Clock Phase: Cycle Start
    // SPI Clock Polarity: High
    // SPI Data Order: MSB First
    SPCR=0x5C;
    SPSR=0x00;

    Dla ATMegi8 z zegarem 8MHz
    analogicznie dałbym

    // SPI initialization
    // SPI Type: Master
    // SPI Clock Rate: 2000,000 kHz
    // SPI Clock Phase: Cycle Start
    // SPI Clock Polarity: High
    // SPI Data Order: MSB First
    SPCR=0x5C;
    SPSR=0x00;

    Oczywiście pomijam ustawanie I/O odpowiednio pinów SPI
  • #8 10341796
    Konto nie istnieje
    Konto nie istnieje  
  • #9 10342073
    rad231276
    Poziom 12  
    Trochę to dziwna sprawa ja bym przyjrzał się podłączeniu samej karty może coś jest nie tak z potencjałami, albo może lutujesz to na pajęczynie wtedy długość kabelków też ma znaczenie...Podaj jaką masz kartę - może coś się dojdzie z jakieś noty aplikacyjnej...

    Moje podłączenie wygląda tak:
    [Atmega8][asm] Nie mogę odczytać z karty MMC
  • #10 10342308
    Konto nie istnieje
    Konto nie istnieje  
REKLAMA