końca

Nov 15, 2022 Last reply: 3 years ago 11 Replies

Mam urządzenie zbudowane na STM32F107 (to samo, które opisywałem w kilku poprzednich postach). Jest ono wyposażone w dwie możliwości podłączenia pamięci masowych: slot kart microSD oraz gniazdo USB do podłaczenia PenDrive'a. Karta micorSD pracuje na magistrali SPI. FatFS jest skonfigurowany i do tej pory działał perfekcyjnie z PenDrive'ami (dysk 0:). Przeprowadziłem też parę testów z różnymi kartami microSD (dysk 1:), które też zdawały się pracować poprawnie.



Dzisiaj zainstalowałem w urządzeniu kartę SDXC 128GB SanDiska. Ma ona pełnić podwójną funkcję: z jednej strony magazynu na media odtwarzane przez urządzenie, z drugiej będą się na niej znajdowały pliki konfiguracyjne.



Po włączeniu zasilania system plików na karcie SD został zamontowany. Jednak przy próbie otwarcia pliku konfiguracyjnego został zwrócony błąd FR_NO_FILE, chociaż ścieżka była poprawna i plik znajdował się na karcie. Spróbowałem na próbę wyłączyć LFN i UTF w konfiguracji FatFS - nie pomogło. Przywróciłem w kodzie działanie w oparciu o PenDrive i momentalnie wszystko zaczęło działać.



Z ciekawości postanowiłem przeprowadzić eksperyment z inną kartą - starą



4GB, chyba nawet był to jakiś NoName. Ta karta nie tylko się zamontowała, ale też urządzenie bez problemu zaczęło otwierać i czytać zapisane na niej pliki konfiguracyjne.

Tak więc sytuacja jest dziwna, bo:



  1. Karta SDXC przechodzi poprawnie inicjalizację.
  2. Karta jest poprawnie montowana.
  3. Przy próbie otwarcia pliku nie jest zwracany błąd wskazujący na jakiś problem z komunikacją lub systemem plików (np. FR_DISK_ERR, FR_INT_ERR albo FR_NOT_READY) ale błąd informujący, że pliku nie ma.
  4. Przy innej (mniejszej i dużo starszej) karcie problem magicznie znika.
  5. Nie chodzi też raczej o sam rozmiar nośnika albo konfigurację FatFS, bo przy identycznej konfiguracji bez problemu obsługiwany jest PenDrive

250GB.

Ktoś kiedyś zetknął się z takim problemem?


Granicą dzialania FAT na kartach bylo 32GB. I to juz był nowy standard SDHC. SDXC powinien uzywac exFAT.

Dziwna to granica, i nie bardzo wiadomo dlaczego ... ale moze masz cos w bibliotekach zaszytego.

formatting link
ponoc najlepiej dziala stare dobre polecenie FORMAT, z parametrami.

J.

Jedną z rzeczy których próbowałem było przeformatowanie karty z użyciem exFAT - nic to nie zmieniło.

Formatowałem pod Debianem, przy pomocy domyślnego narzędzia dostępnego w Gnome. Poza FAT pozwalało także wybrać linuksowe systemy plików oraz NTSC, w opcjach zaawansowanych był jeszcze dostępny exFAT. Zacząłem od normalnego FAT. Karta sformatowała się poprawnie, była widoczna w systemie, przyjęła kilkadziesiąt GB danych. Jeśli faktycznie maksymalnym rozmiarem jest 32GB, to być może exFAT został włączony w tle. Potem - jak mówiłem - zaznaczyłem tę opcję przy kolejnym formatowaniu i nic to nie dało.

PenDrive'y fomatowane w dokładnie taki sposób działają na tym samym urządzeniu bez najmniejszego problemu.

Eh lame.. Wiesz co to jest fatfs w kontekście poruszanym przez Atlantisa?

W dniu 15.11.2022 o 19:10, Atlantis pisze:

formatting link
Może to ?

Pozdrawiam

Adam Górski

Tue, 15 Nov 2022 19:10:35 +0100, w <6373d61c$0$564$ snipped-for-privacy@news.neostrada.pl>, Atlantis snipped-for-privacy@wp.pl napisał(-a):

Może po prostu nie działa z SDXC? A próbowałeś z innymi SDXC?

Sęk w tym, że gdyby sterownik nie działał z kartami SDXC, to problem wyszedłby na warstwie sprzętowej. Prawdopodobnie nie przeszłaby w ogóle procedura inicjalizacji i nie udałoby się zamontować systemu plików. Tymczasem te operacje przechodziły bez problemu i dopiero próba odczytu pliku dawała błąd sugerujący, że taki plik nie istnieje.

W każdym razie udało mi się rozwiązać problem bez znalezienia jego przyczyny. Wszystko zaczęło działać po sformatowaniu karty jeszcze raz w FAT32, ale tym razem za pomogą gparted.

Formatowanie kart w exFat nie pomagało, ale z innego powodu - STM32CubeMX dołącza do projektu starszą wersję FatFS-a, jeszcze nieposiadającą obsługi tego systemu plików. Jednak nie chodziło tutaj o jakieś ograniczenie rozmiaru, ponieważ PenDrive 250GB, sformatowany w FAT32 działał bez najmniejszych problemów. To dziwne zachowanie było widoczne tylko w przypadku karty SDXC.

Atlantis snipped-for-privacy@wp.pl napisał(a):

To ciekawe, bo FAT32 nie obsługuje takich rozmiarów. Może została tam założona partycja 32 GB?

Grzegorz Niemirowski snipped-for-privacy@grzegorz.net napisał(a):

Eh, moja pomyłka. FAT32 obsługuje partycje do 2 TB. Jedynie microsoftowe narzędzia nie chciały formatować partycji >32 GB w FAT32 ze względu na słabą wydajność tego systemu plików przy dużych partycjach.

Ale czym formatowałeś? O ile dobrze kojarzę fatfs ma już w API f_mkfs (fat/exfat). Próbowałeś tego?

Tak ma. Używam tej opcji w swoich projektach na PIC32 albo Raspberry Pi Pico, gdzie po prostu ręcznie wrzuciłem pliki pobrane ze strony autora + sterowniki do konkretnego hardware'u.

Niestety, STM32CubeMX generując projekt podstawia starszą wersję biblioteki, pozbawioną tej opcji. Do tego wersję nieco zmodyfikowaną - pliki są rozrzucone po różnych katalogach i trochę inaczej wygląda obsługa niskopoziomowych sterowników, szczególnie tych dostarczonych przez producenta i działających bezpośrednio po wyjęciu z pudełka (SDIO, USB). Pewnie gdybym po prostu podmienił ff.c, ff.h i ffconf.h, projekt by zadziałał, ale musiałbym o tym pamiętać po każdej zmianie konfiguracji w STM32CubeMX, która przywróciłaby poprzednią wersję FatFS. Trochę za dużo z tym zachodu.

exFAT wlasnie?

To ograniczenie na kartach jest jakies sztuczne, i nie wiem z czego wynika.

J.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required