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

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

?? strata16.c

?? Samsung S3C2443 Test program source code
?? C
字號:
/*======================================================================

 Project Name : S3C2443 verification project

 Copyright 2006 by Samsung Electronics, Inc.
 All rights reserved.

 Project Description :
 This software is only for verifying functions of the S3C2443. 
 Anybody can use this code without our permission.

 File Name    : strata16.c
 Description  : Program Strata 16-bit NOR Flash(32MB)
 Author       : Junon Jeon
 Dept         : AP
 Created Date : 2006.06.02
 Version      : 0.0
 History
   R0.0 (2006.06.02): Junon draft
		- This code is derived from flash.c of S3C2413A test code.
		
=======================================================================*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "option.h"
#include "2443addr.h"
#include "Console.h"
#include "strata16.h"

static void InputAddresses(void);
static int  Strata_ProgFlash(unsigned int realAddr,unsigned short data);
static void	Strata_EraseSector(int targetAddr);
static int  Strata_CheckID(int targetAddr);
static int  Strata_CheckDevice(int targetAddr);
static void Strata_Unlock(int targetAddr);
static void Strata_SetBlockLock(int targetAddr);
static int  Strata_CheckBlockLock(int targetAddr);
static void	Strata_ClearBlockLock(int targetAddr); 
static int  Strata_BlankCheck(int targetAddr,int targetSize);
static int  _WAIT(void);

static unsigned int srcAddress;
static unsigned int targetOffset; 
static unsigned int targetAddress; 
static unsigned int targetSize; 

// Because S3C2443 is connected to Intel StrataFlash 28F128J3A,
// the addr parameter has to be a WORD address, so called in Intel specification.
#define _WR(addr,data)  *((volatile unsigned short *)(addr))=(unsigned short)data 
#define _RD(addr)       ( *((volatile unsigned short *)(addr)) )       

// _RESET() : Read Array
#define _RESET()    _WR(targetAddress,0x00ff)


static int Strata_CheckID(int targetAddr) 
{
    _RESET();
    _WR(targetAddr, 0x0090); 
	printf("Identification code=%x, Target Addr=%x\n",_RD(targetAddr), targetAddr);
	return _RD(targetAddr); // Read Identifier Code, including lower, higher 16-bit, 8MB, Intel Strate Flash ROM
                            // targetAddress must be the beginning location of a Block Address
}


static int Strata_CheckDevice(int targetAddr) 
{
    //_RESET();
    _WR(targetAddr, 0x0090);
	printf("Identification code=%x\n",_RD(targetAddr+0x2));
	return _RD(targetAddr+0x2); // Read Device Code, including lower, higher 16-bit, 8MB, Intel Strate Flash ROM
                                // targetAddress must be the beginning location of a Block Address
}


static void Strata_Unlock(int targetAddr) 
{
    _RESET();
    _WR(targetAddr, 0x0060);
    _WR(targetAddr, 0x00D0);
}


static void Strata_SetBlockLock(int targetAddr)
{
	_RESET();
	_WR(targetAddr, 0x0060);
	_WR(targetAddr, 0x0001);
}


static int Strata_CheckBlockLock(int targetAddr) 
{
    //_RESET();
    _WR(targetAddr, 0x0090);
    return _RD(targetAddr+0x4); // Read Block Lock configuration, 
                                // targetAddress must be the beginning location of a Block Address
}


//==========================================================================================
static void Strata_ClearBlockLock(int targetAddr) 
{
    unsigned int status,ReadStatus;
	unsigned long bSR7,bSR1;
    //_RESET();
    _WR(targetAddr, 0x0060);
    _WR(targetAddr, 0x00d0);

	_WR(targetAddr, 0x0090);
	status=_RD(targetAddr+0x4); 
	bSR7=status & (1<<7);
	bSR1=status & (1<<1);
	
	printf("Block status register value: %x\n",status);
	
	while(bSR1) 
	{
		_WR(targetAddr, 0x0090);
		status=_RD(targetAddr+0x4); 
		bSR1=status & (1<<1);
		if(!bSR1)break;
	}

	printf("Device is unlocked\n");
	
	_WR(targetAddr, 0x0070);	// Read Status Register
	ReadStatus=_RD(targetAddr);	// realAddr is any valid address within the device
	bSR7=ReadStatus & (1<<7);
	while(!bSR7 ) 
	{
		_WR(targetAddr, 0x0070);		  // Read Status Register
		ReadStatus=_RD(targetAddr);
		bSR7=ReadStatus & (1<<7);
	}
	
    _RESET();
}

//==========================================================================================
void Strata_EraseSector(int targetAddress) 
{
    unsigned long ReadStatus;
    unsigned long bSR5;     // Erase and Clear Lock-bits Status, lower 16bit, 8MB Intel Strate Flash ROM
    unsigned long bSR7;     // Write State Machine Status, lower 16bit, 8MB Intel Strate Flash ROM

    //_RESET();
    _WR(targetAddress, 0x0020); // Block Erase, First Bus Cycle, targetAddress is the address withint the block
    _WR(targetAddress, 0x00d0); // Block Erase, Second Bus Cycle, targetAddress is the address withint the block
    
    //_RESET();
    _WR(targetAddress, 0x0070); // Read Status Register, First Bus Cycle, targetAddress is any valid address within the device
    ReadStatus=_RD(targetAddress);  // Read Status Register, Second Bus Cycle, targetAddress is any valid address within the device
    bSR7=ReadStatus & (1<<7);       // lower 16-bit 8MB Strata
    while(!bSR7) 
    {
        _WR(targetAddress, 0x0070);
        ReadStatus=_RD(targetAddress);
        bSR7=ReadStatus & (1<<7);
    }

    _WR(targetAddress, 0x0070); // When the block erase is complete, status register bit SR.5 should be checked. 
                    // If a block erase error is detected, the status register should be cleared before
                    // system software attempts correct actions.
    ReadStatus=_RD(targetAddress);  
    bSR5=ReadStatus & (1<<5);           // lower 16-bit 8MB Strata 
    if (bSR5==0) 
    {
        printf("Block_%x Erase O.K. \n",targetAddress);
    } 
    else 
    {
        printf("Error in Block Erasure!!\n");
        _WR(targetAddress, 0x0050); // Clear Status Register
    }

    _RESET();   // write 0xffh(_RESET()) after the last opoeration to reset the device to read array mode.
}


//==========================================================================================
int Strata_BlankCheck(int targetAddr,int targetSize) 
{
    int i,j;
    for (i=0; i<targetSize; i+=2) 
    {
        j=*((volatile unsigned short *)(i+targetAddr));
        if (j!=0xffff)      // In erasure it changes all block dta to 0xff
        {
            printf("E : %x = %x\n", (i+targetAddr), j);
            return 0;
        }
    }
    return 1;
}


int Strata_ProgFlash(unsigned int realAddr,unsigned short data) 
{
	volatile unsigned short *ptargetAddr;
	unsigned int ReadStatus;
	unsigned int bSR7;	  // Write State Machine Status, 8MB Intel Strate Flash ROM

	ptargetAddr = (volatile unsigned short *)realAddr;

	_WR(realAddr, 0x0040);	// realAddr is any valid adress within the device
	*ptargetAddr=data;			// 16 bit data

	_WR(realAddr, 0x0070);	// Read Status Register
	ReadStatus=_RD(realAddr);	// realAddr is any valid address within the device
	bSR7=ReadStatus & (1<<7);

	while(!bSR7 ) 
	{
		_WR(realAddr, 0x0070);		  // Read Status Register
		ReadStatus=_RD(realAddr);
		bSR7=ReadStatus & (1<<7);
	}
	
	_WR(realAddr, 0x0070); 
	ReadStatus=_RD(realAddr);			  // Real Status Register

	if(ReadStatus&(1<<3))
	{
		printf("Voltage Range Error\n");
		_WR(realAddr, 0x0050);			// Clear Status Register	
		return 0;
	}	
	if(ReadStatus&(1<<1))
	{
		printf("Device Protect Error\n");
		_WR(realAddr, 0x0050);			// Clear Status Register	
		return 0;
	}	
	if(ReadStatus&(1<<4))
	{
		printf("Programming Error\n");
		_WR(realAddr, 0x0050);			// Clear Status Register	
		return 0;
	}	
	
	return 1;
}


#define TARGET_ADDR_28F128      0x08000000  // nRCS1
#define SOURCE_ADDR_FOR_28F128    0x31000000  // After 16MB of SDRAM
                                            // 0x30000000 - 0x30ffffff : Area for this test program

//==========================================================================================                                            
void Program28F128J3A(void)
{
// FlashROM write program must reside at RAM region NOT ROM region
// In reading and writing all interrupts are disabled because the flash ROM
// strongly dislike to be disturbed by other stuff.
// And the region of flash ROM must be I/O region which means NO cacheable
// and NO bufferable in MMU. Check it out !!!
// 2001.6.18. Mon. It's local rain. I'll hope it eliminates the drought in Korea. by chc

    int i;

    printf("\n[ 28F128J3A-16bit Flash Writing Program ]\n\n");
   
	// Bandwidth : 16-bit, asyncronous
//	rSMBCR0 = 
//	rSROM_BW=rSROM_BW&~(1<<9);
//	rSROM_BW=(rSROM_BW&~(0x40))|(0x1<<6);
	
    rINTMSK = BIT_ALLMSK;   
    targetAddress=TARGET_ADDR_28F128;
    targetSize=UartDownProgramSize;

	printf("Src size=%x\n",targetSize);

    if(targetSize==0)
    {
        printf("\nThe data must be downloaded using ICE or USB from 0x11000000\n");
        srcAddress=UartDownAddress; 
    }
    else
    { 
        srcAddress=UartDownAddress+4; //to discard the data head for the size
    }
        
    InputAddresses(); //srcAddress,targetSize,targetOffset will be determined.      
    printf("Source base address(0x11000000) = 0x%x\n",srcAddress);
    printf("Target base address(0x08000000) = 0x%x\n",targetAddress);
    printf("Target offset      (0x0)        = 0x%x\n",targetOffset);
    printf("Target size        (0x20000*n)  = 0x%x\n",targetSize);

    if ( (Strata_CheckID(targetAddress) & 0xffff) != 0x0089)       // ID number = 0x0089
    {
        printf("Identification check error(%x)!!\n",Strata_CheckID(targetAddress) & 0xffff);
        return ;
    }

    if ( (Strata_CheckDevice(targetAddress) & 0xffff) != 0x8803)   // Device number=0x0018 0x8803 
    {
        printf("Device check error !!\n");
        return ;
    }
	
	for(i=0;i<targetSize;i+=0x10000)
    {
	   	Strata_ClearBlockLock(targetAddress+targetOffset+i); 
	    Strata_EraseSector(targetAddress+targetOffset+i);
    }

    printf("\nErase the sector : 0x%x.\n", targetAddress);

    if(!Strata_BlankCheck(targetAddress+targetOffset,targetSize))
    {
        printf("Blank Check Error!!!\n");
        return;
    }

    printf("\nStart of the data writing...\n");

    for (i=0; i<targetSize; i+=2) 
    {
	    Strata_ProgFlash(i+targetAddress+targetOffset, *((unsigned short *)(srcAddress+i)));
	    if(i%0x10000==0xfffc)
            printf("[%x]",(i+4)/0x10000);
    }
    printf("\nEnd of the data writing \n");

    _RESET();


    printf("Verifying Start...\n");
    for (i=0; i<targetSize; i+=2) 
    {
        if (*((unsigned short *)(i+targetAddress+targetOffset)) !=*((unsigned short *)(i+srcAddress))) 
        {
            printf("verify error  src %08x = %04x\n", srcAddress+i, *((unsigned short *)(srcAddress+i)));
            printf("verify error  des %08x = %04x\n", i+targetAddress+targetOffset, *((unsigned short *)(i+targetAddress)));
			return;
        }
	 }

	printf("Verifying End!!!");
}


void Erase28F128J3A(void)  
{
// FlashROM write program must reside at RAM region NOT ROM region
// In reading and writing all interrupts are disabled because the flash ROM
// strongly dislike to be disturbed by other stuff.
// And the region of flash ROM must be I/O region which means NO cacheable
// and NO bufferable in MMU. Check it out !!!

    int i;

    printf("\n[ 28F128J3A Flash Writing Program ]\n\n");
    printf("     *** Very Important Notes ***\n");
    printf("1. 28F128J3A must be located at 0x08000000.\n");
    printf("2. After programming, 28F128J3A may be located at 0x0.\n");

    rINTMSK = BIT_ALLMSK;   
    targetAddress=TARGET_ADDR_28F128;
    targetSize=UartDownProgramSize;
    //UartDownAddress=0x31000000;

    if(targetSize==0)
    {
        printf("\nThe data must be downloaded using ICE or USB from 0x31000000\n");
        srcAddress=UartDownAddress; 
    }
    else
    { 
        srcAddress=UartDownAddress+4; //to discard the data head for the size
    }

    InputAddresses(); //srcAddress,targetSize,targetOffset will be determined.      
    printf("Source base address(0x31000000) = 0x%x\n",srcAddress);
    printf("Target base address(0x08000000) = 0x%x\n",targetAddress);
    printf("Target offset      (0x0)        = 0x%x\n",targetOffset);
    printf("Target size        (0x20000*n)  = 0x%x\n",targetSize);

    if ( Strata_CheckID(targetAddress)  != 0x0089 )       // ID number = 0x0089
    {
		printf("Read ID : 0x%x\n", Strata_CheckID(targetAddress));
        printf("Identification check error !!\n");
        return ;
    }

    if ( Strata_CheckDevice(targetAddress) != 0x0018 )   // Device number=0x0018
    {
        printf("Device check error !!\n");
        return ;
    }
		
#if 1 // lock bit setting test 
//	Strata_SetBlockLock(targetAddress+0x10000); //just test
    for(i=0;i<10;i++)
		printf("%d block value is %d\n", i, Strata_CheckBlockLock(targetAddress+0x20000*i)&0x00010001);
//	    if ( Strata_CheckBlockLock(targetAddress+0x20000*i) != 0x0 )   // Device number=0x0018
//	        printf("%d block is locked !!\n", i);
	Strata_Unlock(targetAddress);
	for(i=0;i<10;i++)
	printf("%d block value is %d\n", i, Strata_CheckBlockLock(targetAddress+0x20000*i)&0x00010001);
#endif
//	Strata_Unlock(targetAddress);

    printf("\nErase the sector : 0x%x.\n", targetAddress);

    for(i=0;i<targetSize;i+=0x20000)
    {
        Strata_EraseSector(targetAddress+targetOffset+i);
    }
    
    if(!Strata_BlankCheck(targetAddress+targetOffset,targetSize))
    {
        printf("Blank Check Error!!!\n");
        return;
    }

}


//==========================================================================================
static void InputAddresses(void)
{
    printf("\n[ 28F128J3A Writing Program ]\n");

    printf("\nSource size [0x?] : 0h~%xh\n",UartDownProgramSize);
    printf("\nAvailable Target Offset Address:0h,10000h,20000h, ..., ff0000h\n"); 
    printf("Input target address offset [0x?] : ");
    targetOffset=GetIntNum();
	if(targetOffset==(unsigned int)(-1)) targetOffset=0x0;	
    if(targetSize==0)
    {
        printf("Input target size [0x?] : ");
		if(targetOffset==(unsigned int)(-1)) targetOffset=0x0;	
        targetSize=GetIntNum();
    }
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本高清免费不卡视频| 香蕉加勒比综合久久| 国产成人精品在线看| 久久久噜噜噜久久中文字幕色伊伊| 裸体在线国模精品偷拍| 精品国产乱码久久| 成人av电影免费观看| 亚洲一区二区在线视频| 91.麻豆视频| 国产成人av福利| 国产精品少妇自拍| 欧美日韩精品一区二区三区| 美女在线视频一区| 亚洲国产精品成人综合| 欧美性做爰猛烈叫床潮| 老司机午夜精品| 中文字幕字幕中文在线中不卡视频| 一本在线高清不卡dvd| 日韩国产欧美在线观看| 国产亚洲精品aa午夜观看| 91麻豆免费观看| 蜜桃视频在线观看一区| 国产精品视频观看| 日韩午夜在线影院| www.欧美色图| 久久精品国产免费看久久精品| 欧美激情艳妇裸体舞| 欧美三级电影网| 国产麻豆精品95视频| 亚洲午夜av在线| 国产午夜精品美女毛片视频| 欧美日韩你懂的| 成a人片亚洲日本久久| 爽好久久久欧美精品| 中文字幕精品一区| 欧美一级理论性理论a| 99久久精品一区二区| 精品影视av免费| 亚洲小少妇裸体bbw| 国产精品女上位| 欧美r级在线观看| 欧美色偷偷大香| av欧美精品.com| 国产精品一二三区| 喷水一区二区三区| 亚洲已满18点击进入久久| 久久久电影一区二区三区| 91精品黄色片免费大全| 在线欧美日韩国产| 国产成人精品www牛牛影视| 蜜桃一区二区三区四区| 亚洲一区二区精品视频| 国产精品少妇自拍| 欧美精品一区二区三区在线 | 亚洲天堂精品视频| 精品嫩草影院久久| 欧美日韩综合一区| 91久久精品一区二区三| 成人av手机在线观看| 国产成人免费xxxxxxxx| 狠狠色丁香久久婷婷综合丁香| 亚洲成a人片综合在线| 亚洲精品videosex极品| 亚洲欧美综合另类在线卡通| 日本一区二区视频在线观看| 久久亚洲欧美国产精品乐播| 欧美一级艳片视频免费观看| 制服.丝袜.亚洲.另类.中文 | 美腿丝袜亚洲三区| 日韩精品一区第一页| 亚洲国产精品欧美一二99| 亚洲伦理在线精品| 亚洲精品免费看| 一区2区3区在线看| 亚洲高清免费视频| 日韩国产欧美三级| 久久99精品久久久久久| 国产在线乱码一区二区三区| 国产在线一区观看| 国产一区不卡视频| 成人黄色电影在线 | 韩国欧美国产一区| 精品中文字幕一区二区| 黑人精品欧美一区二区蜜桃| 韩国三级在线一区| 国产成人av电影在线| 国产69精品久久久久毛片| 高清shemale亚洲人妖| 成人听书哪个软件好| 91玉足脚交白嫩脚丫在线播放| 91丨九色丨黑人外教| 欧美三级中文字幕| 日韩三级在线免费观看| 欧美成人福利视频| 国产精品视频免费| 夜夜精品浪潮av一区二区三区| 亚洲大片在线观看| 精品亚洲成av人在线观看| 成人丝袜18视频在线观看| 色婷婷香蕉在线一区二区| 在线视频一区二区免费| 日韩欧美国产小视频| 国产精品久久久久久亚洲伦| 夜夜爽夜夜爽精品视频| 久久精品久久精品| 91视视频在线观看入口直接观看www| 在线免费av一区| 日韩欧美国产一区在线观看| 国产精品久久久久久久午夜片| 亚洲国产综合91精品麻豆| 久久精工是国产品牌吗| av在线综合网| 欧美一区二区人人喊爽| 国产精品久久久久久久久久免费看| 亚洲国产另类精品专区| 国产精品综合二区| 精品视频一区二区三区免费| 精品国产亚洲在线| 亚洲自拍与偷拍| 国产一区二区精品在线观看| 欧美性色欧美a在线播放| 精品国产伦一区二区三区观看体验 | 在线视频中文字幕一区二区| 精品久久久久香蕉网| 亚洲精品ww久久久久久p站| 久久精品99国产精品日本| 99re热这里只有精品视频| 精品国产露脸精彩对白| 一区二区三区四区中文字幕| 国产一区二区三区在线观看免费 | 亚洲午夜国产一区99re久久| 国产精品自产自拍| 在线综合视频播放| 中文字幕在线观看一区| 国产一区日韩二区欧美三区| 欧美日韩精品综合在线| 亚洲欧洲性图库| 国产乱码精品一品二品| 欧美理论片在线| 亚洲欧洲日产国码二区| 国产成人在线视频免费播放| 欧美成人女星排行榜| 亚洲午夜激情av| 色天使色偷偷av一区二区| 国产精品美女久久福利网站| 激情图片小说一区| 91精品国产欧美日韩| 有坂深雪av一区二区精品| 成人综合婷婷国产精品久久| 欧美成人aa大片| 午夜精品视频一区| 欧美视频中文字幕| 一级中文字幕一区二区| 91久久精品午夜一区二区| 中文字幕一区二区三区av| 国产精品99久久久久久久vr| 精品久久久网站| 狠狠久久亚洲欧美| 精品1区2区在线观看| 精品一区二区久久久| 日韩免费高清av| 久久se这里有精品| 91精品福利在线一区二区三区| 亚洲成a天堂v人片| 欧美日本一区二区三区四区| 亚洲国产一区二区三区| 欧美三级蜜桃2在线观看| 亚洲第一福利一区| 91精品久久久久久久99蜜桃 | 国产欧美视频一区二区| 国产v日产∨综合v精品视频| 久久你懂得1024| 国产激情精品久久久第一区二区 | 99精品视频中文字幕| 国产精品久久久久7777按摩| 不卡av在线免费观看| 亚洲伦理在线精品| 欧美蜜桃一区二区三区| 青青草国产成人av片免费| 精品免费一区二区三区| 国产综合久久久久久鬼色 | 亚洲成av人片一区二区梦乃| 欧美电影一区二区| 看片网站欧美日韩| 国产女人18毛片水真多成人如厕| 不卡一区二区三区四区| 亚洲综合激情另类小说区| 欧美一区二区精品在线| 国产精品一区二区在线观看不卡 | 亚洲伊人伊色伊影伊综合网| 欧美美女一区二区在线观看| 另类调教123区| 国产亚洲1区2区3区| 日本精品一区二区三区高清| 性欧美大战久久久久久久久| 精品国产乱码久久久久久老虎| 岛国精品一区二区| 亚洲电影中文字幕在线观看| 日韩视频一区在线观看| 成人ar影院免费观看视频|