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] [C][AVR] Błędny odczyt sektora #0 z karty micro SD 512MB (Kingston)

saper_2 03 Maj 2015 22:31 1134 2
REKLAMA
  • #1 14666315
    saper_2
    Poziom 18  
    Witam,

    Próbuję odczytać z karty micro SD 512MB (Kingston) sektor #0 (addr=0x00000000) ale karta zwraca mi kompletnie inny sektor,a raczej blok zaczynający się od 0x087DD2A6 (wyszukałem na karcie Hex-edytorem dane ze zwróconego bloku). Dane wysyłane po SPI się zgadzają z tymi co podaję w parametrach funkcji...

    Funkcje komunikacyjne (wysyłanie bajtu do spi, przesyłanie poleceń):
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


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


    CRC16 odczytanych danych i przesłanych się zgadza, ale nie zgada się "zakres danych" zupełnie jak by karta ignorowała pole adresu albo "wciskało się" tam "coś".
    Jeżeli byłby problem z cmd/cmd2 to inicjacja by nie działała, a ta działa wzorowo (tylko jedna karta - GoodRAMu nie chciała w ogóle gadać, przy ACMD41 daje time-out) -czyli inicjacja przebiega bez najmniejszych problemów. Aha inicjuje kartę: CMD0, CMD8, CMD58, CMD55+ACMD41, CMD58, CMD10, CMD9, CMD55+ACMD13 .

    Sprzęt: Adapter Propox'u ADPmicroSD, płytka z ATMega8 moja własna zasilana z płytki propoxu, używam HW spi, spi_clk=fcpu/128=125kHz, jedynie trochę mnie niepokoi brak rezystora Pull-up po stronie karty z pinu DO (przed buforem 74LVX125).

    Próbowałem w hex edytorze (kartę włożyłem do czytnika i otwarłem ją w HxD) znaleźć zwrócony blok danych - a przynajmniej pierwsze 16 bajtów dla różnych kart, dla każdego bloku generuje CRC16 aby nie porównywać byte-by-byte :) :
    * Kingston 512MB - zwrócone dane znalazłem pod 0x087DD2A6 (crc16=0xB244)
    * Sandisk 2GB - zwrócone dane znalazłem pod 0x1FB4A024 (crc16=0x6158)
    * Sandisk 1GB - Nie znalazłem bloku danych w hex edytorze ale początek bloku wygląda identycznie jak dla Kingston 512M (crc16=0xA410)
    * Kingston 2GB - Nie znalazłem bloku danych w hex edytorze :/ (crc16=0x70F3)
    Mam jeszcze 2 karty SDHC 8GB (Kingston - crc16: 0x9619 i 0x33E7) i z nimi taki sam wynik losowy blok danych ale zawsze ten sam dla danej karty.
    Jedyna wspólna część bloku dla kart to jego koniec zawsze taki sam 55AA .

    Może ktoś ma jakieś idee? Może coś źle robię?
    Już od południa nad tym siedzę i skończyły mi się już pomysły....

    W wolnym czasie w tygodniu zrobię sobie płytkę-adapter z samym gniazdkiem microsd (+rezystory zabezpieczające ~22R linie i pullup na wszystkich liniach ~100k) i spróbuję takie coś. Może faktycznie coś nie tak z adapterem...
  • REKLAMA
  • Pomocny post
    #2 14667732
    trol.six
    Poziom 31  
    Kod ze strony http://www.dharmanitech.com/2009/01/sd-card-interfacing-with-atmega8-fat32.html
    mi funkcjonował, w sensie odczytu.

    Może kolega przetestuje sobie, czy też przeglądnie. Może łatwiej będzie wykryć czy problem jest sprzętowy czy programowy.
  • #3 14669244
    saper_2
    Poziom 18  
    Witam,

    Bardzo dziękuję za próbę pomocy, jednak jak zwykle winny jest nikt inny jak programista :)

    Otóż w HxD edytorze ja głupi otwierałem partycję (wpis z literką dysku w komputerze), a nie Physical Drive (czy Removable Media) no i dzięki temu widziałem sektor 0 partycji nie dysku (czy karty)... A, że znajdowałem ciąg danych to przypadek, gdyż te 2 karty co znalazłem coś, były z formatowane jako bootujące z programami (jedna do flash'a biosu ,a druga jakieś recovery), czyli znajdowałem ciąg z sektora MBR w danych jakiegoś pliku na karcie...

    Podsumowując, 2 dni siedząc nad jednym i tym samym "odmużdża" ;) , trzeba sobie zrobić kilkanaście godzin przerwy/lub nawet dni, żeby odkryć swój własny błąd....

    Dziękuję trol.six za próbę pomocy, mimo mojej własnej głupoty :)

    !zamknij
REKLAMA