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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? nandflash.c

?? 2440的啟動(dòng)代碼
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
#include <string.h>
#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "2440lib.h"
#include "2440slib.h"
#include "mmu.h"
#include "profile.h"
#include "memtest.h"

#include "usbmain.h"
#include "usbout.h"
#include "usblib.h"
#include "2440usb.h"


typedef struct _SectorInfo
{
    int dwReserved1;              // Reserved - used by FAL
    int  bOEMReserved;             // For use by OEM
    int  bBadBlock;	            // Indicates if block is BAD
    int  wReserved2;               // Reserved - used by FAL

}SectorInfo, *PSectorInfo;


#define BAD_CHECK	(0)
#define ECC_CHECK	(0)


/*#define READ_REGISTER_BYTE(p) (p)
#define WRITE_REGISTER_BYTE(p, v) (p) = (v);
#define READ_REGISTER_USHORT(p) (p)
#define WRITE_REGISTER_USHORT(p, v) (p) = (v);
#define READ_REGISTER_ULONG(p)  (p)
#define WRITE_REGISTER_ULONG(p, v) (p) = (v);*/


//  Status bit pattern
#define STATUS_READY                0x40
#define STATUS_ERROR                0x01


#define NF_MECC_UnLock()         {rNFCONT&=~(1<<5);}
#define NF_MECC_Lock()         {rNFCONT|=(1<<5);}
#define NF_SECC_UnLock()         {rNFCONT&=~(1<<6);}
#define NF_SECC_Lock()         {rNFCONT|=(1<<6);}
#define NF_CMD(cmd)			{rNFCMD=cmd;}
#define NF_ADDR(addr)		{rNFADDR=addr;}	
#define NF_nFCE_L()			{rNFCONT&=~(1<<1);}
#define NF_nFCE_H()			{rNFCONT|=(1<<1);}
#define NF_RSTECC()			{rNFCONT|=(1<<4);}
#define NF_RDDATA() 		(rNFDATA)
#define NF_RDDATA8() 		((*(volatile unsigned char*)0x4E000010) )
#define NF_WRDATA(data) 	{rNFDATA=data;}
#define NF_WRDATA8(data) 	{rNFDATA8=(BYTE)data;}
#define NF_WAITRB()     while(!(rNFSTAT&(1<<0)))


#define NF_DATA_W(val)  NF_WRDATA8(val)
#define NF_DATA_W4(val)	NF_WRDATA(val)

// RnB Signal
#define NF_CLEAR_RB()    		{rNFSTAT |= (1<<2);}	// Have write '1' to clear this bit.
#define NF_DETECT_RB()    		{while(!(rNFSTAT&(1<<2)));}

#define NF_CE_L()     NF_nFCE_L()
#define NF_CE_H()     NF_nFCE_H()
#define NF_DATA_R()   rNFDATA
#define NF_ECC()      rNFMECC0






typedef DWORD  SECTOR_ADDR;
typedef PDWORD PSECTOR_ADDR;
typedef DWORD  BLOCK_ID;
typedef PDWORD PBLOCK_ID;
static U32 srcAddress;
static U32 targetBlock;	    // Block number (0 ~ 4095)
static U32 targetSize;	    // Total byte size 

//U32 downloadAddress;
extern U32 downloadAddress;

#define NFCONF_INIT                 0xF850

//  NAND Flash Command. This appears to be generic across all NAND flash chips
#define CMD_READ                    0x00        //  Read
#define CMD_READ1                   0x01        //  Read1
#define CMD_READ2                   0x50        //  Read2
#define CMD_READID                  0x90        //  ReadID
#define CMD_WRITE                   0x80        //  Write phase 1
#define CMD_WRITE2                  0x10        //  Write phase 2
#define CMD_ERASE                   0x60        //  Erase phase 1
#define CMD_ERASE2                  0xd0        //  Erase phase 2
#define CMD_STATUS                  0x70        //  Status read
#define CMD_RESET                   0xff        //  Reset

//  Status bit pattern
#define STATUS_READY                0x40        //  Ready
#define STATUS_ERROR                0x01        //  Error
#define VALIDADDR                   0x05
#define NEED_EXT_ADDR               1
#define SECTOR_SIZE                 512

#define BLOCK_STATUS_UNKNOWN	0x01
#define BLOCK_STATUS_BAD		0x02
#define BLOCK_STATUS_READONLY	0x04
#define BLOCK_STATUS_RESERVED 0x08

#define OEM_BLOCK_RESERVED		0x01
#define OEM_BLOCK_READONLY		0x02
#define BADBLOCKMARK          0x00
#define NUM_BLOCKS            4096

#define IMAGE_START_BLOCK           9

void WritePage512(LPBYTE Buf, PULONG pReg);

extern U32 downloadFileSize;

//*********************************************************************
void NF_Reset()
{
	int i;
    NF_CE_L();

	NF_CLEAR_RB();///用了他,
    NF_CMD(CMD_RESET);
	for(i=0;i<10;i++);  //tWB = 100ns. //??????

    NF_CE_H();
}

//************************************************************************

BOOL NAND_WriteSectorInfo(SECTOR_ADDR sectorAddr, PSectorInfo pInfo)
{
    BOOL    bRet = TRUE;


    //  Chip enable
    NF_CE_L();
	NF_CLEAR_RB();

    //  Write the command
    //  First, let's point to the spare area
    NF_CMD(CMD_READ2);
    NF_CMD(CMD_WRITE);

    //  Write the address
    NF_ADDR(0x00);
    NF_ADDR(sectorAddr & 0xff);
    NF_ADDR((sectorAddr >> 8) & 0xff);

    if (NEED_EXT_ADDR) {
        NF_ADDR((sectorAddr >> 16) & 0xff);
    }

    //  Now let's write the SectorInfo data
    //
    //  Write the first reserved field (DWORD)
    NF_DATA_W4( pInfo->dwReserved1 );

    //  Write OEM reserved flag
    NF_DATA_W( (pInfo->bOEMReserved) );

    //  Write the bad block flag
    NF_DATA_W( (pInfo->bBadBlock) );

    //  Write the second reserved field
    NF_DATA_W( (pInfo->wReserved2 >> 8) & 0xff );
    NF_DATA_W( (pInfo->wReserved2) );

    //  Issue the write complete command
    NF_CMD(CMD_WRITE2);

    //  Check ready bit
	NF_DETECT_RB();	 // Wait tR(max 12us)

    //  Check the status of program
    NF_CMD(CMD_STATUS);

    if(NF_DATA_R() & STATUS_ERROR) {
     Uart_Printf("NAND_WriteSectorInfo() ######## Error Programming page %d!\n", sectorAddr);
        bRet = FALSE;
    }

    NF_CE_H();

    return bRet;
}




//***********************************************************************
/*static void InputTargetBlock(void)
{
    Uart_Printf("\nSource size:0h~%xh\n",downloadProgramSize);
    Uart_Printf("\nAvailable target block number: 0~4095\n");
    Uart_Printf("Input target block number:");
    //targetBlock=GetInputNum();	// Block number(0~4095)
    targetBlock = Uart_GetIntNum();	// Block number(0~4095)
    if(targetSize==0)
    {
    	Uart_Printf("\nInput target size(0x4000*n):");
    	targetSize=Uart_GetIntNum();	// Total byte size
    }
}*/

//********************************************************************
static int NF_ReadPage(U32 block,U32 page,U8 *buffer)
{
    int i;
    unsigned int blockPage;
    U8 ecc0,ecc1,ecc2;
    U8 *bufPt=buffer;
    U8 se[16];	   
    
    page=page&0x1f;
    blockPage=(block<<5)+page;
    NF_RSTECC();   // Initialize ECC
    NF_MECC_UnLock();

    NF_CE_L();  
	NF_CLEAR_RB();

    NF_CMD(0x00);   // Read command
    NF_ADDR(0);	    // Column = 0
    NF_ADDR(blockPage&0xff);	    //
    NF_ADDR((blockPage>>8)&0xff);   // Block & Page num.
    NF_ADDR((blockPage>>16)&0xff);  //

    for(i=0;i<10;i++); //wait tWB(100ns)/////??????
    
    NF_WAITRB();    // Wait tR(max 12us)
    for(i=0;i<512;i++)
    {
    	*bufPt++=NF_DATA_R();	// Read one page
    }

}

//**********************************************************************
BOOL IsBlockBad(BLOCK_ID blockID)
{
    DWORD   dwPageID = blockID << 5;
    BOOL    bRet = FALSE;
    BYTE    wFlag;

    //GRABMUTEX();

    //  Enable the chip
    NF_CE_L();
	NF_CLEAR_RB();

    //  Issue the command
    NF_CMD(CMD_READ2);

    //  Set up address
    NF_ADDR(VALIDADDR);
    NF_ADDR((dwPageID) & 0xff);
    NF_ADDR((dwPageID >> 8) & 0xff);

    if (NEED_EXT_ADDR) {
        NF_ADDR((dwPageID >> 16) & 0xff);
    }

    //  Wait for Ready bit
	NF_DETECT_RB();	 // Wait tR(max 12us)

    //  Now get the byte we want
    wFlag = (BYTE) NF_DATA_R();

  //  if(wFlag != 0xff) {
    if(wFlag != 0xff) {
        bRet = TRUE;
    }

    //  Disable the chip
    NF_CE_H();

   // RELEASEMUTEX();
    return bRet;
}

//**********************************************************************
char FMD_EraseBlock(BLOCK_ID blockID)
{

    BOOL    bRet = TRUE;
    DWORD   dwPageID = blockID << 5;
		//Uart_Printf("FMD_EraseBlock::::::1 \r\n");



/*#ifndef NOSYSCALL
	if(blockID < IMAGE_START_BLOCK)
	{
		bRet = FALSE;
		Uart_Printf("\nFMD_EraseBlock continue\n");
		//RELEASEMUTEX();
		return bRet;
	}
#endif*/


    //  Enable the chip
    NF_CE_L();
    //Uart_Printf("FMD_EraseBlock::::::2 \r\n");
	NF_CLEAR_RB();
//Uart_Printf("FMD_EraseBlock::::::3 \r\n");
    //  Issue command
    NF_CMD(CMD_ERASE);
//Uart_Printf("FMD_EraseBlock::::::4 \r\n");
    //  Set up address
    NF_ADDR((dwPageID) & 0xff);
    NF_ADDR((dwPageID >> 8) & 0xff);
//Uart_Printf("FMD_EraseBlock::::::5 \r\n");
    if (NEED_EXT_ADDR) {
        NF_ADDR((dwPageID >> 16) & 0xff);
    }

    //  Complete erase operation
    NF_CMD(CMD_ERASE2);
//Uart_Printf("FMD_EraseBlock::::::6 \r\n");
    //  Wait for ready bit
	NF_DETECT_RB();	 // Wait tR(max 12us)
//Uart_Printf("FMD_EraseBlock::::::7 \r\n");
    //  Check the status
    NF_CMD(CMD_STATUS);
//Uart_Printf("FMD_EraseBlock::::::8 \r\n");
    if(NF_DATA_R() & STATUS_ERROR) {
        Uart_Printf("######## Error Erasing block %d!\n", blockID);
        bRet = FALSE;
    }

    NF_CE_H();


    return bRet;
   
}


//***********************************************************************
BOOL FMD_WriteSector(SECTOR_ADDR startSectorAddr, LPBYTE pSectorBuff, PSectorInfo pSectorInfoBuff,
                        DWORD dwNumSectors)
{
    DWORD   i;
    BOOL    bRet = TRUE;
    DWORD   dwECCVal;
    BYTE    eccBuf[4];
		//Uart_Printf("FMD_WriteSector::::::1 \r\n");

    if((!pSectorBuff && !pSectorInfoBuff) || dwNumSectors != 1) {
//#ifdef BOOT_LOADER
        Uart_Printf("Invalid parameters!\r\n");
//#else
//       RETAILMSG(1, (TEXT("Invalid parameters!\n")));
//#endif
//#ifndef NOSYSCALL
//        SetLastError(ERROR_INVALID_PARAMETER);
//#endif
        return FALSE;
    }
	//Uart_Printf("FMD_WriteSector::::::2 \r\n");
	NF_Reset();

    if(!pSectorBuff) {
        //  If we are asked just to write the SectorInfo, we will do that separately
        bRet = NAND_WriteSectorInfo(startSectorAddr, pSectorInfoBuff);
        Uart_Printf("FMD_WriteSector::::::3 \r\n");
		return bRet;			// Do not write the actual sector information...
    }

    //GRABMUTEX();

    //  Initialize ECC register
    NF_RSTECC();
	NF_MECC_UnLock();

    //  Enable Chip
    NF_CE_L();

    //  Issue command
    NF_CMD(CMD_READ);
    NF_CMD(CMD_WRITE);

    //  Setup address
    NF_ADDR(0x00);
    NF_ADDR((startSectorAddr) & 0xff);
    NF_ADDR((startSectorAddr >> 8) & 0xff);

    if (NEED_EXT_ADDR) {
        NF_ADDR((startSectorAddr >> 16) & 0xff);
    }

    //  Special case to handle un-aligned buffer pointer.
    //
    if( ((DWORD) pSectorBuff) & 0x3) {
        //  Write the data
        for(i=0; i<SECTOR_SIZE; i++) {
            NF_DATA_W(pSectorBuff[i]);
        }
    }

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人免费高清视频在线观看| 奇米亚洲午夜久久精品| 欧美日韩国产高清一区二区三区| 一区二区三区四区视频精品免费| 欧美日韩一区二区在线观看视频| 老司机精品视频在线| 婷婷中文字幕一区三区| 日韩欧美二区三区| 成人av综合一区| 青青青伊人色综合久久| 久久精品网站免费观看| 日本二三区不卡| 久久99热99| 亚洲色图第一区| 91免费看片在线观看| 日韩精品乱码免费| 日韩码欧中文字| 日韩欧美美女一区二区三区| av激情综合网| 免费观看日韩电影| 一区二区三区免费| 日韩精品一区二区三区在线观看| 97超碰欧美中文字幕| 裸体在线国模精品偷拍| 亚洲欧美一区二区三区孕妇| 欧美日韩精品电影| 一本大道av伊人久久综合| 韩国理伦片一区二区三区在线播放| 综合久久一区二区三区| 精品国产百合女同互慰| 欧美系列日韩一区| 丁香天五香天堂综合| 婷婷丁香久久五月婷婷| 亚洲男女一区二区三区| 日韩三级在线观看| 日本韩国欧美在线| 9久草视频在线视频精品| 国产一区二区影院| 日本在线播放一区二区三区| 最好看的中文字幕久久| 国产精品美女久久久久久2018| 精品三级av在线| 在线不卡中文字幕| 在线一区二区三区做爰视频网站| 国产一区二区三区在线观看免费视频| 午夜精品福利久久久| 亚洲图片欧美视频| 亚洲日本韩国一区| 亚洲欧洲色图综合| 久久精品一区二区| 国产色综合一区| 日韩欧美第一区| 精品捆绑美女sm三区| 日韩一区二区三区在线视频| 欧美精品乱码久久久久久按摩| 色哟哟国产精品| 色狠狠综合天天综合综合| 99久久精品99国产精品| 国产精品一级在线| 韩国av一区二区三区四区| 美国十次了思思久久精品导航| 亚洲成人中文在线| 亚洲午夜精品在线| 婷婷中文字幕一区三区| 亚洲一二三专区| 亚洲国产一区二区三区| 中文字幕一区二区三区在线不卡 | 久久久久久久精| 日韩视频一区二区三区在线播放| 欧美另类videos死尸| 欧日韩精品视频| 日韩一区二区影院| 国产精品网站在线| 亚洲第四色夜色| 国产精品夜夜嗨| 91黄色激情网站| 欧美一级搡bbbb搡bbbb| 中文字幕国产精品一区二区| 亚洲综合在线第一页| 麻豆国产精品一区二区三区| 懂色av噜噜一区二区三区av| 日本乱人伦一区| 日韩欧美一区二区三区在线| 欧美成人一级视频| 亚洲乱码国产乱码精品精小说| 午夜久久久久久| 国产v日产∨综合v精品视频| 91官网在线观看| 久久久美女毛片| 亚洲一区二区三区小说| 国内成人精品2018免费看| 97久久精品人人爽人人爽蜜臀| 69精品人人人人| 国产精品免费aⅴ片在线观看| 日韩黄色在线观看| eeuss鲁片一区二区三区在线看| 欧美久久久久久蜜桃| 国产精品美女久久久久久 | 亚洲国产成人精品视频| 国产精品77777竹菊影视小说| 欧美日韩一区二区三区在线看| 日本一区免费视频| 热久久免费视频| 欧美性猛片aaaaaaa做受| 国产欧美精品国产国产专区| 午夜亚洲福利老司机| 99国产欧美另类久久久精品 | 欧美人与性动xxxx| 亚洲人成精品久久久久久| 国产乱码精品1区2区3区| 欧美日韩国产高清一区二区| 专区另类欧美日韩| 国产精品88av| 精品国产乱码久久久久久久| 日韩高清不卡在线| 欧美三级日韩三级国产三级| 自拍偷拍国产精品| 成人网在线播放| 精品国产一区二区三区久久久蜜月 | 亚洲1区2区3区4区| 99久久精品99国产精品| 国产精品丝袜一区| 国产综合久久久久久鬼色 | 国产精品久久久久久妇女6080 | 精品久久99ma| 日韩精品一二三四| 欧美午夜宅男影院| 亚洲一区二区美女| 在线观看国产一区二区| 综合色中文字幕| 色综合视频一区二区三区高清| 国产精品毛片久久久久久| 国产精品亚洲专一区二区三区| 精品久久久久久无| 国产一区免费电影| 久久这里只有精品视频网| 久久国产三级精品| 26uuu欧美| 国产精品一区二区久久不卡| 久久久国产午夜精品 | 国产又粗又猛又爽又黄91精品| 日韩免费观看高清完整版| 免费不卡在线视频| 日韩精品中文字幕一区二区三区 | 国产精品国产三级国产aⅴ无密码| 国产精品一区二区免费不卡| 欧美精品一区二区三区蜜桃视频| 久久黄色级2电影| 久久精品一区二区| 国产999精品久久久久久绿帽| 久久久99精品免费观看| 成人免费视频caoporn| |精品福利一区二区三区| 一本到不卡精品视频在线观看| 亚洲六月丁香色婷婷综合久久| 欧美图区在线视频| 日本91福利区| 2024国产精品| 九九九精品视频| 国产日韩欧美综合一区| www.色综合.com| 一区二区高清在线| 欧美一区二区不卡视频| 久久国产成人午夜av影院| 久久蜜桃av一区精品变态类天堂| 国产伦精品一区二区三区免费迷| 欧美激情在线一区二区三区| 色先锋aa成人| 麻豆精品在线视频| 国产精品伦理在线| 欧美精品一级二级| 国产精品1区2区3区| 亚洲欧洲综合另类| 日韩写真欧美这视频| 成人激情小说网站| 日韩激情av在线| 国产精品久久久久久久久晋中| 欧美日韩免费视频| 国产乱国产乱300精品| 亚洲综合成人网| 久久老女人爱爱| 欧美日韩一区三区四区| 国产麻豆视频一区二区| 亚洲午夜久久久久久久久电影网| 精品粉嫩aⅴ一区二区三区四区| av不卡免费电影| 久久精品国产一区二区三区免费看 | 亚洲一区二区欧美日韩| 2023国产精品| 精品视频免费看| 成人精品视频一区二区三区| 亚洲国产aⅴ天堂久久| 久久久天堂av| 在线播放/欧美激情| voyeur盗摄精品| 日本女人一区二区三区| 亚洲色图在线视频| 久久久精品国产99久久精品芒果 | 欧美三级视频在线播放| 粉嫩绯色av一区二区在线观看|