⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flashrom.c.bak

📁 S3C44B0开发板中FLASH测试程序
💻 BAK
字号:
/*
;*************************************************************************************************************
;*									  	 江西师范大学物理通讯电子学院
;*
;*                                     	      创  新  中  心
;*
;*--------------------------------------------- 文件信息 -----------------------------------------------------                                      
;* 文件名称 : flashrom.c	
;* 文件功能 : 对flashrom SST39VF160的相关操作函数的实现
;* 补充说明 :   SST39VF160存储空间组织为1M*16.                                                
;*              块  统一 32K Word大小为块. 因此块的范围为:00-31(共32个块)                       
;*              扇区擦除能力  统一2K Word大小为扇区. 因此扇区的范围为:000-511(共512个扇区).     
;*-------------------------------------------- 最新版本信息 --------------------------------------------------
;* 修改作者 : zhouhong
;* 修改日期 : 2007-1-22 
;* 版本声明 : V1.0.0
;*-------------------------------------------- 历史版本信息 --------------------------------------------------
;* 文件作者 : 
;* 创建日期 : 
;* 版本声明 : 
;*-----------------------------------------------------------------------------------------------------------
;*************************************************************************************************************                         
;*/
#ifndef _FLASHROM_C_
#define _FLASHROM_C_

#include "..\INC\flashrom.h"
/*
*************************************************************************************************************
- 函数名称 : SST39VF160_CheckBlank(unsigned int sectorNum) 
- 函数说明 : SST39VF160的扇区空检测函数
- 输入参数 : sectorNum:表示要擦除的扇区
- 输出参数 : 成功操作返回:1 否则:0
*************************************************************************************************************
*/
int SST39VF160_CheckBlank(unsigned int sectorNum) 
{
	unsigned int i,temp;
	if(sectorNum<0 || sectorNum>SECTORNUM)
	    return 0;
	for(i=(sectorNum<<PERSECORLENSHIFT);i<((sectorNum<<PERSECORLENSHIFT)+(0x01<<PERSECORLENSHIFT));i++)
	{
		temp=*((volatile unsigned short *)(i<<1));
		if(temp!=0xffff)
			return 0;
	}
	return 1;	
}

/*
*************************************************************************************************************
- 函数名称 : Waitfor_endofprg(void)
- 函数说明 : SST39VF160的内部状态检测函数. Check if the bit6 toggle ends.
- 输入参数 : 无
- 输出参数 : 成功操作返回:1 否则:0
*************************************************************************************************************
*/
int Waitfor_endofprg(void) 
{
	volatile unsigned short flashStatus,old;
	old=*((volatile unsigned short *)0x0);
	while(1)
	{
		flashStatus=*((volatile unsigned short *)0x0);
		if( (old&0x40) == (flashStatus&0x40) )
			break;
		else
		    old=flashStatus;
	}
	return 1;
}

/*
*************************************************************************************************************
- 函数名称 : SST39VF160_WordProg(unsigned int addr,unsigned short dat)
- 函数说明 : SST39VF160的写入函数
- 输入参数 : addr: 写入SST39VF160的地址.  dat:写入SST39VF160的数据.
- 输出参数 : 成功操作返回:1 否则:0
*************************************************************************************************************
*/
int SST39VF160_WordProg (unsigned int addr,unsigned short dat)
{
	Writeflash (0x5555,0xAA);
	Writeflash (0x2AAA,0x55);
	Writeflash (0x5555,0xA0);
	Writeflash (addr,dat);
	return(Waitfor_endofprg());	
}

/*
*************************************************************************************************************
- 函数名称 : SST39VF160_SectorErase(unsigned int sectorNum)
- 函数说明 : SST39VF160的扇区擦除函数
- 输入参数 : sectorNum:表示要擦除的扇区
- 输出参数 : 成功操作返回:1 否则:0
*************************************************************************************************************
*/
int SST39VF160_SectorErase(unsigned int sectorNum)
{
    if(sectorNum>=0 && sectorNum<SECTORNUM)
    {	   
	    Writeflash(0x5555,0xAA);
	    Writeflash(0x2AAA,0x55);
	    Writeflash(0x5555,0x80);
	    Writeflash(0x5555,0xAA);
	    Writeflash(0x2AAA,0x55);
	    Writeflash((sectorNum<<PERSECORLENSHIFT),0x30);
        return(Waitfor_endofprg());        
    }
    return 0;
}

/*
*************************************************************************************************************
- 函数名称 : SST39VF160_BlockErase(unsigned int blockNum)
- 函数说明 : SST39VF160的块擦除函数
- 输入参数 : blockNum:表示要擦除的块
- 输出参数 : 成功操作返回:1 否则:0
*************************************************************************************************************
*/
int SST39VF160_BlockErase(unsigned int blockNum)
{
    if(sectorNum>=0 && blockNumNum<BLOCKNUM)
    {	   
	    Writeflash(0x5555,0xAA);
	    Writeflash(0x2AAA,0x55);
	    Writeflash(0x5555,0x80);
	    Writeflash(0x5555,0xAA);
	    Writeflash(0x2AAA,0x55);
	    Writeflash((blockNum<<PERBLOCKLENSHIFT),0x50);
        return(Waitfor_endofprg());
    }
    return 0;
}
/*
*************************************************************************************************************
- 函数名称 : SST39VF160_ChipErase(void)
- 函数说明 : SST39VF160的整片擦除函数
- 输入参数 : 无
- 输出参数 : 成功操作返回:1 否则:0
*************************************************************************************************************
*/
int SST39VF160_ChipErase(void)
{
    if(sectorNum>=0 && sectorNum<SECTORNUM)
    {	   
	    Writeflash(0x5555,0xAA);
	    Writeflash(0x2AAA,0x55);
	    Writeflash(0x5555,0x80);
	    Writeflash(0x5555,0xAA);
	    Writeflash(0x2AAA,0x55);
	    Writeflash(0x5555,0x10);
        return(Waitfor_endofprg());
    }
    return 0;
}

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -