[STM32F1] 串口flash M25P128的问题

[复制链接]
2181|5
 楼主| poo12o 发表于 2017-5-9 08:17 | 显示全部楼层 |阅读模式
用SPI操作FLASH,读的时候正常,写和擦除之前发送写使能指令(WREN)然后检测状态寄存器(RDSR)就会检测到一直处于Write In Progress(WIP)标识 而且无法置位Write Enable Latch(WEL)
又出现类似问题的么或者这是什么原因造成的......会不会是芯片坏掉了
feelhyq 发表于 2017-5-9 08:57 | 显示全部楼层
通常 WP管脚和HLOD管脚拉高,读取状态寄存器的时候 最主要是去判断BUSY位,来获取Flash的状态
 楼主| poo12o 发表于 2017-5-9 09:16 | 显示全部楼层
feelhyq 发表于 2017-5-9 08:57
通常 WP管脚和HLOD管脚拉高,读取状态寄存器的时候 最主要是去判断BUSY位,来获取Flash的状态 ...

嗯 WP和HOLD一直是拉高的 然后发送写指令之前没有BUSY 一发送写使能指令就一直读到BUSY........
feelhyq 发表于 2017-5-9 10:03 | 显示全部楼层
发送 写使能指令之前 拉低片选, 发送写使能之后再拉高片选。  再拉低片选 发从CMD + 24bit Address + data
 楼主| poo12o 发表于 2017-5-9 11:36 | 显示全部楼层
feelhyq 发表于 2017-5-9 10:03
发送 写使能指令之前 拉低片选, 发送写使能之后再拉高片选。  再拉低片选 发从CMD + 24bit Address + data ...

对啊 是这样操作的啊
static void LOCAL_issueWRENCommand(SPI_MEM_InfoHandle hSPIMemInfo)
{
  Uint8 statusReg;
  
  SPI_enableCS(hSPIMemInfo->hSPIInfo);
  SPI_xferOneChar(hSPIMemInfo->hSPIInfo,SPI_MEM_CMD_RDSR);
  statusReg = SPI_xferOneChar(hSPIMemInfo->hSPIInfo,0x00);
  SPI_disableCS(hSPIMemInfo->hSPIInfo);

  // Issue write enable command
  SPI_enableCS(hSPIMemInfo->hSPIInfo);
  SPI_xferOneChar(hSPIMemInfo->hSPIInfo,SPI_MEM_CMD_WREN);
  SPI_disableCS(hSPIMemInfo->hSPIInfo);
  
  // Poll EEPROM Status to make sure Write Enable Latch has been set
  do
  {
    // Send Read Status Register Commeand  
    SPI_enableCS(hSPIMemInfo->hSPIInfo);
    SPI_xferOneChar(hSPIMemInfo->hSPIInfo,SPI_MEM_CMD_RDSR);
    statusReg = SPI_xferOneChar(hSPIMemInfo->hSPIInfo,0x00);
    SPI_disableCS(hSPIMemInfo->hSPIInfo);
  }
  while((statusReg & 0x3u) != 0x2);
}
candysnape 发表于 2017-5-9 14:06 | 显示全部楼层
写完之后关片选再打开
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

1

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