końca

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?

Reply to
Atlantis
Loading thread data ...

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.

Reply to
J.F

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.

Reply to
Atlantis

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

Reply to
Marek

W dniu 15.11.2022 o 19:10, Atlantis pisze:

formatting link
Może to ?

Pozdrawiam

Adam Górski

Reply to
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?

Reply to
radekp

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.

Reply to
Atlantis

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?

Reply to
Grzegorz Niemirowski

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.

Reply to
Grzegorz Niemirowski

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

Reply to
Marek

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.

Reply to
Atlantis

exFAT wlasnie?

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

J.

Reply to
J.F

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.