Hi,
I've been trying to read/write data from/to the internal flash storage after a ble disconnect event occurs on my nRF52 development board.
I am using SDK11 and softdevice s132
I am using the following test snippet for this operation-
case BLE_GAP_EVT_DISCONNECTED: err_code = bsp_indication_set(BSP_INDICATE_IDLE); APP_ERROR_CHECK(err_code); m_conn_handle = BLE_CONN_HANDLE_INVALID; sd_ble_gap_adv_stop(); sd_ble_gap_scan_stop(); NRF_UART0->TASKS_STOPTX = 1; NRF_UART0->TASKS_STOPRX = 1; NRF_UART0->ENABLE = 0; uint32_t * addr; uint8_t patwr; uint8_t patrd; uint32_t pg_size; uint32_t pg_num; pg_size = NRF_FICR->CODEPAGESIZE; pg_num = NRF_FICR->CODESIZE - 1; // Use last page in flash // Start address: addr = (uint32_t *)(pg_size * pg_num); // Erase page: flash_page_erase(addr); patwr=0x45; flash_word_write(addr, (uint32_t)patwr); memcpy(&patrd,addr,1); //patrd = (uint8_t)*(addr); uint8_t flag=4; if(patrd==0x45){ flag=1; LEDS_ON(BSP_LED_0_MASK); } else{ flag=0; LEDS_ON(BSP_LED_1_MASK); } err_code = ble_advertising_start(BLE_ADV_MODE_FAST); APP_ERROR_CHECK(err_code); //Start scanning for peripherals which advertise. scan_start(); break;
This results in a kind of runtime error causing all LEDs to light up and freezing the device. I observed using debug mode that this occurs at sd_ble_gap_adv_stop(); when the flash code is present but does not occur when the flash code is absent. This is confusing because the flash part of the code appears after the sd_ble_gap_adv_stop(); and I'm assuming if the code is executed sequentially there shouldn't be any difference at that step.
Either way, I would appreciate any solutions for my problem.
Edit : The "hard fault" appeared when i was experimenting with sd_ble_gap_adv_stop(); by commenting it out, when it is present the debug call stack is just 0x000000 and it exhibits the freeze+LED conditions I mentioned above
Thank you