dataflash.h
Go to the documentation of this file.00001
00046 #ifndef DRV_DATAFLASH_H
00047 #define DRV_DATAFLASH_H
00048
00049 #include <cfg/compiler.h>
00050
00051 #include <kern/kfile.h>
00052 #include <fs/battfs.h>
00053
00058 typedef uint32_t dataflash_page_t;
00059 typedef uint32_t dataflash_offset_t;
00060 typedef uint32_t dataflash_size_t;
00061
00062
00066 typedef void (dataflash_setReset_t)(bool);
00067 typedef void (dataflash_setCS_t)(bool);
00068
00077 typedef enum DataflashType
00078 {
00079 DFT_AT45DB041B = 0,
00080 DFT_AT45DB081D,
00081 DFT_AT45DB161D,
00082 DFT_AT45DB642D,
00083 DFT_CNT
00084 } DataflashType;
00085
00086
00090 typedef struct DataFlash
00091 {
00092 KFile fd;
00093 KFile *channel;
00094 DataflashType dev;
00095 dataflash_page_t current_page;
00096 bool page_dirty;
00097 dataflash_setReset_t *setReset;
00098 dataflash_setCS_t *setCS;
00099 } DataFlash;
00100
00104 #define KFT_DATAFLASH MAKE_ID('D', 'F', 'L', 'H')
00105
00109 INLINE DataFlash * DATAFLASH_CAST(KFile *fd)
00110 {
00111 ASSERT(fd->_type == KFT_DATAFLASH);
00112 return (DataFlash *)fd;
00113 }
00114
00115 #define RESET_PULSE_WIDTH 10 ///< Width of reset pulse in usec.
00116 #define BUSY_BIT 0x80 ///< Select a busy bit in status register.
00117 #define CMP_BIT 0x40 ///< Select a compare bit in status register.
00118
00124 #define GET_ID_DESITY_DEVICE(reg_stat) (((reg_stat) & 0x3C) >> 2)
00125
00129 typedef enum DataFlashOpcode {
00134 DFO_READ_FLASH_MEM_BYTE_D = 0x0B,
00135 DFO_READ_FLASH_MEM_BYTE_B = 0xE8,
00136
00137 DFO_READ_FLASH_MEM = 0xD2,
00138 DFO_READ_BUFF1 = 0xD4,
00139 DFO_READ_BUFF2 = 0xD6,
00140
00141
00146 DFO_WRITE_BUFF1 = 0x84,
00147 DFO_WRITE_BUFF2 = 0x87,
00148 DFO_WRITE_BUFF1_TO_MEM_E = 0x83,
00149 DFO_WRITE_BUFF2_TO_MEM_E = 0x86,
00150 DFO_WRITE_BUFF1_TO_MEM = 0x88,
00151 DFO_WRITE_BUFF2_TO_MEM = 0x89,
00152 DFO_ERASE_PAGE = 0x81,
00153 DFO_ERASE_BLOCK = 0x50,
00154 DFO_ERASE_SECTOR = 0x7C,
00155 DFO_WRITE_MEM_TR_BUFF1 = 0x82,
00156 DFO_WRITE_MEM_TR_BUFF2 = 0x85,
00157
00158
00163 DFO_MOV_MEM_TO_BUFF1 = 0x53,
00164 DFO_MOV_MEM_TO_BUFF2 = 0x55,
00165 DFO_CMP_MEM_TO_BUFF1 = 0x60,
00166 DFO_CMP_MEM_TO_BUFF2 = 0x61,
00167 DFO_ARW_MEM_TR_BUFF1 = 0x58,
00168 DFO_ARW_MEM_TR_BUFF2 = 0x59,
00169 DFO_PWR_DOWN = 0xB9,
00170 DFO_RESUME_PWR_DOWN = 0xAB,
00171 DFO_READ_STATUS = 0xD7,
00172 DFO_ID_DEV = 0x9F
00173
00174 } DataFlashOpcode;
00175
00176
00180 typedef struct DataflashInfo
00181 {
00182 uint8_t density_id;
00183 dataflash_size_t page_size;
00184 uint8_t page_bits;
00185 uint16_t page_cnt;
00186 DataFlashOpcode read_cmd;
00187 } DataflashInfo;
00188
00189
00190 bool dataflash_init(DataFlash *fd, KFile *ch, DataflashType type, dataflash_setCS_t *setCS, dataflash_setReset_t *setReset);
00191 bool dataflash_diskInit(struct BattFsSuper *d, DataFlash *fd, pgcnt_t *page_array);
00192
00200 int dataflash_testSetup(void);
00201
00202 #define dataflash_testSetUp() dataflash_testSetup()
00203 int dataflash_testRun(void);
00204 int dataflash_testTearDown(void);
00205
00206 #endif