今天调试SPI程序,终于可以读写了,刚才看到帖子有人说重复往一个扇区写内容要先擦除,然后我就试了下往我刚才写的地址写个新的字符串,在写之前加入了扇区擦除函数,但是读出数据时不对了,如果往其他地址写内容则读出正确,说明擦除部分有问题,帮我看看哪里错了?主函数相关代码:
while(1)
{
KeyVal=KEY_Scan(0);
if(KeyVal==1)
{
Flash_SectorErase(FLASH_SIZE-4096);//写之前先擦除写过的扇区
LCD_ShowString(50,180,200,16,16,"Start Write W25Q64...");
Write_Flash((u8*)Test_Buff,FLASH_SIZE-50,SIZE);
}
if(KeyVal==3)
{
LCD_ShowString(50,180,200,16,16,"Start Read W25Q64...");
Read_Flash(temp,FLASH_SIZE-50,SIZE);
LCD_ShowString(50,220,200,16,16,temp);
LCD_ShowString(50,250,200,16,16,"Read W25Q64 Finished!");
}
}
我想问的是擦除函数的入口地址是要擦除的扇区的首地址吗?如果我要往最后一个扇区重写内容,是不是Flash_SectorErase(FLASH_SIZE-4096)?
扇区擦除函数
void Flash_SectorErase(u32 S_ADD)
{
F_CS=0;
Wait_Flash_Busy();
SPI_ReadWriteByte(W25X_WriteEnable);
SPI_ReadWriteByte(W25X_SectorErase);
SPI_ReadWriteByte((u8)(S_ADD>>16));
SPI_ReadWriteByte((u8)(S_ADD>>8));
SPI_ReadWriteByte((u8)S_ADD);
Wait_Flash_Busy();
F_CS=1;
}
|