W25Qxx可以覆盖存储,无需擦除后存储?? 自己做了实验,把战舰板 汉字显示的FLASH的写程序中的判断擦除 注释掉,第一次烧录程序因为w25qxx中都为空,所以可以写入字库,这肯定的,然后我按key-up键,发现字库依然能更新?我已经把w25qxx (flash)的写函数中的擦除程序段给注释掉了,第二进行字库更新不是w25qxx里面字库位置已经有数据,怎么没擦除还能写入字库信息呢??
void SPI_Flash_Write(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)
{
u32 secpos;
u16 secoff;
u16 secremain;
// u16 i;
secpos=WriteAddr/4096;//???????· 0~511 for w25x16
secoff=WriteAddr%4096;//??????????????
secremain=4096-secoff;//???????à?????ó??
if(NumByteToWrite<=secremain)secremain=NumByteToWrite;//???ó??4096??×???
while(1)
{
// SPI_Flash_Read(SPI_FLASH_BUF,secpos*4096,4096);//??????????????????
// for(i=0;i<secremain;i++)//???é????
// {
// if(SPI_FLASH_BUF[secoff+i]!=0XFF)break;//?è??????
// }
// if(i<secremain)//?è??????
// {
// SPI_Flash_Erase_Sector(secpos);//????????????
// for(i=0;i<secremain;i++) //????
// {
// SPI_FLASH_BUF[i+secoff]=pBuffer;
// }
// SPI_Flash_Write_NoCheck(SPI_FLASH_BUF,secpos*4096,4096);//????????????
// }else
SPI_Flash_Write_NoCheck(pBuffer,WriteAddr,secremain);//?????????????,?±?????????????à????.
if(NumByteToWrite==secremain)break;//?????á????
else//???????á??
{
secpos++;//???????·??1
secoff=0;//??????????0
pBuffer+=secremain; //????????
WriteAddr+=secremain;//?????·????
NumByteToWrite-=secremain; //×?????????
if(NumByteToWrite>4096)secremain=4096; //???????????????????ê
else secremain=NumByteToWrite; //?????????????????ê??
}
};
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>