CubeMX Setup
We will start by setting up the CubeMx first. So select the SDIO and than select 4 bit bus, and leave everything else unchanged. If you get FR_DISK_ERROR, than increase the SDIOCLK divide factor in the picture below
Next, select the FATFS, and than select SD CARD. I am leaving everything to default.
Now open the project and copy file_handling.c, file_handling.h,
files in the project folder.
Some insight into the code
You can check the functions used in the file_handling.h file. Some of those functions are discussed below.
1 2 3 4 5 |
/* mounts the sd card*/ void Mount_SD (const TCHAR* path); /* unmounts the sd card*/ void Unmount_SD (const TCHAR* path); |
As the name suggests, they are used for mounting and un-mounting the SD CARD
1 2 |
/* Start node to be scanned (***also used as work area***) */ FRESULT Scan_SD (char* pat); |
Scan for the files and directories present in the SD CARD from the path input in the argument. It sends the details directly to the UART.
/* creates a directory
* @ name: is the path to the directory
*/
FRESULT Create_Dir (char *name);
Creates the directory in the input path, entered in the argument. For example Create_Dir (“/dir1”); will create a directory named dir1 in the root of the SD CARD itself.
/* Removes the file from the sd card
* @ name : is the path to the file*/
FRESULT Remove_File (char *name);
Removes the file or the directory, whose name and path is in the argument. Note that directory can only be removed, if it is empty. For example Remove_File(“/FILE.TXT”); removes the FILE.TXT from the root of the SD CARD.
/* creates the file, if it does not exists
* @ name : is the path to the file*/
FRESULT Create_File (char *name);
Creates a file, (name and path is in the argument), at the entered path in the SD CARD. If the file already exists, it will return an error. For example Create_File(“file1.txt”); will create a file named file1.txt in the root directory.
/* read data from the file
* @ name : is the path to the file*/
FRESULT Read_File (char *name);
/* write the data to the file
* @ name : is the path to the file*/
FRESULT Write_File (char *name, char *data);
/* updates the file. write pointer is set to the end of the file
* @ name : is the path to the file
*/
FRESULT Update_File (char *name, char *data);
are used to Read, Write, and Update data to the file. These functions will output the result of each operation to the Uart.
main function
Mount_SD(“/”);
Format_SD();
Create_File(“FILE1.TXT”);
Create_File(“FILE2.TXT”);
Unmount_SD(“/”);
Above, I am mounting the SD card, and than formatting it to remove any file present in the root directory. It can’t remove directories right now
I have created 2 files. These are empty right now, and i will update the data later in the code.
Mount_SD(“/”);
sprintf(buffer, “Hello —> %d\n”, indx);
Update_File(“FILE1.TXT”, buffer);
sprintf(buffer, “world —> %d\n”, indx);
Update_File(“FILE2.TXT”, buffer);
Unmount_SD(“/”);
indx++;
HAL_Delay(2000);
As you can see above, the data in the files will keep updating every 2 seconds.