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

SD-Card writing blocks ADC

Hello,

I'm trying to write my ADC samples over spi on a sd card (Using SAADC like in the sdk 12 example with PPI and using fatfs like in the example in the sdk).

I open the file I want to write in only once in the beginning and close it in the end, not every time when I write in the file.

Everything works, but because I use timestamps after every sample I can see that everytime I call the f_write function, my ADC is blocked for a few miliseconds. The time where it's blocked depends on the amount of data I send.

I know that the disk_write function waits for the write done event (busy flag):

ret_code_t err_code = nrf_blk_dev_write_req(m_drives[drv].config.p_block_device, &req);
if (err_code == NRF_SUCCESS)
{
   while (m_drives[drv].busy)
    {


        m_drives[drv].config.wait_func();
    }

    if (m_drives[drv].last_result == NRF_BLOCK_DEV_RESULT_SUCCESS)
    {
        return RES_OK;
    }
	 
}
return RES_ERROR;

So I think this while loop is where my code blocks. I tried to delete the waiting part, going on with my sampling and checking before writing again if the device is still busy.

No error occurs, but when I read out my card on Pc the file is empty.

Is it somehow possible to go on sampling the ADC while writing on the SD card?

Regards Lea

Parents
  • Where do you call the write function (f_write(..))? You should consider calling this in main context if you are calling it in interrupt context (inside an event handler/callback).

    Also, the interrupt priority is higher if the value is lower (0 is the highest priority, 7 is the lowest). You should use the APP_IRQ_PRIORITY_ to set the priority, see app_util_platform.h.

  • Hi Ole,

    I am getting similar kind of issue. I want to write to SD card the SAADC samples and at the same time streaming over BLE at 1ksps rate. I am calling both sending over BLE and writing to SD card function in main context. In ISR I am just updating the flags and checking the same in main loop.

    Now the issue is as soon as I enable the BLE streaming code is getting stopped. I have this question in this thread with my complete code, but still I am getting the same issue.

    Can you suggest anything about this?

Reply
  • Hi Ole,

    I am getting similar kind of issue. I want to write to SD card the SAADC samples and at the same time streaming over BLE at 1ksps rate. I am calling both sending over BLE and writing to SD card function in main context. In ISR I am just updating the flags and checking the same in main loop.

    Now the issue is as soon as I enable the BLE streaming code is getting stopped. I have this question in this thread with my complete code, but still I am getting the same issue.

    Can you suggest anything about this?

Children
No Data
Related