微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > FLASH存储-----NOR Flash

FLASH存储-----NOR Flash

时间:11-21 来源:互联网 点击:

void 29lv160db_EraseSector(int targetAddr)

{

printf("Sector Erase is started!\n");

_RESET();

_WR(0x555,0xaa);

_WR(0x2aa,0x55);

_WR(0x555,0x80);

_WR(0x555,0xaa);

_WR(0x2aa,0x55);

_WR(BADDR2WADDR(targetAddr),0x30);

return_WAIT(BADDR2WADDR(targetAddr);

}

图5Erase Operation

Int_WAIT(void)

{

unsigned int state,flashStatus,old;

old=_RD(BADDR2WADDR(0x0));

while(1)

{

flashStatus=_RD(BADDR2WADDR(0x0));

if( (old&0x40) == (flashStatus&0x40) )

break;

if( flashStatus&0x20 )

{

//printf("[DQ5=1:%x]\n",flashStatus);

old=_RD(BADDR2WADDR(0x0));

flashStatus=_RD(BADDR2WADDR(0x0));

if( (old&0x40) == (flashStatus&0x40) )

return 0;

else return 1;

}

//printf(".");

old=flashStatus;

}//printf("!\n");

return 1;

}

图6Toggle Bit Algorithm

以上的方法为查询数据线上的一个特定位Toggle位。此外还有2种检测方法,一种为提供额外的Busy信号,处理器通过不断查询Busy信号来得知Flash的擦除操作是否完成,一般较少应用;一种为查询Polling位。

3)NOR Flash的编程操作

int 29lv160db_ProgFlash(U32 realAddr,U16 data)

{

_WR(0x555,0xaa);

_WR(0x2aa,0x55);

_WR(0x555,0xa0);

_WR(BADDR2WADDR(realAddr),data);

return_WAIT(BADDR2WADDR(realAddr);

}

对擦除过的Flash进行编程比较简单,但仍然用到以上提到的查询算法,速度比较慢,一般为20uS,最长的达到500uS


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top