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...

1 Antwort zu 87-DUAL_FATFS-Library (STM32F4)

  1. daynial sagt:

    Hello,

    I am new to usb thing, I am using two usb sticks.
    1. SASDCZ43016 16 GB sanDisk USB Ver 3.1
    2. DTIG4/16GB 16 GB Kingston USB Ver 3.0

    the second is working fine, but first is making file but not saving data
    can anyone help me with it what could be the problem

    Thanks

Schreibe einen Kommentar

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