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