OpenEdv-开源电子网

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

SPI地址 大问题 !!!!在线请求解答

[复制链接]

5

主题

12

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2019-6-27
在线时间
17 小时
发表于 2019-8-1 11:02:41 | 显示全部楼层 |阅读模式
2金钱
u32 FLASH_SIZE;
FLASH_SIZE=128*1024*1024;        //FLASH 大小为2M字节
这句源码是不是应该改成:FLASH_SIZE=16*1024*1024;        //FLASH 大小为16M字节
而且W25Q128芯片上的24位地址,应该是字节地址吧,不应该是位地址吧;

   W25QXX_Write((u8*)TEXT_Buffer,FLASH_SIZE-100,SIZE);   //从倒数第100个地址处开始,写入SIZE长度的数据
这句里面的FLASH_SIZE应该改成:FLASH_SIZE=16*1024*1024; 这种的字节地址吧




就像这个函数的第二个入口参数的大小明确说了是24位的地址  而不是128*1024*1024的27位地址吧【如下】


//写SPI FLASH  
//在指定地址开始写入指定长度的数据
//该函数带擦除操作!
//pBuffer:数据存储区
//WriteAddr:开始写入的地址(24bit)      
//NumByteToWrite:要写入的字节数(最大65535)   
u8 W25QXX_BUFFER[4096];   
void W25QXX_Write(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)   
{
u32 secpos;
u16 secoff;
u16 secremain;   
  u16 i;   
u8 * W25QXX_BUF;   
    W25QXX_BUF=W25QXX_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)
{
  W25QXX_Read(W25QXX_BUF,secpos*4096,4096);//读出整个扇区的内容
  for(i=0;i<secremain;i++)//校验数据
  {
   if(W25QXX_BUF[secoff+i]!=0XFF)break;//需要擦除     
  }
  if(i<secremain)//需要擦除
  {
   W25QXX_Erase_Sector(secpos);  //擦除这个扇区
   for(i=0;i<secremain;i++)      //复制
   {
    W25QXX_BUF[i+secoff]=pBuffer;   
   }
   W25QXX_Write_NoCheck(W25QXX_BUF,secpos*4096,4096);//写入整个扇区  

  }else W25QXX_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;  //下一个扇区可以写完了
  }  
};  
}




正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2019-8-2 02:27:18 | 显示全部楼层
我写错了,是32*1024*1024,这么多地址范围
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2020-3-11
在线时间
6 小时
发表于 2024-9-11 10:46:46 | 显示全部楼层
正点原子 发表于 2019-8-2 02:27
我写错了,是32*1024*1024,这么多地址范围

W25Q128应该是  FLASH_SIZE=16*1024*1024; 吧
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 06:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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