在SPI_Flash_Write_NoCheck(SPI_FLASH_BUF,secpos*4096,4096);//写入整个扇区(擦除后的)
从secpos=WriteAddr/4096;应该可以知道
secpos =0,所以secpos*4096=0;
然后调用void SPI_Flash_Write_NoCheck(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite) {
u16 pageremain; //WriteAddr=0
pageremain=(256-WriteAddr%256); //单页剩余的字节数 每页有256个字节
if(NumByteToWrite<=pageremain) //计算后的值pageremain=0
pageremain=NumByteToWrite;//不大于256个字节
while(1)
{
SPI_Flash_Write_Page(pBuffer,WriteAddr,pageremain); //往一页中写入数据 最大为256字节
//单页剩余的字节数 pageremain=0
if(NumByteToWrite==pageremain)break;//写完了1页数据(256字节)
else //NumByteToWrite>pageremain //写的数据长度大于1页(256字节)
{
pBuffer+=pageremain; //pageremain=24
WriteAddr+=pageremain;
NumByteToWrite-=pageremain; //减去已经写入了的字节数
if(NumByteToWrite>256)pageremain=256; //一次可以写入256个字节
else pageremain=NumByteToWrite; //不够256个字节了
}
} //;
}
由secpos=WriteAddr/4096;应该可以知道 secpos =0,所以secpos*4096=0; pageremain=(256-WriteAddr%256)应该等于0吧 ;
SPI_Flash_Write_Page(pBuffer,WriteAddr,pageremain); 然后再调用这个
void SPI_Flash_Write_Page(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)
{ /*SPI_Flash_Write_Page(pBuffer,WriteAddr,pageremain)*/
//pageremain=0
//WriteAddr=0
//pBuffer=SPI_FLASH_BUF[4096] 保存将要发送的数据
u16 i; //W25X16有8192可编程页,每页256个字节
SPI_FLASH_Write_Enable(); //写使能
SPI_FLASH_CS=0; //使能器件
SPIx_ReadWriteByte(W25X_PageProgram); //发送写页命令
SPIx_ReadWriteByte((u8)((WriteAddr)>>16));
SPIx_ReadWriteByte((u8)((WriteAddr)>>8));
SPIx_ReadWriteByte((u8)WriteAddr); //发送24bit地址
for(i=0;i<NumByteToWrite;i++) //NumByteToWrite=0
SPIx_ReadWriteByte(pBuffer);//循环写入自己写入的数据 刚好写入一页的数据
SPI_FLASH_CS=1; //取消片选
SPI_Flash_Wait_Busy(); //等待写入结束
}
SPI_Flash_Write_Page(pBuffer,WriteAddr,pageremain); 由这可以得知
pageremain =0,
那还怎么执行这个呢?? for(i=0;i<NumByteToWrite;i++) //NumByteToWrite=0 SPIx_ReadWriteByte(pBuffer);//循环写入自己写入的数据 刚好写入一页的数据
|