初级会员

- 积分
- 95
- 金钱
- 95
- 注册时间
- 2012-12-13
- 在线时间
- 13 小时
|
1金钱
//擦除一个扇区
//Dst_Addr:扇区地址 根据实际容量设置
//擦除一个山区的最少时间:150ms
void W25QXX_Erase_Sector(u32 Dst_Addr)
{
//监视falsh擦除情况,测试用
printf("fe:%x\r\n",Dst_Addr);
Dst_Addr*=4096;
W25QXX_Write_Enable(); //SET WEL
W25QXX_Wait_Busy();
W25QXX_CS=0; //使能器件
SPI2_ReadWriteByte(W25X_SectorErase); //发送扇区擦除指令
SPI2_ReadWriteByte((u8)((Dst_Addr)>>16)); //发送24bit地址
SPI2_ReadWriteByte((u8)((Dst_Addr)>>8));
SPI2_ReadWriteByte((u8)Dst_Addr);
W25QXX_CS=1; //取消片选
W25QXX_Wait_Busy(); //等待擦除完成
}
此处地址Dst_Addr*=4096;不应该做任何处理,擦出的不是想要的区域,应该注释掉这句话。例如我使用w25q32,擦出0x00180000,这个只能擦除开头一个sector。
|
最佳答案
查看完整内容[请看2#楼]
注释已经说得很明白了,它的参数是扇区地址,你要想擦除0x00180000,应该传入的是0x180。当然,你要是根据你自己的理解改一下也没错。
|