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