📄 flash.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 + -