[Tinyos-help] What do PageEEPROM's flush and sync do?

David Moss dmm at rincon.com
Tue Feb 6 13:32:16 PST 2007


I've never had a problem with garbage being written to the 
end of a page, but I do have another observation on At45db 
sync/flush. I'm using TinyOS 2.x now, but saw the same 
sort of behavior in TinyOS 1.x.

When I do a At45dbP.syncAll() or flushAll(), I 
intermittently lose data on flash after a reboot.  In 
other words, data I just got done writing to the chip 
didn't make it to non-volatile memory and is permanently 
lost.  This happens even if I automatically retry the 
syncAll() command when syncDone(..) signals FAIL.

When I do a sync(<specific page number>) instead of a 
syncAll(), my critical data always gets written to 
non-volatile memory correctly.  The trick is the low-level 
abstractions (in my case, DirectStorage) needs to keep 
track of the last page it wrote to pass in as an argument 
to sync().

Therefore, I rely on sync(<page #>) to ensure my data is 
written correctly to non-volatile memory, since syncAll() 
misbehaves intermittently.  I notice it usually happens 
when writing data across several pages that are all 
located in completely different areas of the flash.

-David Moss




On Tue, 6 Feb 2007 14:31:26 -0500
  "Jacob Sorber" <jacob.sorber at gmail.com> wrote:
> Okay, that makes sense, but now I have no idea what is 
>happening.  I am
> writing data in 50 byte chunks to a single page in flash 
>(which I erase
> before writing).  After each write I call sync().  The 
>first 4 writes seem
> to work as intended (when I read the page, the flash is 
>all 1s after the
> data I have written).  After the 5th write, though 6 
>bytes of garbage are
> appended  (page offsets 250-255).  Do you know why this 
>might be happening.
> I have verified that when I call PageEEPROM.write(), the 
>"size" value is, in
> fact, 50.
> 
> Thanks,
> Jacob
> 
> On 2/6/07, David Gay <dgay42 at gmail.com> wrote:
>>
>> On 2/6/07, Jacob Sorber <jacob.sorber at gmail.com> wrote:
>> > I am seeing some bizarre behavior, and I suspect that 
>>it is due to my
>> not
>> > understanding exactly what these two functions do.  I 
>>have not been able
>> to
>> > find any documentation on the subject, so any help 
>>would be great.
>>
>> flush starts writing the specified page to flash and 
>>signals
>> completion "immediiately" (well, before the write 
>>completes). sync
>> does the same thing, but only signals completion when 
>>the write is
>> complete.
>>
>> Note that the pages are handled like a cache, so may be 
>>flushed anyway
>> because of subsequent reads or writes. But if you want 
>>to ensure data
>> is written, you do need to call sync or flush.
>>
>> David Gay
>>



More information about the Tinyos-help mailing list