NandFlash.h
资源名称:SDK_M5661.rar [点击查看]
上传用户:hjhsjcl
上传日期:2020-09-25
资源大小:11378k
文件大小:29k
源码类别:
压缩解压
开发平台:
C++ Builder
- //1 ========= New Nandflash structure
- #if(NEW_FLASH)
- /*==========================================================================
- Copyright (c) 2004 ALi Corporation. All Rights Reserved
- File: NandFlash.h
- content:
- History: Created by David Chiu 2004/3/30
- ==========================================================================*/
- #ifdef _NAND_FLASH_H_
- #define EXTERN
- #else
- #define EXTERN extern
- #endif
- //Allen060623 new_nf start
- //-------------------------------------------------------------------
- // Definition:
- //-------------------------------------------------------------------
- #if(_PM_INIT_|_PM_SYS_|(_PM_USB_&!_PM_MTP_)|_PM_MPTEST_|(SETTING_FOR_ICE_START)|(_PM_HST_&!_HOST_COPY_)|_PM_SAVE_|_PM_MTP_INIT_|SETTING_PM_DEL_DEBUG) //Tne050412#1
- #define _NAND_API_INIT_ 1
- #if(_PM_INIT_|_PM_USB_MSC_|SETTING_FOR_ISP_START)
- #define _NAND_INIT_PROCESS_ 1
- #else
- #define _NAND_INIT_PROCESS_ 0
- #endif
- #else
- #define _NAND_API_INIT_ 0
- #define _NAND_INIT_PROCESS_ 0
- #endif
- #if(_PM_SYS_)
- #define _NAND_API_ERASE_ 1
- #else
- #define _NAND_API_ERASE_ 0
- #endif
- #if(_PM_USB_|_PM_MPTEST_)
- #if(_PM_MTP_)
- #define _NAND_API_ATAPI_ 0
- #define _NAND_API_USB_ 0
- #else
- #define _NAND_API_USB_ 1
- #define _NAND_API_ATAPI_ 1
- #endif
- #else
- #define _NAND_API_USB_ 0
- #define _NAND_API_ATAPI_ 0
- #endif
- #define _NAND_COMMON_ 1
- #define _NAND_API_WRITE_ 1
- #define _NAND_API_READ_ 1
- #define _NAND_API_FINISHJOB_ 1
- #if(_PM_REC_)
- #define _NAND_API_STEPJOB_ 0
- #else
- #define _NAND_API_STEPJOB_ 0
- #endif
- #if(_PM_USB_MSC_|_PM_REC_) //060706: rec
- #define _NAND_FUNC_WL_ENABLE_ 1
- #define _NAND_FUNC_BADBLOCK_RECYCLE_ 1 //Allen060703
- #else
- #define _NAND_FUNC_WL_ENABLE_ 0
- #define _NAND_FUNC_BADBLOCK_RECYCLE_ 0 //Allen060703
- #endif
- #if(_NAND_FUNC_WL_ENABLE_)
- #define _NAND_API_RELOADWLC_ 1
- #else
- #define _NAND_API_RELOADWLC_ 0
- #endif
- #if(_PM_REC_|_PM_INIT_CHK_)
- #define _NAND_API_RW_SETTING_ 1
- #else
- #define _NAND_API_RW_SETTING_ 0
- #endif
- //
- // gxbNandInitStage
- //
- // 0: none
- // 1: NandInitPre done
- // 2: NandIdentify done
- // 3: NandInitGetConfig done
- // 4: NandInitBuildLUT done
- #define NDINIT_INIT 0
- #define NDINIT_PRE_DONE 1
- #define NDINIT_IDENT_DONE 2
- #define NDINIT_CONFIG_DONE 3
- #define NDINIT_LUT_DONE 4
- #define NDINIT_DONE NDINIT_LUT_DONE
- #define SRAM_CACHE_0_PATH 8
- #define SRAM_CACHE_1_PATH 12
- //Allen060623 new_nf end
- //Allen060627 debug
- //#define _WL_DEBUG_ 060720
- #ifdef _WL_DEBUG_
- EXTERN XDWORD gxdwDoWlNumber;
- EXTERN XWORD gxwWLCReset;
- EXTERN XWORD gxwProgramError;
- EXTERN XWORD gxwEraseError;
- EXTERN XBYTE gxbUsbWriteFail; //060628
- EXTERN XBYTE gxbUsbReadFail; //060628
- EXTERN XBYTE gxbSaveLutFail; //060628
- EXTERN XBYTE gxbBadBlockNum; //060629;
- #endif
- //Allen060627 debug
- //-------------------------------------------------------------------
- // Function prototype
- //-------------------------------------------------------------------
- //050407 allen
- //
- // USB API
- //
- EXTERN API void NandReadCapa(void);
- EXTERN API bit PhyAccessNand_pm(BYTE bType);
- EXTERN API bit EraseNandBlock(WORD wStartBlk, BYTE bBlkLen) large;
- EXTERN API bit UsbAccessDataSram(WORD wRaAddr, WORD wLen, bit fWrite) large;
- EXTERN API bit ReadSecurity(BYTE n);
- EXTERN API bit WriteSecurity(BYTE n) large; //Allen051102
- EXTERN API bit PhyBlockEraseAll(BYTE) large;//050323
- EXTERN API void PhyWriteConfig(void) large;
- EXTERN API void ReadBadBlock(BYTE bType);
- EXTERN API void GetIniDefectBlock(BYTE, BYTE) large; //Allen051221#1 060829
- EXTERN API void ReadDevice(void);
- EXTERN API bit DumpNandRawData() large; //Allen051124
- EXTERN API void ReadWearLevelingCount(BYTE bZone) large;
- EXTERN API bit NandIdentify(bit fEnableMultiBank) large; //Scott0601004
- //Ted 0203 start
- #if(_PM_INIT_)
- EXTERN bit UpgradeBlock0(WORD wStorLba, PBYTE pbTempRedu) large;
- EXTERN void EraseBlock0(void);
- #endif
- //Ted 0203 end
- //
- // PM API
- //
- EXTERN API bit NandInit(BYTE) large;
- #if(_NAND_API_WRITE_)
- EXTERN API bit NandWrite(void);
- #endif
- #if(_NAND_API_READ_)
- EXTERN API bit NandRead(void);
- #endif
- #if(_NAND_API_FINISHJOB_)
- EXTERN API bit NandFinishJob(void);
- #endif
- #if(_NAND_API_STEPJOB_)
- EXTERN API bit NandStepJob(void);
- #endif
- #if(_NAND_API_ERASE_)
- EXTERN API void NandEraseBlock(WORD wLogBlk);
- #endif
- #if(_NAND_API_RELOADWLC_)
- EXTERN API void NandReloadCnt(void); //allen060517L call after loadprogram
- #endif
- #if(_NAND_API_USB_)
- EXTERN bit NandFlash0Read(void);
- EXTERN bit NandFlash0Write(void);
- #endif
- EXTERN bit SmPollingReady(void); //Allen060619
- EXTERN void ScanPM(void) large; //Nick061204 //NandRestore //Scott061212
- //Scott061212 Start
- #define RESTORE_STEP_NUM 4
- #define FIXED_RESTORE_BLK 2
- //NandRestore step define
- #define FullStep 1 //Restore a block with full step mode
- #define OneStep 2 //Restore a block with one step mode
- #define FinishAllBlk 3 //Restore all blocks with full step mode
- #define FisnishRemainStep 4 //finish restoring a block with one step mode
- #define PM_SCAN 0x80 //bit 7 use for disquitish scan PM or not //Nick061204
- #define SRAM_RESTORE_FLAG 0x90
- #define SRAM_RESTORE_ORG_BFFLAG 0x92
- #define SRAM_RESTORE_ORG_LOGBLK 0x94
- #define SRAM_RESTORE_ORG_PHYBLK 0x96
- #define SRAM_RESTORE_NEW_PHYBLK 0x98
- EXTERN XBYTE gxbRestoreNewZone, gxbRestoreOrgZone;
- //Absolute addressing Start
- /*
- #define RestoreFlag 1
- #define gfNandRestore 2
- #define gfNandRestoreFlag 4
- #define gxbECCErr2Bit 8
- #define RESTORE_BLK_POOL_SIZE 3
- EXTERN XWORD gwBlk;
- EXTERN XBYTE gbZone;
- EXTERN XBYTE gbii;
- EXTERN XWORD gxwRestoreBlkPool[RESTORE_BLK_POOL_SIZE];
- EXTERN XBYTE gxbRestoreBlkNum;
- EXTERN XBYTE gxbCurrentRestoreStep;
- EXTERN XBYTE gxbRestoreCopy;
- EXTERN XBYTE gxbNandRestoreFlag; //setting flag
- EXTERN XBYTE gxbRestoreSetPage;
- EXTERN XBYTE gxbRestoreCMD;
- EXTERN XWORD gxwRestoreNewBlk, gxwRestoreSetBlk;
- EXTERN XWORD gxwRestoreOrgBlk, gxwRestoreLogOrgBlk;
- EXTERN XBYTE gxbBFFlag;
- */
- //Absolute addressing End
- #if(_PM_INIT_CHK_|_PM_INIT_)
- EXTERN XWORD gxwRedu67[4];
- #endif
- #if(_PM_INIT_CHK_) //Scott061212
- EXTERN API void CheckNandReStore(void) large;
- #endif
- #if(_PM_INIT_)
- EXTERN API void RecoverNandReStore(void) large;
- #endif
- EXTERN API void ChkErr2BitSMReset() large;
- EXTERN API bit NandRestore() large;
- //Scott061212 End
- #undef EXTERN
- //-------------------------------------------------------------------
- // Definition
- //-------------------------------------------------------------------
- //
- // Define NAND Command
- //
- #define NAND_CMD_READ 0x00
- #define NAND_CMD_READ2 0x01
- #define NAND_CMD_READ_DUMMY 0x03
- #define NAND_CMD_READ_CYCLE_2 0x30
- #define NAND_CMD_READ3 0x50
- #define NAND_CMD_READ_COPYBACK 0x35
- #define NAND_CMD_ID_READ 0x90
- #define NAND_CMD_ID_READ_EXT 0x91 //050303
- #define NAND_CMD_RESET 0xFF
- #define NAND_CMD_PROGRAM 0x80
- #define NAND_CMD_PROGRAM_CONFIRM 0x10
- #define NAND_CMD_PROGRAM_DUMMY 0x11
- #define NAND_CMD_PROGRAM_CACHE 0x15
- #define NAND_CMD_COPYBACK_PROGRAM 0x85
- #define NAND512_CMD_COPYBACK_PROGRAM 0x8A //NAND512
- #define NAND_CMD_BLOCK_ERASE 0x60
- #define NAND_CMD_ERASE 0xD0
- #define NAND_CMD_RANDOM_INPUT 0x85
- #define NAND_CMD_RANDOM_OUTPUT 0x05
- #define NAND_CMD_RANDOM_OUTPUT2 0xE0
- #define NAND_CMD_STS_READ 0x70
- #define NAND_CMD_STS_READ_71 0x71
- //-------------------------------------------------------------------
- // Macro define
- //-------------------------------------------------------------------
- //GPIOE[3]: SM_RDY => Nand0,1 share 1 wire
- /*#define Nand0Ready(void) Allen060619 test
- {
- while (!(obSMCTRL & NAND_READY)) {}
- }*/
- #define Nand0Ready SmPollingReady //Allen060619
- /////////////////050303 start
- #define NandCmd(CMD)
- {
- obSMCTRL=NAND_COMMAND;
- obSMDATALO=CMD;
- obSMCTRL=NAND_NORMAL;
- }
- #define Nand2KAddr()
- {
- obSMCTRL = NAND_ADDRESS;
- obSMDATALO = gwColAddress & 0xFF;
- obSMDATALO = (gwColAddress >> 8) & 0xFF;
- obSMDATALO = *((BYTE*)&gdwRowAddr+3);
- obSMDATALO = *((BYTE*)&gdwRowAddr+2);
- if (gfRowAddr3Cycle)
- obSMDATALO = *((BYTE*)&gdwRowAddr+1);
- obSMCTRL = NAND_DATA;
- }
- #define Nand2KRowAddr()
- {
- obSMCTRL = NAND_ADDRESS;
- obSMDATALO = *((BYTE*)&gdwRowAddr+3);
- obSMDATALO = *((BYTE*)&gdwRowAddr+2);
- if (gfRowAddr3Cycle)
- obSMDATALO = *((BYTE*)&gdwRowAddr+1);
- obSMCTRL = NAND_DATA;
- }
- #define Nand512Addr()
- {
- obSMCTRL = NAND_ADDRESS;
- obSMDATALO = 0x00;
- obSMDATALO = *((BYTE *)&gdwRowAddr + 3);
- obSMDATALO = *((BYTE *)&gdwRowAddr + 2);
- if(gfRowAddr3Cycle)
- obSMDATALO = *((BYTE*)&gdwRowAddr+1);
- obSMCTRL = NAND_DATA;
- }
- #define Nand512RowAddr()
- {
- obSMCTRL = NAND_ADDRESS;
- obSMDATALO = *((BYTE *)&gdwRowAddr + 3);
- obSMDATALO = *((BYTE *)&gdwRowAddr + 2);
- if(gfRowAddr3Cycle)
- obSMDATALO = *((BYTE*)&gdwRowAddr+1);
- obSMCTRL = NAND_DATA;
- }
- /////////////////050303 end
- //NAND512 start
- //041223 start: gwColAddress del
- #define Nand512Read1(void)
- {
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_READ;
- obSMCTRL = NAND_ADDRESS;
- obSMDATALO = 0x00;
- obSMDATALO = *((BYTE *)&gdwRowAddr + 3);
- obSMDATALO = *((BYTE *)&gdwRowAddr + 2);
- if(gfRowAddr3Cycle)
- obSMDATALO = *((BYTE*)&gdwRowAddr+1);
- obSMCTRL = NAND_DATA;
- }
- #define Nand512Read2(void)
- {
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_READ2;
- obSMCTRL = NAND_ADDRESS;
- obSMDATALO = 0x00;
- obSMDATALO = *((BYTE *)&gdwRowAddr + 3);
- obSMDATALO = *((BYTE *)&gdwRowAddr + 2);
- if(gfRowAddr3Cycle)
- obSMDATALO = *((BYTE*)&gdwRowAddr+1);
- obSMCTRL = NAND_DATA;
- }
- #define Nand512Read3(void)
- {
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_READ3;
- obSMCTRL = NAND_ADDRESS;
- obSMDATALO = 0x00;
- obSMDATALO = *((BYTE *)&gdwRowAddr + 3);
- obSMDATALO = *((BYTE *)&gdwRowAddr + 2);
- if(gfRowAddr3Cycle)
- obSMDATALO = *((BYTE*)&gdwRowAddr+1);
- obSMCTRL = NAND_DATA;
- }
- #define Nand512Write(void)
- {
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_PROGRAM;
- obSMCTRL = NAND_ADDRESS;
- obSMDATALO = 0x00;
- obSMDATALO = *((BYTE *)&gdwRowAddr + 3);
- obSMDATALO = *((BYTE *)&gdwRowAddr + 2);
- if(gfRowAddr3Cycle)
- obSMDATALO=*((BYTE *)&gdwRowAddr + 1);
- obSMCTRL = NAND_DATA;
- }
- #define Nand512ReadCopyBack(void)
- {
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_READ;
- obSMCTRL = NAND_ADDRESS;
- obSMDATALO = 0x00;
- obSMDATALO = *((BYTE *)&gdwRowAddr + 3);
- obSMDATALO = *((BYTE *)&gdwRowAddr + 2);
- if(gfRowAddr3Cycle)
- obSMDATALO=*((BYTE *)&gdwRowAddr + 1);
- obSMCTRL = NAND_NORMAL;
- }
- #define Nand512WriteCopyBack(void)
- {
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND512_CMD_COPYBACK_PROGRAM;
- obSMCTRL = NAND_ADDRESS;
- obSMDATALO = 0x00;
- obSMDATALO = *((BYTE *)&gdwRowAddr + 3);
- obSMDATALO = *((BYTE *)&gdwRowAddr + 2);
- if(gfRowAddr3Cycle)
- obSMDATALO=*((BYTE *)&gdwRowAddr + 1);
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_PROGRAM_CONFIRM;
- obSMCTRL = NAND_DATA;
- }
- #define Nand512BlockErase(void)
- {
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_BLOCK_ERASE;
- obSMCTRL = NAND_ADDRESS;
- obSMDATALO = *((BYTE *)&gdwRowAddr + 3);
- obSMDATALO = *((BYTE *)&gdwRowAddr + 2);
- if(gfRowAddr3Cycle)
- obSMDATALO=*((BYTE *)&gdwRowAddr + 1);
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_ERASE;
- obSMCTRL = NAND_NORMAL;
- }
- //041223 end: gwColAddress del
- //NAND512 end
- #define Nand0Reset(void)
- {
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_RESET;
- obSMCTRL = NAND_DATA;
- Nand0Ready();
- obSMCTRL = NAND_NORMAL;
- }
- #define Nand2KRead(void)
- {
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_READ;
- obSMCTRL = NAND_ADDRESS;
- obSMDATALO = gwColAddress & 0xFF;
- obSMDATALO = (gwColAddress >> 8) & 0xFF;
- obSMDATALO = *((BYTE*)&gdwRowAddr+3);
- obSMDATALO = *((BYTE*)&gdwRowAddr+2);
- if (gfRowAddr3Cycle)
- obSMDATALO = *((BYTE*)&gdwRowAddr+1);
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_READ_CYCLE_2;
- obSMCTRL = NAND_DATA;
- }
- #define Nand2KWrite(void)
- {
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_PROGRAM;
- obSMCTRL = NAND_ADDRESS;
- obSMDATALO = gwColAddress & 0xFF;
- obSMDATALO = (gwColAddress >> 8) & 0xFF;
- obSMDATALO = *((BYTE*)&gdwRowAddr+3);
- obSMDATALO = *((BYTE*)&gdwRowAddr+2);
- if (gfRowAddr3Cycle)
- obSMDATALO = *((BYTE*)&gdwRowAddr+1);
- obSMCTRL = NAND_DATA;
- }
- #define Nand0WriteConfirm(void)
- {
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_PROGRAM_CONFIRM;
- obSMCTRL = NAND_NORMAL;
- }
- #define Nand2KReadCopyBack(void)
- {
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_READ;
- obSMCTRL = NAND_ADDRESS;
- obSMDATALO = gwColAddress & 0xFF;
- obSMDATALO = (gwColAddress >> 8) & 0xFF;
- obSMDATALO = *((BYTE*)&gdwRowAddr+3);
- obSMDATALO = *((BYTE*)&gdwRowAddr+2);
- if (gfRowAddr3Cycle)
- obSMDATALO = *((BYTE*)&gdwRowAddr+1);
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_READ_COPYBACK;
- obSMCTRL = NAND_DATA;
- }
- #define Nand2KWriteCopyBack(void)
- {
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_COPYBACK_PROGRAM;
- obSMCTRL = NAND_ADDRESS;
- obSMDATALO = gwColAddress & 0xFF;
- obSMDATALO = (gwColAddress >> 8) & 0xFF;
- obSMDATALO = *((BYTE*)&gdwRowAddr+3);
- obSMDATALO = *((BYTE*)&gdwRowAddr+2);
- if (gfRowAddr3Cycle)
- obSMDATALO = *((BYTE*)&gdwRowAddr+1);
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_PROGRAM_CONFIRM;
- obSMCTRL = NAND_DATA;
- }
- #define Nand2KBlockErase(void)
- {
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_BLOCK_ERASE;
- obSMCTRL = NAND_ADDRESS;
- obSMDATALO = *((BYTE*)&gdwRowAddr+3);
- obSMDATALO = *((BYTE*)&gdwRowAddr+2);
- if (gfRowAddr3Cycle)
- obSMDATALO = *((BYTE*)&gdwRowAddr+1);
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_ERASE;
- obSMCTRL = NAND_NORMAL;
- }
- #define Nand0ReadStatus(void)
- {
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_STS_READ;
- obSMCTRL = NAND_DATA;
- Nand0Ready();
- gxbNandStatus = obSMDATALO;
- obSMCTRL = NAND_NORMAL;
- }
- //******* AG **************************
- #define Nand0ReadStatus71(void)
- {
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_STS_READ_71;
- obSMCTRL = NAND_DATA;
- Nand0Ready();
- gxbNandStatus = obSMDATALO;
- obSMCTRL = NAND_NORMAL;
- }
- //*************************************
- #define Set512PointerA()
- {
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_READ;
- }
- #define Set512PointerB()
- {
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_READ2;
- }
- #define Set512PointerC()
- {
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_READ3;
- }
- #else
- //1 =============== Old Nand Flash Structure
- /*==========================================================================
- Copyright (c) 2004 ALi Corporation. All Rights Reserved
- File: NandFlash.h
- content:
- History: Created by David Chiu 2004/3/30
- ==========================================================================*/
- #ifdef _NAND_FLASH_H_
- #define EXTERN
- #else
- #define EXTERN extern
- #endif
- #if( _PM_PLAY_|_PM_MTP_) //for DRM add code model adjust //Nick061120 add _PM_MTP_
- #define L_S_MODEL_DEF large
- #else
- #define L_S_MODEL_DEF
- #endif
- //-------------------------------------------------------------------
- // Function prototype
- //-------------------------------------------------------------------
- //050407 allen
- //
- // USB API
- //
- EXTERN API void NandReadCapa(void);
- //EXTERN API bit NandFormatCapa(XBYTE type);//Yen_Lung050629 //Nick060530 mark it
- EXTERN API bit PhyAccessNand_pm(BYTE bType);
- EXTERN API bit EraseNandBlock(WORD wStartBlk, BYTE bBlkLen);
- EXTERN API bit UsbAccessDataSram(WORD wRaAddr, WORD wLen, bit fWrite);
- EXTERN API bit ReadSecurity(BYTE n);
- EXTERN API bit WriteSecurity(BYTE n) large; //Allen051102
- EXTERN API bit PhyBlockEraseAll(BYTE) large;//050323
- EXTERN API void PhyWriteConfig(void) large;
- EXTERN API void ReadBadBlock(BYTE bType);
- EXTERN API void GetIniDefectBlock(BYTE) large; //Allen051221#1
- EXTERN API void ReadDevice(void);
- EXTERN API bit DumpNandRawData() large; //Allen051124
- #if(_PM_REC_)
- EXTERN BOOL gfNandStepJobEn;
- #endif
- //Ted 0203 start
- #if(_PM_INIT_)
- EXTERN bit UpgradeBlock0(WORD wStorLba, PBYTE pbTempRedu) large;
- EXTERN void EraseBlock0(void);
- #endif
- //Ted 0203 end
- //
- // PM API
- //
- EXTERN API bit NandInit(void);
- EXTERN API bit NandWrite(void);
- EXTERN API bit NandRead(void);
- EXTERN API bit NandFinishJob(void);
- EXTERN API bit NandStepJob(void); //allen050602#1
- EXTERN API void NandEraseBlock(WORD wLogBlk);
- EXTERN API void NandPowerOff(void);
- #if(USE_SPECIAL_REC_PRC) //Scott060607 Start
- EXTERN API void CallLUT0(BYTE bType) large;
- EXTERN API bit PhyWritePagefromSram(BYTE bStorPath, bit fConfirm, BYTE bLen) large;
- EXTERN API bit PhyReadPageToSram(BYTE bStorPath, BYTE bLen) large;
- EXTERN API void SetRowAddress(WORD wBlk,BYTE bPage);
- EXTERN API void ConvertZoneAddress(BYTE bZone);
- EXTERN API void PhyErase1Block(bit fCheckStatus) large;
- #endif //Scott060607 End
- //vicky050504#1
- EXTERN API void NandInitPre(void);
- //
- // Nand Module use
- //
- EXTERN bit NandFlash0Read(void);
- EXTERN bit NandFlash0Write(void);
- //EXTERN bit Nand0LeftJob(BYTE) L_S_MODEL_DEF; 050729: local function, not API.
- //-------------------------------------------------------------------
- // Global variables and Extern global variables
- //-------------------------------------------------------------------
- //Scott061114 Start
- //#define RESTORE_BLK_POOL_SIZE 3 //Nick061120 mark it
- #define RESTORE_STEP_NUM 4
- #define FIXED_RESTORE_BLK 2
- #define SHIFT_PHYBLOCK_ZONE 10 //Nick061120
- #define MASK_PHYBLOCK_ZONE 0x3FF //Nick061120
- //Nick061120 start
- //NandRestore step define
- #define FullStep 1 //Restore a block with full step mode
- #define OneStep 2 //Restore a block with one step mode
- #define FinishAllBlk 3 //Restore all blocks with full step mode
- #define FisnishRemainStep 4 //finish restoring a block with one step mode
- #define PM_SCAN 0x80 //bit 7 use for disquitish scan PM or not //Nick061204
- //Nick061120 end
- EXTERN XBYTE gxbRestoreNewZone, gxbRestoreOrgZone;
- //Nick061120 start have been absolute addressed
- /*
- //Absolute addressing Start
- EXTERN XWORD gxwRestoreBlkPool[RESTORE_BLK_POOL_SIZE];
- EXTERN XBYTE gxbRestoreBlkNum;
- EXTERN XBYTE gxbCurrentRestoreStep;
- EXTERN XBYTE gxbRestoreCopy;
- EXTERN XBYTE gxbBFFlag;
- EXTERN XWORD gxwRestoreNewBlk, gxwRestoreOrgBlk, gxwRestoreLogOrgBlk, gxwRestoreSetBlk;
- EXTERN BOOL gfNandRestoreFlag; //find a BF_RESTORE block
- EXTERN XBYTE gxbNandRestoreFlag; //setting flag
- EXTERN XBYTE gxbRestoreSetPage;
- EXTERN BOOL gfNandRestore; //if add a block to restore pool
- EXTERN XBYTE gxbRestoreCMD;
- //Absolute addressing End
- */
- //Scott061123 Start
- #if(_PM_INIT_CHK_|_PM_INIT_) //Scott061207
- EXTERN XWORD gxwRedu67[4];
- #endif
- //Scott061123 End
- //Nick061120 end
- //Scott061204 Start
- #if(_PM_INIT_)
- EXTERN API void RecoverNandReStore(void) large;
- #endif
- //Scott061204 End
- EXTERN API void ChkErr2BitSMReset() large; //Scott061205
- EXTERN API void AddRestoreBlk() large;
- EXTERN API bit NandRestore() large;
- EXTERN API bit Batch0CopyBack(BYTE StartPage, BYTE EndPage) L_S_MODEL_DEF;
- //Scott061114 End
- #if(_PM_INIT_CHK_) //Scott061212
- EXTERN API void CheckNandReStore(void) large;
- #endif
- EXTERN void ScanPM(void) large; //Nick061204 //NandRestore
- //EXTERN IDWORD gdwRowAddr; allen 050402: abs
- EXTERN void SM_Reset(void); //Nick061208
- #undef EXTERN
- //Vicky050323#3
- /*
- //GPIOB0
- #define SystemPowerOff() { obGPIOBDAT |= 0x01;
- obGPIOBDIR |= 0x01;
- }
- //redraw 7 times
- #define SystemPowerOn() { if(obGPIOBDAT&0x01)
- {
- obGPIOBDAT &= 0xFE;
- obGPIOBDIR |= 0x01;
- gbDrawUsbUi|=0x07;
- }
- }
- */
- //-------------------------------------------------------------------
- // Definition
- //-------------------------------------------------------------------
- //
- // Define NAND Command
- //
- #define NAND_CMD_READ 0x00
- #define NAND_CMD_READ2 0x01
- #define NAND_CMD_READ_DUMMY 0x03
- #define NAND_CMD_READ_CYCLE_2 0x30
- #define NAND_CMD_READ3 0x50
- #define NAND_CMD_READ_COPYBACK 0x35
- #define NAND_CMD_ID_READ 0x90
- #define NAND_CMD_ID_READ_EXT 0x91 //050303
- #define NAND_CMD_RESET 0xFF
- #define NAND_CMD_PROGRAM 0x80
- #define NAND_CMD_PROGRAM_CONFIRM 0x10
- #define NAND_CMD_PROGRAM_DUMMY 0x11
- #define NAND_CMD_PROGRAM_CACHE 0x15
- #define NAND_CMD_COPYBACK_PROGRAM 0x85
- #define NAND512_CMD_COPYBACK_PROGRAM 0x8A //NAND512
- #define NAND_CMD_BLOCK_ERASE 0x60
- #define NAND_CMD_ERASE 0xD0
- #define NAND_CMD_RANDOM_INPUT 0x85
- #define NAND_CMD_RANDOM_OUTPUT 0x05
- #define NAND_CMD_RANDOM_OUTPUT2 0xE0
- #define NAND_CMD_STS_READ 0x70
- #define NAND_CMD_STS_READ_71 0x71
- //-------------------------------------------------------------------
- // Macro define
- //-------------------------------------------------------------------
- //GPIOE[3]: SM_RDY => Nand0,1 share 1 wire
- #define Nand0Ready(void)
- {
- while (!(obSMCTRL & NAND_READY)) {}
- }
- /////////////////050303 start
- #define NandCmd(CMD)
- {
- obSMCTRL=NAND_COMMAND;
- obSMDATALO=CMD;
- obSMCTRL=NAND_NORMAL;
- }
- #define Nand2KAddr()
- {
- obSMCTRL = NAND_ADDRESS;
- obSMDATALO = gwColAddress & 0xFF;
- obSMDATALO = (gwColAddress >> 8) & 0xFF;
- obSMDATALO = *((BYTE*)&gdwRowAddr+3);
- obSMDATALO = *((BYTE*)&gdwRowAddr+2);
- if (gfRowAddr3Cycle)
- obSMDATALO = *((BYTE*)&gdwRowAddr+1);
- obSMCTRL = NAND_DATA;
- }
- #define Nand2KRowAddr()
- {
- obSMCTRL = NAND_ADDRESS;
- obSMDATALO = *((BYTE*)&gdwRowAddr+3);
- obSMDATALO = *((BYTE*)&gdwRowAddr+2);
- if (gfRowAddr3Cycle)
- obSMDATALO = *((BYTE*)&gdwRowAddr+1);
- obSMCTRL = NAND_DATA;
- }
- #define Nand512Addr()
- {
- obSMCTRL = NAND_ADDRESS;
- obSMDATALO = 0x00;
- obSMDATALO = *((BYTE *)&gdwRowAddr + 3);
- obSMDATALO = *((BYTE *)&gdwRowAddr + 2);
- if(gfRowAddr3Cycle)
- obSMDATALO = *((BYTE*)&gdwRowAddr+1);
- obSMCTRL = NAND_DATA;
- }
- #define Nand512RowAddr()
- {
- obSMCTRL = NAND_ADDRESS;
- obSMDATALO = *((BYTE *)&gdwRowAddr + 3);
- obSMDATALO = *((BYTE *)&gdwRowAddr + 2);
- if(gfRowAddr3Cycle)
- obSMDATALO = *((BYTE*)&gdwRowAddr+1);
- obSMCTRL = NAND_DATA;
- }
- /////////////////050303 end
- //NAND512 start
- //041223 start: gwColAddress del
- #define Nand512Read1(void)
- {
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_READ;
- obSMCTRL = NAND_ADDRESS;
- obSMDATALO = 0x00;
- obSMDATALO = *((BYTE *)&gdwRowAddr + 3);
- obSMDATALO = *((BYTE *)&gdwRowAddr + 2);
- if(gfRowAddr3Cycle)
- obSMDATALO = *((BYTE*)&gdwRowAddr+1);
- obSMCTRL = NAND_DATA;
- }
- #define Nand512Read2(void)
- {
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_READ2;
- obSMCTRL = NAND_ADDRESS;
- obSMDATALO = 0x00;
- obSMDATALO = *((BYTE *)&gdwRowAddr + 3);
- obSMDATALO = *((BYTE *)&gdwRowAddr + 2);
- if(gfRowAddr3Cycle)
- obSMDATALO = *((BYTE*)&gdwRowAddr+1);
- obSMCTRL = NAND_DATA;
- }
- #define Nand512Read3(void)
- {
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_READ3;
- obSMCTRL = NAND_ADDRESS;
- obSMDATALO = 0x00;
- obSMDATALO = *((BYTE *)&gdwRowAddr + 3);
- obSMDATALO = *((BYTE *)&gdwRowAddr + 2);
- if(gfRowAddr3Cycle)
- obSMDATALO = *((BYTE*)&gdwRowAddr+1);
- obSMCTRL = NAND_DATA;
- }
- #define Nand512Write(void)
- {
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_PROGRAM;
- obSMCTRL = NAND_ADDRESS;
- obSMDATALO = 0x00;
- obSMDATALO = *((BYTE *)&gdwRowAddr + 3);
- obSMDATALO = *((BYTE *)&gdwRowAddr + 2);
- if(gfRowAddr3Cycle)
- obSMDATALO=*((BYTE *)&gdwRowAddr + 1);
- obSMCTRL = NAND_DATA;
- }
- #define Nand512ReadCopyBack(void)
- {
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_READ;
- obSMCTRL = NAND_ADDRESS;
- obSMDATALO = 0x00;
- obSMDATALO = *((BYTE *)&gdwRowAddr + 3);
- obSMDATALO = *((BYTE *)&gdwRowAddr + 2);
- if(gfRowAddr3Cycle)
- obSMDATALO=*((BYTE *)&gdwRowAddr + 1);
- obSMCTRL = NAND_NORMAL;
- }
- #define Nand512WriteCopyBack(void)
- {
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND512_CMD_COPYBACK_PROGRAM;
- obSMCTRL = NAND_ADDRESS;
- obSMDATALO = 0x00;
- obSMDATALO = *((BYTE *)&gdwRowAddr + 3);
- obSMDATALO = *((BYTE *)&gdwRowAddr + 2);
- if(gfRowAddr3Cycle)
- obSMDATALO=*((BYTE *)&gdwRowAddr + 1);
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_PROGRAM_CONFIRM;
- obSMCTRL = NAND_DATA;
- }
- #define Nand512BlockErase(void)
- {
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_BLOCK_ERASE;
- obSMCTRL = NAND_ADDRESS;
- obSMDATALO = *((BYTE *)&gdwRowAddr + 3);
- obSMDATALO = *((BYTE *)&gdwRowAddr + 2);
- if(gfRowAddr3Cycle)
- obSMDATALO=*((BYTE *)&gdwRowAddr + 1);
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_ERASE;
- obSMCTRL = NAND_NORMAL;
- }
- //041223 end: gwColAddress del
- //NAND512 end
- #define Nand0Reset(void)
- {
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_RESET;
- obSMCTRL = NAND_DATA;
- Nand0Ready();
- obSMCTRL = NAND_NORMAL;
- }
- #define Nand2KRead(void)
- {
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_READ;
- obSMCTRL = NAND_ADDRESS;
- obSMDATALO = gwColAddress & 0xFF;
- obSMDATALO = (gwColAddress >> 8) & 0xFF;
- obSMDATALO = *((BYTE*)&gdwRowAddr+3);
- obSMDATALO = *((BYTE*)&gdwRowAddr+2);
- if (gfRowAddr3Cycle)
- obSMDATALO = *((BYTE*)&gdwRowAddr+1);
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_READ_CYCLE_2;
- obSMCTRL = NAND_DATA;
- }
- #define Nand2KWrite(void)
- {
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_PROGRAM;
- obSMCTRL = NAND_ADDRESS;
- obSMDATALO = gwColAddress & 0xFF;
- obSMDATALO = (gwColAddress >> 8) & 0xFF;
- obSMDATALO = *((BYTE*)&gdwRowAddr+3);
- obSMDATALO = *((BYTE*)&gdwRowAddr+2);
- if (gfRowAddr3Cycle)
- obSMDATALO = *((BYTE*)&gdwRowAddr+1);
- obSMCTRL = NAND_DATA;
- }
- #define Nand0WriteConfirm(void)
- {
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_PROGRAM_CONFIRM;
- obSMCTRL = NAND_NORMAL;
- }
- #define Nand2KReadCopyBack(void)
- {
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_READ;
- obSMCTRL = NAND_ADDRESS;
- obSMDATALO = gwColAddress & 0xFF;
- obSMDATALO = (gwColAddress >> 8) & 0xFF;
- obSMDATALO = *((BYTE*)&gdwRowAddr+3);
- obSMDATALO = *((BYTE*)&gdwRowAddr+2);
- if (gfRowAddr3Cycle)
- obSMDATALO = *((BYTE*)&gdwRowAddr+1);
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_READ_COPYBACK;
- obSMCTRL = NAND_DATA;
- }
- #define Nand2KWriteCopyBack(void)
- {
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_COPYBACK_PROGRAM;
- obSMCTRL = NAND_ADDRESS;
- obSMDATALO = gwColAddress & 0xFF;
- obSMDATALO = (gwColAddress >> 8) & 0xFF;
- obSMDATALO = *((BYTE*)&gdwRowAddr+3);
- obSMDATALO = *((BYTE*)&gdwRowAddr+2);
- if (gfRowAddr3Cycle)
- obSMDATALO = *((BYTE*)&gdwRowAddr+1);
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_PROGRAM_CONFIRM;
- obSMCTRL = NAND_DATA;
- }
- #define Nand2KBlockErase(void)
- {
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_BLOCK_ERASE;
- obSMCTRL = NAND_ADDRESS;
- obSMDATALO = *((BYTE*)&gdwRowAddr+3);
- obSMDATALO = *((BYTE*)&gdwRowAddr+2);
- if (gfRowAddr3Cycle)
- obSMDATALO = *((BYTE*)&gdwRowAddr+1);
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_ERASE;
- obSMCTRL = NAND_NORMAL;
- }
- #define Nand0ReadStatus(void)
- {
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_STS_READ;
- obSMCTRL = NAND_DATA;
- Nand0Ready();
- gbNandStatus = obSMDATALO;
- obSMCTRL = NAND_NORMAL;
- }
- //******* AG **************************
- #define Nand0ReadStatus71(void)
- {
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_STS_READ_71;
- obSMCTRL = NAND_DATA;
- Nand0Ready();
- gbNandStatus = obSMDATALO;
- obSMCTRL = NAND_NORMAL;
- }
- //*************************************
- #define Set512PointerA()
- {
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_READ;
- }
- #define Set512PointerB()
- {
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_READ2;
- }
- #define Set512PointerC()
- {
- obSMCTRL = NAND_COMMAND;
- obSMDATALO = NAND_CMD_READ3;
- }
- //2 For old nandflash to remove definition in new flash structure
- #define _NAND_API_RELOADWLC_ 0
- #define _NAND_API_RW_SETTING_ 0
- #endif
English
