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

📄 flashrom.c

📁 包含s3c2440几乎所有测试程序代码
💻 C
字号:
#include "flashrom.h"
#include "def.h"


/*** Am29LV800D 检查是否为空 ***
 扇区的值若为oxFFFF则判断为空 ****/
int Am29LV800D_CheckBlank(U32 addr,U32 wordsize) //addr=0xf0000;wordsize=32Kword
{
	U32 i,temp;
	for (i=addr;i<(addr+wordsize*2);i+=2)   //word=16bit
	{
		temp=*((volatile U16 *)(i));
		if(temp!=0xffff)
		  return 0;
	}
	return 1;	
}


/****** Am29LV800D 的检测 ******/
int Waitfor_endofprg(void)
{
	volatile U16 flashStatus,old;
	old=*((volatile U16 *)0x0);

    while(1)
	{
	    flashStatus=*((volatile U16 *)0x0);
        if( (old&0x40) == (flashStatus&0x40) ) break;
        if( flashStatus&0x20 )  //DQ5
	    {
		    old=*((volatile U16 *)0x0);
		    flashStatus=*((volatile U16 *)0x0);
		    if( (old&0x40) == (flashStatus&0x40) )
		        return 0;
		    else return 1;
	    }
	    
	    old=flashStatus;
    }
   return 1;
}


/*** Am29LV800D 的写入操作,是一个word(16bit)写入的 ***/
int Am29LV800D_WordProg (U32 addr,U16 dat)//addr=0xf0000;data=0xaa55
{
	CMD_ADDR0 = 0xAA;
	CMD_ADDR1 = 0x55;
	CMD_ADDR0 = 0xA0;
    
    *((volatile U16 *)(addr)) = dat;
	return(Waitfor_endofprg());
}

/*** Am29LV800D 扇区擦除 ***/
void  Am29LV800D_SectorErase(U32 section_addr)//section_addr=0xf0000
{
	CMD_ADDR0 = 0xAA;
	CMD_ADDR1 = 0x55;
	CMD_ADDR0 = 0x80;
	CMD_ADDR0 = 0xAA;
	CMD_ADDR1 = 0x55;

	*((volatile U16 *)(section_addr)) = 0x30;
	Waitfor_endofprg();
	
}
/*** Am29LV800D读数据 ***/
U16 Am29LV800D_WordRead(U32 addr)//addr=0xf0000
{
	U16 data;
	data = *((volatile U16 *)(addr));
    return data;
}

/*** 读取 Am29LV800D 的ID ***/
U32  Get_Am29LV800D_ID(void)
{
	U32 i=0;
	
	CMD_ADDR0 = 0xaa;
	CMD_ADDR1 = 0x55;
	CMD_ADDR0 = 0x90;	
	i  = (*(U16 *)(0+flash_base))<<16;//Manufacturer ID = 01
	
	CMD_ADDR0 = 0xaa;
	CMD_ADDR1 = 0x55;
	CMD_ADDR0 = 0x90;	
	i |= *(U16 *)(2+flash_base);//device ID = 225B
	return i;
}

⌨️ 快捷键说明

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