W25QXX 扇区擦除起始地址必须是4096的整数倍吗?

2020-01-07 19:26发布

如题~~

附:

/**
* @brief  擦除FLASH扇区
* @param  SectorAddr:要擦除的扇区地址
* @retval 无
*/
void SPI_FLASH_SectorErase(u32 SectorAddr)
{
    /* 发送FLASH写使能命令 */
    SPI_FLASH_WriteEnable();
    SPI_FLASH_WaitForWriteEnd();
    /* 擦除扇区 */
    /* 选择FLASH: CS低电平 */
    SPI_FLASH_CS_LOW();
    /* 发送扇区擦除指令*/
    SPI_FLASH_SendByte(W25X_SectorErase);
    /*发送擦除扇区地址的高位*/
    SPI_FLASH_SendByte((SectorAddr & 0xFF0000) >> 16);
    /* 发送擦除扇区地址的中位 */
    SPI_FLASH_SendByte((SectorAddr & 0xFF00) >> 8);
    /* 发送擦除扇区地址的低位 */
    SPI_FLASH_SendByte(SectorAddr & 0xFF);
    /* 停止信号 FLASH: CS 高电平 */
    SPI_FLASH_CS_HIGH();
    /* 等待擦除完毕*/
    SPI_FLASH_WaitForWriteEnd();
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
jiaowoxiaolu
1楼-- · 2020-01-07 22:54
 精彩回答 2  元偷偷看……
wye11083
2楼-- · 2020-01-07 23:11
jiaowoxiaolu 发表于 2018-11-20 15:27
不用,只要在扇区内就行,4096 和4500都是擦除同一个扇区

4500擦的是下一个扇区了。你边界都溢出了。
dadatou
3楼-- · 2020-01-07 23:14
W25QXX每扇区4096个字节,所以擦除时一般都是该扇区的首地址做为擦除该扇区的地址,但实际上好像擦除的地址属于哪个扇区,则擦除的就是哪个扇区。
dadatou
4楼-- · 2020-01-08 04:09
wye11083 发表于 2018-11-20 15:28
4500擦的是下一个扇区了。你边界都溢出了。

兄弟,你数学学得真好,0~4095擦除的都是第1扇区,4096~8191擦除的都是第2扇区,"4096和4500擦除的是同一个扇区"这个描述有什么问题?
prince2010
5楼-- · 2020-01-08 05:08
jiaowoxiaolu 发表于 2018-11-20 15:27
不用,只要在扇区内就行,4096 和4500都是擦除同一个扇区

块擦除应该也一样吧?
SUPER_CRJ
6楼-- · 2020-01-08 10:34
 精彩回答 2  元偷偷看……

一周热门 更多>