下面是一段擦除SECTOR的程序代码,FLASH型号是SST39VF160.
#define ROM_BASE 0
#define CMD_ADDR0 *((volatile U16 *)(0x5555*2+ROM_BASE)) #define CMD_ADDR1 *((volatile U16 *)(0x2aaa*2+ROM_BASE))
{
.................
CMD_ADDR0 = 0xaaaa; //line 1 CMD_ADDR1 = 0x5555; // line 2 CMD_ADDR0 = 0x8080; // line 3 CMD_ADDR0 = 0xaaaa; //line 4
CMD_ADDR1 = 0x5555; //line 5 *(volatile U16 *)sector = 0x3030; //line 6 while(1) //line 7 { U16 i; //line 8 i = *((volatile U16 *)sector)&0x40; //line 9 if(i!=*((volatile U16 *)sector)&0x40) //D6 == D6 continue; //line 11 if(*((volatile U16 *)sector)&0x80) //line 12 break; //D7 == 1 }
}
line 6 的具体含义应该是向sector地址所指的指针写数据,是将sector强制转换为指针型变量,指向unsinged int 型数据,即数据总线,也就是向相应的地址(sector)写数据(0x3030),可为什么程序执行到这句时,硬件就会复位呢?
但我将line 6 改为:
*(volatile U32 *)sector = 0x3030; //line 6 将U16 改为 U32
程序可以跑过?
再有while(1)循环里的语句是不是检测 FLASH 中改SECTOR 是否被擦除的语句?
这样检测,只是检测了sector首地址的 数据 的D7是否被擦,这样判断是不是有些不合理啊?
希望知道的帮忙指点一下,谢谢啦