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

📄 flash.h

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 H
字号:
/********************************************************************************
*********************************************************************************
   COPYRIGHT (c)   2004 BY ROCK-CHIP FUZHOU
    --  ALL RIGHTS RESERVED  --

File Name:     flash.h
Author:      XUESHAN LIN
Created:  1st JUL 2007
Modified:
Revision:  1.00
$Log: flash.h,v $
Revision 1.5  2007/11/21 13:13:46  Fangzhenfu
删除旧的升级工具!统一采用新的工具跟文件系统、USB

Revision 1.4  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.3  2007/10/08 02:58:13  Lingzhaojun
添加版本自动注释脚本


********************************************************************************
********************************************************************************/
#ifndef _FLASH_H
#define _FLASH_H

/*******************************************************************
厂商ID编码
*******************************************************************/
#define  SAMSUNG         0x00  //三星SAMSUNG
#define  TOSHIBA         0x01  //东芝TOSHIBA
#define  HYNIX      0x02  //海力士HYNIX
#define  INFINEON     0x03  //英飞凌INFINEON
#define  MICRON      0x04  //美光MICRON
#define  RENESAS         0x05  //瑞萨RENESAS
#define  ST       0x06  //意法半导体ST

/*******************************************************************
器件ID编码
*******************************************************************/
#define  Small64M     0x00  //三星SAMSUNG
#define  Small128M     0x01  //东芝TOSHIBA
#define  Large128M     0x02  //海力士HYNIX
#define  Large256M     0x03  //英飞凌INFINEON
#define  Large512M     0x04  //美光MICRON
#define  Large1G      0x05  //瑞萨RENESAS
#define  Large2G      0x06  //意法半导体ST


/*******************************************************************
FLASH通过操作命令集(三星)
*******************************************************************/
#define  RESET_CMD     0xff
#define  READ_ID_CMD        0x90
#define  READ_STATUS_CMD       0x70
#define  READ_STATUS_CMD_MULTI       0x71
#define  PAGE_PROG_CMD    0x8010
#define  PLANE2_PAGE_PROG_CMD     0x8111
#define  BLOCK_ERASE_CMD       0x60d0

/*******************************************************************
LARGE PAGE FLASH操作命令集(三星)
*******************************************************************/
#define  READ_CMD     0x0030
#define  READ_COPY_CMD    0x0035
#define  CACHE_PROG_CMD       0x8015
#define  COPY_PROG_CMD    0x8510
#define  RAND_DATAIN_CMD       0x85
#define  RAND_DATAOUT_CMD   0x05e0

/*******************************************************************
SMALL PAGE FLASH操作命令集(三星)
*******************************************************************/
#define  READ0_CMD     0x00
#define  READ1_CMD     0x01
#define  READ_SPARE_CMD       0x50
#define  SMALL_COPY_PROG_CMD      0x8A10

//BCHCTL寄存器
#define  BCH_WR                  0x0002
#define  BCH_RST                  0x0001

//FLCTL寄存器
#define  FL_RDY                     0x1000
#define  FL_COR_EN                 0x0800
#define  FL_INT_EN                 0x0400
#define  FL_XFER_EN                 0x0200
#define  FL_INTCLR_EN             0x0100
#define  FL_START                 0x0004
#define  FL_WR                     0x0002
#define  FL_RST                     0x0001

/*******************************************************************
FLASH读写接口
*******************************************************************/

//1结构定义
typedef struct _FLASH_SPEC
{
    uint8 CacheProg;          //是否支持cache program
    uint8 MulPlane;           //是否支持MultiPlane
    uint8 Interleave;         //是否支持Interleave
    uint8 Large;              //是否LargeBlock
    uint8 Five;               //是否有3个行地址
    uint8 MLC;                //是否MLC
    uint8 Vonder;             //厂商
    uint8 AccessTime;         //cycle time
    uint8 SecPerPage;         //FLASH DualPlane每PAGE扇区数
    uint8  SecPerPageRaw;  //FLASH原始每PAGE扇区数
    uint16 SecPerBlock;
    uint16 SecPerBlockRaw;
    uint16 PagePerBlock;
    uint16 PagePerBlockRaw;

    uint32 TotLogicSec;
    uint32 TotPhySec;
    uint32 TotBlks;
    uint32 Cmd;
    uint32 Addr;
    uint32 Data;
} FLASH_SPEC, *pFLASH_SPEC;

typedef struct _FLASH_CMD
{
    uint8 Valid;    //指示是否有效
    uint16 Cmd;     //FLASH命令码
    uint32 ReadSec; //物理扇区地址
    uint32 ErrSec;  //出错物理扇区地址
    uint8* Buf;     //缓冲区
    uint16 Len;     //扇区数
} FLASH_CMD, *pFLASH_CMD;



//1全局变量
#undef EXT
#ifdef IN_FLASH
#define EXT
#else
#define EXT  extern
#endif
// 080528,huangsl,为了消除 位置对APE的影响,FS ZI 采用 8K对齐,下面数据移到
// 汇编文件里面.
EXT     uint32  FlashPageBufTmp[PAGE_SIZE];
//extern      uint32  FlashPageBufTmp[];

EXT  FLASH_SPEC FlashSpec[MAX_FLASH_NUM];
EXT  FLASH_CMD FlashPendCmd;
EXT  uint32  MlcRefleshRow;
EXT  uint32  SysDiskCapacity;   //系统盘容量
EXT  uint16  SysAreaBlockRaw;
EXT  uint32  TotalPhySec;
EXT  uint8   FlashReadStatusCmd;
//1函数原型声明
//flash.c
extern void    FlashTimingCfg(uint32 Freq);
extern  void    Delay100cyc(uint32 count);
extern uint8  FlashInit(void);
extern uint8  FlashGetChip(uint32 row);
extern void  FlashCs(uint8 ChipSel);
extern void  FlashDeCs(uint8 ChipSel);
extern void  FlashReadCmd(uint32 row);
extern void  FlashProgCmd(uint32 row);
extern void    FlashProgCmdPlane2(uint32 row, uint8 plane);
extern void    FlashBlockEraseCmd(uint32 row);
extern uint32  FlashWaitBusy(uint32 row);
extern uint8 FlashReadStatus(uint8 ChipSel);
extern uint8  FlashReadPage(uint32 row, void *pData, void *pSpare, uint8 nSec);
extern bool  FlashPageProg(uint32 row, void *pData, void *pSpare, uint8 nSec);
extern bool  FlashBlockErase(uint32 RowAddr);
extern bool  FlashCopyProg(uint32 SrcRow, uint32 DestRow, uint16 PageCnt);
extern bool  FlashProgEnhanced(uint32 row, void* buf, void* spare);
extern void  MlcReadError(uint32 row);
extern void  MlcRefreshHook(void);
//1表格定义
#ifdef IN_FLASH
/*******************************
厂商ID表
********************************/
uint8 ManufactureIDTbl[] =
{
    0xec,     //三星SAMSUNG
    0x98,     //东芝TOSHIBA
    0xad,     //海力士HYNIX
    0xc1,     //英飞凌INFINEON
    0x2c,     //美光MICRON
    0x07,     //瑞萨RENESAS
    0x20     //意法半导体ST
};

/*******************************
器件ID表
********************************/
uint8 DeviceCode[] =
{
    0x76,     //small 8bit-64MB
    0x79,     //small 8bit-128MB
    0xF1,     //large 8bit-128M
    0xDA,     //large 8bit-256M
    0xDC,     //large 8bit-512M
    0xD3,     //large 8bit-1G
    0xD5,     //large 8bit-2G
    0xD7     //large 8bit-4G

//   0x56,     //small 16bit-64MB
//   0x74,     //small 16bit-128MB
//   0xc1,     //large 16bit-128M
//   0xca,     //large 16bit-256M
//   0xcc,     //large 16bit-512M
//   0xc3,     //large 16bit-1G
//   0xc5,     //large 16bit-2G
//   0xc7     //large 16bit-4G
};

/*******************************
器件信息表
********************************/
uint32 DeviceInfo[] = //phisical sectors
{
    0x20000,      // DI_64M, small page
    0x40000,      // DI_128M, small page
    0x40000,      // DI_128M, large page
    0x80000,       // DI_256M, large page
    0x100000,     // DI_512M, large page
    0x200000,     // DI_1G,   large page
    0x400000,     // DI_2G,   large page
    0x800000     // DI_4G,   large page
};

#ifdef DEBUG_FLASH
const char* VonderDesc[] =
{
    "Samsung",
    "Toshiba",
    "Hynix",
    "Infineon",
    "Micron",
    "Renesas",
    "ST"
};
const char* CapDesc[] =
{
    "64MB",
    "128MB",
    "256MB",
    "512MB",
    "1GB",
    "2GB",
    "4GB"
};
#endif
#else
extern uint8  ManufactureIDTbl[];
extern uint8  DeviceCode[];
extern uint32 DeviceInfo[];
#endif
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -