[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