OpenEdv-开源电子网

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

【求助】关于STM32的bootload升级设置地址问题请教

[复制链接]

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2013-9-20
在线时间
17 小时
发表于 2016-8-27 17:22:57 | 显示全部楼层 |阅读模式
1金钱
刚接触这个东西,新手请教几个问题,各位前辈指点一下,麻烦说详细一点,,,看了下原子哥的第五十二章 串口 IAP 实验 ,APP 程序 的IROM1为0X08010000 Size0X70000 (我认为的第一次更新程序),问题来了,

1.0X08000000--0X0800FFFF,这里面还保留了上一次的程序吗??

2.假如我要进行第二次,第三次更新程序, APP 程序 的IROM1怎么设置???


最佳答案

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

1:首先编写bootloader,然后把固件程序的地址设置到0x08001000,放4k的空间用来存放bootloader(bootloader必须小于4k,.map中查看bootloader大小,如果很小可以把空间设置小一些),固件比如是用SD卡更新或者串口都可以,将固件从SD卡到FLASH的0x08001000处开始复制,复制完成后设置一个标志位表示有新固件,或者SD卡中的固件名可以是版本号,bootloader启动读取SD卡发现SD卡的固件版本大于自身FLASH固件的版本就进行复制。 2 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

54

主题

372

帖子

0

精华

高级会员

Rank: 4

积分
979
金钱
979
注册时间
2016-6-15
在线时间
474 小时
发表于 2016-8-27 17:22:58 | 显示全部楼层
本帖最后由 shuaigew88 于 2016-8-27 18:13 编辑

1:首先编写bootloader,然后把固件程序的地址设置到0x08001000,放4k的空间用来存放bootloader(bootloader必须小于4k,.map中查看bootloader大小,如果很小可以把空间设置小一些),固件比如是用SD卡更新或者串口都可以,将固件从SD卡到FLASH的0x08001000处开始复制,复制完成后设置一个标志位表示有新固件,或者SD卡中的固件名可以是版本号,bootloader启动读取SD卡发现SD卡的固件版本大于自身FLASH固件的版本就进行复制。

2:复位系统,bootloader启动,启动后判断标志位有新的固件那么设置复位向量、中断向量、程序PC指针,系统就自己跳转至0x08001000处运行固件,如果没有标志那么等待用户SD卡存放固件或者串口接收固件。bootloader就是负责从SD卡或者从串口接收新的固件然后写入FLASH、设置复位向量、中断向量、程序入口,设置标志后重启系统。
3:没有第二或三次的概念,和第一次一样
回复

使用道具 举报

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2013-9-20
在线时间
17 小时
 楼主| 发表于 2016-8-27 19:05:11 | 显示全部楼层
shuaigew88 发表于 2016-8-27 17:53
1:首先编写bootloader,然后把固件程序的地址设置到0x08001000,放4k的空间用来存放bootloader(bootloader ...

首先非常感谢您的回答,可能是我表达的不够清晰,或者是我理解的还不够,我说详细一点,首先第一次我把程序下载进去,程序正常运行,好,我现在进行第一次升级,我把IROM1设为为0X08010000 Size0X70000,程序升级成功,正常运行,,现在到了我纠结的地方,我现在进行第二次升级,教程不是说,APP程序与前面运行的程序放的flash地址不能一样吧,可是第一次升级的时候已经把flash的地址用完了(可能这么说有误),因为上一次已经设置为0X08010000 Size0X70000,,这就是我纠结的地方,那我下次升级,岂不是没有地址可设置了,,麻烦解答一下,谢谢
回复

使用道具 举报

54

主题

372

帖子

0

精华

高级会员

Rank: 4

积分
979
金钱
979
注册时间
2016-6-15
在线时间
474 小时
发表于 2016-8-27 19:15:09 | 显示全部楼层
zengxun3424 发表于 2016-8-27 19:05
首先非常感谢您的回答,可能是我表达的不够清晰,或者是我理解的还不够,我说详细一点,首先第一次我把程 ...

实在是没明白你的疑问?首先程序是分为bootloader和固件两部分,bootloader是正常运行的启动程序地址:0x08000000,那么需要更新(固件)的程序地址是0x08001000,这个设置是KEIL中编译固件之前设置不是程序中设置,无论你是第二次还是第三次升级固件在编译的时候都是按照0x08001000的地址设置,表示固件的偏移地址是从0x08001000,然后bootloader复制新的固件都是要复制到0x08001000处,如果之前有固件那就直接覆盖,因为既然要更新那么之前的0x08001000处的程序已经没有意义了。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-8-28 23:50:48 | 显示全部楼层
zengxun3424 发表于 2016-8-27 19:05
首先非常感谢您的回答,可能是我表达的不够清晰,或者是我理解的还不够,我说详细一点,首先第一次我把程 ...

你重装系统,难道得装一次就添加一个硬盘?
那希捷,西数可就乐开花了。。。。

我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2013-9-20
在线时间
17 小时
 楼主| 发表于 2016-8-29 22:17:39 | 显示全部楼层
shuaigew88 发表于 2016-8-27 19:15
实在是没明白你的疑问?首先程序是分为bootloader和固件两部分,bootloader是正常运行的启动程序地址:0x0 ...

谢谢前辈指导,已经明白了,,是我理解错了
回复

使用道具 举报

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2013-9-20
在线时间
17 小时
 楼主| 发表于 2016-8-29 22:18:22 | 显示全部楼层
正点原子 发表于 2016-8-28 23:50
你重装系统,难道得装一次就添加一个硬盘?
那希捷,西数可就乐开花了。。。。

原子哥,见笑了,,新手,,理解的方向错了
回复

使用道具 举报

54

主题

372

帖子

0

精华

高级会员

Rank: 4

积分
979
金钱
979
注册时间
2016-6-15
在线时间
474 小时
发表于 2016-8-30 08:40:45 | 显示全部楼层
zengxun3424 发表于 2016-8-29 22:17
谢谢前辈指导,已经明白了,,是我理解错了

前辈不敢当,
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-30 14:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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