<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://devzone.nordicsemi.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>No regular time to write data on sd card</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/36624/no-regular-time-to-write-data-on-sd-card</link><description>Hello all, 
 
 I have noticed that a delay appear periodically when writing SD card for example, I have something that the following code 
 
 Unfortunately, I have a jump into the values when looking at the time written on the SD card at the end of the</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Fri, 24 Aug 2018 07:37:34 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/36624/no-regular-time-to-write-data-on-sd-card" /><item><title>RE: No regular time to write data on sd card</title><link>https://devzone.nordicsemi.com/thread/145610?ContentTypeID=1</link><pubDate>Fri, 24 Aug 2018 07:37:34 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:bee4ef02-d5df-4905-b7d5-6ef5ce2c8ad5</guid><dc:creator>MartinBL</dc:creator><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;For some reasons, the program does not jump into the interrupt handler function when running the program with ble. I don&amp;#39;t know if you have an idea why ?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Does your application otherwise work as intended? No errors or asserts?&lt;/li&gt;
&lt;li&gt;Does your interrupt handler work when you don&amp;#39;t use BLE?&lt;/li&gt;
&lt;li&gt;Can you upload your code?&lt;/li&gt;
&lt;/ol&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: No regular time to write data on sd card</title><link>https://devzone.nordicsemi.com/thread/145385?ContentTypeID=1</link><pubDate>Wed, 22 Aug 2018 21:05:54 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:91895dd9-2c23-46ac-9dff-b2179ddb9f22</guid><dc:creator>swip</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;I haven&amp;#39;t found a completely workaround for this issue.&lt;/p&gt;
&lt;p&gt;Yes, you get it right. I have a lot of write operations with time stamps on my SD card. I am using the time written on the sd card to see the lack of data. I have tried to use a software buffer to store my data and an gpiote interrupt to get the data from the sensor to the software buffer. But I am facing trouble working with gpiote and ble now.&lt;/p&gt;
&lt;p&gt;For some reasons, the program does not jump into the interrupt handler function when running the program with ble. I don&amp;#39;t know if you have an idea why ?&amp;nbsp;&lt;/p&gt;
&lt;p&gt;And finally yes, my problem is a lot like the link given in your previous rely. The code gets trapped in the write function for a while from time to time and it is not absurd to see an increase in current consumption.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: No regular time to write data on sd card</title><link>https://devzone.nordicsemi.com/thread/144888?ContentTypeID=1</link><pubDate>Mon, 20 Aug 2018 09:15:59 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:de9ea12e-32d0-40e0-a1fc-91f4ebc74741</guid><dc:creator>MartinBL</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;Sorry for the slow response. I have been out of office for a while.&lt;/p&gt;
&lt;p&gt;Have you found a workaround?&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;do you think it is possible to write the data more continuously?&lt;/strong&gt;&lt;/em&gt;&lt;br /&gt;If I understand you correctly, you write individual samples with time stamps to your SD cards, causing a lot of write operations and overhead. Maybe it could be an idea to temporarily store a number&amp;nbsp;samples in a software buffer and write them all at once to reduce the write frequency. Sort of like what user &lt;a href="https://devzone.nordicsemi.com/members/rct42"&gt;rct42&lt;/a&gt; suggests here:&amp;nbsp;&lt;a href="https://devzone.nordicsemi.com/f/nordic-q-a/25971/sd-write-problem"&gt;SD Write Problem&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: No regular time to write data on sd card</title><link>https://devzone.nordicsemi.com/thread/144231?ContentTypeID=1</link><pubDate>Tue, 14 Aug 2018 17:43:44 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:69f6d1e5-0831-4dd0-901e-b64dbf835633</guid><dc:creator>swip</dc:creator><description>&lt;p&gt;Hello Martin,&lt;/p&gt;
&lt;p&gt;Below you can see a log file. The &amp;quot;error sensor time data&amp;quot; means the the buffer has not been over-read, the fifo is not empty, but it is not crucial. But the &amp;quot;error skipped frame count&amp;quot; is very problematic. It occurs periodically as you can see in the following log file. &lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;Initializing disk 0 (SDC)... Capacity: 3796 MB 
Mounting volume... 
Successfully deleted file: file.csv.
flushing data from fifo before starting 1003 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SKIPPED FRAME COUNT : 15 -- ERROR SENSOR TIME DATA : 0 
ERROR SKIPPED FRAME COUNT : 45 -- ERROR SENSOR TIME DATA : 0 
ERROR SKIPPED FRAME COUNT : 44 -- ERROR SENSOR TIME DATA : 0 
ERROR SKIPPED FRAME COUNT : 45 -- ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SKIPPED FRAME COUNT : 33 -- ERROR SENSOR TIME DATA : 0 
ERROR SKIPPED FRAME COUNT : 44 -- ERROR SENSOR TIME DATA : 0 
ERROR SKIPPED FRAME COUNT : 43 -- ERROR SENSOR TIME DATA : 0 
ERROR SKIPPED FRAME COUNT : 44 -- ERROR SENSOR TIME DATA : 0 
ERROR SKIPPED FRAME COUNT : 45 -- ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SKIPPED FRAME COUNT : 16 -- ERROR SENSOR TIME DATA : 0 
ERROR SKIPPED FRAME COUNT : 45 -- ERROR SENSOR TIME DATA : 0 
ERROR SKIPPED FRAME COUNT : 43 -- ERROR SENSOR TIME DATA : 0 
ERROR SKIPPED FRAME COUNT : 45 -- ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SKIPPED FRAME COUNT : 31 -- ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SKIPPED FRAME COUNT : 15 -- ERROR SENSOR TIME DATA : 0 
ERROR SKIPPED FRAME COUNT : 44 -- ERROR SENSOR TIME DATA : 0 
ERROR SKIPPED FRAME COUNT : 44 -- ERROR SENSOR TIME DATA : 0 
ERROR SKIPPED FRAME COUNT : 45 -- ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SKIPPED FRAME COUNT : 31 -- ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SKIPPED FRAME COUNT : 17 -- ERROR SENSOR TIME DATA : 0 
ERROR SKIPPED FRAME COUNT : 44 -- ERROR SENSOR TIME DATA : 0 
ERROR SKIPPED FRAME COUNT : 45 -- ERROR SENSOR TIME DATA : 0 
ERROR SKIPPED FRAME COUNT : 47 -- ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SKIPPED FRAME COUNT : 31 -- ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
ERROR SENSOR TIME DATA : 0 
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The main.c file is&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;for(;;)
        {
            gyro_frames_req = 32;
            accel_frames_req = 32;
            BMI160-&amp;gt;fifo-&amp;gt;length=220;
            nrf_delay_ms(1);
            get_fifo_data(BMI160,gyro_data,&amp;amp;gyro_frames_req,accel_data,&amp;amp;accel_frames_req);
            if(accel_frames_req!=gyro_frames_req)
                SEGGER_RTT_printf(0,&amp;quot;bad gyro diff from accel \n&amp;quot;);
            SEGGER_RTT_printf(0,&amp;quot;accel_frames_req %d \n&amp;quot;,accel_frames_req);
            for(int frame=0; frame&amp;lt;accel_frames_req; frame++){
                ff_result=f_write(&amp;amp;file,&amp;amp;accel_data[frame].x, 2, (UINT *) &amp;amp;bytes_written);
                ff_result+=f_write(&amp;amp;file,&amp;amp;accel_data[frame].y, 2, (UINT *) &amp;amp;bytes_written);
                ff_result+=f_write(&amp;amp;file,&amp;amp;accel_data[frame].z, 2, (UINT *) &amp;amp;bytes_written);
                ff_result+=f_write(&amp;amp;file,&amp;amp;BMI160-&amp;gt;fifo-&amp;gt;sensor_time, 4, (UINT *) &amp;amp;bytes_written);
                ff_result+=f_write(&amp;amp;file,&amp;amp;gyro_data[frame].x, 2, (UINT *) &amp;amp;bytes_written);
                ff_result+=f_write(&amp;amp;file,&amp;amp;gyro_data[frame].y, 2, (UINT *) &amp;amp;bytes_written);
                ff_result+=f_write(&amp;amp;file,&amp;amp;gyro_data[frame].z, 2, (UINT *) &amp;amp;bytes_written);
                if (ff_result != FR_OK)
                {
                    SEGGER_RTT_printf(0,&amp;quot;Write failed\r\n.&amp;quot;);
                    break;
                }
            }
        }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Even if you don&amp;#39;t have the detail of each function, the name are quiet self-understandable. Three steps in the infinite loop :&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- wait to be sure the fifo has a value&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- get the value from the fifo&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- write the value on the sd card&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Most of the time there is absolutely no problem and the average fifo length (the loop on the number of frame) is 3 frames. But for time to time, unexpectedly the f_write function on the SD card take a lot of time and the fifo overflows.&lt;/p&gt;
&lt;p&gt;May be, when using the sd card the memory is not continuous&amp;nbsp; and it takes some time to find another sector on the card ? I can use an empty card, do you think it is possible to write the data more continuously ?&lt;/p&gt;
&lt;p&gt;Thank you for your answer,&lt;/p&gt;
&lt;p&gt;Swip&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: No regular time to write data on sd card</title><link>https://devzone.nordicsemi.com/thread/141176?ContentTypeID=1</link><pubDate>Tue, 24 Jul 2018 14:04:58 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:7aeae353-84ab-4f20-bc71-4aa00a1dade1</guid><dc:creator>MartinBL</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;How do you write to the SD card? Could it be that you are writing too fast so that each write operation doesn&amp;#39;t have time to complete before your for loop starts another write operation?&lt;/p&gt;
&lt;p&gt;Can you share a log?&lt;/p&gt;
&lt;p&gt;Can you share your code?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>