📄 ftl.h
字号:
/********************************************************************************
*********************************************************************************
COPYRIGHT (c) 2004 BY ROCK-CHIP FUZHOU
-- ALL RIGHTS RESERVED --
File Name: FTL.h
Author: XUESHAN LIN
Created: 1st JUL 2007
Modified:
Revision: 1.00
$Log: FTL.h,v $
Revision 1.5 2008/01/18 08:53:44 Lingzhaojun
no message
Revision 1.4 2007/11/21 13:13:46 Fangzhenfu
删除旧的升级工具!统一采用新的工具跟文件系统、USB
Revision 1.3 2007/11/07 07:25:50 Fangzhenfu
USB 提速(小文件提速,目前速度写 3M 左右,读 6.5M左右, 4K PAGE FLASH 可到 5M,8M),
文件系统修改!
加入 FLASH 访问时序 API ! 见 flash_dev.h 中
FlashTimingCfg(uint32 Freq) Freq 为总线频率---打包
第一次调用 FlashTimingCfg()时请在 FS_Init() 之后调用,其它在总线频率变化时调用!
Revision 1.2 2007/10/08 02:58:13 Lingzhaojun
添加版本自动注释脚本
********************************************************************************
********************************************************************************/
#ifndef _FTL_H
#define _FTL_H
//1可配置参数
#define FTL_VERSION 0x200 //FTL版本号, 0x100表示ver1.00, 需要低格时修改主版本号, 否则只需修改次版本号
#define MAX_ZONE_NUM 64 /*最大的ZONE数,ZONE=256BLOCKs*/
#define MAX_EXCH_BLOCKS 10 /*最大的的坏块交替块数*/
#define MAX_CACHE_BLOCKS 10 /*用来作CACHE的块数*/
#define EXCH_BLK_NUM 6 /*交换块数*/
#define MAX_WRITE_CACHE 3
/*******************************************************************
宏常数定义
*******************************************************************/
#define SECOND_BLOCK_NUM (253-EXCH_BLK_NUM) //256-3,2映射块,1数据交换块
#define ZONE_RESERVE (256-SECOND_BLOCK_NUM) //每个ZONE的实际可用块数
#define FST_ZONE_RESERVE (ZONE_RESERVE+1+MAX_EXCH_BLOCKS+MAX_CACHE_BLOCKS)
//ZONE_RESERVE+1好块记录, 10EXCH块, 10CACHE块
//1结构定义
typedef struct _EXCH_BLK_INFO
{
uint32 Start;
uint32 End;
uint32 SrcAddr; //源BLOCK地址, 用于关闭或恢复
uint8 Count;
uint8 Valid;
} EXCH_BLK_INFO, *pEXCH_BLK_INFO;
typedef struct _ZONE
{
uint16 RemapPosInBlk; //映射表中块中的位置
uint8 RemapPosInZone; //映射块在ZONE中的位置
uint8 ValidBlksTbl; //记录每个ZONE的有效块数,低格时记录
EXCH_BLK_INFO gExchBlkInfo[EXCH_BLK_NUM];
} ZONE, *pZONE;
typedef struct _FLASH_CACHE
{
uint8 buf[DATA_LEN*4];
uint8 Valid;
uint8 Count;
uint32 LBA;
pEXCH_BLK_INFO handle;
} FLASH_CACHE, *pFLASH_CACHE;
//1全局变量
#undef EXT
#ifdef IN_FTL
#define EXT
#else
#define EXT extern
#endif
EXT ZONE Zone[MAX_ZONE_NUM];
EXT uint16 BadBlkExchTbl[MAX_EXCH_BLOCKS]; //擦写过程坏块替换列表
EXT uint16 CacheBlkTbl[MAX_CACHE_BLOCKS]; //用来作CACHE的BLOCK列表
EXT FLASH_CACHE FlashCache[MAX_WRITE_CACHE];
EXT uint8 RemapTblBuf[512]; //映射表
EXT uint16 CacheRemap; //当前CACHE的映射表
//1函数原型声明
//FTL.c
extern void ExchBlkInit(void);
extern uint8 ExchBlkOpen(uint32 LBA);
extern void ExchBlkClose(pEXCH_BLK_INFO Handle);
extern void ExchBlkCloseAll(void);
extern uint8 ExchBlkMatch(uint8 Drive, uint32 LBA);
extern pEXCH_BLK_INFO ExchBlkWriteMatch(uint32 LBA);
extern void ExchBlkRecovery(void);
extern bool CheckBadBlock(uint32 pageNum);
extern void SetBadBlock(uint32 pageNum);
extern void FTLInit(void);
extern uint32 GetLBA(uint16 zone);
extern void GetZone(uint32 LBA, uint16* zone, uint8* BlockOffset, uint16* SectorOffset);
extern uint32 GetAbsPhyAddr(uint16 BlkAddr);
extern uint32 BadBlkReplace(uint32 SrcBlockAddr);
extern uint32 GetRemap(uint32 LBA);
extern uint32 GetRemapRaw(uint32 LBA);
extern void SetRemap(uint32 LBA);
extern uint8 GetRemapTbl(void);
extern void MakeRemapTbl(uint8 Area);
extern void LowFormat(uint8 Area);
extern void FlashCacheCloseAll(void);
extern bool UsbWriteSector(uint8 Drive, uint32 Index, void *pData, void *pSpare);
extern uint32 FlashProgError(uint32 PageAddr, void *DataBuf, uint16 nSec);
extern uint32 GetCapacity(uint8 Drive);
extern int FlashReadSecs(uint8 Drive, uint32 Index, void *pData, uint16 nSec);
extern int FlashWriteSecs(uint8 Drive, uint32 Index, void *pData, uint16 nSec);
extern uint32* UsbCacheRead(uint32 LUN, uint32 LBA);
//1表格定义
#ifdef IN_FTL
#else
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -