OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2958|回复: 6

STM32 SPI 擦除sector扇区W25QXX_Wait_Busy()

[复制链接]

3

主题

11

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2019-6-4
在线时间
8 小时
发表于 2020-5-23 15:39:58 | 显示全部楼层 |阅读模式
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;                            //使能器件   
    SPI5_ReadWriteByte(W25X_SectorErase);   //发送扇区擦除指令
    if(W25QXX_TYPE==W25Q256)                //如果是W25Q256的话地址为4字节的,要发送最高8位
    {
        SPI5_ReadWriteByte((u8)((Dst_Addr)>>24));
    }
    SPI5_ReadWriteByte((u8)((Dst_Addr)>>16));  //发送24bit地址   
    SPI5_ReadWriteByte((u8)((Dst_Addr)>>8));   
    SPI5_ReadWriteByte((u8)Dst_Addr);  
W25QXX_CS=1;                            //取消片选            
    W25QXX_Wait_Busy();           //等待擦除完成
}

问题:为什么调用两次W25QXX_Wait_Busy()?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2018-12-27
在线时间
0 小时
发表于 2020-5-23 15:40:00 | 显示全部楼层
回复 支持 反对

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2019-6-4
在线时间
8 小时
 楼主| 发表于 2020-5-23 15:46:27 | 显示全部楼层
这个我猜测要读懂WQ25XX的芯片手册
回复 支持 反对

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2019-6-4
在线时间
8 小时
 楼主| 发表于 2020-5-23 15:50:37 | 显示全部楼层
BUSY is a read only bit in the status register (S0) that is set to a 1 state when the device is executing a Page Program, Sector Erase, Block Erase, Chip Erase or Write Status Register instruction. During this time the device will ignore further instructions except for the Read Status Register and Erase Suspend instruction (see tW, tPP, tSE, tBE, and tCE in AC Characteristics). When the program, erase or write status register instruction has completed, the BUSY bit will be cleared to a 0 state indicating the device is ready for further instructions.
BUSY是状态寄存器(S0)中的只读位,当设备执行页程序、扇区擦除、块擦除、芯片擦除或写入状态寄存器指令时,该位被设置为1状态。在此期间,设备将忽略除读取状态寄存器和擦除挂起指令以外的其他指令(请参阅交流特性中的tW、tPP、tSE、tBE和tCE)。当程序、擦除或写入状态寄存器指令完成时,忙碌位将被清除到0状态,指示设备已准备好接受进一步指令。
回复 支持 反对

使用道具 举报

22

主题

2251

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4477
金钱
4477
注册时间
2013-4-22
在线时间
336 小时
发表于 2020-5-23 17:28:00 | 显示全部楼层
第一次是等待空闲开始操作,第二次等待空闲交给后面进行操作,保证安全
回复 支持 反对

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2019-6-4
在线时间
8 小时
 楼主| 发表于 2020-5-23 19:19:41 | 显示全部楼层
三叶草 发表于 2020-5-23 17:28
第一次是等待空闲开始操作,第二次等待空闲交给后面进行操作,保证安全

当程序、擦除或写入状态寄存器指令完成时,忙碌位将被清除到0状态,指示设备已准备好接受进一步指令。
当执行这些指令时,busy是不是自动被清除了?所以当执行完指令后,需要再次将该位置1,以便再次执行指令?
回复 支持 反对

使用道具 举报

22

主题

2251

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4477
金钱
4477
注册时间
2013-4-22
在线时间
336 小时
发表于 2020-5-24 10:22:02 | 显示全部楼层
hyj1013 发表于 2020-5-23 19:19
当程序、擦除或写入状态寄存器指令完成时,忙碌位将被清除到0状态,指示设备已准备好接受进一步指令。
...

这个一般都是存储芯片自己置位的,你可以看下芯片手册关于忙闲的操作就更详细了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-1 18:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表