数码之家

 找回密码
 立即注册
搜索
查看: 12026|回复: 17

[C51] SPI flash 只能读,擦写都不成功 什么原因?

[复制链接]
发表于 2020-5-24 09:17:38 | 显示全部楼层 |阅读模式
某宝买了几个型号:
W25Q128JVSQ,参考手册和正点原子的例程操作。可以读出FlashID与手册相同。但是擦写都不成功,使能写后读状态寄存器也由00变为02,写操作后读状态变为00. 没有busy状态。读出内容还是FF。求指点。

这个是调试串口输出信息:

Flash ID:0XEF17
JEDEC ID:0XEF4018
Status all:0X600200
chip_erase cost ms:1
Status after erase:0X600200
SPI_FLASH data addr=0~16:
//测试代码如下
SPI_Flash_Init();
print_hex("Flash ID:",SPI_Flash_ReadID());
print_hex("JEDEC ID:",flash_read_jedec_id());
print_hex("Status all:",flash_read_state_all());
ms_cnt = 0;
SPI_Flash_Erase_Chip();
print_num("chip_erase cost ms:",ms_cnt);
print_hex("Status after erase:",flash_read_state_all());
for(temp=0;temp<16;temp++)
{
  send.buf[temp]= temp;
}
flash_page_write(send.buf,0x0,0x0,16);
send_string("SPI_FLASH data addr=0~16:");
SPI_Flash_Read(send.buf,0x0,16);
send.end = 15;
send.cnt=0;
send.state = SEND_RUN;
SBUF = send.buf[send.cnt++];
//flash驱动如下
void flash_page_write(uint8 *pBuffer,uint16 page,uint8 addr,uint8 NumByteToWrite)
{
u8 i;
SPI_FLASH_Write_Enable();                  //SET WEL
SPI_FLASH_CS=0;                            //使能器件   
    SPI1_ReadWriteByte(W25X_PageProgram);      //发送写页命令   
    SPI1_ReadWriteByte(page>>8); //发送24bit地址   
    SPI1_ReadWriteByte(page);   
    SPI1_ReadWriteByte(addr);   
    for(i=0;i<NumByteToWrite;i++)SPI1_ReadWriteByte(pBuffer);//循环写数  
SPI_FLASH_CS=1;                            //取消片选
SPI1_ReadWriteByte(0xff); //延时8个时钟
SPI_Flash_Wait_Busy();        //等待写入结束
}




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
 楼主| 发表于 2020-5-24 09:22:09 | 显示全部楼层
根据手册状态寄存器第二个字节读出的是02, QE位使能了,也不知道为什么会是1,写0后读出来还是02. 手册上说不要在HOLD 和WP接地或电源时置1QE位,可是新买的ic读出来就这样,写0也清不掉。不知道什么问题
回复 支持 0 反对 1

使用道具 举报

发表于 2020-5-24 14:27:08 | 显示全部楼层
电路没错
检查一下SPI配置对不对吧
然后试一下chip erase指令
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-24 19:51:48 | 显示全部楼层
胡奚曷 发表于 2020-5-24 14:27
电路没错
检查一下SPI配置对不对吧
然后试一下chip erase指令

SPI配置应该正确,FlashID能读出来,状态寄存器也能读出数据。通讯肯定没问题。芯片擦除,扇区擦除指令都试了,没有效果。连执行事件都没有,执行后读状态就是0,没有busy过程。
回复 支持 1 反对 0

使用道具 举报

发表于 2020-5-24 22:08:35 | 显示全部楼层
芯片我也买了,不会玩
回复 支持 反对

使用道具 举报

发表于 2020-5-25 06:36:51 | 显示全部楼层
芯片察除了,数据就是FF.写个其他数据看看,在读出来:lol:
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-25 18:28:48 | 显示全部楼层
qq1329491328 发表于 2020-5-25 06:36
芯片察除了,数据就是FF.写个其他数据看看,在读出来

for(temp=0;temp<16;temp++)
{
  send.buf[temp]= temp;
}
flash_page_write(send.buf,0x0,0x0,16);
这段代码就是写0~15到地址0~15,然后再读出来打印全是0xFF
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-25 18:49:20 | 显示全部楼层
感谢各位关注,问题已经解决。换了一片flash就好了。运气这么好,第一片就踩雷了。
Flash ID:0XEF17
JEDEC ID:0XEF4018
Status all:0X600200
erase_sector=26
SPI_FLASH data addr=0~16:\0       

回复 支持 反对

使用道具 举报

发表于 2021-7-26 10:07:16 | 显示全部楼层
gym216 发表于 2020-5-25 18:49
感谢各位关注,问题已经解决。换了一片flash就好了。运气这么好,第一片就踩雷了。
Flash ID:0XEF17
JEDEC  ...

楼主,同样遇到一样的问题,但换了flash也无法解决,该怎么办(使用的是模拟SPI)
回复 支持 反对

使用道具 举报

发表于 2021-7-26 10:10:04 | 显示全部楼层
楼主,你写闪存中page和addr代表的参数是什么呀
回复 支持 反对

使用道具 举报

发表于 2021-7-26 15:58:14 | 显示全部楼层
本帖最后由 inthsunshine 于 2021-7-26 17:33 编辑

这个芯片(正品华邦)我用过. 读写擦除都没问题,自己写的DMA读写
回复 支持 反对

使用道具 举报

发表于 2021-7-27 09:33:12 | 显示全部楼层
inthsunshine 发表于 2021-7-26 15:58
这个芯片(正品华邦)我用过. 读写擦除都没问题,自己写的DMA读写

但的读写flashID正确,但擦除后读的数据的00,应该是擦除不成功,这是什么原因
回复 支持 反对

使用道具 举报

发表于 2021-7-27 10:23:31 | 显示全部楼层
本帖最后由 inthsunshine 于 2021-7-27 10:26 编辑
TGS. 发表于 2021-7-27 09:33
但的读写flashID正确,但擦除后读的数据的00,应该是擦除不成功,这是什么原因 ...

稳妥的步骤

1。检查状态寄存器1的BUSY位(命令05h), 为0表明可以进行下一次写或者擦除
2。打开写允许(命令06h), 写或者擦除之前都需要做的
3。擦除命令,比如扇区擦除20h,块擦除,全片擦除(C7h)
4。再次检查状态寄存器1的BUSY位,是否完成(这一步如果省掉,第1步就不能省)
不过目前我用的都是全片擦除:lol:,其他方式擦除没试过,估计也没问题吧, 用来录制44.1k/16bit音频,可以录制94秒,然后回放,来回折腾玩

回复 支持 反对

使用道具 举报

发表于 2021-7-27 20:10:16 | 显示全部楼层
曾经也被原子的代码误导,各种奇奇怪怪的问题,后来仔细看了芯片数据手册,根据数据手册重写了程序,再也没有出过问题。
回复 支持 反对

使用道具 举报

发表于 2024-4-9 10:24:28 | 显示全部楼层
TGS. 发表于 2021-7-26 10:07
楼主,同样遇到一样的问题,但换了flash也无法解决,该怎么办(使用的是模拟SPI) ...

我也是模拟的,只能读取id,但是读写貌似都不成功,擦除也没有擦除的动作,我用板上的flash,直接硬件spi可以正常读取,用外接的flash模拟不行,是什么原因呢
回复 支持 反对

使用道具 举报

发表于 2024-4-9 18:57:28 | 显示全部楼层
inthsunshine 发表于 2021-7-27 10:23
稳妥的步骤

1。检查状态寄存器1的BUSY位(命令05h), 为0表明可以进行下一次写或者擦除

正解!也感谢经验分享。
回复 支持 反对

使用道具 举报

发表于 2024-6-18 00:21:46 | 显示全部楼层
和楼主一样的问题,求解答
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-9 00:46 , Processed in 0.109200 second(s), 10 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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