87-DUAL_FATFS-Library (STM32F4)

Hier die Kombination der FATFS_SDIO-Library (Nr. 13) und der USB_MSC_Host-Library (Nr. 32)

Mit dieser Library kann auf zwei Devices (SD-Karte und USB-Stick) gleichzeitig zugegriffen werden.

Hinweis-1 : Wer nur SD oder nur USB benutzen will, bitte die anderen Librarys benutzen.

Für eine genaue Beschreibung bitte bei den beiden einzel-Librarys nachlesen.

Hinweis-2 : Der Pin PC0 ist eigentlich der Detect-Pin der SD-Karte. Auf dem gleichen Pin liegt beim Discovery-Board aber das USB-VBUS-Enable Signal. Aus dem Grund habe ich im H-File vom SD-Treiber den Detect-Pin disabled. Wenn bei euch der Detect-Pin woanders liegt, könnt ihr diesen wieder aktivieren.

In den FATFS-Settings ist die Unterstützung für ZWEI Devices eingestellt.
Bitte beachten :
Die Pfad-Angabe für Zugriffe auf die SD-Karte = “0:/Test.txt”
Die Pfad-Angabe für Zugriffe auf den UBS-Stick = “1:/Test.txt”

Beschreibungen :

LINK zu SD-Karten Funktionen
LINK zu USB-Karten Funktionen

Beispiel :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
//--------------------------------------------------------------
// File     : main.c
// Datum    : 17.08.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 : Demo der DUAL-FATFS Library
// 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_button.h"
#include "stm32_ub_usb_msc_host.h"
 
//------------------------------------------------------
// Globale Variable
FIL myFile;   // Filehandler
 
//------------------------------------------------------
void write_to_SD(void) {
  // MMC-Media mounten
  if(UB_Fatfs_Mount(MMC_0)==FATFS_OK) {
	UB_Led_On(LED_ORANGE);
    // File zum schreiben im root neu anlegen
    if(UB_Fatfs_OpenFile(&myFile, "0:/SD_File.txt", F_WR_CLEAR)==FATFS_OK) {
      // ein paar Textzeilen in das File schreiben
      UB_Fatfs_WriteString(&myFile,"SD-Textfile");
      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);
    UB_Led_Off(LED_ORANGE);
  }
}
 
//------------------------------------------------------
void write_to_USB(void) {
  // USB-Media mounten
  if(UB_Fatfs_Mount(USB_1)==FATFS_OK) {
	UB_Led_On(LED_RED);
    // File zum schreiben im root neu anlegen
    if(UB_Fatfs_OpenFile(&myFile, "1:/USB_File.txt", F_WR_CLEAR)==FATFS_OK) {
      // ein paar Textzeilen in das File schreiben
      UB_Fatfs_WriteString(&myFile,"USB-Textfile");
      UB_Fatfs_WriteString(&myFile,"hier Zeile zwei");
      UB_Fatfs_WriteString(&myFile,"ENDE");
      // File schliessen
      UB_Fatfs_CloseFile(&myFile);
    }
    // Media unmounten
    UB_Fatfs_UnMount(USB_1);
    UB_Led_Off(LED_RED);
  }
}
 
//------------------------------------------------------
int main(void)
{
  uint8_t write_ok=0;
 
  SystemInit(); // Quarz Einstellungen aktivieren
 
  // init der LEDs
  UB_Led_Init();
  // init vom Button
  UB_Button_Init();
 
  // Init vom FATFS-System
  UB_Fatfs_Init();
 
  // Init vom USB-OTG-Port als MSC-HOST
  // (zum lesen/schreiben auf einen USB-Stick)
  UB_USB_MSC_HOST_Init();
 
  UB_Led_On(LED_BLUE);
 
  while(1)
  {
    // pollen vom USB-Status
    if(UB_USB_MSC_HOST_Do()==USB_MSC_DEV_CONNECTED) {
      // wenn USB-Stick erkannt wurde
      UB_Led_On(LED_GREEN);
    }
    else {
      UB_Led_Off(LED_GREEN);
    }
 
    // pollen vom User-Button
    if(UB_Button_Read(BTN_USER)==BTN_PRESSED) {
      if(write_ok==0) {
    	write_ok=1;
        // testfile auf SD-Karte schreiben
        write_to_SD();
        // testfile auf USB-Stick schreiben
        write_to_USB();
      }
    }
    else {
      write_ok=0;
    }
  }
}

Hier die Library zum Download :

ub_stm32f4_dual_fatfs_v105

Hier der komplette CooCox-Projektordner zum Download :

Demo_87_DUAL_FATFS


Wie hat Dir dieser Artikel gefallen?

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (Noch keine Bewertungen)
Loading...

Schreibe einen Kommentar

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