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.
7 years, 6 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
7 years, 6 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