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
  • Thank you. Setting the interrupt of the saadc to a higher level is a problem, because in the beginning my saadc interrupt had been higher or the same like my spi interrupt. In this case writing on the sd card didn't worked at all. The code got stuck in the config.wait_func() function I mentioned above which waited for the write done event, that never occured. So I set the interrupt priority of the saadc to 6 and of the spi to 3.

    I have now set a PPI channel between START Task and END Event of Saadc, but the problem remains. There is no sampling during the write process.

Reply
  • Thank you. Setting the interrupt of the saadc to a higher level is a problem, because in the beginning my saadc interrupt had been higher or the same like my spi interrupt. In this case writing on the sd card didn't worked at all. The code got stuck in the config.wait_func() function I mentioned above which waited for the write done event, that never occured. So I set the interrupt priority of the saadc to 6 and of the spi to 3.

    I have now set a PPI channel between START Task and END Event of Saadc, but the problem remains. There is no sampling during the write process.

Children
No Data
Related