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 :
Hier der komplette CooCox-Projektordner zum Download :
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