[STM8] 使用STM8L作为主控,通过SPI接口连接W25Q32,擦除不掉数据,也无法写入数据的问题

[复制链接]
4074|7
 楼主| hegll 发表于 2017-8-10 14:31 | 显示全部楼层 |阅读模式
请教大家呀,这个问题困扰好多天了,什么办法都尝试过了,还是没解决,现在把问题发出来,不吝赐教!
测试过程中,由于产品经常上下电,可能是上下电导致 w25Q32,什么地方改变了??

具体情况如下:
产品中使用STM8L作为主控,通过SPI接口连接W25Q32(4MB) NorFlash,使用方式是将W25Q32(4MB)划分空间存储不同的数据。
使用过程中出现擦除不了数据的情况,猜测可能由于芯片被锁住。但是擦除前进行解锁,效果还是不正常......
附上擦写和解锁的代码:

/*******************************************************************************
****函数名称:
****函数功能:芯片擦除
****版本:V1.0
****日期:14-2-2014
****入口参数:无
****出口参数:无
****说明:
********************************************************************************/
void SPI_Flash_EraseChip(void)
{
  
  SPI_FLASH_WriteEnable();
  /* Select the FLASH: Chip Select low */
  SPI_FLASH_CS_LOW();

  /* Send "Write Enable" instruction */
  SPI_FLASH_SendByte(CE);

  /* Deselect the FLASH: Chip Select high */
  SPI_FLASH_CS_HIGH();
  
  SPI_FLASH_WaitForWriteEnd();
}

unsigned char SPI_FLASH_Unlock(void)
{
  unsigned char Device_ID = 0;
  SPI_FLASH_CS_LOW();
  SPI_FLASH_SendByte(0xAB);
  SPI_FLASH_SendByte(0X00);
  SPI_FLASH_SendByte(0X00);
  SPI_FLASH_SendByte(0X00);
  Device_ID=SPI_FLASH_SendByte(Dummy_Byte);
  SPI_FLASH_CS_HIGH();
  SPI_FLASH_CS_LOW();
  SPI_FLASH_SendByte(0X06);
  SPI_FLASH_CS_HIGH();
  SPI_FLASH_CS_LOW();
  SPI_FLASH_SendByte(0X01);
  SPI_FLASH_SendByte(0X00);
  SPI_FLASH_CS_HIGH();
  return Device_ID;
}
 楼主| hegll 发表于 2017-8-10 14:59 | 显示全部楼层
自己顶一下。
feelhyq 发表于 2017-8-10 15:33 | 显示全部楼层
本帖最后由 feelhyq 于 2017-8-10 16:33 编辑

  
mmuuss586 发表于 2017-8-10 16:38 | 显示全部楼层
删除后,再读出来看看;
没有删掉的继续删除;
 楼主| hegll 发表于 2017-8-10 19:18 | 显示全部楼层
就是删不掉呀
jekey 发表于 2017-8-10 22:51 | 显示全部楼层
整个芯片擦除很耗时的,确认等待的时间足够!
lin_strong 发表于 2017-8-11 10:46 | 显示全部楼层
1.有可能是没有解锁成功,所以擦除不了,可以写状态寄存器,具体操作可以参考
Status Register Memory Protection (WPS = 1, CMP = 0)
Status Register Memory Protection (WPS = 0, CMP = 1)
这两个表格,根据你的需求解锁哪些块
crystal1987 发表于 2017-8-11 13:15 | 显示全部楼层
SPI一般要注意时序。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

5

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部