W25Q16在执行了擦除之后,不能立刻写,否则会出现多次写不进,我在擦除后面加了延时,就没有问题了,这是为什么?
我的擦除函数中增加了等待忙结束的标志,可是还得加延时,不知道为什么?
不能吧 忙标志写的有没有问题 确认一下 起作用了没有
我的就是等待完忙标志直接写的啊 没有问题的
void Flash_Sector_Erase(u32 addr)
{
u8 sadr1,sadr2,sadr3;
sadr1 = (addr & 0xff0000)>>16;
sadr2 = (addr & 0xff00)>>8;
sadr3 = addr & 0xff;
Flash_WaitforWriteEnd();
Flash_Write_EnorDis(ENABLE);//0x06
SPI2_Flash_CS_LOW();
SPI_FLASH_SendByte(SECTOR_ERASE);
SPI_FLASH_SendByte(sadr1);
SPI_FLASH_SendByte(sadr2);
SPI_FLASH_SendByte(sadr3);
SPI2_Flash_CS_HIGH();
Flash_WaitforWriteEnd();
}
void Flash_PagePro(u8 *Pdat,u32 addr,u16 Len)
{
u8 padr1,padr2,padr3;
u8 i;
padr1 = (addr & 0xff0000)>>16;
padr2 = (addr & 0xff00)>>8;
padr3 = addr & 0xff;
Flash_WaitforWriteEnd();
Flash_Write_EnorDis(ENABLE);
SPI2_Flash_CS_LOW();
SPI_FLASH_SendByte(PAGE_PROGRAM);//Ò³±à³Ì0x02
SPI_FLASH_SendByte(padr1);
SPI_FLASH_SendByte(padr2);
SPI_FLASH_SendByte(padr3);
for(i=0;i<Len;i++)
{
SPI_FLASH_SendByte(Pdat);
}
SPI2_Flash_CS_HIGH();
Flash_WaitforWriteEnd();
}
是这样的,代码你已贴在楼下了,你帮忙看看