初级会员

- 积分
- 76
- 金钱
- 76
- 注册时间
- 2016-8-5
- 在线时间
- 10 小时
|
1金钱
原子哥,我认为W25Q64写入数据函数有问题
u8 SPI_FLASH_BUF[4096];
void SPI_Flash_Write(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)
{
u32 secpos;
u16 secoff;
u16 secremain;
u16 i;
secpos=WriteAddr/4096;
secoff=WriteAddr%4096;
secremain=4096-secoff;
if(NumByteToWrite<=secremain)secremain=NumByteToWrite;
while(1)
{
SPI_Flash_Read(SPI_FLASH_BUF,secpos*4096,4096);
for(i=0;i<secremain;i++)
{
if(SPI_FLASH_BUF[secoff+i]!=0XFF)break;
}
if(i<secremain)
{
SPI_Flash_Erase_Sector(secpos);
for(i=0;i<secremain;i++)
{
SPI_FLASH_BUF[i+secoff]=pBuffer[i];
}
SPI_Flash_Write_NoCheck(SPI_FLASH_BUF,secpos*4096,4096);
}else SPI_Flash_Write_NoCheck(pBuffer,WriteAddr,secremain);.
if(NumByteToWrite==secremain)break;
else
{
secpos++;
secoff=0;
pBuffer+=secremain;
WriteAddr+=secremain;
NumByteToWrite-=secremain;
if(NumByteToWrite>4096)secremain=4096;
else secremain=NumByteToWrite;
}
}
}
这一段函数是例程里面W25Q64有检验写入数据源函数,其中
for(i=0;i<secremain;i++)
{
SPI_FLASH_BUF[i+secoff]=pBuffer[i];
}
当数据多余一个扇区剩余的字节数,在写入下一个扇区时,写入的数据pBuffer[i]重新指向了pBuffer[0],并没有接着上一次的数据
我理解对的吧?
|
|