⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ftl.h

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 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 + -