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

problem z obsługa kart SD - procesor PIC

ADAM99 10 Kwi 2008 21:50 1721 1
  • #1 10 Kwi 2008 21:50
    ADAM99
    Poziom 12  

    Witam

    Potrzebuje dość pilnie wykonać rejestrator danych który będzie zapisywał dane z prędkością rzędu 10kb/s na karcie SD. Dobrze by było aby był to zapis do plików w systemie FAT. W urządzeniu zastosowałem procesor PIC18F4620 taktowany kwarcem 25Mhz. Za bardzo nie chce mi sie wgłębiać w szczegóły budowy systemu FAT i szukałem jakiegoś gotowego rozwiązania w postaci odpowiedniej biblioteki. Znalazłem coś takiego w kompilatorze CCS ale przy testowaniu wynikają różne dziwne błędy.
    - po sformatowaniu funkcja z tej biblioteki karta nie jest widoczna na komputerze, ale sterownik poprawnie zapisuje i odczytuje pliki
    - po sformatowaniu na komputerze pliki sa widoczne i dla sterownika i dla komputera ale nie zawsze i nie zawsze wszystkie.
    - posiadam 2 karty 1Gb - Kingston i Sandisk Ultra2 . Z obsługa tej drugiej sa kłopoty.
    - nie chce działać na SPI sprzetowym

    Dodatkowo funkcje CCS sa dosc wolne ,a kod wydaje mi sie niepotrzebnie skomplikowany. Zapisanie pliku 1Mb na karcie trawało kilka minut (dane zapisywane w pętli bajt po bajcie).

    Może ma ktoś jakieś szybkie sprawdzone procedury do obsługi FAT na kartach SD (najlepiej w języku C) .

    Dodano po 5 [godziny] 18 [minuty]:

    Udało mi sie rozwiązać niektóre z problemów.
    1. Przed formatowaniem pierwsze 100 sektorów zapełniam zerami a dopiero funkcja formatująca. Pliki sa zawsze prawidłowo widoczne na komputerze. Problem nieprawidłowego działania jednej z kart był w zbyt dużym rezystorze na zasilaniu karty (22om), po zmostkowaniu rezystora obie karty działają prawidłowo. Zauważyłem jeszcze jedno ograniczenie : w katalogu głównym nie może być więcej niż 64 pozycje, powyżej tej liczby sa niewidoczne.

    Pozostaje tylko problem małej wydajności. Przy taktowaniu 40Mhz zapisanie 500kb zajmuje 2,5min. Obserwacja oscyloskopem sygnału CLK wykazuje okres rzędu 2us, wiec wygląda na to ze przyczyna jest zbyt powolne przygotowywanie danych do zapisu. Zapewne użycie sprzętowego SPI poprawiłoby sytuacje ale mam z tym problem.

    użycie polecenia:

    use spi(MASTER, SPI1, FORCE_HW, BITS=8, BAUD=200000, stream=mmcsd_spi)

    powoduje ze przestaje działać nawet komunikacja RS232 , brak tez jakichkolwiek sygnałów na złączu karty.

    Obecnie używam programowego SPI :

    use spi(MASTER, DI=MMCSD_PIN_SDI, DO=MMCSD_PIN_SDO, CLK=MMCSD_PIN_SCL, BITS=8, MSB_FIRST, IDLE=1, stream=mmcsd_spi )

    Jak prawidłowo skonfigurować SPI sprzętowe w CCS dla procesora PIC18F4620 ?

    Dodam że kompilatora CCS używam pierwszy raz właśnie ze względu na zawarte rozbudowane funkcje obsługi FAT32 i nie znam dokładnie jego specyficznych poleceń.

    0 1