资深版主
 
- 积分
- 12012
- 金钱
- 12012
- 注册时间
- 2013-9-10
- 在线时间
- 427 小时
|
发表于 2014-4-14 12:53:11
|
显示全部楼层
回复【楼主位】飏:
---------------------------------
你这操作有问题,没看到你等待芯片空闲的语句喔
我的擦除函数
void Flash_EraseSector(u32 Sectoradd,u8 ORD)
{
u8 ORD_temp;
if(ORD == 0x00)
{
Sectoradd *= 4096; //得到整个扇区的大小,4K
ORD_temp = W25Qxx_Erase_Sector4Kb;
}
if(ORD == 0x01)
{
Sectoradd *= 65536; //得到整个块的大小,32K/64K
ORD_temp = W25Qxx_Erase_Block64Kb;
}
Flash_WriteEnable(); //允许芯片写操作
Flash_Wait_Busy(); //芯片处于空闲状态下才执行擦除
SPI_FLASH_CS = 0; //选中Flash
Flash_SPI_WriteRead_Data(ORD_temp); //发送擦除指令
Flash_SPI_WriteRead_Data((u8)(Sectoradd >> 16)); //发送24bits地址
Flash_SPI_WriteRead_Data((u8)(Sectoradd >> 8));
Flash_SPI_WriteRead_Data((u8)Sectoradd);
SPI_FLASH_CS = 1; //释放芯片
Flash_Wait_Busy(); //等待扇区擦除完成
} |
|