OpenEdv-开源电子网

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

STM32 探索者关于SD IAP升级的问题

[复制链接]

9

主题

25

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
423
金钱
423
注册时间
2018-5-29
在线时间
136 小时
发表于 2020-5-14 17:02:43 | 显示全部楼层 |阅读模式
1金钱
在使用SD卡升级时发现 小于100K 的时都可以正常运行(实验44 录音机实验),超过100K 就无法升级(实验45 视频播放器实验),且会把IAP破坏,查看map文件都是在正常地址内,但是地址检查过不了
if(((*(vu32*)(FLASH_APP1_ADDR+4))&0xFF000000)==0x08000000)
写完上面不为为真,进不去。
怀疑写flash 是有问题:
这是写flash
iapfun jump2app;
u32 iapbuf[512];  //2K字节缓存  
//appxaddr:应用程序的起始地址
//appbuf:应用程序CODE.
//appsize:应用程序大小(字节).
void iap_write_appbin(u32 appxaddr,u8 *appbuf,u32 appsize)
{
u32 t;
u16 i=0;
u32 temp;
u32 fwaddr=appxaddr;//当前写入的地址
u8 *dfu=appbuf;
for(t=0;t<appsize;t+=4)
{         
  temp=(u32)dfu[3]<<24;   
  temp|=(u32)dfu[2]<<16;   
  temp|=(u32)dfu[1]<<8;
  temp|=(u32)dfu[0];   
  dfu+=4;//偏移4个字节
  iapbuf[i++]=temp;     
  if(i==512)
  {
   i=0;
   STMFLASH_Write(fwaddr,iapbuf,512);
   //fwaddr+=2048;//偏移2048  512*4=2048
  }
}
if(i)
  STMFLASH_Write(fwaddr,iapbuf,i);//将最后的一些内容字节写进去.  
}

红色的是自己修改的
下面是
从SD卡里每次读2048字节,写入FLASH
//len=2048
while(1)
  {
    /* 每次读取2K的数据到内存缓冲区 */
    Res = f_read(&FileBin, Buffer, len, (UINT*)&Br);
    ReadLen = Br;
    ReceiveData += Br;    // 读取的总字节数
    if((Res) || (Br == 0))
      break;
  iap_write_appbin(Addrx,Buffer, ReadLen);
    Addrx += len;

  }

最佳答案

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

可以参照一下这个 http://www.openedv.com/forum.php?mod=viewthread&tid=65104&highlight=iap%2Bsd
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

71

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2016-1-5
在线时间
1 小时
发表于 2020-5-14 17:02:43 | 显示全部楼层
回复

使用道具 举报

4

主题

203

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
2936
金钱
2936
注册时间
2019-8-16
在线时间
317 小时
发表于 2020-5-14 17:02:44 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-1 02:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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