# Xilinx read and write into SD card Reference website: https://www.twblogs.net/a/5b85cfde2b71775d1cd429d3 ### PL Setting Enable SD0 on MIO Configuration ![](https://i.imgur.com/7fGAPIc.png) \ ### PS Setting Turn on "xilffs" and "xilrsa" on "Board Support Package Settings" ![](https://i.imgur.com/Gy3Ub7o.png) ### Source code on SDK ```c #include <string.h> #include "platform.h" #include "xparameters.h" #include "xil_printf.h" #include "ff.h" #include "xdevcfg.h" static FATFS fatfs; int SD_Init() { FRESULT rc; rc = f_mount(&fatfs,"",0); if(rc) { xil_printf("ERROR : f_mount returned %d\r\n",rc); return XST_FAILURE; } return XST_SUCCESS; } int SD_Transfer_read(char *FileName,u32 DestinationAddress,u32 ByteLength) { FIL fil; FRESULT rc; UINT br; rc = f_open(&fil,FileName,FA_READ); if(rc) { xil_printf("ERROR : f_open returned %d\r\n",rc); return XST_FAILURE; } rc = f_lseek(&fil, 0); if(rc) { xil_printf("ERROR : f_lseek returned %d\r\n",rc); return XST_FAILURE; } rc = f_read(&fil, (void*)DestinationAddress,ByteLength,&br); if(rc) { xil_printf("ERROR : f_read returned %d\r\n",rc); return XST_FAILURE; } rc = f_close(&fil); if(rc) { xil_printf(" ERROR : f_close returned %d\r\n", rc); return XST_FAILURE; } return XST_SUCCESS; } int SD_Transfer_write(char *FileName,u32 SourceAddress,u32 ByteLength) { FIL fil; FRESULT rc; UINT bw; rc = f_open(&fil,FileName,FA_CREATE_ALWAYS | FA_WRITE); if(rc) { xil_printf("ERROR : f_open returned %d\r\n",rc); return XST_FAILURE; } rc = f_lseek(&fil, 0); if(rc) { xil_printf("ERROR : f_lseek returned %d\r\n",rc); return XST_FAILURE; } rc = f_write(&fil,(void*) SourceAddress,ByteLength,&bw); if(rc) { xil_printf("ERROR : f_write returned %d\r\n", rc); return XST_FAILURE; } rc = f_close(&fil); if(rc){ xil_printf("ERROR : f_close returned %d\r\n",rc); return XST_FAILURE; } return XST_SUCCESS; } #define FILE_r "Send.txt" #define FILE_w "Receive.txt" int main() { init_platform(); const char src_str[] = "Data from Zedboard"; u32 len = strlen(src_str); SD_Init(); SD_Transfer_write(FILE_w,(u32)src_str,(len+1000)); char dest_str[33];//len<=33 SD_Init(); SD_Transfer_read(FILE_r,(u32)dest_str,(len+1)); xil_printf("%s\r\n",dest_str); print("SD write and read over!\r\n"); cleanup_platform(); return 0; } ```