Elektroda.pl
Elektroda.pl
X
Relpol
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[STM32] HAL SD CARD SDIO + DMA

edwi-92 07 Wrz 2018 13:35 375 1
  • #1 07 Wrz 2018 13:35
    edwi-92
    Poziom 11  

    Cześć,

    mam problem z obsługa karty SD wykorzystując STM32, CUBEMX, bibliotekę FATFS. Na wstępie chce powiedzieć, że bez DMA działa wszystko ( żeby uniknąć pytań o schematy i dobre połączenie... ). Także problem pojawia się gdy w cubemx ustawie USE DMA TEMPLATE na enable ( czyli tak jak jest z default'a w tej bibliotece) ... Program wtedy nie jest w stanie stworzyć nawet pliku na karcie, mimo tego że przebiegi CLK jak i DATA wyglądają tak samo jak w sytuacji bez DMA . Czy ktoś miał kiedyś problem z DMA i SDIO ? Niestety aby wykorzystać FREERTOS potrzebuję mieć obsługę karty za pomocą DMA.
    Zamieszczam link do repo całego projektu :
    https://github.com/r00ti/Embedded/tree/master/testSD2

    Code:

    fresult = f_mount(&FatF, 1, 0);         
    fresult = f_open(&plik,"TEST.TXT", FA_WRITE | FA_OPEN_ALWAYS);
    if (fresult == FR_OK) {                 
        HAL_GPIO_WritePin(LedYellow_GPIO_Port,LedYellow_Pin,0);
            }
    else{
        HAL_GPIO_WritePin(ErrorLed_GPIO_Port,ErrorLed_Pin,0);
        }
    f_lseek(&plik, f_size(&plik));
    f_sync(&plik);                                         
    fresult = f_close(&plik);             


    [STM32] HAL SD CARD SDIO + DMA
    [STM32] HAL SD CARD SDIO + DMA

    0 1
  • Relpol
  • #2 11 Wrz 2018 18:27
    Typek2
    Poziom 11  

    Nie potrzebujesz DMA aby używać karty SD we FreeRTOSie.
    Jeśli zapisujesz lub odczytujesz dane z jednego lub więcej plików małymi partiami możesz nawet to robić z wielu tasków i przy odpowiedniej synchronizacji nie ma żadnego problemu. DMA jest przydatne kiedy danych jest dużo (>100kB) i nie możesz sobie pozwolić na czekanie na zakończenie operacji na karcie.
    Nie używałem DMA z kartą SD, ale coś mi mówi że przebiegi czasowe nie mogą być identyczne w obu przypadkach bo już nie ma niższego poziomu.

    U mnie wszystko działa, miałem domyślnie ustawione "use dma template" a na razie nigdzie nie znalazłem aby jakiś kanał DMA był konfigurowany do pracy z kartą SD ani w CubeMX ani w kodzie.
    Używam funkcji z pliku bsp_driver_sd.c for F4 (based on stm324x9i_eval_sd.c)
    Tam są funkcje wykorzystujące DMA jak i działające bez DMA.

    Przeczytaj cały nagłówek pliku:
    stm32f4xx_hal_sd.c

    Code:
    ##### How to use this driver #####
    
    ...
    (##) DMA Configuration if you need to use DMA process (HAL_SD_ReadBlocks_DMA()
                 and HAL_SD_WriteBlocks_DMA() APIs).
                (+++) Enable the DMAx interface clock using __HAL_RCC_DMAx_CLK_ENABLE();
    ...


    Z tego co mogę jeszcze dodać to upewnij się że masz wyłączoną sprzętową kontrolę przepływu:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  Szukaj w 5mln produktów