W25M02G不能读写擦除

2019-07-20 23:31发布

本帖最后由 一号小鱼 于 2017-12-25 13:22 编辑

我的板子上用STM32F205驱动SPI FLASH W25M02G,现在可以正常读出flash 的ID,但是不能读写擦除,读了一下开机时候的寄存器值,如下图: 3个寄存器值 3个寄存器值
3个寄存器的解释
360截图20171225104846073.jpg
360截图20171225104906891.jpg
360截图20171225104917559.jpg
硬件上/WP接上拉。
问题1:SR1的Block Protect Bits (BP3, BP2, BP1, BP0, TB) 的这几个位开机就是1是正常的么?
问题2:我将这几个位清0后写入SR1,再回读是正常的0x00,但是进行一次读操作后又恢复到0x7C.这又是什么情况。
问题3:这种情况下,我对flash 进行ERASE,SR3得到的状态值0x04,
360截图20171225105632503.jpg
擦除失败?
问题4:如果是保护状态,按表说明,这个情况下FLASH应该是没有锁定的吧?我理解可有错?
360截图20171225105849105.jpg
大家帮忙看下

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
一号小鱼
2019-07-21 03:28
解决:原来是写FLASH寄存器的函数有问题,更正之后就可以了,[mw_shl_code=c,true]void SPI_NAND_SetSR(uint8_t sreg,UINT8 buftype)
{       
        /*!< Enable the write access to the FLASH */
        sFLASH_WriteEnable();
        /*!< Select the FLASH: Chip Select low */
        sFLASH_CS_LOW();
        /*!< Send "Read Status Register" instruction */
        sFLASH_SendByte(sFLASH_CMD_WRSR);
        /*!< Send Status Register addr */
        sFLASH_SendByte(sreg);
        sFLASH_SendByte(buftype);
        /*!< Deselect the FLASH: Chip Select high */
        sFLASH_CS_HIGH();
}
[/mw_shl_code]
开机初始化完成之后必须把SR1的保护位都清0才可以进行后续操作。

一周热门 更多>