eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronika › FatFS na PIC32
Ilość wypowiedzi w tym wątku: 13

  • 1. Data: 2015-12-30 20:09:14
    Temat: FatFS na PIC32
    Od: Atlantis <m...@w...pl>

    Bez większych problemów wykorzystywałem bibliotekę FatFS na AVR-ach.
    Teraz eksperymentuję z PIC32 i zabrałem się za portowanie podstawowych
    bibliotek albo uruchamianie tych, które już zostały przeportowane.
    Na oficjalnej stronie FatFS nie ma co prawda wersji pod PIC32, jednak
    znalazłem kod, który został już przez kogoś zmodyfikowany:

    http://www.microchip.com/forums/m563218.aspx

    Dostosowałem go do swoich potrzeb i próbuję uruchomić. Niestety
    natrafiłem na pewien problem.

    Funckja f_mount(0, &Fatfs), wywołana na początku main() zwraca FR_OK.
    Czyli wygląda na to, że biblioteka nawiązuje komunikację z kartą i
    znajduje na niej system plików.
    Działanie komunikacji po SPI potwierdza analizator stanów logicznych.

    Potem, co pięć sekund w nieskończonej pętli uruchamiam następujący kod:

    res1 = f_open(&file, "test.txt", (FA_CREATE_ALWAYS | FA_OPEN_ALWAYS |
    FA_CREATE_NEW | FA_WRITE));
    res2 = f_write(&file, "test", 5, &numwritten);
    res3 = f_close(&file);

    I tutaj niestety coś już jest nie tak.
    res1 zawiera kod błędu FR_NO_FILESYSTEM, a res2 FR_INVALID_OBJECT.

    Ktoś wie, gdzie może tkwić błąd?


  • 2. Data: 2015-12-30 22:03:25
    Temat: Re: FatFS na PIC32
    Od: Marek <f...@f...com>

    On Wed, 30 Dec 2015 20:09:14 +0100, Atlantis <m...@w...pl>
    wrote:
    > res1 = f_open(&file, "test.txt", (FA_CREATE_ALWAYS | FA_OPEN_ALWAYS
    |
    > FA_CREATE_NEW | FA_WRITE));

    Mi działa bez problemu ale zawsze podaję scieżkę "/test.txt" a nie
    "test.txt" jeśli plik ma być w głównym. O ile pamiętam w fatfs jest
    opcja "domyslnego katalogu" ale trzeba ją prawidłowo użyć
    (skonfigurować fatfs).

    --
    Marek


  • 3. Data: 2015-12-30 22:27:57
    Temat: Re: FatFS na PIC32
    Od: Marek <f...@f...com>

    On Wed, 30 Dec 2015 20:09:14 +0100, Atlantis <m...@w...pl>
    wrote:
    > res1 = f_open(&file, "test.txt", (FA_CREATE_ALWAYS | FA_OPEN_ALWAYS
    |
    > FA_CREATE_NEW | FA_WRITE));

    A dodatkowo czemu aż tyle flag? Zdecyduj albo FA_CREATE_ALWAYS albo
    FA_OPEN_ALWAYS. Obie na raz to troche bez sensu....

    --
    Marek


  • 4. Data: 2015-12-30 22:31:11
    Temat: Re: FatFS na PIC32
    Od: Marek <f...@f...com>

    On Wed, 30 Dec 2015 20:09:14 +0100, Atlantis <m...@w...pl>
    wrote:
    > res1 = f_open(&file, "test.txt", (FA_CREATE_ALWAYS | FA_OPEN_ALWAYS
    |
    > FA_CREATE_NEW | FA_WRITE));

    A i jeszcze jedno, czy na pewno fatfs jest skonfigurowana na write?
    Jeśli nie a tego pliku nie ma to zwróci błąd (bo fa_create_always
    oraz fa_open_always nie będą w stanie go utworzyć gdy go nie ma).

    --
    Marek


  • 5. Data: 2015-12-30 23:03:48
    Temat: Re: FatFS na PIC32
    Od: Atlantis <m...@w...pl>

    W dniu 2015-12-30 o 22:03, Marek pisze:

    > Mi działa bez problemu ale zawsze podaję scieżkę "/test.txt" a nie
    > "test.txt" jeśli plik ma być w głównym. O ile pamiętam w fatfs jest
    > opcja "domyslnego katalogu" ale trzeba ją prawidłowo użyć (skonfigurować
    > fatfs).

    Niestety nie pomaga. Spróbowałem wykonać operację otwarcia pliku, zapisu
    i zamknięcia pliku zaraz po f_mount.

    O ile f_mount() zwraca FR_OK, to zaraz przy próbie otwarcia pliku
    dostaję FR_NO_FILESYSTEM. Próbowałem też na samym początku wykonać
    disk_initialize(0), chociaż AFAIK nie jest to konieczne, bo ta funkcja i
    tak jest wywoływana gdzieś w trakcie montowania systemu plików. W każdym
    razie ona także zwraca FR_OK.

    Wydaje mi się to nieco dziwne, bo gdyby komunikacja po SPI nie działała,
    to dostałbym odpowiedni błąd, informujący o problemie z fizycznym nośnikiem.

    Hmm... Mogę zostawić sterownik (mmc.c) a resztę plików podmienić z
    któregoś z działających projektów AVR?


  • 6. Data: 2015-12-31 00:19:42
    Temat: Re: FatFS na PIC32
    Od: Marek <f...@f...com>

    On Wed, 30 Dec 2015 23:03:48 +0100, Atlantis <m...@w...pl>
    wrote:
    > O ile f_mount() zwraca FR_OK, to zaraz przy próbie otwarcia pliku
    > dostaję FR_NO_FILESYSTEM. Próbowałem też na samym początku wykonać

    Przetestuj najpierw czy działa otwarcie na pewno istniejącego pliku z
    flagą FA_READ tylko.
    Jeśli nie zadziała to może być problem z mmc.c, np. użyłeś karty >2GB
    gdy być może ten mmc nie wspiera takich kart (jest różnica w obsłudze
    kart do 2GB i powyżej 2GB).
    Możesz użyć dowolny driver do kart byle by miał prymitywy
    sectorread/sectorwrite ktore podepniesz pod disk_read i disk_write w
    fatfs.

    --
    Marek


  • 7. Data: 2015-12-31 08:44:30
    Temat: Re: FatFS na PIC32
    Od: Atlantis <m...@w...pl>

    W dniu 2015-12-31 o 00:19, Marek pisze:

    > Przetestuj najpierw czy działa otwarcie na pewno istniejącego pliku z
    > flagą FA_READ tylko.

    Dokładnie ta sama sytuacja.
    W międzyczasie dałem inną wersję biblioteki - ta, z której korzystałem
    do tej pory była oparta na jakimś starym wydaniu sprzed kilku lat. Na
    stronie FatFS-a dostępny był przykład dla PIC24, oparty na kodzie sprzed
    kilku miesięcy. Nie podmieniałem mmc.c, ale dostosowałem go do swoich
    potrzeb w oparciu o ten posiadany. Modyfikacje dotyczyły głównie funkcji
    obsługujących SPI.
    Nowa wersja posiada zmodyfikowaną funkcję f_mount(). Zamiast f_mount(0,
    &FatFS) wywołuje się f_mount(&FatFS, "", 1). Drugi parametr (jeśli
    dobrze rozumiem) jest łańcuchem identyfikującym dysk. Można podać numer
    albo znakową reprezentację. W przypadku jednego napędu daje się pusty
    (tak jest w dołączonym przykładzie). Trzeci parametr określa, czy
    funkcja ma podjąć próbę zamontowania systemu plików natychmiast, czy
    jedynie wstępnie wszystko ustawić i zostawić to na potem, gdy podjęta
    zostanie operacja otwierania pliku.

    > Jeśli nie zadziała to może być problem z mmc.c, np. użyłeś karty >2GB
    > gdy być może ten mmc nie wspiera takich kart (jest różnica w obsłudze
    > kart do 2GB i powyżej 2GB).

    Na AVR-ach nigdy nie miałem problemu z obsługą kart większych niż 2GB, a
    używałem starszej wersji biblioteki, która była pożyczona z przykładu
    dołączonego do książki, zawierała modyfikacje autora i kilka moich.
    Wychodziłem z założenia, że jeśli coś działa, to nie będę tego zmieniał. ;)
    Co ciekawe, miałem kilka razy problem z kartami <=2GB, ewentualnie
    jakimiś "dziwnymi" i tanimi kartami od Chińczyków. Nie debugowałem
    problemu i nie mam pojęcia, co mogło go spowodować. Przyszło mi nawet do
    głowy, że mogą nie obsługiwać transmisji po SPI...


  • 8. Data: 2015-12-31 08:45:58
    Temat: Re: FatFS na PIC32
    Od: Atlantis <m...@w...pl>

    W dniu 2015-12-30 o 22:31, Marek pisze:

    > A i jeszcze jedno, czy na pewno fatfs jest skonfigurowana na write?
    > Jeśli nie a tego pliku nie ma to zwróci błąd (bo fa_create_always oraz
    > fa_open_always nie będą w stanie go utworzyć gdy go nie ma).

    Tak. Zresztą AFAIR jest to domyślne ustawienie.


  • 9. Data: 2015-12-31 09:46:17
    Temat: Re: FatFS na PIC32
    Od: Marek <f...@f...com>

    On Thu, 31 Dec 2015 08:44:30 +0100, Atlantis <m...@w...pl>
    wrote:
    > Dokładnie ta sama sytuacja.

    Na pewno używasz najnowszwj fatfs i
    _WORD_ACCESS w ffconf.h na pewno masz 0?

    w disk_initialize() karte inicjujesz na pewno w bloku case ATA: (to
    domyślny blok dla NO_MULTIPARTITION)?
    Podejrzewam, że jednak f_mount nie działa prawidłowo i zawraca błąd
    tylko coś źle interepretujesz.
    No chyba że ten fs jest uszkodzony, fsck się nie czepia?

    --
    Marek


  • 10. Data: 2015-12-31 10:10:04
    Temat: Re: FatFS na PIC32
    Od: Atlantis <m...@w...pl>

    W dniu 2015-12-31 o 09:46, Marek pisze:

    > Na pewno używasz najnowszwj fatfs i
    > _WORD_ACCESS w ffconf.h na pewno masz 0?

    Hmm... Wszystko zaczęło działać, gdy podłączyłem linię wykrywającą
    włożenie karty i odkomentowałem właściwego ifa w disk_timerproc(). Na
    AVR-ach taka sztuczka działała, tutaj (w nowszej wersji FF) najwyraźniej
    coś zmieniono.
    Generalnie w AVR-ach wykrywane włożenia karty stosowałem tylko w tych
    przypadkach, gdy w projekcie przewidziane było kluczowanie zasilania
    karty celem zapewnienia stabilnego startu po jej włożeniu.

    Obecnie stosuję nową wersję biblioteki - plik z przykładami z którego
    została wyciągnięta jest oznaczony datą 5 września 2015. Co ciekawe
    karty, które nie działały z moimi starymi projektami ciągle nie
    działają. Zaczynam podejrzewać, że one naprawdę nie obsługują SPI.
    Któryś PIC32 ma sprzętowy interfejs SDIO? ;)

strony : [ 1 ] . 2


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: