📄 at45db.nc
字号:
// $Id: At45db.nc,v 1.6 2008/06/11 00:46:23 razvanm Exp $
/*
* "Copyright (c) 2000-2003 The Regents of the University of California.
* All rights reserved.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation for any purpose, without fee, and without written agreement is
* hereby granted, provided that the above copyright notice, the following
* two paragraphs and the author appear in all copies of this software.
*
* IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
* OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
* CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
* ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS."
*
* Copyright (c) 2002-2005 Intel Corporation
* All rights reserved.
*
* This file is distributed under the terms in the attached INTEL-LICENSE
* file. If you do not find these files, copies can be found by writing to
* Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA,
* 94704. Attention: Intel License Inquiry.
*/
#include "At45db.h"
/**
* HAL for Atmel's AT45DB family of serial dataflash chips. This provides
* reasonably high-level operations on AT45DB pages, including automatic
* buffer management. Writes are only guaranteed to happen after a flush,
* flushAll, sync or syncAll.
* <p>
* When buffers are flushed to the flash (either explicitly or implicitly),
* their contents are checked to ensure the write was succesful. If this
* check fails, the flush is retried some number of times. If this fails
* more than some number of times, all access to the flash is disabled
* (all requests will report FAIL in their completion event).
* <p>
* This interface only supports one operation at a time - components offering
* At45db should use the <code>Resource</code> interface for resource sharing.
*
* @author David Gay
*/
interface At45db {
/**
* Write some data to an AT45DB page. writeDone will be signaled.
* @param page Flash page to write to. Must be less than AT45_MAX_PAGES.
* @param offset Offset in page at which to start writing - must be between
* 0 and AT45_PAGE_SIZE - 1
* @param data Data to write. The buffer is "returned" at writeDone time.
* @param n Number of bytes to write (> 0). offset + n must be <=
* AT45_PAGE_SIZE
*/
command void write(at45page_t page, at45pageoffset_t offset,
void *PASS COUNT(n) data, at45pageoffset_t n);
/**
* Signal completion of a write operation. The buffer passed to write
* is implictly returned.
* @param error SUCCESS for a successful write, FAIL otherwise
*/
event void writeDone(error_t error);
/**
* Copy one flash page to another. copyDone will be signaled. If page
* from had been modified, it is first flushed to flash. Page
* <code>to</code> will only actually be written when the buffer holding
* it is flushed (see flush, flushAll, sync, syncAll).
*
* @param from Flash page to copy. Must be less than AT45_MAX_PAGES.
* @param to Flash page to overwrite. Must be less than AT45_MAX_PAGES.
*/
command void copyPage(at45page_t from, at45page_t to);
/**
* Signal completion of a copyPage operation.
* @param error SUCCESS if the copy was successful, FAIL otherwise
*/
event void copyPageDone(error_t error);
/**
* Erase an AT45DB page. eraseDone will be signaled.
* @param page Flash page to erase. Must be less than AT45_MAX_PAGES.
* @param eraseKind How to handle the erase:
* <br><code>AT45_ERASE</code>: actually erase the page in the flash chip
* <br><code>AT45_DONT_ERASE</code>: don't erase the page in the flash
* chip, but reserve a buffer for this page - subsequent writes to this
* page will be faster because the old contents need not be read
* <br><code>AT45_PREVIOUSLY_ERASED</code>: assume the page was previously
* erased in the flash and reserve a buffer for this page - subsequent
* writes to page will be faster because the old contents need not be
* read and the write itself will be faster
*/
command void erase(at45page_t page, uint8_t eraseKind);
/**
* Signal completion of an erase operation.
* @param error SUCCESS if the erase was successful, FAIL otherwise
*/
event void eraseDone(error_t error);
/**
* Flush an AT45DB page from the buffers to the actual flash. syncDone
* will be signaled once the flush has been completed and the buffer
* contents successfully compared with the flash. If the page is not
* in the buffers, syncDone will succeed "immediately".
* @param page Flash page to sync. Must be less than AT45_MAX_PAGES.
*/
command void sync(at45page_t page);
/**
* Flush all AT45DB buffers to the actual flash. syncDone
* will be signaled once the flush has been completed and the buffer
* contents successfully compared with the flash.
*/
command void syncAll();
/**
* Signal completion of a sync or syncAll operation.
* @param error SUCCESS if the sync was successful, FAIL otherwise
*/
event void syncDone(error_t error);
/**
* Flush an AT45DB page from the buffers to the actual flash. flushDone
* will be signaled once the flush has been initiated. If the page is not
* in the buffers, flushDone will succeed "immediately".
* @param page Flash page to sync. Must be less than AT45_MAX_PAGES.
*/
command void flush(at45page_t page);
/**
* Flush all AT45DB buffers to the actual flash. flushDone
* will be signaled once the flushes have been initiated.
*/
command void flushAll();
/**
* Signal completion of an flush or flushAll operation.
* @param error SUCCESS if the flush was successful, FAIL otherwise
*/
event void flushDone(error_t error);
/**
* Read some data from an AT45DB page. readDone will be signaled.
* @param page Flash page to read from. Must be less than AT45_MAX_PAGES.
* @param offset Offset in page at which to start reading - must be between
* 0 and AT45_PAGE_SIZE - 1
* @param data Buffer in which to place read data. The buffer is "returned"
* at readDone time.
* @param n Number of bytes to read (> 0). offset + n must be <=
* AT45_PAGE_SIZE
*/
command void read(at45page_t page, at45pageoffset_t offset,
void *PASS COUNT(n) data, at45pageoffset_t n);
/**
* Signal completion of a read operation. The buffer passed to read
* is implictly returned.
* @param error SUCCESS for a successful read, FAIL otherwise
*/
event void readDone(error_t error);
/**
* Compute the CRC of some data from an AT45DB page (using the CRC
* function from crc.h). computeCrcDone will be signaled.
* @param page Flash page to read from. Must be less than AT45_MAX_PAGES.
* @param offset Offset in page at which to start reading - must be between
* 0 and AT45_PAGE_SIZE - 1
* @param n Number of bytes to read (> 0). offset + n must be <=
* AT45_PAGE_SIZE
* @param baseCrc initial CRC value - use 0 if computing a "standalone"
* CRC, or a previous computeCrc result if computing a CRC over several
* flash pages
*/
command void computeCrc(at45page_t page, at45pageoffset_t offset,
at45pageoffset_t n, uint16_t baseCrc);
/**
* Signal completion of a CRC computation.
* @param error SUCCESS if the CRC was successfully computed, FAIL otherwise
* @param crc CRC value (valid only if error == SUCCESS)
*/
event void computeCrcDone(error_t error, uint16_t crc);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -