亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? s3c6410_fil.c

?? 6410BSP3
?? C
?? 第 1 頁 / 共 5 頁
字號:
	}

	if (bInternalInterleaving == TRUE32)
	{
		if ((nBank & 0x1) == 1)
		{
			bInternalBank = TRUE32;
		}
		nBank = (nBank >> 1);
	}

	if ((bInternalInterleaving == TRUE32) && (aNeedSync[nPairBank] == FALSE32))
	{
		// TODO: what does this means???
#if	1
		NF_CE_L(nBank);
		NF_ADDR(0x0);
		NF_CE_H(nBank);
#else
		BLUES_NF_ADDR0(0x0);
		rFMCTRL1 = (1 << BLUES_FM_ADDR_SET);

		BLUES_NF_CPU_CTRL0(nBank);
#endif
	}

#ifdef	USE_SETKMODE
	bLastMode = SetKMode(TRUE);
#endif

	// Chip Select
	NF_CE_L(nBank);

	if (bInternalInterleaving || TWO_PLANE_READ_STATUS)
	{
		if (bInternalBank)
		{
			NF_CMD(CMD_READ_STATUS_CHIP1);
		}
		else
		{
			NF_CMD(CMD_READ_STATUS_CHIP0);
		}
	}
	else
	{
		// Read Status Command is acceptable during Busy
		NF_CMD(CMD_READ_STATUS);
	}

	do
	{
		nData = NF_DATA_R();
	}
	while(!(nData&NAND_STATUS_READY));

	*nPlaneBitmap = enuNONE_PLANE_BITMAP;

	// Read Status
	if (nData&NAND_STATUS_ERROR)
	{
		if (TWO_PLANE_READ_STATUS == TRUE32)
		{
			if (nData & NAND_STATUS_PLANE0_ERROR)
			{
				NAND_ERR((_T("[FIL:ERR] NAND_Sync() : Left-plane Sync Error\r\n")));
				*nPlaneBitmap = enuLEFT_PLANE_BITMAP;
			}
			if (nData & NAND_STATUS_PLANE1_ERROR)
			{
				NAND_ERR((_T("[FIL:ERR] NAND_Sync() : Right-plane Sync Error\r\n")));
				*nPlaneBitmap = enuRIGHT_PLANE_BITMAP;
			}
		}
		else
		{
			NAND_ERR((_T("[FIL:ERR] NAND_Sync() : Status Error\r\n")));
			*nPlaneBitmap = enuLEFT_PLANE_BITMAP;
		}

		nRet = FIL_CRITICAL_ERROR;
	}

	// Chip Unselect
	NF_CE_H(nBank);

#ifdef	USE_SETKMODE
	SetKMode(bLastMode);
#endif

	NAND_MSG((_T("[FIL]--NAND_Sync()\r\n")));

	return nRet;
}

VOID
NAND_Reset(UINT32 nBank)
{
#ifdef	USE_SETKMODE
	BOOL bLastMode;
#endif

	NAND_MSG((_T("[FIL]++NAND_Reset(%d)\r\n"), nBank));

#ifdef	USE_SETKMODE
	bLastMode = SetKMode(TRUE);
#endif

	// Chip Select
	NF_CE_L(nBank);

	// Reset Command is accepted during Busy
	NF_CMD(CMD_RESET);

	// Chip Unselect
	NF_CE_H(nBank);

#ifdef	USE_SETKMODE
	SetKMode(bLastMode);
#endif

	NAND_MSG((_T("[FIL]--NAND_Reset()\r\n")));

	return;
}


VOID
NAND_PowerUp(VOID)
{
#if 1
	//pSYSConReg->MEM_SYS_CFG &= ~(1<<12);		// NAND Flash BUS Width -> 8 bit
    //pSYSConReg->MEM_SYS_CFG &= ~(0x1<<1);	// Xm0CS2 -> NFCON CS0
    pSYSConReg->MEM_SYS_CFG = (pSYSConReg->MEM_SYS_CFG & ~(0x1000)); // 8-bit data width
    pSYSConReg->MEM_SYS_CFG = (pSYSConReg->MEM_SYS_CFG & ~(0x3F)) | (0x00); // Xm0CSn[2] = NFCON CS0
/****************************************************************************/
#else
	// NAND Chip Selection Signal in the S3C6410
	pSYSConReg->MEM_SYS_CFG &= ~(0xA);
#endif
	// Initialize NAND Flash Controller for MLC NAND Flash
	pNANDFConReg->NFCONF = NF_4BIT_ECC | NF_TACLS(DEFAULT_TACLS) | NF_TWRPH0(DEFAULT_TWRPH0) | NF_TWRPH1(DEFAULT_TWRPH1);
	pNANDFConReg->NFCONT = NF_MAIN_ECC_LOCK | NF_SPARE_ECC_LOCK | NF_INIT_MECC | NF_INIT_SECC | NF_NFCE1 | NF_NFCE0 | NF_NFCON_EN;
	pNANDFConReg->NFSTAT = NF_RNB_READY;	// Clear RnB Transition Detect Bit
}
	

/*****************************************************************************/
/*                                                                           */
/* NAME                                                                      */
/*      Read_DeviceID		                                                 */
/* DESCRIPTION                                                               */
/*      This function reads manufacturer id, device id and hidden id. 		 */
/* PARAMETERS                                                                */
/*      nBank    [IN] 		Physical device number				             */
/*      pDID     [OUT] 		NAND flash density id							 */
/*		pHID	 [OUT]		NAND flash hidden id							 */
/* RETURN VALUES                                                             */
/*		nScanIdx			Device's stDEVInfo[nScanIdx]					 */
/* NOTES                                                                     */
/*                                                                           */
/*****************************************************************************/
PRIVATE INT32
Read_DeviceID(UINT32 nBank, UINT8 *pDID, UINT8 *pHID)
{
	UINT8 nMID, nDID, nHID[3];
	UINT32 nScanIdx;
	UINT32 i;
#ifdef	USE_SETKMODE
	BOOL bLastMode;
#endif

	NAND_MSG((_T("[FIL]++Read_DeviceID(%d)\r\n"), nBank));

#ifdef	USE_SETKMODE
	bLastMode = SetKMode(TRUE);
#endif

	// Chip Select
	NF_CE_L(nBank);
	NF_WAIT_RnB(nBank);

	// Read ID Command
	NF_CMD(CMD_READ_ID);
	NF_ADDR(0x00);

	// Find Maker Code
	for (i=0; i<5; i++)
	{
		nMID = NF_DATA_R();		// Maker Code
		if (nMID == 0xEC) break;
	}

	// Read Device Code
	nDID = NF_DATA_R();		// Device Code
	nHID[0] = NF_DATA_R();	// Internal Chip Number
	nHID[1] = NF_DATA_R();	// Page, Block, Redundant Area Size
	nHID[2] = NF_DATA_R();	// Plane Number, Size

	// Chip Unselect
	NF_CE_H(nBank);

#ifdef	USE_SETKMODE
	SetKMode(bLastMode);
#endif

	for (nScanIdx = 0; nScanIdx < sizeof(stDEVInfo)/sizeof(DEVInfo); nScanIdx++)
	{
		if ((nMID == (UINT8)0xEC) && (nDID == stDEVInfo[nScanIdx].nDevID) && (nHID[0] == stDEVInfo[nScanIdx].nHidID))
		{
			*pDID = nDID;
			*pHID = nHID[0];
			
			NAND_LOG((_T("[FIL] ################\r\n")));
			NAND_LOG((_T("[FIL]  MID    = 0x%02x\r\n"), nMID));
			NAND_LOG((_T("[FIL]  DID    = 0x%02x\r\n"), nDID));
			NAND_LOG((_T("[FIL]  HID[0] = 0x%02x\r\n"), nHID[0]));
			NAND_LOG((_T("[FIL]  HID[1] = 0x%02x\r\n"), nHID[1]));
			NAND_LOG((_T("[FIL]  HID[2] = 0x%02x\r\n"), nHID[2]));
			NAND_LOG((_T("[FIL] ################\r\n")));

			NAND_MSG((_T("[FIL]  Bank %d Detect\r\n"), nBank));
			return nScanIdx;
		}
	}

	*pDID = 0x00;
	*pHID = 0x00;

	NAND_MSG((_T("[FIL]--Read_DeviceID()\r\n")));

	return FIL_CRITICAL_ERROR;

}


PRIVATE UINT32
Read_Sector(UINT32 nBank, UINT32 nPpn, UINT32 nSctOffset, UINT8* pBuf, UINT32* pSpareCxt, BOOL32 bCheckAllFF)
{
	UINT32 nOffSet;
	UINT32 nRet = 0;
	UINT32 nMECC[2];
	BOOL32 bECCDecDone = TRUE;

	NAND_MSG((_T("[FIL]++Read_Sector(%d, %d)\r\n"), nPpn, nSctOffset));
	//NAND_ERR((_T("[FIL]++Read_Sector(%d, %d)\r\n"), nPpn, nSctOffset));  // ksk dbg
	
	gnPpn = nPpn;

	// Move pointer to Sector Offset
	nOffSet = nSctOffset * NAND_SECTOR_SIZE;

	// Random data output command
	NF_CMD(CMD_RANDOM_DATA_OUTPUT);
	NF_ADDR(nOffSet&0xFF);
	NF_ADDR((nOffSet>>8)&0xFF);
	NF_CMD(CMD_RANDOM_DATA_OUTPUT_CONFIRM);

	// Initialize 4-bit ECC Decoding
	NF_SET_ECC_DEC();
	NF_MECC_Reset();
	NF_MECC_UnLock();

	// Read 512 bytes Sector data
	if ((UINT32)pBuf&0x3)
	{
		_Read_512Byte_Unaligned(pBuf+NAND_SECTOR_SIZE*nSctOffset);
	}
	else
	{
		_Read_512Byte(pBuf+NAND_SECTOR_SIZE*nSctOffset);
	}

	NF_CLEAR_ECC_DEC_DONE();

	NF_CE_H(nBank);
	NF_SET_CLK(DUMMY_R_TACLS, DUMMY_R_TWRPH0, DUMMY_R_TWRPH1);		// Don't set clk to (0, 0, 0) !!! Decoding error occurs

	// Instead of Read Main ECC from NAND, Write Main ECC with CE don't care
	if (bCheckAllFF)
	{
		NF_DATA_W4(ECCVAL_ALLFF0);	// All 0xFF ECC
		NF_DATA_W4(ECCVAL_ALLFF1);
	}
	else
	{
		nMECC[0] = pSpareCxt[(((SECTORS_PER_PAGE==4)?NAND_MECC_OFFSET:NAND_MECC_OFFSET_4K)/4)+nSctOffset*2];
		nMECC[1] = pSpareCxt[(((SECTORS_PER_PAGE==4)?NAND_MECC_OFFSET:NAND_MECC_OFFSET_4K)/4)+nSctOffset*2+1];
		NF_DATA_W4(nMECC[0]);  // pSpareCxt->aMECC[nSctOffset*2]
		NF_DATA_W4(nMECC[1]);  // pSpareCxt->aMECC[nSctOffset*2+1]
	}

	if ( bReadSafeMode == TRUE32 )
	{
    	NF_SET_CLK(MAX_RW_TACLS, MAX_RW_TWRPH0, MAX_RW_TWRPH1);		// Don't set clk to (0, 0, 0) !!! Decoding error occurs
	}
	else
	{
    	NF_SET_CLK(DEFAULT_TACLS, DEFAULT_TWRPH0, DEFAULT_TWRPH1);
    }
	NF_CE_L(nBank);

	// Waiting for Main ECC compare
	bECCDecDone = NF_WAIT_ECC_DEC_DONE(pNANDFConReg);

    if ( bECCDecDone == TRUE32 )
    {
	    nRet = Decoding_MainECC(pBuf+NAND_SECTOR_SIZE*nSctOffset);
	}
	else
	{
	    nRet = ECC_UNCORRECTABLE_ERROR;
    	NAND_ERR((_T("Read_Sector: ECC Decoding Timeout Error\r\n")));
	}
#if (PROVE_ECC_ALGORITHM)
	if ( nRet&ECC_NEED_DECODING_AGAIN )
	{
    	// Initialize 4-bit ECC Decoding
    	NF_SET_ECC_DEC();
    	NF_MECC_Reset();
    	NF_MECC_UnLock();
    	NF_CE_H(nBank);

    	NF_SET_CLK(DUMMY_R_TACLS, DUMMY_R_TWRPH0, DUMMY_R_TWRPH1);		// Don't set clk to (0, 0, 0) !!! Decoding error occurs
    	
    	if ((UINT32)pBuf&0x3)
    	{
    		_Write_512Byte_Unaligned(pBuf+NAND_SECTOR_SIZE*nSctOffset);
    	}
    	else
    	{
       		_Write_512Byte(pBuf+NAND_SECTOR_SIZE*nSctOffset);
    	}
    	
    	NF_CLEAR_ECC_DEC_DONE();
    	
    	if (bCheckAllFF)
    	{
    		NF_DATA_W4(ECCVAL_ALLFF0);	// All 0xFF ECC
    		NF_DATA_W4(ECCVAL_ALLFF1);
    	}
    	else
    	{
    		NF_DATA_W4(nMECC[0]);
    		NF_DATA_W4(nMECC[1]);
    	}

    	if ( bReadSafeMode == TRUE32 )
    	{
        	NF_SET_CLK(MAX_RW_TACLS, MAX_RW_TWRPH0, MAX_RW_TWRPH1);		// Don't set clk to (0, 0, 0) !!! Decoding error occurs
    	}
    	else
    	{
        	NF_SET_CLK(DEFAULT_TACLS, DEFAULT_TWRPH0, DEFAULT_TWRPH1);
        }

    	NF_CE_L(nBank);
//    	NAND_ERR((_T("+NF_WAIT_ECC_DEC_DONE\r\n")));
    	bECCDecDone = NF_WAIT_ECC_DEC_DONE(pNANDFConReg);
//    	NAND_ERR((_T("-NF_WAIT_ECC_DEC_DONE\r\n")));
    	
    	nRet &= ~ECC_NEED_DECODING_AGAIN;

        if ( bECCDecDone == TRUE32 )
        {
        	nRet |= Decoding_MainECC(pBuf+NAND_SECTOR_SIZE*nSctOffset);
        	if ( nRet&ECC_NEED_DECODING_AGAIN )
        	{
            	nRet &= ~ECC_NEED_DECODING_AGAIN;
        	    nRet |= ECC_UNCORRECTABLE_ERROR;
            	NAND_ERR((_T("[FIL:ERR] Read_Sector() : Multiple Decoding Error. Over 4bit Error!!\r\n")));
        	}
    	}
    	else
    	{
    	    NAND_ERR((_T("Read_Sector: ECC Decoding Timeout Error\r\n")));
    	    nRet |= ECC_UNCORRECTABLE_ERROR;
    	}
	}
#endif

	if (nRet&ECC_UNCORRECTABLE_ERROR)
	{
		NAND_ERR((_T("[FIL:ERR] Read_Sector() : ECC Uncorrectable Error in Page %d Sector %d\r\n"), nPpn, nSctOffset));
	}
	else if (nRet&ECC_CORRECTABLE_ERROR)
	{
		NAND_ERR((_T("[FIL] Read_Sector() : ECC Correctable Error in Page %d Sector %d\r\n"), nPpn, nSctOffset));
	}

	NAND_MSG((_T("[FIL]--Read_Sector()\r\n")));

	return nRet;
}

PRIVATE UINT32
Read_Sector_8BitECC(UINT32 nBank, UINT32 nPpn, UINT32 nSctOffset, UINT8* pBuf, UINT32* pSpareCxt, BOOL32 bCheckAllFF)
{
	UINT32 nOffSet;
	UINT32 nRet = 0;
	UINT32 nMECC[4];

	//_STOP_FOR_BREAK();

	NAND_MSG((_T("[FIL]++Read_Sector_8BitECC(%d, %d)\r\n"), nPpn, nSctOffset));
 	// Move pointer to Sector O

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品一区八戒影视| 亚洲午夜激情av| 一区二区三区加勒比av| 久久99精品视频| 在线一区二区三区| 国产欧美日韩激情| av一区二区三区黑人| 欧美成人精精品一区二区频| 亚洲美女免费视频| 成人午夜电影久久影院| 精品国产乱码久久久久久久久 | 亚洲高清一区二区三区| 国产成人精品免费一区二区| 在线不卡欧美精品一区二区三区| 国产精品福利影院| 国产精品77777竹菊影视小说| 欧美综合一区二区| 亚洲色图制服丝袜| 国产黄人亚洲片| 久久这里只有精品6| 久久99久久99精品免视看婷婷 | 日韩一区二区三区视频在线| 亚洲欧美日韩电影| 国产精品一区二区91| 精品免费国产二区三区| 日韩成人午夜电影| 欧美高清视频不卡网| 亚洲小说欧美激情另类| 色综合久久综合中文综合网| 中文字幕亚洲在| 成人av影院在线| 国产精品女上位| 成人h动漫精品| 欧美国产一区视频在线观看| 国产曰批免费观看久久久| 精品国产百合女同互慰| 国产综合色精品一区二区三区| 日韩女优制服丝袜电影| 精品在线播放免费| 久久久久久久久蜜桃| 成人少妇影院yyyy| 亚洲人成网站在线| 色综合久久中文综合久久97| 一级女性全黄久久生活片免费| 在线观看视频一区| 天天av天天翘天天综合网| 欧美精品丝袜中出| 紧缚奴在线一区二区三区| 久久久精品综合| 99久久精品免费看| 亚洲午夜av在线| 亚洲精品一区二区三区香蕉| 国产乱妇无码大片在线观看| 国产精品视频观看| 色丁香久综合在线久综合在线观看| 一区二区三区精品久久久| 欧美一区二区三区视频免费| 国产一区在线视频| 亚洲图片另类小说| 欧美一区二区国产| 成人黄色片在线观看| 一区二区三区四区在线| 欧美一区二区二区| 成人一区二区三区视频在线观看 | 成人午夜又粗又硬又大| 一区二区三区四区高清精品免费观看| 欧美性生活影院| 国产精品一区二区不卡| 一区二区欧美视频| 欧美精品一区二区三区蜜桃| 不卡一区中文字幕| 日韩极品在线观看| 综合欧美一区二区三区| 精品噜噜噜噜久久久久久久久试看| 大尺度一区二区| 三级在线观看一区二区| 中文字幕高清一区| 日韩欧美电影在线| 欧洲一区二区三区免费视频| 卡一卡二国产精品 | 色噜噜狠狠成人网p站| 久久av资源站| 午夜精品成人在线| 专区另类欧美日韩| 久久午夜电影网| 欧美精品日韩一区| 色综合激情久久| 大尺度一区二区| 激情文学综合丁香| 香蕉影视欧美成人| 亚洲人精品一区| 国产精品视频线看| 精品免费视频.| 欧美一级高清大全免费观看| 日本道精品一区二区三区| 国产成人午夜电影网| 久久国产精品区| 日本大胆欧美人术艺术动态| 亚洲制服欧美中文字幕中文字幕| 国产精品丝袜一区| 国产欧美一区二区精品性| 日韩亚洲欧美中文三级| 欧美另类z0zxhd电影| 欧美在线观看一区二区| 91视视频在线观看入口直接观看www | 日韩电影一区二区三区四区| 亚洲综合色噜噜狠狠| 亚洲男女毛片无遮挡| 中文字幕在线观看一区| 欧美韩国日本综合| 国产精品久久久久婷婷| 国产欧美视频一区二区| 久久欧美一区二区| 久久久www免费人成精品| 久久这里都是精品| 国产欧美日韩中文久久| 国产欧美日韩在线观看| 久久蜜臀精品av| 欧美激情中文字幕一区二区| 中文字幕欧美三区| 国产精品女人毛片| 亚洲视频香蕉人妖| 伊人色综合久久天天人手人婷| 亚洲精品五月天| 亚洲国产一二三| 免费看日韩精品| 国产精品18久久久久久久久久久久 | 日韩视频中午一区| www成人在线观看| 欧美国产成人精品| 亚洲欧洲日本在线| 亚洲国产精品影院| 免费欧美日韩国产三级电影| 韩国视频一区二区| 不卡的电视剧免费网站有什么| 91丨九色丨尤物| 欧美欧美午夜aⅴ在线观看| 91精品中文字幕一区二区三区| 欧美大片在线观看| 国产精品每日更新在线播放网址| 亚洲欧美国产77777| 亚洲国产欧美在线| 国产在线精品一区二区夜色| av成人老司机| 欧美日韩视频专区在线播放| 日韩精品一区二区三区老鸭窝| 久久久99精品免费观看不卡| 亚洲人成伊人成综合网小说| 首页国产欧美日韩丝袜| 国产成人综合亚洲91猫咪| 色悠悠久久综合| 日韩一级黄色片| 国产精品久久久久久久岛一牛影视 | 色爱区综合激月婷婷| 91麻豆精品国产自产在线观看一区| 精品国产免费视频| 亚洲综合av网| 国产高清不卡一区二区| 欧美片在线播放| 国产精品护士白丝一区av| 日本在线播放一区二区三区| 成人在线视频一区| 欧美年轻男男videosbes| 国产欧美一二三区| 日韩精品成人一区二区在线| 99视频一区二区三区| 日韩网站在线看片你懂的| 亚洲三级小视频| 国产精品亚洲第一| 日韩一区二区三区av| 亚洲三级电影网站| 成人午夜电影网站| 亚洲精品在线免费播放| 亚洲一区二区在线观看视频 | 色呦呦网站一区| 国产丝袜欧美中文另类| 免费久久99精品国产| 在线观看一区二区精品视频| 国产精品天干天干在观线| 精品无人区卡一卡二卡三乱码免费卡 | 国产激情精品久久久第一区二区 | 亚洲欧美偷拍卡通变态| 国产一区在线不卡| 欧美一级淫片007| 午夜视频在线观看一区| 91国产视频在线观看| 国产精品美女久久久久高潮| 国产精品18久久久久久久久| 精品日本一线二线三线不卡| 日韩精品免费视频人成| 欧美女孩性生活视频| 亚洲小少妇裸体bbw| 在线中文字幕不卡| 亚洲精品日韩综合观看成人91| 成人av资源下载| 日韩一区欧美一区| 99精品1区2区| 亚洲精品免费在线观看| 色哦色哦哦色天天综合| 一区二区三区日韩欧美|