89-FATFS_SPI-Library (STM32F4)

mit dieser Library können SD-Karten mit einem FAT-Dateisystem per SPI-Schnittstelle vom STM32F4 verwaltet werden.
Hinweis : es gibt noch eine Library für den SDIO-Bus (Nr. 13) für USB-Sticks per FATFS (Nr. 32) und eine kombinierte Library SD+USB (Nr. 87)

Für eine genauere Beschreibung siehe Library Nr. 13 (die ist Softwareseitig identisch)

FATFS von ChaN ist in der Version 0.10c und die SPI-Funktionen sind auch von ChaN.
(siehe beiliegende Doku)

Hinweis : der MISO-Pin braucht einen PullUp Widerstand
(ich habe den internen der CPU per Software aktiviert)

Den CardDetect Pin habe ich im H-File deaktiviert.
(mein SD-Kartenhalter hat keinen Detect-Schalter)
Der “Mount-Befehl” wirft einen Fehler, wenn keine Karte eingesteckt ist.

Benutzte Pins :

PB12 -> ChipSelect = SD-Karte CS   (CD)
PB13 -> SPI-SCK    = SD-Karte SCLK (CLK)
PB14 -> SPI-MISO   = SD-Karte DO   (DAT0) (*)
PB15 -> SPI-MOSI   = SD-Karte DI   (CMD)
  (*) MISO needs PullUp (internal or external)

mit Detect-Pin :
PC0  -> SD_Detect-Pin (Hi=ohne SD-Karte)

Voraussetzungen :

Benutzte Module der CooCox-IDE : GPIO, RCC, TIM, MISC, SPI
Benutzte Librarys : FATFS (mehrere Files), STM32_UB_SPI

Beispiel :

//--------------------------------------------------------------
// File     : main.c
// Datum    : 01.01.2014
// Version  : 1.0
// Autor    : UB
// EMail    : mc-4u(@)t-online.de
// Web      : www.mikrocontroller-4u.de
// CPU      : STM32F4
// IDE      : CooCox CoIDE 1.7.4
// GCC      : 4.7 2012q4
// Module   : CMSIS_BOOT, M4_CMSIS_CORE
// Funktion : Hauptprogramm
// Hinweis  : Diese zwei Files muessen auf 8MHz stehen
//              "cmsis_boot/stm32f4xx.h"
//              "cmsis_boot/system_stm32f4xx.c"
//--------------------------------------------------------------

#include "main.h"
#include "stm32_ub_led.h"
#include "stm32_ub_fatfs.h"

int main(void)
{
  FIL myFile;

  SystemInit(); // Quarz Einstellungen aktivieren

  // init der LEDs
  UB_Led_Init();

  // Init vom FATFS-System
  UB_Fatfs_Init();

  // Check ob Medium eingelegt ist
  if(UB_Fatfs_CheckMedia(MMC_0)==FATFS_OK) {
    // Media mounten
    if(UB_Fatfs_Mount(MMC_0)==FATFS_OK) {
      UB_Led_On(LED_BLUE);
      // File zum schreiben im root neu anlegen
      if(UB_Fatfs_OpenFile(&myFile, "0:/UB_File.txt", F_WR_CLEAR)==FATFS_OK) {
        UB_Led_On(LED_GREEN);
        // ein paar Textzeilen in das File schreiben
        UB_Fatfs_WriteString(&myFile,"FATFS im SPI-Mode");
        UB_Fatfs_WriteString(&myFile,"hier Zeile zwei");
        UB_Fatfs_WriteString(&myFile,"ENDE");
        // File schliessen
        UB_Fatfs_CloseFile(&myFile);
      }
      // Media unmounten
      UB_Fatfs_UnMount(MMC_0);
    }
    else {
      UB_Led_On(LED_RED);
    }
  }

  while(1)
  {

  }
}

Hier die Library zum Download :

ub_stm32f4_fatfs_spi_v100

Hier der komplette CooCox-Projektordner zum Download :

Demo_89_FAFTS_SPI

5 Antworten auf 89-FATFS_SPI-Library (STM32F4)

  1. Tamer SAFAK sagt:

    Thanks a lotttt.

  2. UgraNarasimha sagt:

    Hi Uwe,

    Ich kann deutsch aber besser in englisch zu erklären. I want to use STMf4 29i Discovery Board instead of STM32F4 for my project, in this case, I checked the SPI Pins can remain the same, and I managed to change the LEDs (PG13, PG14). But the SD mount doesn’t work. And I can’t seem to find the reason. It fails here-
    // Media mounten
    if(UB_Fatfs_Mount(MMC_0)==FATFS_OK)
    Es fehlt irgendwie hier für 29i Discovery, hast du etwas Idee?

    • admin_ub sagt:

      have you tested the example from this site ? (without modification first)
      it’s written for a stm32f429 and works out of the box
      do you use a detect-pin ?
      have you tested another sd-card ?
      double check all 6 wires (no external pullups and short as possible)

  3. Sloughi sagt:

    Hello, first of all i’ll like to say your site is really helpful, you provide very detailed codes. I have a problem with these proyect, im using STM32F411DISCOVERY , i modified the TIM6 1ms interrupt using TIM2, because i dont have TIM6. I use the same SPI2_NSS, SCK, MISO and MOSI pins, i dont use detect-pin, so i jumped that part at the main. I can’t get through these line “if(UB_Fatfs_Mount(MMC_0)==FATFS_OK)” and even forcing everithing i can’t write the uSD. I tried formatting de uSD like FAT, FAT32 and exFAT and still cant make it work. The uSD i’m using is the Catalex Module with 3V regulator and level adapters.
    Any idea of what could it be?

    • Sloughi sagt:

      I have just realized this is made for SD cards , not microSD cards. I’ll try to make it work with an SD card first. Sorry…

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *


− sieben = eins

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>