This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Flash erase fails on NRF52832CIAA (chip used in the Murata MBN52832 module)

Hi,

I have a custom implemented DFU that I used in many nRF52832 designs. 

This one in particular fails when I am calling  nrf_fstorage_erase. I am trying to erase 40 pages at once, starting at address 0x50000

The function returns success but it hangs and after a while I get this error

<error> app: ERROR 4 [NRF_ERROR_NO_MEM] at ../../../../lib/nRF5_SDK_15.3.0_59ac345/components/libraries/1
PC at: 0x0002E071
<error> app: End of error report

I thing the whole system froze and that is caused by timers piling up in some internal queue (just a guess).

The root cause of the problem is erasing the flash.

Also, very interestingly, the same code works flawlessly on the NRF52832-DK board.

It fails on the Murata module, which contains the nrf52832-CIAA chip.

Maybe you guys can help me determine this chip model exactly.

the FICR INFO.VARIANT register ix 0x41414531 but that exact code is not in the datasheet.

I would appreciate a solution to this problem.

Raz

Parents
  •            if (swap_erase_page(0, swap_get_page_count(), swap_erase_callback) == NRF_SUCCESS)
                        return;     //we do not send the response at this time
                    else
                        response_code = BLE_RSP_ERROR;  
              
    It gets called in the main() loop since I am using the scheduler. I also give it a callback that gets called when nrf_erase finishes.

    ret_code_t swap_erase_page(uint32_t page, uint32_t count, swap_callback_t callback)
    {
        APP_ERROR_CHECK_BOOL(callback != 0);
        APP_ERROR_CHECK_BOOL(page < SWAP_PAGE_COUNT);

        NRF_LOG_DEBUG("SWAP ERASE: %u", count);

        l_swap_callback = callback;
        return nrf_fstorage_erase(&swap_fstorage_instance, swap_fstorage_instance.start_addr + page * SWAP_PAGE_SIZE, count, NULL);
    }
    This code works in as few designs using the nrf52832 in the QFN package. It fails on CIAA
Reply
  •            if (swap_erase_page(0, swap_get_page_count(), swap_erase_callback) == NRF_SUCCESS)
                        return;     //we do not send the response at this time
                    else
                        response_code = BLE_RSP_ERROR;  
              
    It gets called in the main() loop since I am using the scheduler. I also give it a callback that gets called when nrf_erase finishes.

    ret_code_t swap_erase_page(uint32_t page, uint32_t count, swap_callback_t callback)
    {
        APP_ERROR_CHECK_BOOL(callback != 0);
        APP_ERROR_CHECK_BOOL(page < SWAP_PAGE_COUNT);

        NRF_LOG_DEBUG("SWAP ERASE: %u", count);

        l_swap_callback = callback;
        return nrf_fstorage_erase(&swap_fstorage_instance, swap_fstorage_instance.start_addr + page * SWAP_PAGE_SIZE, count, NULL);
    }
    This code works in as few designs using the nrf52832 in the QFN package. It fails on CIAA
Children
Related