logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

STM32 F103RB - Problemy z implementacją FatFs do obsługi karty SD

ninja_zlomiarz 26 Gru 2011 19:48 4960 7
REKLAMA
  • #1 10306084
    ninja_zlomiarz
    Poziom 10  
    Posty: 35
    Hej,
    Męczę się nad tym już pare dni i mi to nie wychodzi. Posiadam mikrokontroler STM32 F103RB. Korzystam z biblioteki FatFs? Zaimplementowałem bibliotekę FatFs z przykładów do książki Paprockiego, pozmieniałem tam trochę bo było sporo błędów boolowskich no i przykład również wziąłem z paprockiego, są to najprostsze działania czyli zamontowanie logicznego dysku, stworzenie pliku, zapis do pliku i zamknięcie plikiu.

    Tak prezentuje się fragment funkcji:

    #include "stm32f10x.h"
    #include "fatfs/src/ff.h"
    #include "fatfs/src/diskio.h"
    
    void RCC_Conf(void);
    void NVIC_Conf(void);
    void SysTick_Conf(void);
    
    static FATFS g_sFatFs;
    static DIR g_sDirObject;
    static FILINFO g_sFileInfo;
    static FIL g_sFileObject;
    
    #define PATH_BUF_SIZE   80
    static char g_cCwdBuf[PATH_BUF_SIZE] = "/";
    
    int main(void)
    {
    	FRESULT fresult;
    	FIL plik;
    	FILINFO plikInfo ;
    	DIR Dir;
    	FILINFO *p;
    
    	WORD zapisanych_bajtow;
    
    
      	RCC_Conf(); SysTick_Conf();
    
    
        fresult = f_mount(0, &g_sFatFs);
    
    	// Tworzenie pliku
    	fresult = f_open (&plik,"plik.txt", FA_CREATE_ALWAYS);
    	fresult = f_write(&plik, "zawartosc pliku", 15, &zapisanych_bajtow);
    	fresult = f_close (&plik);
    
    
      	while (1);
    }



    najpierw następuje zamontowanie dysku: fresult = f_mount(0, &g_sFatFs), zwracana wartość funkcji to FR_OK

    później jest polecenie stworzenia nowego pliku: fresult = f_open
    zwracana wartość funkcji to FR_OK

    później przy zapisie pojawiają się juz schody bo zwracana wartość funkcji to FR_DENIED

    i przy zamknięciu pliku już jest FR_OK

    jednak nic na karcie się nie pokazuje po włożeniu jej do komputera. Wielkość zapisanych danych na karcie zawsze jest 2KB.

    wie ktoś w czym może tkwić problem

    będę bardzo wdzięczny za jakąkolwiek pomoc :)
  • REKLAMA
  • Pomocny post
    #2 10306636
    bojj
    Poziom 12  
    Posty: 11
    Pomógł: 5
    Ocena: 1
    Polecam zostawienie przykładów z książki w spokoju, ponieważ oparte są na starej wersji biblioteki, przez co jest bardzo dużo z tym problemów.

    Polecam http://www.siwawi.arubi.uni-kl.de/avr_project...rojects/arm_memcards/index.html#chanfat_stm32 skorzystanie z tego przykładu - w tym rozwiązaniu jest zaimplementowany terminal z większością funkcji z biblioteki, przez co można szybko dowiedzieć się o co chodzi.
  • REKLAMA
  • Pomocny post
    #3 10306645
    stanleysts
    Poziom 27  
    Posty: 838
    Pomógł: 115
    Ocena: 2
    byc moze nie masz mozliwosci dopisywania albo modyfikowania pliku ja bym dodal: FA_CREATE_ALWAYS | FA_WRITE zamiast FA_CREATE_ALWAYS
  • REKLAMA
  • #4 10306735
    ninja_zlomiarz
    Poziom 10  
    Posty: 35
    stanleysts napisał:
    byc moze nie masz mozliwosci dopisywania albo modyfikowania pliku ja bym dodal: FA_CREATE_ALWAYS | FA_WRITE zamiast FA_CREATE_ALWAYS



    dzięki pomogło, najdziwniejsze jest to że już tak kiedyś robiłem ale widocznie miałem jeszcze inne błędy:)
  • #5 10307943
    ninja_zlomiarz
    Poziom 10  
    Posty: 35
    bojj napisał:
    Polecam zostawienie przykładów z książki w spokoju, ponieważ oparte są na starej wersji biblioteki, przez co jest bardzo dużo z tym problemów.

    Polecam http://www.siwawi.arubi.uni-kl.de/avr_project...rojects/arm_memcards/index.html#chanfat_stm32 skorzystanie z tego przykładu - w tym rozwiązaniu jest zaimplementowany terminal z większością funkcji z biblioteki, przez co można szybko dowiedzieć się o co chodzi.


    bojj a robiłeś coś z tymi bibliotekami nowymi? pobrałem je ale nie wiem za bardzo jak je zaimplementować, wystarcza podobnie jak w tej starej wersji pliki: ff.h, ff.c, diskio.h, integer.h, ffconf.h, sd_spi_32.c? w ogóle gdzie tam się dokonuje jakichś zmian? chyba w pliku sd_spi_32.c ale nie wiem co tam można zmienić
  • REKLAMA
  • Pomocny post
    #6 10308311
    bojj
    Poziom 12  
    Posty: 11
    Pomógł: 5
    Ocena: 1
    Odpowiednie przeróbki robisz w pliku sd_spi_32.c - konfiguracja peryferii.
    Natomiast w comm.c określasz interfejs dla terminala znakowego dla uart.
  • #7 10311977
    ninja_zlomiarz
    Poziom 10  
    Posty: 35
    a mam jeszcze takie pytanie, planuję mój program wykorzystać do akwizycji danych z czujników, fajnie by było gdyby plik na karcie sam się tworzył po włączeniu zasilania, jest może jakiś rejestr w mikrokontrolerze który ustawia jakąś flagę po włączeniu zasilania, żebym mógł go do jakiejś funkcji warunkowej wykorzystać? pracuję na mikrokontrolerze STM32F103RBT6 ktoś się może orientuje jaki to jest rejestr lub jak go poszukać?
  • Pomocny post
    #8 10312274
    markosik20
    Poziom 33  
    Posty: 2261
    Pomógł: 208
    Ocena: 147
    ninja_zlomiarz napisał:
    fajnie by było gdyby plik na karcie sam się tworzył po włączeniu zasilania


    Nie trzeba żadnych rejestrów, wszak program przechodzi po starcie raz przez sekcje startujące (czy startuje na nowo lub się wybudza) , tam można sprawdzać/tworzyć pliki.

Podsumowanie tematu

✨ Użytkownik zmagał się z implementacją biblioteki FatFs na mikrokontrolerze STM32 F103RB do obsługi karty SD. Po wprowadzeniu poprawek do przykładowego kodu z książki Paprockiego, napotkał problemy z zapisem plików. Użytkownicy forum zasugerowali, aby zrezygnować z przestarzałych przykładów i skorzystać z nowszych zasobów, takich jak projekt dostępny na stronie siwawi.arubi.uni-kl.de. Zasugerowano również dodanie flagi FA_CREATE_ALWAYS | FA_WRITE do funkcji otwierania pliku. Użytkownik pytał o implementację nowych bibliotek FatFs oraz o możliwość automatycznego tworzenia plików po włączeniu zasilania, na co odpowiedziano, że nie są potrzebne żadne dodatkowe rejestry, ponieważ program przechodzi przez sekcje startowe, gdzie można tworzyć pliki.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA