📄 strata_flash.h
字号:
/* * File: strata_flash.h * Purpose: Flash driver for programming Intel Flash devices * * Notes: This driver supports a single banks of Intel Flash. * A bank is defined as one or more of the same Flash * device connected to a single chip-select. * */#ifndef _STRATA_FLASH_H_#define _STRATA_FLASH_H_/********************************************************************/#ifndef STRATA_FLASH_DEVICES#define STRATA_FLASH_DEVICES 1#endif/********************************************************************//* * Flash sector definitions - addresses are given in bytes (not words!) */#if (defined(STRATA_FLASH_28F256P30B)) /* 256Kbit P30, Bottom Boot */ #define STRATA_FLASH_SECTORS 259 #define SF_SSIZE(n) (n < 4 ? 0x08000 * STRATA_FLASH_DEVICES \ : 0x20000 * STRATA_FLASH_DEVICES) #define SF_SOFFSET(n) (n < 4 ? 0x08000 * STRATA_FLASH_DEVICES * n \ : 0x20000 * STRATA_FLASH_DEVICES * (n - 3)) #define SF_SADDR(n) (SF_SOFFSET(n) >> STRATA_FLASH_BUS_SHIFT) #define STRATA_FLASH_16BIT#elif (defined(STRATA_FLASH_28F128J3D)) /* * Uniform sectors of 128 KBytes */ #define STRATA_FLASH_SECTORS 128 #define SF_SSIZE(n) (0x20000 * STRATA_FLASH_DEVICES) #define SF_SOFFSET(n) (0x20000 * n) #define SF_SADDR(n) ((0x20000 * n) >> STRATA_FLASH_BUS_SHIFT) #define STRATA_FLASH_8BIT#else#error "Unsupported Flash device"#endif/********************************************************************//* * Defines used to correctly address the Flash device(s) * * STRATA_FLASH_BUS_SHIFT - Number of bits to right-shift the byte * offsets of the sectors * STRATA_FLASH_CELL - Port size of Flash device(s) * STRATA_FLASH_CMD_DATA - Format of data when issuing commands * */#if defined(STRATA_FLASH_16BIT) #if (STRATA_FLASH_DEVICES == 1) #define STRATA_FLASH_BUS_SHIFT 1 #define STRATA_FLASH_CELL vuint16 #define STRATA_FLASH_CELL_BYTES 2 #define STRATA_FLASH_CELL_MASK 0x1 #define STRATA_FLASH_CMD_DATA(x) ((uint16)x) #elif (STRATA_FLASH_DEVICES == 2) #define STRATA_FLASH_BUS_SHIFT 2 #define STRATA_FLASH_CELL vuint32 #define STRATA_FLASH_CELL_BYTES 4 #define STRATA_FLASH_CELL_MASK 0x3 #define STRATA_FLASH_CMD_DATA(x) ((uint32)((x<<16)|x)) #else #error "Unsupported number of Flash devices" #endif#elif defined(STRATA_FLASH_8BIT) #if (STRATA_FLASH_DEVICES == 1) #define STRATA_FLASH_BUS_SHIFT 0 #define STRATA_FLASH_CELL vuint8 #define STRATA_FLASH_CELL_BYTES 1 #define STRATA_FLASH_CELL_MASK 0x0 #define STRATA_FLASH_CMD_DATA(x) ((uint8)x) #elif (STRATA_FLASH_DEVICES == 2) #define STRATA_FLASH_BUS_SHIFT 1 #define STRATA_FLASH_CELL vuint16 #define STRATA_FLASH_CELL_BYTES 2 #define STRATA_FLASH_CELL_MASK 0x1 #define STRATA_FLASH_CMD_DATA(x) ((uint16)x) #else #error "Unsupported number of Flash devices" #endif#else#error "Unsupported Flash device size"#endif/********************************************************************/STRATA_FLASH_CELLstrata_flash_read_device_info(int);voidstrata_flash_init(ADDRESS);voidstrata_flash_sector_unlock(int);voidstrata_flash_sector_lock(int);intstrata_flash_sector_erase(int);intstrata_flash_erase(ADDRESS, int, void(*)(char));intstrata_flash_program_cell(STRATA_FLASH_CELL*, STRATA_FLASH_CELL);int strata_flash_program(ADDRESS, ADDRESS, int, int, void(*)(void), void(*)(char));int strata_flash_sector_number(ADDRESS);ADDRESS strata_flash_sector_start(ADDRESS);ADDRESS strata_flash_sector_end(ADDRESS);/********************************************************************/#endif /* _STRATA_FLASH_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -