BeRTOS
flash25.h
Go to the documentation of this file.
00001 
00044 #ifndef DRV_FLASH25_H
00045 #define DRV_FLASH25_H
00046 
00047 #include "cfg/cfg_flash25.h"
00048 #include <cfg/compiler.h>
00049 
00050 #include <io/kfile.h>
00051 
00055 typedef uint32_t flash25Addr_t;
00056 typedef uint32_t flash25Size_t;
00057 typedef uint8_t flash25Offset_t;
00058 
00062 typedef struct Flash25
00063 {
00064     KFile fd;                       
00065     KFile *channel;                 
00066 } Flash25;
00067 
00071 #define KFT_FLASH25 MAKE_ID('F', 'L', '2', '5')
00072 
00073 
00077 INLINE Flash25 * FLASH25_CAST(KFile *fd)
00078 {
00079     ASSERT(fd->_type == KFT_FLASH25);
00080     return (Flash25 *)fd;
00081 }
00082 
00092 #define FLASH25_AT25F2048         1
00093 
00094 #if CONFIG_FLASH25 == FLASH25_AT25F2048
00095     #define FLASH25_MANUFACTURER_ID    0x1F  // ATMEL
00096     #define FLASH25_DEVICE_ID          0x63  // Device ID
00097     #define FLASH25_PAGE_SIZE          256   // Page size in byte
00098     #define FLASH25_NUM_SECTOR         4     // Number of section in serial memory
00099     #define FLASH25_SECTOR_SIZE        65536UL // Section size in byte
00100     #define FLASH25_MEM_SIZE           FLASH25_NUM_SECTOR * FLASH25_SECTOR_SIZE
00101     #define FLASH25_NUM_PAGE           FLASH25_MEM_SIZE / FLASH25_PAGE_SIZE
00102 #else
00103     #error Nothing memory defined in CONFIG_FLASH25 are support.
00104 #endif
00105 
00106 #define RDY_BIT     0x1 // Statuts of write cycle
00107 
00111 typedef enum {
00112     FLASH25_WREN            = 0x6,  
00113     FLASH25_WRDI            = 0x4,  
00114     FLASH25_RDSR            = 0x5,  
00115     FLASH25_WRSR            = 0x1,  
00116     FLASH25_READ            = 0x3,  
00117     FLASH25_PROGRAM         = 0x2,  
00118     FLASH25_SECTORE_ERASE   = 0x52, 
00119     FLASH25_CHIP_ERASE      = 0x62, 
00120     FLASH25_RDID            = 0x15 
00121 } Flash25Opcode;
00122 
00126 #if CONFIG_FLASH25 != FLASH25_AT25F2048
00127     #error Nothing memory defined in CONFIG_FLASH25 are support.
00128 #endif
00129 
00130 typedef enum {
00131     FLASH25_SECT1            = 0x0,      
00132     FLASH25_SECT2            = 0x10000,  
00133     FLASH25_SECT3            = 0x20000,  
00134     FLASH25_SECT4            = 0x30000,  
00135 } Flash25Sector;
00136 
00137 void flash25_init(Flash25 *fd, KFile *ch);
00138 void flash25_chipErase(Flash25 *fd);
00139 void flash25_sectorErase(Flash25 *fd, Flash25Sector sector);
00140 bool flash25_test(KFile *channel);
00141 
00142 #endif /* DRV_FLASH25_H */
00143