-
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? ;)