找回密码
 立即注册
查看: 104|回复: 13

【求助帖】串行FLASH整片擦除时执行到一半就停了

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:547
  • 最近打卡:2025-10-02 09:16:50
已绑定手机

58

主题

185

回帖

2079

积分

金牌会员

积分
2079
发表于 5 天前 | 显示全部楼层 |阅读模式
如图,为什么我的FLASH整片擦除到12%就停了,前面的读取ID和读取状态寄存器都没问题

截图202509282158165114.jpg
更新
最后原因是,必须得是这样写才行,不能用标志位去判断CDC接收到数据,必须得用bOutReady
截图202509291213335885.jpg


User_W25Q128.c

9.98 KB, 下载次数: 0

用尽STC单片机的资源是我的梦想
回复

使用道具 举报 送花

3

主题

1928

回帖

704

积分

等待验证会员

积分
704
发表于 4 天前 | 显示全部楼层
您好,关于您在使用串行FLASH进行整片擦除操作时,擦除进度停留在12%就停止的问题,结合您的描述(读取ID和状态寄存器正常),我们可以从以下几个方面进行分析和排查:

一、确认擦除命令是否正确发送

串行FLASH整片擦除通常使用Chip Erase(0x60或0xC7)命令。请确认:

1. 命令格式是否正确:是否按照数据手册要求,先发送写使能命令(Write Enable,0x06),再发送Chip Erase命令。
2. 命令发送时机是否正确:在发送Chip Erase之前,是否确认FLASH处于空闲状态(即状态寄存器的BUSY位为0)。
3. 是否启用了写使能锁存(WEL):多数FLASH在执行写或擦除前必须先发送Write Enable命令,否则会忽略擦除命令。

二、检查状态寄存器反馈

您提到读取状态寄存器没有问题,建议进一步确认以下内容:

1. 读取状态寄存器是否包含BUSY位:在擦除过程中,状态寄存器的BUSY位应为1。如果在擦除过程中读取到BUSY位为0,说明擦除操作可能被提前终止。
2. WEL位是否被正确置位:在发送Write Enable命令后,状态寄存器的WEL位应为1,否则擦除操作将被忽略。
3. 是否有错误标志位被置位:如EPE(Erase/Program Error)等,表示擦除过程中发生了错误。

三、擦除超时或中断

擦除操作通常需要较长时间(例如几十毫秒到几百毫秒不等),若主机在等待过程中判断超时或中途执行了其他操作(如复位、重启SPI通信、中断处理等),可能导致擦除过程被中断。

建议:
在擦除后持续轮询状态寄存器,直到BUSY位变为0。
增加合理的超时机制,避免死循环。
检查是否有中断服务程序干扰了SPI通信。

四、电源电压是否稳定

FLASH擦除操作对电源电压较为敏感,尤其是在大容量擦除时,瞬时电流较大。如果供电电压不稳定或低于FLASH的最低工作电压(通常为2.3V或2.7V),可能导致擦除失败。

建议:
使用万用表或示波器测量FLASH的VCC引脚电压。
检查电源滤波电容是否良好,是否有较大的电压波动。
如果使用电池供电,注意电池电量是否充足。

五、硬件连接问题

1. SPI通信是否稳定:检查SPI的SCLK、MOSI、CS等信号是否稳定,是否存在噪声或信号完整性问题。
2. CS(片选)信号是否被提前拉高:在擦除命令发送后,若CS信号提前拉高,可能导致命令未被完整接收。
3. FLASH芯片是否损坏:虽然读取ID正常,但部分区域损坏也可能导致擦除失败。可尝试更换FLASH芯片测试。

六、FLASH芯片型号与操作手册是否一致

不同厂商、不同型号的FLASH芯片,其擦除命令、擦除时间、状态寄存器定义可能不同。请确认:
您所使用的擦除命令是否适用于该型号FLASH。
是否存在特定的使能序列或解锁步骤(如需发送特定地址或序列才能执行整片擦除)。
是否存在保护机制(如写保护、扇区保护)未被解除。

七、建议的排查步骤总结

1. 确认擦除命令流程是否正确:
发送Write Enable(0x06)
发送Chip Erase(0x60或0xC7)
轮询状态寄存器,等待BUSY位为0

2. 检查状态寄存器反馈:
WEL是否为1
BUSY是否为1(擦除过程中)
是否有EPE或其他错误标志

3. 延长等待时间或增加超时机制

4. 测量电源电压和SPI信号质量

5. 尝试更换FLASH芯片进行测试

八、示例代码片段(伪代码)
  1. c
  2. void flashchiperase(void) {
  3.     flashwriteenable();        // 发送0x06命令
  4.     spisendcommand(0x60);      // 或0xC7,根据芯片手册
  5.     while(flashisbusy());      // 轮询状态寄存器,直到BUSY=0
  6. }
  7. uint8t flashisbusy(void) {
  8.     uint8t status;
  9.     spireadstatusregister(&status);
  10.     return (status & 0x01);      // BUSY位为1表示正在操作
  11. }
复制代码

结语

综上所述,擦除操作在12%处停止,很可能是由于命令未正确发送、擦除过程中断、电源不稳定或状态轮询不完整等原因导致。建议您按照上述排查步骤逐一验证,特别是检查擦除流程和状态寄存器反馈。

如能提供FLASH型号、使用的MCU型号以及部分代码或波形截图,将有助于更精确地定位问题。

祝您调试顺利!

[本文内容由国芯人工智能辅助生成,仅供参考]
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:39
  • 最近打卡:2025-09-29 08:33:41

14

主题

158

回帖

1827

积分

版主

积分
1827
发表于 4 天前 | 显示全部楼层
已转发工程师,请耐心等待哦
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:525
  • 最近打卡:2025-10-01 17:38:30
已绑定手机

46

主题

2246

回帖

7894

积分

论坛元老

积分
7894
发表于 4 天前 | 显示全部楼层
确保接线稳定可靠,避免受干扰,也要避免连接线太长导致信号衰减。
台式机接机箱背后的USB接口,尽量不要使用延长线。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:574
  • 最近打卡:2025-09-30 07:17:25
已绑定手机

86

主题

6208

回帖

1万

积分

超级版主

积分
11566
发表于 4 天前 | 显示全部楼层
多次试验能否稳定复现?
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:547
  • 最近打卡:2025-10-02 09:16:50
已绑定手机

58

主题

185

回帖

2079

积分

金牌会员

积分
2079
发表于 4 天前 | 显示全部楼层
yao眼*** 发表于 2025-9-29 06:34
已转发工程师,请耐心等待哦

梁工,救救我
用尽STC单片机的资源是我的梦想
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:547
  • 最近打卡:2025-10-02 09:16:50
已绑定手机

58

主题

185

回帖

2079

积分

金牌会员

积分
2079
发表于 4 天前 | 显示全部楼层
yao眼*** 发表于 2025-9-29 06:34
已转发工程师,请耐心等待哦

跟着论坛示例代码写的,写崩了
用尽STC单片机的资源是我的梦想
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:547
  • 最近打卡:2025-10-02 09:16:50
已绑定手机

58

主题

185

回帖

2079

积分

金牌会员

积分
2079
发表于 4 天前 | 显示全部楼层
国芯人*** 发表于 2025-9-28 22:03
您好,关于您在使用串行FLASH进行整片擦除操作时,擦除进度停留在12%就停止的问题,结合您的描述(读取ID和 ...

不行啊,你要是在擦除整片FLASH的代码加上,while(busy());会卡死的
用尽STC单片机的资源是我的梦想
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:547
  • 最近打卡:2025-10-02 09:16:50
已绑定手机

58

主题

185

回帖

2079

积分

金牌会员

积分
2079
发表于 4 天前 | 显示全部楼层
乘风*** 发表于 2025-9-29 07:13
确保接线稳定可靠,避免受干扰,也要避免连接线太长导致信号衰减。
台式机接机箱背后的USB接口,尽量不要使 ...

我用例程试了,可以擦除,但是我的就不行,我写的不用串行FLASH工具时,能够稳定运行
用尽STC单片机的资源是我的梦想
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:547
  • 最近打卡:2025-10-02 09:16:50
已绑定手机

58

主题

185

回帖

2079

积分

金牌会员

积分
2079
发表于 4 天前 | 显示全部楼层
Debu*** 发表于 2025-9-29 07:28
多次试验能否稳定复现?

不行的

点评

不能稳定复现,例程可以擦除,自己写的不能 对比一下和例程有什么区别,可以使用逻辑分析仪测量信号对比一下  详情 回复 发表于 4 天前
用尽STC单片机的资源是我的梦想
回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-10-3 08:52 , Processed in 0.120777 second(s), 100 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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