EASYARM2200开发板不好擦除扇区<br /><br />/****************************************************************************<br />* 名称:ChipErase1()<br />* 功能:芯片扇区擦除。<br />* 入口参数:无<br />* 出口参数:返回TRUE表示操作成功,返回FALSE表示操作失败<br />****************************************************************************/<br />uint8 SectorChipErase(uint32 Addr) <br />{ volatile uint16 *ip;<br /> uint16 temp1,temp2;<br /><br /> ip = GetAddr(0x5555);<br /> ip[0] = 0xaaaa; // 第一个写周期,地址0x5555,数据0xAA<br /> ip = GetAddr(0x2aaa);<br /> ip[0] = 0x5555; // 第二个写周期,地址0x2aaa,数据0x55<br /> ip = GetAddr(0x5555);<br /> ip[0] = 0x8080; // 第三个写周期,地址0x5555,数据0x80<br /> ip = GetAddr(0x5555);<br /> ip[0] = 0xaaaa; // 第四个写周期,地址0x5555,数据0xAA<br /> ip = GetAddr(0x2aaa);<br /> ip[0] = 0x5555; // 第五个写周期,地址0x2aaa,数据0x55<br /> ip = (volatile uint16 *)(FLASH_ADDR|(Addr&0x1fffff));<br /> ip[0] = 0x3030; // 第六个写周期,地址0x5555,数据0x10<br /><br /> while (1) // 等待操作完成 (若擦除操作没有完成,每次读操作DQ6会跳变)<br /> { temp1 = *ip;<br /> temp2 = *ip;<br /> if (temp1 == temp2)<br /> { if (temp1 != 0xffff)<br /> { return(FALSE);<br /> }<br /> else<br /> { return(TRUE);<br /> }<br /> }<br /> }<br /> return(TRUE);<br />}<br /><br /><br />调用如下:<br /><br /> SectorChipErase(0x81000400);<br /><br /><br />请各位指点。<br /> |
|