Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[STM32][C] Odczyt z karty SD przez SPI2

mrpajax 16 Jan 2019 20:57 687 5
  • #1
    mrpajax
    Level 9  
    Cześć!

    Dostałem mocno bojowe zadanie napisania programu dla STM32F429-Discovery w którym będę odczytywał pliki .mp3 z kart SD. Niestety po moich usilnych staraniach dotarłem do punktu z którym nie mogę sobie poradzić.

    CubeMx nie wspiera z "palca" SPI przy FatFs, a sam nie mam na tyle doświadczenia z tymi płytkami (co najwyżej Arduino, ale wstyd mi porównać je do STM [gdzie napisanie kodu w Arduino zajęło mi 3 min]) więc kręcę się w kółko i szukam gotowych przykładów bądź poradników. Natknąłem się na artykułKrzysztofa Paprockiego, niestety nie udało mi się jakkolwiek zaimplementować jego rozwiązania (nie mam pojęcia gdzie i w którym miejscu mam przepisać linijki kodu). Znalazłem dwa gotowe projekty (pierwszy, drugi), lecz niestety one również nie działają, oraz nie udało mi się ich z debbugować.

    Natknąłem się również na STM32 dla początkujących bez bibliotek HAL, ale niestety nie uzyskałem odpowiedzi na swój problem (bądź bardziej prawdopodobne - nie udało mi się wyciągnąć odpowiedniej wiedzy na temat STM).

    Kończąc swój monolog, chciałbym prosić o pomoc z tym nieszczęsnym odczytem z kart SD, bądź bardziej szczegółowego wyjaśnienia artykułu Paprockiego.
    Do you have a problem with Arduino? Ask question. Visit our forum Arduino.
  • #2
    LChucki
    Level 31  
    mrpajax wrote:
    CubeMx nie wspiera z "palca" SPI przy FatFs,

    Wystarczy uzupełnić 3 funkcje jak dobrze pamiętam. Można więcej jak detekcja karty ale nie jest to niezbędne.
    Uzupełnić to trochę za dużo napisane, wywołać inna funkcję HAL.

    MS: <ciach>
  • #3
    mrpajax
    Level 9  
    Praca domowa, a dokładniej projekt. Styczności z płytkami STM'a nie miałem wcześniej, moją sytuację poprawia tylko fakt że znam trochę C oraz to że udało mi się od znajomego pożyczyć płytkę oraz moduł do odczytu kart SD (prowadzący nie chce ich nam udostępnić poza zajęciami [które są raz na dwa tygodnie]).
    Efektem mojej pracy jest jak na razie utworzenie projektu w EmBitz'ie (na życzenie prowadzącego), dołączenie podstawowych bibliotek (np. system_stm32f4xx.h itd.) oraz biblioteki FatFS od ChaN'a, podłączenie pinów dla SPI2:

    PB-13 - SCLK
    PB-14 - MISO
    PB-15 - MOSI
    + GND i 3V
    (Jeżeli dobrze zrozumiałem, to potrzebuję jednego pinu pod CS, na razie podpięty do PD-8 [z braku innej koncepcji])

    Niestety mam problemy z EmBitz (z jakiegoś powodu nie jestem wstanie uruchomić debugger'a), więc nawet jak próbuję coś bezmyślnie przekopiowywać z innych projektów (lub tego artykułu), to nie wiem nawet dlaczego nie działa. Wiem, że to nie wytłumaczenie, ale jedyne co robiłem prywatnie z STM32, to zabawa diodami, wyświetlaczem i trochę IoT.

    @Edit
    @LChucki
    Bardziej chodzi mi o wyjaśnienie dlaczego tak, a nie inaczej. Fakt faktem muszę w końcu zrozumieć jak do tego dotarłem
  • #4
    LChucki
    Level 31  
    Wszystko co trzeba zmodyfikować masz poniżej (plik "sd_spi.c"):
    Code: c
    Log in, to see the code

    Timeout widzę "trochę" duży.
  • #5
    mrpajax
    Level 9  
    Dziś spróbowałem ponownie swoich sił. Udało mi się włączyć LED'y na płytce, oraz nauczyłem się przypisywania pinów pod SPI2. Dowiedziałem się również, że aktualny stan biblioteki FatFS zmienił się dosyć przez co artykuł Paprockiego nie jest już na tyle precyzyjny i prawidłowy. Na moje nieszczęście, dalej nie rozumiem jak przygotować pełną konfigurację plików dla SPI.

    LChucki wrote:
    Wszystko co trzeba zmodyfikować masz poniżej (plik "sd_spi.c"):


    Wybacz, ale nie rozumiem o który plik w projekcie chodzi. Widzę dopiski "HAL", czy to fragment kodu odwołujący się do bibliotek HAL?
  • #6
    LChucki
    Level 31  
    mrpajax wrote:
    Wybacz, ale nie rozumiem o który plik w projekcie chodzi.

    Poszukaj go.

    mrpajax wrote:
    Widzę dopiski "HAL", czy to fragment kodu odwołujący się do bibliotek HAL?

    Pisałeś, że wygenerowałeś FS z Cube więc masz HAL.