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

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

?? strata16.c

?? 三星公司S3c2443的測試程序源碼
?? 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();
    }
}


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
图片区小说区国产精品视频| 三级不卡在线观看| 欧美在线不卡视频| 国产馆精品极品| 日日骚欧美日韩| 中文字幕佐山爱一区二区免费| 91精品国产色综合久久不卡电影| 成人av网站免费观看| 紧缚奴在线一区二区三区| 亚洲最大成人综合| 欧美国产日韩亚洲一区| 日韩三级av在线播放| 91黄色小视频| 岛国精品在线播放| 狠狠色综合色综合网络| 午夜国产不卡在线观看视频| 亚洲男帅同性gay1069| 久久精子c满五个校花| 911国产精品| 在线免费视频一区二区| 97aⅴ精品视频一二三区| 精品在线你懂的| 日韩电影免费在线| 亚洲五码中文字幕| 一区精品在线播放| 国产欧美日产一区| 国产人成亚洲第一网站在线播放 | 日韩一级在线观看| 欧美一a一片一级一片| 97se亚洲国产综合自在线不卡| 国产激情视频一区二区三区欧美 | 91视视频在线直接观看在线看网页在线看 | 国产在线精品视频| 免费成人在线网站| 美洲天堂一区二卡三卡四卡视频| 亚洲chinese男男1069| 亚洲成人福利片| 午夜影视日本亚洲欧洲精品| 亚洲国产日韩av| 午夜精品爽啪视频| 日韩黄色小视频| 蜜臀av一区二区在线免费观看| 日本一道高清亚洲日美韩| 日韩极品在线观看| 美国十次综合导航| 国产一区二区三区视频在线播放| 国产永久精品大片wwwapp | 精品亚洲porn| 国产主播一区二区三区| 国产精品夜夜嗨| 成人h动漫精品一区二| 99国产精品久久久久久久久久| 99久久精品免费看| 91久久精品国产91性色tv| 欧美在线视频你懂得| 欧美蜜桃一区二区三区| 91精品国产高清一区二区三区蜜臀 | 亚洲香蕉伊在人在线观| 亚洲va欧美va国产va天堂影院| 美女久久久精品| 国产激情视频一区二区三区欧美 | 欧美日韩国产免费| 日韩一区国产二区欧美三区| 久久日韩精品一区二区五区| 久久久久久久精| 亚洲欧美日韩国产手机在线| 亚洲第一二三四区| 狠狠狠色丁香婷婷综合激情 | 美女mm1313爽爽久久久蜜臀| 国产精品一级黄| 日本久久一区二区| 日韩欧美在线影院| 国产精品婷婷午夜在线观看| 亚洲综合偷拍欧美一区色| 免费一级片91| 成人激情综合网站| 欧美日本一区二区三区| 久久久久免费观看| 亚洲成人免费视频| 国产精品 欧美精品| 欧美在线观看18| 久久九九久久九九| 亚洲成人激情自拍| 成人av集中营| 日韩丝袜情趣美女图片| 国产精品女主播在线观看| 香蕉成人伊视频在线观看| 国产成人av一区二区| 欧美日韩在线播| 欧美国产一区视频在线观看| 视频在线观看一区二区三区| 不卡av在线免费观看| 欧美一级日韩免费不卡| 中文字幕一区二区不卡| 美国三级日本三级久久99| 一本久道中文字幕精品亚洲嫩| 精品成人免费观看| 香蕉av福利精品导航| 99久久99久久精品国产片果冻 | 日韩亚洲电影在线| 亚洲精品日日夜夜| 国产麻豆精品95视频| 欧美一区二区性放荡片| 亚洲欧美日韩国产一区二区三区 | 国产乱码精品一区二区三区忘忧草| 日本精品免费观看高清观看| 久久综合九色综合欧美98| 五月天亚洲精品| 色综合久久久久综合| 国产无遮挡一区二区三区毛片日本| 日韩电影在线一区二区| 欧美三级韩国三级日本三斤| 亚洲色图丝袜美腿| 不卡的看片网站| 欧美激情一区三区| 国产精品亚洲午夜一区二区三区| 日韩亚洲欧美成人一区| 亚洲五码中文字幕| 欧洲另类一二三四区| 亚洲人成影院在线观看| 成人免费毛片a| 国产视频一区在线观看| 国产在线精品一区在线观看麻豆| 欧美妇女性影城| 日韩中文字幕区一区有砖一区| 欧美在线播放高清精品| 怡红院av一区二区三区| 91免费观看在线| 亚洲欧美激情在线| 99re热视频精品| 中文字幕一区二区三区av | 精品精品国产高清a毛片牛牛 | 欧美变态tickling挠脚心| 丝袜诱惑亚洲看片| 欧美日韩一区成人| 午夜激情久久久| 91精品麻豆日日躁夜夜躁| 五月天一区二区| 欧美一区二区三区视频免费| 日韩精品成人一区二区三区| 欧美一区二区私人影院日本| 美女脱光内衣内裤视频久久网站| 欧美大片拔萝卜| 国产一区二区三区免费观看| 国产欧美综合在线| jizzjizzjizz欧美| 亚洲老司机在线| 欧美日韩一区二区三区免费看| 日韩专区中文字幕一区二区| 日韩欧美电影一二三| 国产精选一区二区三区| 亚洲国产激情av| 93久久精品日日躁夜夜躁欧美| 亚洲精品一二三| 56国语精品自产拍在线观看| 六月婷婷色综合| 欧美激情一区二区三区全黄 | 日韩一区二区三区免费看 | 国产一区二区三区电影在线观看| 久久久久久久久久电影| 不卡一区二区三区四区| 亚洲成人av一区| 久久青草欧美一区二区三区| 成人av资源站| 爽好多水快深点欧美视频| 精品国产成人系列| 99久久精品国产麻豆演员表| 亚洲电影一区二区三区| 精品国产在天天线2019| 91网站在线观看视频| 午夜视频一区二区| 久久这里只有精品首页| 91久久精品一区二区三区| 天天综合天天做天天综合| 久久久久久99精品| 在线视频国内一区二区| 精品一区二区三区蜜桃| 亚洲品质自拍视频| 精品日韩99亚洲| 色综合天天做天天爱| 麻豆91在线播放免费| 亚洲视频一二区| 欧美大片日本大片免费观看| 色综合久久久久综合体| 精品一区二区三区在线观看| 亚洲乱码中文字幕综合| 久久奇米777| 欧美福利视频一区| 99精品视频一区二区三区| 日本一区中文字幕| 亚洲男人电影天堂| 精品对白一区国产伦| 欧美综合一区二区三区| 丰满少妇久久久久久久| 日本不卡视频一二三区| 亚洲免费观看高清在线观看| 久久色视频免费观看| 欧美肥妇bbw| 色综合久久精品| 国产v综合v亚洲欧|