2812外扩flash问题
开发板上外扩SST39VF800 flash,映射在Zone 2,下面是芯片擦除程序,FlashStart指向Zone 2区起始地址,while中循环条件为i<5,这个5是怎么计算得来的?!还有++TimeOut>0x1000000,这个0x1000000又是怎么来的?!Uint16 ChipErase(void)
{
Uint32 i,Data;//要定义为32位,已更正
Uint32 TimeOut;
*(FlashStart + 0x5555) = 0xAAAA;
*(FlashStart + 0x2AAA) = 0x5555;
*(FlashStart + 0x5555) = 0x8080;
*(FlashStart + 0x5555) = 0xAAAA;
*(FlashStart + 0x2AAA) = 0x5555;
*(FlashStart + 0x5555) = 0x1010;
i = 0;
TimeOut = 0;
while(i<5)
{
Data = *(FlashStart +0x3FFFF);
if (Data == 0xFFFF) i++;
else i=0;
if ( ++TimeOut>0x1000000) return (TimeOutErr);
}
for (i=0;i<0x80000;i++) //共256K Words
{
Data = *(FlashStart + i);
if (Data !=0xFFFF) return (EraseErr);
}
return(EraseOK);
}
开发板上外扩SST39VF800 flash,上面是芯片擦除程while中循环条件为i<5,这个5是怎么计算得来的?!还有++TimeOut>0x1000000,这个0x1000000又是怎么来的?! 这个你要仔细看一下flash的数据手册了,我刚刚看了一下。这个i的值其实就是整个芯片总共包含了6个块。而TimeOut就是一个时间限定值。整个flash擦除所需要的最大时间是100ms,如果在100ms以后还没有擦除完成,就会判断有故障。 片擦出等待时间
从8M来计算 每个256k的话 不应该为5啊
页:
[1]