SPI flash 读,写,擦除等问题
flash的擦除一个扇区之后,这个扇区全部变成0xFF。这样和主机直接向从机写0xFF,这样写入从机flash的那个扇区也全部变成了0xFF。有什么区别?根据spi的操作...
flash的擦除一个扇区之后,这个扇区全部变成0xFF。这样和主机直接向从机写0xFF,这样写入从机flash的那个扇区也全部变成了0xFF。有什么区别?根据spi的操作,调用void SPI_Flash_Read(u8* pBuffer,u32ReadAddr,u16 NumByteToRead) 的时候,主机向从机不断发送0xFF,最后,从机内数据变成了0xFF,从机的数据,同时转移到了主机,被存到了pBuffer里面。调用下面这个函数的作用,怎么和擦除的效果一样。怎么理解?
void SPI_Flash_Read(u8* pBuffer,u32ReadAddr,u16 NumByteToRead)
{
u16 i;
SPI_FLASH_CS=0; //使能器件
SPI2_ReadWriteByte(W25X_ReadData); //发送读取命令
SPI2_ReadWriteByte((u8)((ReadAddr)>>16)); //发送24bit地址
SPI2_ReadWriteByte((u8)((ReadAddr)>>8));
SPI2_ReadWriteByte((u8)ReadAddr);
for(i=0;i<NumByteToRead;i++)
{
pBuffer[i]=SPI2_ReadWriteByte(0XFF); //循环读数 连续的读出来
}
SPI_FLASH_CS=1; //取消片选
} 展开
void SPI_Flash_Read(u8* pBuffer,u32ReadAddr,u16 NumByteToRead)
{
u16 i;
SPI_FLASH_CS=0; //使能器件
SPI2_ReadWriteByte(W25X_ReadData); //发送读取命令
SPI2_ReadWriteByte((u8)((ReadAddr)>>16)); //发送24bit地址
SPI2_ReadWriteByte((u8)((ReadAddr)>>8));
SPI2_ReadWriteByte((u8)ReadAddr);
for(i=0;i<NumByteToRead;i++)
{
pBuffer[i]=SPI2_ReadWriteByte(0XFF); //循环读数 连续的读出来
}
SPI_FLASH_CS=1; //取消片选
} 展开
展开全部
flash的擦除一个扇区,是把这个扇区全部变成0xFF。
flash的数据写,是在原数据为 0xFF 的前提写入新数据,
如果原数据为 0x00 就不能写入新数据,(只有擦除后才能 写入新数据)
flash的数据写,是在原数据为 0xFF 的前提写入新数据,
如果原数据为 0x00 就不能写入新数据,(只有擦除后才能 写入新数据)
追问
擦除和直接向扇区写0xFF效果那不是一样啦?都是将扇区变成0XFF,我很不解。
如果原数据为0x00,要写数据,在写新数据之前,我要判断原数据是否全为0XFF,我直接调用上图void SPI_Flash_Read(u8* pBuffer,u32ReadAddr,u16 NumByteToRead) 这个函数,把原数据读出来的,但是这个过程中就有向flash写0XFF的作用。不是和擦除的效果一样?
追答
如果原数据为0x00,要写数据0XFF是不可能的,必须先擦除后才能写新数据,
向扇区写0xFF是没有意义的,(这是flash的特性决定的)。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询