OpenEdv-开源电子网

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

例程中IAP升级那块的疑问 急求帮助

[复制链接]

27

主题

78

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
225
金钱
225
注册时间
2015-12-17
在线时间
44 小时
发表于 2016-5-5 10:23:20 | 显示全部楼层 |阅读模式
1金钱
没看明白这个函数
void iap_write_appbin(u32 appxaddr,u8 *appbuf,u32 appsize)
{
        u32 t;
        u16 i=0;
        u32 temp;
        u32 fwaddr=appxaddr;//μ±Ç°D′èëμÄμØÖ·
        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;//&#198;&#171;ò&#198;4&#184;&#246;×&#214;&#189;ú
                iapbuf[i++]=temp;            
                if(i==512)
                {
                        i=0;
                        STMFLASH_Write(fwaddr,iapbuf,512);
                        fwaddr+=2048;//&#198;&#171;ò&#198;2048  512*4=2048
                }
        }
        if(i)STMFLASH_Write(fwaddr,iapbuf,i);//&#189;&#171;×&#238;oóμ&#196;ò&#187;D&#169;&#196;úèY×&#214;&#189;úD′&#189;&#248;è¥.  
}




我想问每512个字往Flash里面写一次,执行第一次可以写进去,那以后的写不会把之前写进去的擦除吗?所在的扇区又是一个扇区 。有点不明白了  求解

最佳答案

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

使用道具 举报

13

主题

92

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1056
金钱
1056
注册时间
2015-5-12
在线时间
208 小时
发表于 2016-5-5 10:23:21 | 显示全部楼层
回复

使用道具 举报

27

主题

78

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
225
金钱
225
注册时间
2015-12-17
在线时间
44 小时
 楼主| 发表于 2016-5-6 09:46:50 | 显示全部楼层

en,地址增加了2K,但是有可能还在一个扇区,那不就在写的时候  不就把之前的擦出了吗?呵呵  求解  
回复

使用道具 举报

13

主题

92

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1056
金钱
1056
注册时间
2015-5-12
在线时间
208 小时
发表于 2016-5-6 11:07:10 | 显示全部楼层
guoxiaoyan 发表于 2016-5-6 09:46
en,地址增加了2K,但是有可能还在一个扇区,那不就在写的时候  不就把之前的擦出了吗?呵呵  求解

写之前如果扇区需要擦除就已经对整个扇区擦除了,所以地址增加了2k即使还在这个扇区,那么写入的时候也不会再次擦除
回复

使用道具 举报

4

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2013-10-31
在线时间
5 小时
发表于 2016-5-14 22:07:40 | 显示全部楼层
numbqq 发表于 2016-5-6 11:07
写之前如果扇区需要擦除就已经对整个扇区擦除了,所以地址增加了2k即使还在这个扇区,那么写入的时候也不 ...

flash写的函数中,在擦除前把整个扇区都读如BUF,然后再把整个扇区擦除,接着把要写入的部分写入BUF的对应位置。最后把整个BUF写入。所以不会数据丢失具体看STMFLASH_Write函数
好多问题不会呀。。。。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-27 06:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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