//写SPI FLASH
//在指定地址开始写入指定长度的数据
//该函数带擦除操作!
//pBuffer:数据存储区
//WriteAddr:开始写入的地址(24bit)
//NumByteToWrite:要写入的字节数(最大65535)
u8 SPI_FLASH_BUFFER[4096];
void SPI_Flash_Write(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)
{
u32 secpos;
u16 secoff;
u16 secremain;
u16 i;
u8 * SPI_FLASH_BUF;
SPI_FLASH_BUF=SPI_FLASH_BUFFER;
secpos=WriteAddr/4096;//扇区地址
secoff=WriteAddr%4096;//在扇区内的偏移
secremain=4096-secoff;//扇区剩余空间大小
//printf("ad:%X,nb:%X\r\n",WriteAddr,NumByteToWrite);//测试用
if(NumByteToWrite<=secremain)secremain=NumByteToWrite;//不大于4096个字节
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;//需要擦除 ,<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + + + + ++ + + + ++ +
}
问题一;我标加号那一行 ,一直读数组来判断是否需要擦写,但是为什么要跟0xFF比较啊? 如果数组里没有0XFF但是有别的数据,不还是判断不出来么?
问题二;void SPI_Flash_Write(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)
这句(u8* pBuffer定义了一个指针叫做//pBuffer:数据存储区 这个数据存储区是在哪?,是个什么东东??
|