初版
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
#ifndef _FTL_API_H
|
||||
#define _FTL_API_H
|
||||
|
||||
#include "generic/typedef.h"
|
||||
|
||||
|
||||
enum ftl_error_t {
|
||||
FTL_ERR_NO = 0x00,
|
||||
FTL_ERR_1BIT_ECC = 0x01,
|
||||
FTL_ERR_READ = 0x02,
|
||||
FTL_ERR_WRITE = 0x04,
|
||||
FTL_ERR_NO_MEM = 0x08,
|
||||
FTL_ERR_NO_BLOCK = 0x10,
|
||||
FTL_ERR_INVALID = 0x20,
|
||||
FTL_ERR_ADDR_OVER = 0x40,
|
||||
};
|
||||
|
||||
struct ftl_nand_flash {
|
||||
u8 block_size_shift;
|
||||
u8 page_size_shift;
|
||||
u8 page_num; //每个block的page数量
|
||||
u16 block_begin; //需要管理的起始block
|
||||
u16 block_end; //需要管理的结束block(不包含)
|
||||
u16 logic_block_num; //虚拟出的逻辑block数量, 需要预留一定比例的坏块,
|
||||
//要比物理block数量少
|
||||
u16 page_size; //page大小(byte)
|
||||
u16 oob_user_offset[2]; //可以使用的oob地址偏移(相对于oob起始地址)
|
||||
u16 oob_user_size[2]; //可使用oob区域大小(byte)
|
||||
u16 oob_size; //oob区域大小(byte)
|
||||
u32 max_erase_cnt; //block的最大擦除次数
|
||||
u8 plane_number; //plane的数量
|
||||
enum ftl_error_t (*page_read)(u16 block, u8 page, u16 offset, u8 *buf, int len);
|
||||
enum ftl_error_t (*page_write)(u16 block, u8 page, u8 *buf, int len);
|
||||
enum ftl_error_t (*erase_block)(u32 addr);
|
||||
};
|
||||
|
||||
struct ftl_config {
|
||||
u8 page_buf_num; //page缓存数量,最少1个,影响读取和写入速度
|
||||
u16 delayed_write_msec; //写入数据没满一个page时,延时写入flash的时间,
|
||||
//0表示每次都直接写入
|
||||
};
|
||||
|
||||
int ftl_init(struct ftl_nand_flash *flash, struct ftl_config *config);
|
||||
|
||||
|
||||
int ftl_read_bytes(u32 addr, u8 *buf, u32 len, enum ftl_error_t *error);
|
||||
|
||||
|
||||
int ftl_write_bytes(u32 addr, u8 *buf, u32 len, enum ftl_error_t *error);
|
||||
|
||||
/*
|
||||
* 返回flash block size, 单位KByte
|
||||
*/
|
||||
int ftl_get_block_size();
|
||||
|
||||
/*
|
||||
* 返回flash容量, 单位KByte
|
||||
*/
|
||||
int ftl_get_capacity();
|
||||
|
||||
/*
|
||||
* 擦除逻辑地址, 地址要按block大小对齐
|
||||
*/
|
||||
int ftl_erase_lgc_addr(u32 addr);
|
||||
|
||||
int ftl_format();
|
||||
|
||||
/*
|
||||
* 释放掉ftl管理申请的memory和任务
|
||||
*/
|
||||
void ftl_uninit();
|
||||
/*
|
||||
* 返回擦除次数大于等于 check_erase_cnt 的block的数量
|
||||
*/
|
||||
int ftl_erase_cnt_check(int check_erase_cnt);
|
||||
/*
|
||||
* 打印block信息*debug使用
|
||||
*/
|
||||
void ftl_dump_block_info();
|
||||
/*
|
||||
低功耗释放缓存
|
||||
*/
|
||||
void ftl_free_page_buf();
|
||||
#endif
|
||||
Reference in New Issue
Block a user