OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6074|回复: 2

SPI读写FLASH的疑惑。

[复制链接]

13

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2014-2-23
在线时间
1 小时
发表于 2014-6-21 15:23:46 | 显示全部楼层 |阅读模式
5金钱

下边的程序是SPI2读写外部FLASH的实现过程。我看了无论是W25Q16还是25Q64的程序下边红色部分都是4096,就很不解了。

翻了PDF说25Q16是2M的,,那应该是2048啊,25Q64是8M的 应该是8192.


不知道有没有朋友知道下边程序红色部分的4096代表的是什么意思?求解释。。。。。。

//写SPI FLASH 
//在指定地址开始写入指定长度的数据
//该函数带擦除操作!
//pBuffer:数据存储区
//WriteAddr:开始写入的地址(24bit)      
//NumByteToWrite:要写入的字节数(最大65535)  
u8 SPI_FLASH_BUFFER[4096];  
void SPI_Flash_Write(u8* pBuffer,u32 WriteAddr,u32 NumByteToWrite)  
{
 u32 secpos;
 u32 secoff;
 u32 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;//需要擦除    
  }
  if(i<secremain)//需要擦除
  {
   SPI_Flash_Erase_Sector(secpos);//擦除这个扇区
   for(i=0;i<secremain;i++)    //复制
   {
    SPI_FLASH_BUF[i+secoff]=pBuffer;  
   }
   SPI_Flash_Write_NoCheck(SPI_FLASH_BUF,secpos*4096,4096);//写入整个扇区 

  }else SPI_Flash_Write_NoCheck(pBuffer,WriteAddr,secremain);//写已经擦除了的,直接写入扇区剩余区间.       
  if(NumByteToWrite==secremain)break;//写入结束了
  else//写入未结束
  {
   secpos++;//扇区地址增1
   secoff=0;//偏移位置为0  

      pBuffer+=secremain;  //指针偏移
   WriteAddr+=secremain;//写地址偏移   
      NumByteToWrite-=secremain;    //字节数递减
   if(NumByteToWrite>4096)secremain=4096; //下一个扇区还是写不完
   else secremain=NumByteToWrite;   //下一个扇区可以写完了
  } 
 }; 
}W25Q16

最佳答案

查看完整内容[请看2#楼]

都是一个扇区 4k字节
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

222

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
金钱
275
注册时间
2013-11-21
在线时间
0 小时
发表于 2014-6-21 15:23:47 | 显示全部楼层
回复

使用道具 举报

13

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2014-2-23
在线时间
1 小时
 楼主| 发表于 2014-6-21 16:09:52 | 显示全部楼层
回复【2楼】西门吹雪:
---------------------------------
谢谢点拨。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-7 02:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表