Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
6 years, 8 months ago.
Have an error from SD-Driver
I use Nucleo -F746ZG and mbed-os version 5
I have error when runtime
ERROR
Welcome to the filesystem example. Opening a new file, numbers.txt. Failure. 5 Writing decimal numbers to a file (20/20) done. Closing file. ++ MbedOS Fault Handler ++ FaultType: HardFault Context: R0 : E0FA556F R1 : 923099F0 R2 : 00000000 R3 : 080088B9 R4 : E0FA556F R5 : 923099F0 R6 : 20000A3C R7 : E0FA556F R8 : FFFFFFFF R9 : EADEC0EA R10 : 00000000 R11 : 00000000 R12 : 080109D1 SP : 20005280 LR : 0800B9D9 PC : 08007FAC xPSR : A1000000 PSP : 20005218 MSP : 2004FFD8 CPUID: 410FC271 HFSR : 40000000 MMFSR: 00000000 BFSR : 00000082 UFSR : 00000000 DFSR : 00000009 AFSR : 00000000 SHCSR: 00000000 BFAR : A3E95FF8 Mode : Thread Priv : Privileged Stack: PSP Thread Info: Current: State: 00000002 EntryFn: 0800EFA1 Stack Size: 00001000 Mem: 20004318 SP: 20005078 Next: State: 00000002 EntryFn: 0800EFA1 Stack Size: 00001000 Mem: 20004318 SP: 20005078 Wait Threads: State: 00000083 EntryFn: 0800E949 Stack Size: 00000300 Mem: 20000710 SP: 200009A0 Delay Threads: Idle Thread: State: 00000001 EntryFn: 0800DE7D Stack Size: 00000200 Mem: 20000510 SP: 200006C8 -- MbedOS Fault Handler --
SOURCE CODE with MBED-OS
source code
#include "mbed.h" #include "FATFileSystem.h" #include "SDBlockDevice.h" #include <stdio.h> #include <errno.h> /* mbed_retarget.h is included after errno.h so symbols are mapped to * consistent values for all toolchains */ #include "platform/mbed_retarget.h" SDBlockDevice sd(MBED_CONF_APP_SPI_MOSI, MBED_CONF_APP_SPI_MISO, MBED_CONF_APP_SPI_CLK, MBED_CONF_APP_SPI_CS); FATFileSystem fs("sd", &sd); void return_error(int ret_val){ if (ret_val) printf("Failure. %d\n", ret_val); else printf("done.\r\n"); } void errno_error(void* ret_val){ if (ret_val == NULL) printf(" Failure. %d \r\n", errno); else printf(" done.\r\n"); } int main() { int error = 0; printf("Welcome to the filesystem example.\r\n"); printf("Opening a new file, numbers.txt."); FILE* fd = fopen("/sd/numbers.txt", "w+"); errno_error(fd); for (int i = 0; i < 20; i++){ printf("Writing decimal numbers to a file (%d/20)\r", i); fprintf(fd, "%d\n", i); } printf("Writing decimal numbers to a file (20/20) done.\r\n"); printf("Closing file.\r\n"); fclose(fd); printf(" done.\r\n"); printf("Re-opening file read-only.\r\n"); fd = fopen("/sd/numbers.txt", "r"); errno_error(fd); printf("Dumping file to screen.\r\n"); char buff[16] = {0}; while (!feof(fd)){ int size = fread(&buff[0], 1, 15, fd); fwrite(&buff[0], 1, size, stdout); } printf("EOF.\r\n"); printf("Closing file.\r\n"); fclose(fd); printf(" done.\n"); printf("Opening root directory."); DIR* dir = opendir("/sd/"); errno_error(fd); struct dirent* de; printf("Printing all filenames:\r\n"); while((de = readdir(dir)) != NULL){ printf(" %s\n", &(de->d_name)[0]); } printf("Closeing root directory. "); error = closedir(dir); return_error(error); printf("Filesystem Demo complete.\n"); while (true) {} }
1 Answer
6 years, 7 months ago.
Hi Teerawat,
The sd-driver doesn't have native support for the Nucleo -F746ZG. So you will have to use it with a CI Test Shield or modify the mbed_app.json file as described in the "Testing with an SDCard on Target XYZ" portion of the readme:
https://github.com/ARMmbed/mbed-os-example-sd-driver
If you do have a shield or have modified the json file, do you have some other SD cards to try? We've just done some testing with a K64 target and on a few SD cards we see the same error 5 which indicates that the K64 simply isn't playing well with that particular card.
-Ralph, Team Mbed