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, 1 month ago.
HardFault Error when accessing SD-Card after building up network connection
Hi,
I want to combine a HTTP-Client and a SD-Card-Reader. My goal is to download a file from a server and save that file on the SD-Card. Unfortunately Im stuck on the way, because of an Hard Fault 0x80FF013D.
I haven broken down the code and recognized in summary:
- network communication (GET-command) works fine solo
- SD-Card access (Read and Write) works fine solo
- SD-Card access works fine before building up the network connection
- Hard Fault occures, when I access the SD-Card after building up the network connection
Core-Infos:
- IDE: MBED CLI v1.8.2
- MC: NUCLEO-F746ZG
- SD-Card Reader: CATALEX MicroSD Card Adapter with Transcend 2GB microSD (FAT formatted)
- Libraries:
Serial Output with Hard Fault
[NWKH] Connecting to network...<\r><\n> [NWKH] Connected to the network<\r><\n> [NWKH] IP address: 192.168.188.29<\r><\n> Test SD-Card<\r><\n> <\r><\n> ++ MbedOS Fault Handler ++<\r><\n> <\r><\n> FaultType: HardFault<\r><\n> <\r><\n> Context:<\r><\n> R0 : 20000400<\r><\n> R1 : BFF39B82<\r><\n> R2 : 08025B6A<\r><\n> R3 : 00000003<\r><\n> R4 : 00000000<\r><\n> R5 : 2000FA34<\r><\n> R6 : 84551677<\r><\n> R7 : 7FFFFC00<\r><\n> R8 : 00000003<\r><\n> R9 : 08025B6A<\r><\n> R10 : 2000FA34<\r><\n> R11 : 00000000<\r><\n> R12 : 08013E6D<\r><\n> SP : 2000F9F8<\r><\n> LR : 0801A8E7<\r><\n> PC : A0000000<\r><\n> xPSR : 210B0000<\r><\n> PSP : 2000F990<\r><\n> MSP : 2004FFC0<\r><\n> CPUID: 410FC271<\r><\n> HFSR : 40000000<\r><\n> MMFSR: 00000001<\r><\n> BFSR : 00000000<\r><\n> UFSR : 00000000<\r><\n> DFSR : 0000000B<\r><\n> AFSR : 00000000<\r><\n> Mode : Thread<\r><\n> Priv : Privileged<\r><\n> Stack: PSP<\r><\n> <\r><\n> -- MbedOS Fault Handler --<\r><\n> <\r><\n> <\r><\n> <\r><\n> ++ MbedOS Error Info ++<\r><\n> Error Status: 0x80FF013D Code: 317 Module: 255<\r><\n> Error Message: Fault exception<\r><\n> Location: 0x8012A7B<\r><\n> Error Value: 0xA0000000<\r><\n> Current Thread: Id: 0x2000DA34 Entry: 0x8012BEB StackSize: 0x2000 StackMem: 0x2000DA78 SP: 0x2004FF58 <\r><\n> For more info, visit: https://armmbed.github.io/mbedos-error/?error=0x80FF013D<\r><\n> -- MbedOS Error Info --<\r><\n>
I have started with the http-example...
<<https://os.mbed.com/teams/sandbox/code/http-example/file/2efadc4d8784/source/main-http-socket-reuse.cpp/shortlog/>>
...and added SDBlockDevice and FATFileSystem for the SD-Card access.
main-http.cpp
#include "select-demo.h" #if DEMO == DEMO_HTTP #include "mbed.h" #include "http_request.h" #include "network-helper.h" #include "mbed_mem_trace.h" #include "SDBlockDevice.h" #include "FATFileSystem.h" #include "DebouncedIn.h" #define SD_MOUNT_PATH "sd" #define FULL_UPDATE_FILE_PATH "/" SD_MOUNT_PATH "/" MBED_CONF_APP_UPDATE_FILE SDBlockDevice sd(MBED_CONF_APP_SD_CARD_MOSI, MBED_CONF_APP_SD_CARD_MISO, MBED_CONF_APP_SD_CARD_SCK, MBED_CONF_APP_SD_CARD_CS); FATFileSystem fs(SD_MOUNT_PATH); NetworkInterface* network; DebouncedIn btn(USER_BUTTON); FILE* file; int main() { /*------Init SD-Card-----------*/ int r; //Init if ((r = sd.init()) != 0) { printf("Could not initialize SD driver (%d)\n", r); return 1; } //Mount if ((r = fs.mount(&sd)) != 0) { printf("Could not mount filesystem, is the SD card formatted as FAT? (%d)\n", r); return 1; } /*------Init Network-----------*/ network = connect_to_default_network_interface(); if (!network) { printf("Cannot connect to the network, see serial output\n"); return 1; } //Write printf("Test SD-Card\n"); char testbuffer2[] = { 'a' , 'b' , 'c' }; file = fopen("/sd/test.bin", "wb"); fwrite("abc",1,3,file); //fwrite(testbuffer2,1,sizeof(testbuffer2),file); fclose(file); //Hauptschleife while(1) { //Buttondruck if (btn.rising()) { printf("Update wird gesucht, bitte warten\n"); } } } #endif
mbed_app.json
{ "config": { "main-stack-size": { "value": 8192 }, "update_file": { "help": "Path to the application update binary on the SD card", "value": "\"update.bin\"" }, "sd_card_mosi": { "help": "MCU pin connected to the SD card's SPI MOSI pin", "value": "D11" }, "sd_card_miso": { "help": "MCU pin connected to the SD card's SPI MISO pin", "value": "D12" }, "sd_card_sck": { "help": "MCU pin connected to the SD card's SPI SCK pin", "value": "D13" }, "sd_card_cs": { "help": "MCU pin connected to the SD card's SPI CS pin", "value": "D10" } }, "macros": [ "MBEDTLS_MPI_MAX_SIZE=1024", "MBEDTLS_MPI_WINDOW_SIZE=1", "MBEDTLS_USER_CONFIG_FILE=\"mbedtls_entropy_config.h\"", "MBEDTLS_TEST_NULL_ENTROPY", "MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES", "MBED_HEAP_STATS_ENABLED=1" ], "target_overrides": { "*": { "platform.stdio-baud-rate": 115200, "platform.stdio-convert-newlines": true, "mbed-mesh-api.6lowpan-nd-channel-page": 0, "mbed-mesh-api.6lowpan-nd-channel": 12, "mbed-trace.enable": 1, "platform.error-hist-enabled": 1, "mbed-http.http-buffer-size": 2048, "nsapi.default-wifi-security": "WPA_WPA2", "nsapi.default-wifi-ssid": "\"SSID\"", "nsapi.default-wifi-password": "\"Password\"" } } }
I have already read the Tutorial for "Analyzing Mbed OS crash dump" -> https://os.mbed.com/docs/v5.8/tutorials/analyzing-mbed-os-crash-dump.html, but I have still no idea what I can do, to find the reason for the Hard Fault.
- Error Status: "0x80FF013D" means "Hard Fault exception"
- HFSR: 40000000 means "Forced Hard Fault"
- MMFSR: 00000001 means "The processor attempted an instruction fetch from a location that does not permit execution."
- UFSR: 00000000 means "everything is good"
- BFSR: 00000000 means "everything is good"
I would appreciate some help. Thanks in advance.