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

Reply via email to