Other Parts Discussed in Thread: CC1310
Hello,
I am trying to read a file from the SD card on a CC1310 Launchpad. I have an SD card connected to the SPI and using the FatFs library I can open directories, read file info and open files using f_open without issue
However once I actually try to read/write a file, I get a "1", FR_DISK_ERR, and then any interfacing with the SD card stops:
int uartApi_readFile(const char *filename, char *buf, UINT len, UINT offset) { SD_init(); SDFatFS_Handle sdCardHandle; sdCardHandle = SDFatFS_open(Board_SD0, 0); FIL file; // BYTE readBuffer[UART_TX_SIZE]; UINT readCount; UINT amountToRead = len; FRESULT ferr = f_open(&file, filename, FA_READ | FA_OPEN_ALWAYS); if (ferr == FR_OK) { ferr = f_read(&file, buf, amountToRead, &readCount); if (ferr != FR_OK) { snprintf(buf, amountToRead, "Couldn't read file %i - %i\n", ferr, readCount); } } else { snprintf(buf, amountToRead, "Couldn't open file %i\n", ferr); } f_close(&file); // SDFatFS_close(sdCardHandle); return ferr; }
The SD card is mounted using SD_init() and SdFatFS_open, which should get it mounted as a disk (seeing as I can interface with it using f_open, and f_readdir etc:
For example this function, listing all the existing files to a string DOES work, only when I call the f_read does it break:
char* listSdContents() { DIR dir; //Directory struct FILINFO fno; //File info struct char *FileSystemString = calloc(UART_TX_SIZE, sizeof(char)); // SD_init(); // SDFatFS_Handle sdCardHandle; // sdCardHandle = SDFatFS_open(Board_SD0, 0); // int_fast16_t sdResult = SD_initialize(sdCardHandle); // if (sdResult != SD_STATUS_SUCCESS) // { // char string[48]; // snprintf(string, 47, "Open SD err: %i\n", sdResult); // strcat(FileSystemString, string); // return FileSystemString; // } FRESULT err = f_opendir(&dir, "/"); if (err != FR_OK) { char string[48]; snprintf(string, 47, "Open dir err: %i\n", err); strcat(FileSystemString, string); // SDFatFS_close(sdCardHandle); return FileSystemString; } do { f_readdir(&dir, &fno); if (fno.fname[0] != 0) { if ((strlen(FileSystemString) + strlen(fno.fname)) < UART_TX_SIZE) { strcat(FileSystemString, fno.fname); strcat(FileSystemString, "\n"); } else strcat(FileSystemString, "full\n"); } } while (fno.fname[0] != 0); strcat(FileSystemString, "Done\n"); // SDFatFS_close(sdCardHandle); return FileSystemString; }
Help would be very much appreciated. many thanks
Sjors