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" <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> wrote:
On 2/6/07, Jacob Sorber <[EMAIL PROTECTED]> 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
_______________________________________________
Tinyos-help mailing list
[email protected]
https://mail.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help