Witam!
Walczę! Ale coś wygrać nie mogę ;) Potrzebna jest pomoc kogoś kto ma bibliotekę FatFS w małym palcu.
Wstęp: biblioteka w wersji 0.9b ściągnięta ze strony projektu. Interfejs dla karty "doklejony" pomyślnie. Pierwsze próby zapisu i odczytu zakończone powodzeniem. Napisałem program testowy wczytujący obrazek na LCD. W wersji testowej była to pętla odczytująca 2B z karty (2B to dane o jednym pikselu, format RGB 565) i wrzucająca to na LCD. Wszystko działa super.
Rozwinięcie: wczytywanie takich małych porcji z karty zbyt szybkie nie jest, więc zacząłem to trochę poprawiać. Powstał więc "bufor" do którego wczytuję dane z karty. A potem hurtowo leci do LCD. Wszystko działa dobrze dopóki bufor jest <= 512B. Problem pojawia się przy próbie odczytania na raz więcej niż 512B danych z karty - pojawiają się przekłamania. Tzn FatFS nie zwraca żadnych błędów, liczba odczytach bajtów (przez f_read) się zgadza, ale dane już nie do końca.
Trochę powalczyłem i problem występuje, gdy spełniony jest warunek "if(cc)" w 2488 linijce pliku ff.c:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Za każdym razem gdy program wejdzie w obsługą tych instrukcji (cc!=0), występują przekłamania w odczytanych danych. Na wyświetlaczu objawia się to np. "tęczą" w jednym wierszu pikseli. Próbowałem dojść do tego o co tu chodzi, ale obawiam się, że bez zrozumienia systemu FAT i przeanalizowania połowy biblioteki nic nie wymyślę ;/.
Próbowałem skorzystać z starszych wersji FatFS ale bez zmian. Co ciekawe, gdy "unieszkodliwiam" ten warunek zamieniając bezczelnie "if(cc)" na "if(0)" to ... uwaga !! tadadam!! wszystko działa dobrze, nawet i z buforem 10kB ;/ Tylko boję się, że toto może być jednak do czegoś potrzebne i takie gmeranie na chybił trafił się na mnie zemści.
Zakończenie: pomocy :) Przydadzą się wszelkie informacje: czy ktoś spotkał podobny problem, może udało się rozwiązać? Czy to może być wina karty/systemu plików na niej? Może formatowanie jej pomoże? Ew. może ktoś zna FatFS i wie za co "po ludzku" odpowiada ten warunek?
Pozdrawiam!