图
5 Erase Operation
/**************
如上图5所示,擦除操作时还要有一个关键的操作擦除查询算法,即等待flash擦除的过程,并返回擦除是否成功的结果。算法如右图6所示
****************/
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;
}

图6 Toggle Bit Algorithm
以上的方法为查询数据线上的一个特定位Toggle位。此外还有2种检测方法,一种为提供额外的Busy信号,处理器通过不断查询Busy信号来得知Flash的擦除操作是否完成,一般较少应用;一种为查询Polling位。
3) NOR Flash 的编程操作
int 29lv160db_ProgFlash(U32 realAddr,U16 data)
{
_WR(0x555,0xaa);
&nbs