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

[MEGA8][C] Obsługa kart MMC\SD.

maly_elektronik 28 Cze 2008 11:25 4742 6
REKLAMA
  • #1 5293325
    maly_elektronik
    Poziom 23  
    Witam w kolejnym poście mojego autorstwa :arrow:
    Dziękuje koledze crazy_phisic za podanie linku do instrukcji pisania postów tematycznych ( mam nadzieje że ten zostanie zaakceptowany)

    Wiec tak problem polega na tym że nie mogę się dogadać z kartą (ale to już wiecie).

    1. Po wysłaniu komendy do karty nie zwraca ona błędu czyli "pracuje" poprawnie albo przynajmniej powinna.

    2. Jak załaduje jej jaki kolwiek sektor danych (w pętli albo z bufora 512b) to po włożeniu karty do czytnika w komputerze i po otwarciu jej zawartości w programie winhex nic tam nie znajduje i pisze że karta jest pusta

    3. Jeżeli staram się zmusić kartę do przesłania jakiś danych do procka po SPI to też procesor nic nie otrzymuje

    I w tym tkwi cały problem z obsługą. :cry: :arrow: Karta w ogóle nie reaguje na moje polecenia i nawet nie wiem gdzie szukać błędów :((

    Jak pisałem program prawdopodobnie nie ma błędów ale nie wiem starałem się go pisać z pomocą artykułu Romualda Białego z EP ale nie wiem co robię nie tak :(

    Moderowany przez crazy_phisic:

    Przeczytanie instrukcji a zastosowanie się do jej nakazów to już inna kwestia, więcej upominał nie będę. Temat poprawiłem.

  • REKLAMA
  • REKLAMA
  • #3 5293787
    Ch.M.
    Poziom 27  
    "2. Jak załaduje jej jaki kolwiek sektor danych (w pętli albo z bufora 512b) to po włożeniu karty do czytnika w komputerze i po otwarciu jej zawartości w programie winhex nic tam nie znajduje i pisze że karta jest pusta"

    A zaimplementowałeś wogóle FAT ?
    Może coś o samym programie, bo wróżki forumowe są akurat na urlopach :)
  • #4 5294626
    maly_elektronik
    Poziom 23  
    Nie zaimplementowałem systemu pliku fat :arrow: Ale w najbliższym czasie jak się dogadam z kartą to tak będzie :idea:
    Sprawdzam zawartość karty pod Windowsem XP za pomocą programu WinHEX który pozwala zajrzeć do kart, dysków itp. Za pomocą tego programu mogę zobaczyć zawartość klastrów (czy cokolwiek w nich jest). A po wysłanie jak wyżej pisałem nic na niej niema :cry:
    P.S Kod programu poniżej dla kolegi Ch.M. Oczywiście program napisany w C i kompilowany w WinAVR wersji z bieżącego roku :D
  • REKLAMA
  • #5 5299519
    Egzi
    Poziom 13  
    u mnie karta ruszyla bez problemu przy uzyciu modulow z tej strony
    http://www.roland-riegel.de/sd-reader/index.html
    w paczce jest opis poszczegolnych modulow, zacznij od raw access
    dla AVRStudio4 w modulach trzeba pozmieniac definicje kilku zmiennych bo sypie bledami, jak by co pomoge

    tu masz podlaczenie karty
    http://www.ulrichradig.de/home/index.php/avr/mmc-sd

    mozna tez wykorzystac wersje mega8l na nizsze napiecie i polaczyc karte bezposrednio do portow mikroprocka (ja tak zrobilem)
  • #6 5299860
    maly_elektronik
    Poziom 23  
    A czy mógłbyś przetestować mój program na swojej płytce z atmega8L :?: Bo po prostu nie wiem gdzie szukać błędu :cry: :arrow: Ogólnie nie idzie mi strona techniczna projektów (nie wiem dla czego). Potrafię robić płytki 2 warstwowe ale jak złoże układ to nie idzie a jak jakaś osoba go rozlutuje i złoży ponownie to wszystko śmiga bez zarzutów :D
    Więc jeżeli możesz to proszę sprawdź mój kod na własnym projekcie :idea:
  • REKLAMA
  • #7 5309774
    maly_elektronik
    Poziom 23  
    Odświerze trochę temat :)

    Mam pytanie w sprawie sumy CRC wiem że dla IDLE_STATE i OP_COND wysyłąm sumę 0x95 ale czy dla pozostałych argumentów także :?: (SET_BLOCKLEN READ_SINGLE_BLOCK itp) czy wysyłam dla nich juz 0x00 :?:

    P.S
    Czy może być taki kod do wysyłanie komend do MMC\SD
    char sd_send_cmd(unsigned char command, unsigned long data, unsigned long CRC)
    {
     char recive,index;
     SD_DDR  |= CS;
     SD_PORT &= ~CS;
     
     spi_transmit(command);
     spi_transmit((char)(data>>24));
     spi_transmit((char)(data>>16));
     spi_transmit((char)(data>>8));
     spi_transmit((char)data);
     spi_transmit(CRC);
     
    for (index=0;index<10;index++)
    {
     recive = spi_transmit(0xFF);
     if((recive & R1_BUSY) == 0)
     {
      return recive;
     }
    }
REKLAMA