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

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

?? km29ux.c

?? arm7 s3c44b0三星公司測試代碼
?? C
字號:
#include <string.h>
#include "..\inc\44b.h"
#include "..\inc\44blib.h"
#include "..\inc\def.h"
#include "..\inc\km29ux.h"



//KM29U128T

/****************** CAUTION ***********************
 1) PA7,4,2 has to be configured as an output port
 2) PA3 has to be configured as an input port
 3) GCS3 has to be configured as 8-bit, 
    tcos=1,tacc=4 @ 60Mhz, tcos has to exist!!!
 4) caching has to be disabled on nGCS3
 5) write buffer has to be turned off.
 **************************************************/

//The code is made for bi-endian mode

/*
 1999.5 Wireless Div. Circuit for KS32C41000 
 H/W connection.
 F_nSE= L
 F_nRE= nGCS3 | nOE
 F_nWE= nGCS3 | nWE
 F_CLE= PA4
 F_ALE= PA7
 F_RB = PA3
 F_nCE = PA2
*/

// blk0:page0 : reserved
// blk0:page1,2,3,4: Block Information Table :  
//	 good block:used block:logical block number
//	            unused block:FFFF
//       bad block:  F0F0

#define WRITEVERIFY  (1)  //verifing is enable at writing.

#define PAGE2BLOCKID(page32)	(page32>>5)

#define ALE	    (0x80)	
#define CLE	    (0x10)	
#define CE	    (0x04)     
#define RB	    (0x08)

#define FC_CMD	    {rPDATA|=CLE;rPDATA&=~(ALE|CE);}
#define FC_ADDR     {rPDATA|=ALE;rPDATA&=~(CLE|CE);}
#define FC_DATA     {rPDATA&=~(ALE|CLE|CE);}
#define FC_INACTIVE {rPDATA|=CE;rPDATA&=~(ALE|CLE);}

#define WAITRB	    while(!(rPDATA&RB)) 
	    //wait tWB and check R/B pin.   
#define rKM29UXDATA	   (*(volatile U8 *)0x6000000)

static U16 blockLookupTable[1024+8]; //logical blockId # ->physical block #
	                    	     //8 is spare area for loading 528bytes.
static unsigned lastPage=0;
static unsigned isOpen=0;

// 1block=528bytes x 32pages
// 1024block

// A[23:14][13:9]
//  block   page


int Nf_Format(int page32)
//returns the allocated good block excluding BIT. 
{
    int i;
    int error=0,retry=0;
    int blockCnt;
    int blockId;
    U8 buffer[528];
    unsigned int bp0,bp1;
    U8 *phyStTbl=(U8 *)blockLookupTable;

    if((page32%32)!=0)return 0;
    blockCnt=page32/32;
    //check if the flash had been formatted.
    
    if(_CheckId()!=0xec73) //check KM29U128T
    {
	Uart_Printf("ID Error!!!\n");
	return 0;
    }


    _RdPage(0,0,buffer);
    if(buffer[0]=='N')return 0;
    
    blockId=0;
    phyStTbl[0]=0xf5;  //For BIT
    phyStTbl[1]=0xf5;  
    
    for(i=1;i<1024;i++)
    {
	_RdPage(i,0,buffer);bp0=buffer[0];
	_RdPage(i,0,buffer);bp1=buffer[0];
	if(bp0==0xff && bp1==0xff)
	{  //good block
	    
	    if(blockId < blockCnt)
	    {
		//good block have blcokId
		phyStTbl[2*i]=blockId &0xff;  
		phyStTbl[2*i+1]=(blockId>>8) &0xff;  
	    	blockId++; 
	    }
	    else
	    {
		phyStTbl[2*i]=0xff;  //unused good block have 0xffff instead of blcokId
		phyStTbl[2*i+1]=0xff;  
	    }
	}
        else 
	{   //bad block
	    //bad block have 0xffff instead of blcokId
	    phyStTbl[2*i]=0xf0; 
	    phyStTbl[2*i+1]=0xf0; 
	    Uart_Printf("BAD BLOCK #=%d\n",i);
	}
    }

    while(1)
    {
	for(i=0;i<528;i++)buffer[i]=0;
	memcpy(buffer,"NAND 128M MODE2",16);
	if(!_WrPage(0,0,buffer))error++;
   
	memcpy(buffer,phyStTbl+0x0,512);
	if(!_WrPage(0,1,buffer))error++;

	memcpy(buffer,phyStTbl+0x200,512);
	if(!_WrPage(0,2,buffer))error++;
    
	memcpy(buffer,phyStTbl+0x400,512);
	if(!_WrPage(0,3,buffer))error++;
    
	memcpy(buffer,phyStTbl+0x600,512);
	if(!_WrPage(0,4,buffer))error++;
	if(error==0)break;
	error=0;
	if(++retry==3)return 0; //retry error!!! unusable NAND flash

	_EraseBlock(0); //erase physical block #0 for retry
    }

    return blockId; //returns the allocated good block excluding BIT. 
}



int Nf_Open(void)
//returns the last page #
{
    int i,j;
    U8 buffer[2048+16];
    int lBlock=0;

    if(_CheckId()!=0xec73)  //check KM29U128T
    {
	Uart_Printf("ID Error!!!\n");
	return 0;
    }
    _RdPage(0,0,buffer+0); //check if the flash is formatted.
    if(buffer[0]!='N')return 0;
    
    _RdPage(0,1,buffer+0);
    _RdPage(0,2,buffer+0x200);
    _RdPage(0,3,buffer+0x400);
    _RdPage(0,4,buffer+0x600);
    
    for(i=0;i<1024;i++)blockLookupTable[i]=0xffff;

    for(i=1;i<1024;i++)
    {
	j=(U8)buffer[i*2]+((U8)buffer[i*2+1])*0x100;
	if(j!=0xf0f0 && j!=0xffff){blockLookupTable[j]=i;lBlock++;}
    }
    lastPage=(lBlock)*32-1; //total page count.
    
    //check the Block Information Table Integrity.
    for(i=0;i<lBlock;i++)
    {
	if(blockLookupTable[i]==0xffff)return 0; //error!!!
    }

    isOpen=1;
    return lastPage;
}   



int Nf_EraseBlock(unsigned int page32)
{
    if((page32%32)!=0)return 0; //page32[4:0] has to be 00000.
    return _EraseBlock( blockLookupTable[PAGE2BLOCKID(page32)] );
}


int Nf_ReadPage(unsigned int startPage, unsigned int pageCount, U8 *buffer)
{
    int i;
    int page=startPage;
    U8 *pPage=buffer;

    for(i=0;i<pageCount;i++)
    {
    	_RdPage(blockLookupTable[PAGE2BLOCKID(page)],(page&0x1f),pPage);
	pPage+=528;
	page++;
    }
    return 1;
}




int Nf_WritePage(unsigned int startPage, unsigned int pageCount, U8 *buffer)
{
    int i;
    int page=startPage;
    U8 *pPage=buffer;

    for(i=0;i<pageCount;i++)
    {
    	if(!_WrPage(blockLookupTable[PAGE2BLOCKID(page)],(page&0x1f),pPage))
	    return 0;
	pPage+=528;
	page++;
    }
    return 1;
}




int Nf_Add1Block(void)
{
    if(_RepAdd1Block(0)==0)return 0;
    return Nf_Open();
}




int Nf_Replace1Block(int page32)
{
    if(_RepAdd1Block(PAGE2BLOCKID(page32))==0)return 0;
    return Nf_Open();
}



int _RepAdd1Block(int badBlockId)
//if badBlockId==0, replacement doesn't occur.
//blockId is blockLookupTable entry. 0=BIT table, 1=page0-31, 2=page32-63
{
    int i;
    int error=0,retry=0;
    U8 buffer[528];
    U8 reserved[528];
    unsigned int phyBadBlock=0,phyNewBlock,newBlockId;
    U8 *phyStTbl=(U8 *)blockLookupTable;
    
    if(isOpen==0)return 0;

    if(badBlockId!=0) //must remove the bad block.
    {
	newBlockId=badBlockId;
	phyBadBlock=blockLookupTable[badBlockId];
	_RdPage(0,0,reserved);
	_RdPage(0,1,phyStTbl+0x0);
	_RdPage(0,2,phyStTbl+0x200);
	_RdPage(0,3,phyStTbl+0x400);
	_RdPage(0,4,phyStTbl+0x600);
	*((U16 *)phyStTbl+phyBadBlock)=0xf0f0;  //mark bad block
    }
    else
    {
	newBlockId=(lastPage+1)/32;
	_RdPage(0,0,reserved);
	_RdPage(0,1,phyStTbl+0x0);
	_RdPage(0,2,phyStTbl+0x200);
	_RdPage(0,3,phyStTbl+0x400);
	_RdPage(0,4,phyStTbl+0x600);
    }

    for(i=1;i<1024;i++)
    {
        if(*((U16 *)phyStTbl+i)==0xffff)break;
    }

    if(i==1024)return 0;    //no more available empty good block.

    phyNewBlock=i;

    *((U8 *)((U16 *)phyStTbl+phyNewBlock))=0xff & newBlockId;  //replace mark bad block
    *((U8 *)((U16 *)phyStTbl+phyNewBlock)+1)=0xff & (newBlockId>>8);  
    
    Uart_Printf("Bad Block ID:%d(phy. %d) ->New block ID:%d(phy. %d)\n"
    		,badBlockId,phyBadBlock,newBlockId,phyNewBlock);
 
    while(1)
    {
	_EraseBlock(0); //erase physical block #0

	//buffer[528] has the ROM writer maker's information.
	if(!_WrPage(0,0,reserved))error++;
    
	for(i=0;i<528;i++)buffer[i]=0;   
 
	memcpy(buffer,phyStTbl+0x0,512);
	if(!_WrPage(0,1,buffer))error++;

	memcpy(buffer,phyStTbl+0x200,512);
	if(!_WrPage(0,2,buffer))error++;
    
	memcpy(buffer,phyStTbl+0x400,512);
	if(!_WrPage(0,3,buffer))error++;
    
	memcpy(buffer,phyStTbl+0x600,512);
	if(!_WrPage(0,4,buffer))error++;
	if(error==0)break;
	error=0;
	if(++retry==3)return 0; //retry error!!! unusable NAND flash
    }

    return 1; 
}


int _EraseBlock(unsigned int block) 
{
    unsigned int blockPage=(block<<5);
    int i;
    FC_CMD;
    rKM29UXDATA=0x60;
    FC_ADDR;	  
    
    rKM29UXDATA=blockPage&0xff;  
    rKM29UXDATA=(blockPage>>8)&0xff;

    for(i=0;i<2;i++);//tWC  50ns
    
    FC_CMD;
    rKM29UXDATA=0xd0;
    
    for(i=0;i<3;i++);
    
    FC_DATA;
    WAITRB;	//wait max 3ms
    FC_CMD;
    rKM29UXDATA=0x70;
    FC_DATA;
    if (rKM29UXDATA&0x1) //erase error
    {	
	FC_INACTIVE;
	Uart_Printf("[ERASE_ERROR:PB=%d]",block);
	return 0;
    }
    else 
    {
	FC_INACTIVE;   
        return 1;
    }
}




int _VerifyPage(U32 block,U32 page,U8 *buffer)
{
    U8 buf[528];
    _RdPage(block,page,buf);
    if(strncmp((char *)buf,(char *)buffer,528)==0)return 1;
    else return 0;
}

    


int _WrPage(unsigned int block,unsigned int page,U8 *pPage)  
{
    unsigned int blockPage=(block<<5)+page;
    int i;
    FC_CMD;
    rKM29UXDATA=0x80;
    FC_ADDR;
    rKM29UXDATA=0;
    rKM29UXDATA=blockPage&0xff;
    rKM29UXDATA=(blockPage>>8)&0xff;
    FC_DATA;

    //for(i=0;i<528;i++){rKM29UXDATA=*pPage++;}  
    __WrPage528(pPage);

    FC_CMD;
    rKM29UXDATA=0x10;
    for(i=0;i<10;i++);  //twb=100ns. why is it 10? spec is false?  
                        //No. It's because of LED of PE1.
    WAITRB;	//wait max 500us;
    rKM29UXDATA=0x70;
    FC_DATA;
    for(i=0;i<3;i++);  //twhr=60ns
    if((rKM29UXDATA&0x1))
    {
	FC_INACTIVE;	
	rSYSCFG=SYSCFG_8KB;
	Uart_Printf("[WRITE_ERROR:PB=%d]",block);
        return 0;
    }
    else
    {
	FC_INACTIVE;	    
	rSYSCFG=SYSCFG_8KB;
#if (WRITEVERIFY==1)
	return _VerifyPage(block,page,pPage);	
#else
	return 1;
#endif
    }

}



void _RdPage(unsigned int block,unsigned int page,U8 *pPage)  
{
    int i;
    unsigned int blockPage=(block<<5)+page;
    FC_CMD;
    rKM29UXDATA=0x00;
    FC_ADDR;
    rKM29UXDATA=0;
    rKM29UXDATA=blockPage&0xff;
    rKM29UXDATA=(blockPage>>8)&0xff;
    for(i=0;i<3;i++);
    FC_DATA;
    WAITRB;	//wait max. 10us 
    //for(i=0;i<528;i++){*pPage++=rKM29UXDATA;}
    __RdPage528(pPage);
    FC_INACTIVE;
}




int _CheckId(void)
{
    int i;
    int id;
    FC_CMD;
    rKM29UXDATA=0x90;
    FC_ADDR;
    rKM29UXDATA=0;
    FC_DATA;
    for(i=0;i<5;i++); //wait 100ns
    id=rKM29UXDATA<<8;
    id+=rKM29UXDATA;
    FC_INACTIVE;
    return id;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成年人午夜久久久| 成人精品一区二区三区四区| 亚洲人被黑人高潮完整版| 久久久国产精品不卡| 日日夜夜免费精品| 久久99精品久久只有精品| 国产在线视频一区二区| 粉嫩欧美一区二区三区高清影视 | 91啪亚洲精品| 日韩一区二区三区免费看| 久久精品视频一区二区| 亚洲精品成人悠悠色影视| 免费一级片91| 色综合久久久久| 精品奇米国产一区二区三区| 国产三级欧美三级| 午夜精品aaa| 国产精品自产自拍| 在线播放国产精品二区一二区四区 | 色婷婷av一区二区三区大白胸| 欧美色手机在线观看| 久久久777精品电影网影网| 午夜精品久久久久影视| 99免费精品在线观看| 久久免费视频一区| 精品亚洲成a人在线观看| 欧美日韩国产精品自在自线| 国产精品国产精品国产专区不片 | 欧美福利电影网| 亚洲少妇屁股交4| 国产大陆精品国产| 国产欧美综合色| 国产综合一区二区| 精品99999| 国产一区啦啦啦在线观看| 欧美大片日本大片免费观看| 日本亚洲天堂网| 精品国产第一区二区三区观看体验| 午夜久久久久久| 日韩欧美一卡二卡| 激情图区综合网| 国产欧美日韩综合精品一区二区| 国产一区二区福利| 国产精品麻豆网站| 欧美少妇bbb| 美女在线一区二区| 中文字幕乱码一区二区免费| 丁香激情综合国产| 亚洲日本成人在线观看| 欧美肥妇毛茸茸| 国产sm精品调教视频网站| 国产精品的网站| 欧美一区二区视频在线观看2020| 麻豆免费精品视频| 日韩美女精品在线| 欧美精品高清视频| 懂色av一区二区夜夜嗨| 亚洲精品福利视频网站| 2020国产精品久久精品美国| 不卡一区中文字幕| 国产曰批免费观看久久久| 亚洲综合色网站| 欧美极品美女视频| 日韩午夜三级在线| 欧美在线999| 激情五月婷婷综合网| 69av一区二区三区| 久久99国内精品| 亚洲网友自拍偷拍| 国产精品欧美久久久久无广告| 7777精品久久久大香线蕉| 色呦呦国产精品| 91玉足脚交白嫩脚丫在线播放| 久久国产精品色婷婷| 午夜电影一区二区| 亚洲成人激情社区| 亚洲成人黄色小说| 日韩制服丝袜av| 亚洲超丰满肉感bbw| 亚洲午夜一二三区视频| 久久99精品久久只有精品| 美女免费视频一区二区| 狠狠狠色丁香婷婷综合激情| 久久99精品久久久久久国产越南 | 91网站视频在线观看| 99精品久久99久久久久| 91影视在线播放| 精品视频一区二区不卡| 欧美久久一二三四区| 日韩欧美中文字幕公布| 26uuu另类欧美| 亚洲欧洲精品一区二区三区| 亚洲成人自拍网| 久久er99精品| 91一区二区在线| 日韩一区二区三区视频在线| 久久精品亚洲麻豆av一区二区 | 欧美色网站导航| 久久伊人中文字幕| 亚洲一区二区在线播放相泽| 日本麻豆一区二区三区视频| 国产很黄免费观看久久| 欧美性高清videossexo| 久久久久久97三级| 亚洲国产欧美日韩另类综合| 国产在线看一区| 欧美一区二区三区在线视频| 中文字幕亚洲欧美在线不卡| 久久激情五月激情| 欧美精品丝袜久久久中文字幕| 久久精品亚洲麻豆av一区二区| 亚洲五码中文字幕| 91网站在线观看视频| 国产偷国产偷亚洲高清人白洁| 婷婷综合另类小说色区| 一本久久综合亚洲鲁鲁五月天 | 欧美日韩在线精品一区二区三区激情 | 久久人人超碰精品| 日本亚洲视频在线| 欧美男同性恋视频网站| 亚洲成人激情自拍| 欧美精品乱码久久久久久| 一区二区三区不卡在线观看 | 亚洲444eee在线观看| 欧美系列日韩一区| 天天色图综合网| 欧美一级日韩不卡播放免费| 日韩国产欧美在线观看| 欧美不卡一二三| 国产91色综合久久免费分享| 中文字幕va一区二区三区| 成人黄色片在线观看| 亚洲欧美一区二区不卡| 欧美视频一区二区三区四区| 美女脱光内衣内裤视频久久影院| 欧美一区二区三区白人| 国产精品一二三区在线| 国产精品初高中害羞小美女文| 99精品国产一区二区三区不卡| 亚洲精选视频在线| 91精品久久久久久久久99蜜臂| 国产乱色国产精品免费视频| 亚洲欧洲99久久| 欧美一级免费大片| 不卡一区二区在线| 日韩激情在线观看| 中文字幕中文字幕一区| 日韩三级在线免费观看| 色婷婷综合久久久久中文| 极品尤物av久久免费看| 一区二区三区中文免费| 欧美v国产在线一区二区三区| 不卡的av在线| 国产福利91精品一区二区三区| 亚洲精品免费电影| 欧美精品一区二区精品网| 欧美日韩第一区日日骚| 成人一区二区三区中文字幕| 美女网站在线免费欧美精品| 亚洲一区在线观看免费观看电影高清 | 中文子幕无线码一区tr| 欧美一级国产精品| 欧美日韩一区二区不卡| 一本高清dvd不卡在线观看| 成人黄色片在线观看| 欧美日韩久久久久久| 欧美日韩中文另类| 欧美视频完全免费看| 色成年激情久久综合| 色94色欧美sute亚洲线路一久| 99re这里都是精品| 91亚洲国产成人精品一区二区三| 成人手机在线视频| 91老司机福利 在线| 91福利区一区二区三区| 在线视频一区二区三区| 欧美日韩在线播放三区| 日韩亚洲欧美中文三级| 精品美女在线播放| 中文字幕国产一区二区| 亚洲蜜臀av乱码久久精品蜜桃| 一区二区在线观看免费 | 欧美日韩午夜在线视频| 欧美日本免费一区二区三区| 欧美高清hd18日本| 亚洲国产激情av| 亚洲国产日韩在线一区模特| 精品一区二区三区免费毛片爱| 懂色av中文字幕一区二区三区| 91网站在线播放| 精品久久久久久久久久久久久久久久久 | 国产精品久久久久久久裸模| 亚洲一区视频在线观看视频| 久久aⅴ国产欧美74aaa| 成av人片一区二区| 精品美女被调教视频大全网站| 亚洲精选免费视频| 国产999精品久久久久久绿帽| 欧美理论电影在线| 亚洲图片另类小说|