Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /********************************************************************************
- *********************************************************************************
- COPYRIGHT (c) 2004 BY ROCK-CHIP FUZHOU
- -- ALL RIGHTS RESERVED --
- File Name: flash.h
- Author: XUESHAN LIN
- Created: 1st Dec 2008
- Modified:
- Revision: 1.00
- ********************************************************************************
- ********************************************************************************/
- #ifndef _FLASH_H
- #define _FLASH_H
- //1¿ÉÅäÖòÎÊý
- #define DUAL_PLANE //¶¨ÒåÊÇ·ñʹÄÜDUAL PLANE
- //#define INTERLEAVE //¶¨ÒåÊÇ·ñʹÄÜInterleave
- #define MAX_FLASH_NUM 4 /*×î´óÖ§³ÖµÄFLASHÊý*/
- #define MAX_REFLESH_LOG 10 //¶¨ÒåÐèÒª¸üеĵØÖ·¼Ç¼Êý
- #define DATA_LEN (8192*2/4) //Êý¾Ý¿éµ¥Î»word
- #define SPARE_LEN (256*2/4) //УÑéÊý¾Ý³¤¶È
- #define PAGE_SIZE (DATA_LEN+SPARE_LEN) //ÿ¸öÊý¾Ýµ¥Î»µÄ³¤¶È
- #define CHIP_SIGN 0x37324B52 //RK28 0x37324B52
- /*******************************************************************
- ºê³£Êý¶¨Òå
- *******************************************************************/
- /*******************************************************************
- ³§ÉÌ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
- #define INTEL 0x07 //Ó¢Ìضûintel
- /*******************************************************************
- Æ÷¼þID±àÂë
- *******************************************************************/
- #define Small64M 0x00
- #define Small128M 0x01
- #define Large128M 0x02
- #define Large256M 0x03
- #define Large512M 0x04
- #define Large1G 0x05
- #define Large2G 0x06
- /*******************************************************************
- FLASHͨ¹ý²Ù×÷ÃüÁ(ÈýÐÇ)
- *******************************************************************/
- #define RESET_CMD 0xff
- #define READ_ID_CMD 0x90
- #define READ_UNIQUE_ID_CMD 0xed
- #define READ_STATUS_CMD 0x70
- #define READ_STATUS_CMD_TOSHIBA 0x71
- #define READ_STATUS_CMD_MICRON 0x78
- #define CHIP1_STATUS_CMD 0xf1
- #define CHIP2_STATUS_CMD 0xf2
- #define PAGE_PROG_CMD 0x8010
- #define PLANE2_PAGE_PROG_CMD 0x8111
- #define INTERLEAVE_PROG_CMD 0x8080
- #define BLOCK_ERASE_CMD 0x60d0
- /*******************************************************************
- LARGE PAGE FLASH²Ù×÷ÃüÁ(ÈýÐÇ)
- *******************************************************************/
- #define READ_CMD 0x0030
- #define DUALPLANE_READ_CMD 0x6030
- #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
- #define PLANE1_DATAOUT_CMD 0x06e0
- /*******************************************************************
- 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
- #define FLASH_PROTECT_ON() //write_XDATA32(FMCTL, ReadNandReg(FMCTL) & (~0x10))
- #define FLASH_PROTECT_OFF() //write_XDATA32(FMCTL, ReadNandReg(FMCTL) | 0x10)
- /*******************************************************************
- FLASH¶Áд½Ó¿Ú
- *******************************************************************/
- //1½á¹¹¶¨Òå
- //chip interface reg
- typedef volatile struct tagCHIP_IF
- {
- uint32 data;
- uint32 addr;
- uint32 cmd;
- uint32 RESERVED[0x7d];
- }CHIP_IF, *pCHIP_IF;
- //NANDC Registers
- typedef volatile struct tagNANDC
- {
- uint32 FMCTL;
- uint32 FMWAIT;
- uint32 FLCTL;
- uint32 BCHCTL;
- uint32 RESERVED1[(0xd0-0x10)/4];
- uint32 BCHST;
- uint32 RESERVED2[(0x200-0xd4)/4];
- CHIP_IF chip[4];
- uint32 buf[0x800/4];
- uint32 spare[0x80/4];
- } NANDC, *pNANDC;
- typedef struct tagFLASH_SPEC
- {
- uint8 EccBits; //ECC±ÈÌØÊý
- 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ÉÈÇøÊý
- uint32 SecPerBlock;
- uint32 SecPerBlockRaw;
- uint32 PagePerBlock;
- uint32 Die2PageAddr;
- uint32 TotalPhySec;
- uint32 TotPhySec[MAX_FLASH_NUM];
- } 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;
- /*ID BLOCK SECTOR 0 INFO*/
- #ifndef LINUX
- typedef __packed struct tagIDSEC0
- #else
- typedef struct tagIDSEC0
- #endif
- {
- uint32 magic; //0x0ff0aa55, MASKROMÏÞ¶¨²»Äܸü¸Ä
- uint8 reserved[8];
- uint16 bootCodeOffset1; //Öмä¼þÉÈÇøÆ«ÒÆ, MASKROMÏÞ¶¨²»Äܸü¸Ä
- uint16 bootCodeOffset2; //µÚ¶þ·ÝÖмä¼þÆ«ÒÆ
- uint8 reserved1[508-16];
- uint16 bootCodeSize; //ÒÔSEC±íʾµÄÖмä¼þ´óС, MASKROMÏÞ¶¨²»Äܸü¸Ä
- uint16 crc16; //Õû¸öID SECµÄÇ°512£2×Ö½ÚÊý¾ÝµÄCRC16
- #ifndef LINUX
- } IDSEC0, *pIDSEC0;
- #else
- }__attribute__((packed)) IDSEC0, *pIDSEC0;
- #endif
- /*ID BLOCK SECTOR 1 INFO*/
- #ifndef LINUX
- typedef __packed struct tagIDSEC1
- #else
- typedef struct tagIDSEC1
- #endif
- {
- uint16 sysAreaBlockRaw; //ϵͳ±£Áô¿é, ÒÔÔʼBlockΪµ¥Î»
- uint16 sysProgDiskCapacity; //ϵͳ¹Ì¼þÅÌÈÝÁ¿, ÒÔMBΪµ¥Î»
- uint16 sysDataDiskCapacity; //ϵͳ²ÎÊýÅÌÈÝÁ¿, ÒÔMBΪµ¥Î»
- uint16 reserved0[2]; //±£Áô²¿·ÖÌî0
- uint16 chipSignL; // 28
- uint16 chipSignH; // RK
- uint16 MachineUIDL; //»úÐÍUID,Éý¼¶Ê±Æ¥Åä¹Ì¼þÓÃ
- uint16 MachineUIDH;
- uint16 year; //Öмä¼þÉú³ÉÈÕÆÚÄê
- uint16 data; //Öмä¼þÉú³ÉÈÕÆÚÔÂÈÕ
- uint16 mainVer; //Ö÷°æ±¾ºÅ
- uint8 reserved1[489-24]; //±£Áô²¿·ÖÌî0
- uint8 accessTime; //¶Áдcycleʱ¼ä, ns
- uint16 blockSize; //ÒÔSEC±íʾµÄBLOCK SIZE
- uint8 pageSize; //ÒÔSEC±íʾµÄPAGE SIZE
- uint8 eccBits; //ÐèÒªµÄECC BITÊý, eg. 8/14
- uint16 bStartEIB;
- uint16 bEndEIB;
- uint16 bStartRB;
- uint16 bEndRB;
- uint16 idBlk[5]; //ID¿éλÖÃ
- #ifndef LINUX
- }IDSEC1, *pIDSEC1;
- #else
- }__attribute__((packed)) IDSEC1, *pIDSEC1;
- #endif
- #ifndef LINUX
- typedef __packed struct _FLASH_INFO
- #else
- typedef struct _FLASH_INFO
- #endif
- {
- uint32 FlashSize; //(SectorΪµ¥Î») 4Byte
- uint16 BlockSize; //(SectorΪµ¥Î») 2Byte
- uint8 PageSize; //(SectorΪµ¥Î») 1Byte
- uint8 ECCBits; //(bitsΪµ¥Î») 1Byte
- uint8 AccessTime;
- uint8 ManufacturerName; // 1Byte
- uint8 FlashMask; //ÿһbit´ú±íÄǸöƬѡÊÇ·ñÓÐFLASH
- #ifndef LINUX
- } FLASH_INFO, *pFLASH_INFO;
- #else
- }__attribute__((packed)) FLASH_INFO, *pFLASH_INFO;
- #endif
- //1È«¾Ö±äÁ¿
- #undef EXT
- #ifdef IN_FLASH
- #define EXT
- #else
- #define EXT extern
- #endif
- EXT FLASH_SPEC FlashSpec;
- EXT FLASH_CMD FlashPendCmd;
- EXT pNANDC NandReg; //NANDC¼Ä´æÆ÷
- EXT uint32 RefleshSec[MAX_REFLESH_LOG];
- EXT uint32 SysProgDiskCapacity; //ϵͳ³ÌÐòÅÌÈÝÁ¿
- EXT uint32 SysDataDiskCapacity; //ϵͳÊý¾ÝÅÌÈÝÁ¿
- EXT uint16 SysAreaBlockRaw;
- EXT uint8 FlashReadStatusCmd;
- EXT uint32 FlashSysProtMagic;
- EXT uint32 FlashSysProtAddr;
- EXT uint16 LoaderVer;
- //1º¯ÊýÔÐÍÉùÃ÷
- //flash.c
- extern void FlashTimingCfg(uint32 AHBnKHz);
- extern void FlashSysProtSet(uint32);
- extern uint32 FlashInit(void);
- extern uint32 FlashReadEnhanced(uint32 sec, void *pData, void *pSpare, uint8 nSec, uint32 nextSec);
- extern uint32 FlashProgPage(uint32 sec, void *pData, void *pSpare, uint8 nSec);
- extern uint32 FlashProgEnhanced(uint32 sec, void* buf, void* spare);
- extern uint32 FlashBlockErase(uint32 sec);
- extern uint32 FlashCopyProg(uint32 srcSec, uint32 destSec, uint16 nSec, void *pSpare);
- //1±í¸ñ¶¨Òå
- #ifdef IN_FLASH
- /*******************************
- ³§ÉÌID±í
- ********************************/
- uint8 ManufactureIDTbl[]=
- {
- 0xec, //ÈýÐÇSAMSUNG
- 0x98, //¶«Ö¥TOSHIBA
- 0xad, //º£Á¦Ê¿HYNIX
- 0xc1, //Ó¢·ÉÁèINFINEON
- 0x2c, //ÃÀ¹âMICRON
- 0x07, //ÈðÈøRENESAS
- 0x20, //Òâ·¨°ëµ¼ÌåST
- 0x89 //Ó¢Ìضûintel
- };
- /*******************************
- Æ÷¼þ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
- 0xD9 //large 8bit-8G
- };
- /*******************************
- Æ÷¼þÐÅÏ¢±í
- ********************************/
- 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
- 0x1000000 // DI_8G, large page
- };
- #if 0
- const char* VonderDesc[]=
- {
- "Samsung",
- "Toshiba",
- "Hynix",
- "Infineon",
- "Micron",
- "Renesas",
- "ST",
- "Intel"
- };
- #endif
- #else
- extern uint8 ManufactureIDTbl[];
- extern uint8 DeviceCode[];
- extern uint32 DeviceInfo[];
- #endif
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement