OpenEdv-开源电子网

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

STM32F407 通过SD卡升级程序的一些总结

[复制链接]

16

主题

216

帖子

1

精华

高级会员

Rank: 4

积分
970
金钱
970
注册时间
2016-11-24
在线时间
156 小时
发表于 2016-12-2 10:25:59 | 显示全部楼层 |阅读模式
用了几个月的STM32F407,目前完成了通过SD卡进行程序的升级功能,就是把一个需要烧写的bin文件放到SD卡里面,然后在bootloader程序里读出来并把bin文件烧写到指定的FLASH区域,并且让该程序运行。刚开始的时候走了很多弯路,第一个思路是像原子哥那样,通过把bin文件的内容复制到SRAM然后进行跳转运行,但后来仔细看了资料和他的程序,发现他的程序有限制,要在100k左右,太大了无法放得下,而且这个不是烧写到FLASH去运行,于是放弃这个思路。第二思路是把bin文件的内容复制到外部SRAM里面去,然后在外部SRAM里面运行时候,再把外部SRAM里面的bin内容给烧写到FLASH,相当于一开始从FLASH运行的程序跳转到外部SRAM去运行,然后通过外部SRAM运行的这个程序去把FLASH的内容给修改了,就是烧写新的程序。按照思路,在外部SRAM运行的程序是能够“独立”运行了,已经和FLASH没有关系,那时也能够对FLASH进行烧写,烧写地址是从0x8000000开始的,但烧写到16K以后就死掉了,就是整个程序都崩溃了。以为是在外部SRAM运行的程序不能把它自身的内容给复制出去,外部SRAM的程序存放地址是0x6800000,然后我又把0x6800000这个地址开始的数据复制出来烧写到FLASH去,有点像是一个人在跑步的时候把腿提起来给别人看一样,想想都觉得问题会出现在这里,使劲折腾验证了半天,发现不是这个问题,跑步的时候提起腿来给别人看居然没有“摔倒”~~~后来又去看了资料,发现所有运行的程序中断时都需要跑到FLASH的复位中断向量那里,但我都烧写到16K了,才跑出来折腾,这有点说不过去~~~反正到现在我也不知道是什么鬼在影响,哪位大神了解得可以解释解释。。。后来没办法了,只能换第三个思路,就是老老实实的写一个bootloader引导程序,然后把需要烧写的bin文件烧写到指定的FLASH里去。这个思路是通的,结果也是可以的。而且通过这种方式升级,速度比用FlyMcu.exe串口烧写的快很多很多。具体思路是通过修改原子哥第五十五章串口IAP实验里面的那个bootloader程序,把串口的那些功能全部去掉(串口升级的限制是120K左右,完全不够用啊,分包升级的方式感觉没什么思路也懒得动~~),把原子哥最后那个综合实验里面的 exeplay程序给移植进来,把打开SD卡进行选择文件升级直接给固定死成到SD卡里面的某个文件夹下面去找bin文件,比如在update文件夹下面找,目前只做了把一个bin文件放到这个文件夹下,然后直接升级,直接去掉人工选择的方式(人工选择的方式其实也挺好的,就是觉得固定死文件路径更加方便,避免麻烦)。在bootloader程序里面读到升级的标志位或者检测到按键按下,然后就去SD卡的update文件夹下读bin文件,并且把内容复制到外部SRAM(外部SRAM开辟了960K可以用来存这些数据),然后把从0x08010000到末尾的FLASH区域数据全部删除,再把外部SRAM的bin文件数据从0x08010000开始开始烧写进FLASH,烧写完成了,就把升级标志位清零,然后重启,重启时当然还是先从bootloader的程序开始运行,但判断到到标志位为0后以及0x08010000开始的数据不为FFFF则进行程序跳转。需要注意的是,用来升级的bin文件的起始地址要从0x08010000开始,设置好就可以了。现在还想通过网页传送bin文件的方式进行程序升级,可是网页方面没怎么接触,真希望有思路的大神能指导一二呀。至于这个SD卡升级的程序我就不敢贴出来献丑啦,现在加了网络的程序进去,基本上面目全非~~重要的SD卡升级程序部分还是有的,大神们也可以通过改改原子哥的程序来实现。其实SD卡升级在很多地方还是很有必要的,比如生产的时候,烧写好bootloader程序之后,插个有bin文件的SD卡进去升级就可以了,那速度真心快啊。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

26

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
384
金钱
384
注册时间
2016-8-2
在线时间
109 小时
发表于 2016-12-10 15:01:37 | 显示全部楼层
楼主分享例程吧,现在也在做类似的,想参考参考
回复 支持 反对

使用道具 举报

16

主题

216

帖子

1

精华

高级会员

Rank: 4

积分
970
金钱
970
注册时间
2016-11-24
在线时间
156 小时
 楼主| 发表于 2016-12-12 16:32:17 | 显示全部楼层
491603829 发表于 2016-12-10 15:01
楼主分享例程吧,现在也在做类似的,想参考参考

目前把网络的加进去之后,程序都是乱的,还没整理出来,想着把网络升级那个加进去之后到时再把程序贴上来
回复 支持 反对

使用道具 举报

4

主题

26

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
357
金钱
357
注册时间
2014-1-7
在线时间
62 小时
发表于 2016-12-12 20:42:21 | 显示全部楼层
强大啊
回复 支持 反对

使用道具 举报

16

主题

216

帖子

1

精华

高级会员

Rank: 4

积分
970
金钱
970
注册时间
2016-11-24
在线时间
156 小时
 楼主| 发表于 2016-12-13 10:33:41 | 显示全部楼层

都是在原子哥那些程序的基础上改的
回复 支持 反对

使用道具 举报

4

主题

290

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1130
金钱
1130
注册时间
2015-8-4
在线时间
107 小时
发表于 2016-12-13 17:32:43 | 显示全部楼层
开发板只是教你怎么用,但是要在产品上肯定还是要改的。MARK一个
回复 支持 反对

使用道具 举报

13

主题

37

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
216
金钱
216
注册时间
2016-11-3
在线时间
43 小时
发表于 2016-12-13 23:15:27 | 显示全部楼层
拜求大神分享,潤澤眾生,小弟已伏惟等著了 ......
回复 支持 反对

使用道具 举报

16

主题

216

帖子

1

精华

高级会员

Rank: 4

积分
970
金钱
970
注册时间
2016-11-24
在线时间
156 小时
 楼主| 发表于 2016-12-14 16:30:43 | 显示全部楼层
kingnike 发表于 2016-12-13 17:32
开发板只是教你怎么用,但是要在产品上肯定还是要改的。MARK一个

是的 ,很多东西都要自己学会了,然后进行修改
回复 支持 反对

使用道具 举报

16

主题

216

帖子

1

精华

高级会员

Rank: 4

积分
970
金钱
970
注册时间
2016-11-24
在线时间
156 小时
 楼主| 发表于 2016-12-14 16:31:12 | 显示全部楼层
puby 发表于 2016-12-13 23:15
拜求大神分享,潤澤眾生,小弟已伏惟等著了 ......

我重新发了个帖子,里面上传了源程序http://www.openedv.com/thread-90835-1-1.html
回复 支持 反对

使用道具 举报

16

主题

216

帖子

1

精华

高级会员

Rank: 4

积分
970
金钱
970
注册时间
2016-11-24
在线时间
156 小时
 楼主| 发表于 2016-12-14 16:31:51 | 显示全部楼层
491603829 发表于 2016-12-10 15:01
楼主分享例程吧,现在也在做类似的,想参考参考

我重新发了帖子,里面上传了整理好的源程序http://www.openedv.com/thread-90835-1-1.html
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-11 11:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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