OpenEdv-开源电子网

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

STM32F4 SD卡IAP升级

  [复制链接]

2

主题

56

帖子

0

精华

高级会员

Rank: 4

积分
509
金钱
509
注册时间
2015-12-22
在线时间
85 小时
发表于 2015-12-25 17:03:36 | 显示全部楼层 |阅读模式
在嵌入式程序开发过程中,经常需要进行升级程序,升级程序的方法有很多种,今天和大家分享一下通过SD卡进行程序升级的方法。这种方法非常有实用价值,并且在实际工程得到了很好的应用,我把这种方法移植到原子哥的STM32F407开发板上,下面详细介绍下这种方法:

一、准备材料:
1,STM32F4开发板一个
2,SD卡一个

二、IAP简介:
IAP的主要作用是在用户程序运行过程中对Flash的部分区域进行烧写,实现的效果就是通过SD卡把不同的程序烧写到MCU中运行,具体介绍可以参考原子哥的《STM32F4开发指南》第五十五章,串口IAP实验那一节。

三、操作步骤:
1,把Bootloader程序下载到MCU中(程序见附件)
2,把App程序(.bin格式)文件放到SD卡根目录(注意文件名称要和Bootloader中设置的相同
3,进行升级(LCD上有提示,按下KEY_UP 键开始升级)
4,升级完毕自动跳转到新程序处开始执行(由于只是演示程序,所以芯片复位或重启会从Bootloader段程序开始执行)
下面对Bootloader段程序和App程序的设置进行介绍:
Bootloader程序:

在进行SD升级之前需要MCU中下载一段程序,这段程序的作用就是把SD卡中需要升级的文件写入到MCU中,而这段程序叫做Bootloader程序。需要升级的程序(固件)叫做App程序,这两段程序存在MCU的Flash中的两段不同的区域,他们之间的关系如下图:



需要注意的是:Bootloader程序只需往MCU中下载一次即可,不同的App程序可以通过Booyloader程序烧写到Flash中。

      Bootloader程序最重要的部分有两段,分别为通过SD卡读取要升级的App程序将读到的程序烧写到Flash中
      Bootloader程序在读取文件时要将数据暂存到一个数组中,然后在烧写到Flash中,所以每次读取的数据不能过大,否则占用太多空间,我每次读取2048Byte数据然后烧写到Flash中,再继续读取2048字节,在写入Flash,直到把所有数据都读取完并写入到Flash中。(最后一次读取的数据可能不足2048Byte),这就是SD卡进行程序升级的过程。

    res = f_open(&file_bin, "TEST.bin", FA_OPEN_EXISTING | FA_READ);//这句话是打开需要升级的固件,固件是bin格式的(下面会介绍如何转换成bin格式)

res = f_read(&file_bin, Receive_dat_buffer, STM_PAGE_SIZE, (UINT*)&br);//这句话是每次读取2048Byte数据(最后一次读取不一定为2048Byte)
iap_write_appbin(addrx,Receive_dat_buffer,readlen);//这个函数非常重要,主要作用是把每次读取的2048Byte数据写入到Flash中

程序烧写完毕,只需要跳转到新程序处开始执行即可,跳转代码为iap_load_app(FLASH_APP1_ADDR);

往STM32F4的Flash中写入数据使用的是STMFLASH_Write(u32 WriteAddr,u32 *pBuffer,u32 NumToWrite)这个函数,写入过程主要分4步,解锁、擦除、写入、上锁,其中在擦除过程中禁止数据缓存。

App程序设置:(原子哥的串口IAP实验里有详细过程,这里就简要说明下)
App程序的设置主要分三步:
1,原子哥的STM32F4开发板例程随便打开一个(我以RTC实验为例),由于App程序不能写在Bootloader程序的区域,所以要设置App程序的起始位置,以及程序的大小(App程序<Flash-Bootloader程序
2,得到一个App程序的.bin文件(通过fromelf.exe实现),我的MDK安装在C盘,这个根据你自己的安装位置进行修改
3,设置中断向量表的偏移量,在main函数的最开始处加入下面一句话即可SCB->VTOR = FLASH_BASE | 0x10000;
这三部设置完进行编译就可以在输出文件夹(OBJ文件夹)中找到生成的.bin文件,把这个文件放到SD卡根目录即可进行升级(注意文件名要和Bootloader中设置的相同,否则不能升级)

至此主要的操作步骤就介绍完了,本文介绍的主要是操作的方法,而没有具体介绍原理(可以参考原子哥的串口IAP实验)。升序升级过程中LCD上会有提示信息,如下图

Bootloader.rar

9.12 MB, 下载次数: 42813

RTC实时时钟实验APP.rar

4.63 MB, 下载次数: 1696

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

使用道具 举报

15

主题

786

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3223
金钱
3223
注册时间
2015-7-26
在线时间
811 小时
发表于 2015-12-25 19:51:55 | 显示全部楼层
之前论坛有人用mini实现了这个,现在又有个F4的,谢谢分享!
我的博客:http://blog.csdn.net/itdo_just
回复 支持 反对

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2015-12-25 21:05:03 | 显示全部楼层
不错,厉害,多谢分享
开往春天的手扶拖拉机
回复 支持 反对

使用道具 举报

8

主题

175

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
407
金钱
407
注册时间
2011-3-31
在线时间
51 小时
发表于 2015-12-25 22:41:44 | 显示全部楼层

不错,厉害,多谢分享
代开发智能楼宇对讲通讯、交直流无刷电机驱动、无功功率补偿器、电力仪表、电气火灾监控系统、(电梯远程监控、对讲通讯系统、TFT楼层显示)开发等。代理记账(限北京)联系方式:15300201607?shop65501025.taobao.com
回复 支持 反对

使用道具 举报

48

主题

208

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1371
金钱
1371
注册时间
2015-3-24
在线时间
190 小时
发表于 2016-1-11 22:44:51 | 显示全部楼层
MARK  !!!!
回复 支持 反对

使用道具 举报

8

主题

33

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2016-1-4
在线时间
30 小时
发表于 2016-1-11 23:28:17 | 显示全部楼层
赞!!!!!!!
回复 支持 反对

使用道具 举报

5

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2015-11-4
在线时间
10 小时
发表于 2016-1-12 10:14:27 | 显示全部楼层
谢谢,正需要使用
回复 支持 反对

使用道具 举报

18

主题

112

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
363
金钱
363
注册时间
2015-10-29
在线时间
49 小时
发表于 2016-1-19 17:50:17 | 显示全部楼层
好东西,感谢楼主分享!
回复 支持 反对

使用道具 举报

3

主题

548

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1383
金钱
1383
注册时间
2015-2-3
在线时间
197 小时
发表于 2016-1-28 17:27:18 | 显示全部楼层
正想实现这个功能呢,谢谢LZ
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
108
金钱
108
注册时间
2014-5-20
在线时间
23 小时
发表于 2016-6-15 16:46:47 | 显示全部楼层
非常感谢啊!帮了我一个大忙!
回复 支持 反对

使用道具 举报

6

主题

114

帖子

0

精华

初级会员

Rank: 2

积分
180
金钱
180
注册时间
2011-2-28
在线时间
8 小时
发表于 2016-8-18 17:49:49 | 显示全部楼层

谢谢
回复 支持 反对

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2016-3-27
在线时间
4 小时
发表于 2017-3-1 16:01:32 | 显示全部楼层
试验了下这个程序  没有运行  不能用啊
回复 支持 反对

使用道具 举报

2

主题

56

帖子

0

精华

高级会员

Rank: 4

积分
509
金钱
509
注册时间
2015-12-22
在线时间
85 小时
 楼主| 发表于 2017-3-1 16:35:14 | 显示全部楼层
work.hex 发表于 2017-3-1 16:01
试验了下这个程序  没有运行  不能用啊

这个程序我在项目中用过,可以用而且一直很稳定,你是出现什么问题了?
回复 支持 反对

使用道具 举报

24

主题

208

帖子

0

精华

高级会员

Rank: 4

积分
714
金钱
714
注册时间
2014-4-8
在线时间
160 小时
发表于 2017-3-1 16:47:30 | 显示全部楼层
文件下载校验失败
QQ截图20170301164842.png
回复 支持 反对

使用道具 举报

12

主题

55

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
209
金钱
209
注册时间
2012-2-17
在线时间
41 小时
发表于 2017-3-3 23:37:58 | 显示全部楼层
看起来没问题,不知道为什么,我用sd升级比较小的程序好像没问题,但是像400多K的程序,就hardfault了,不然就串口打印一串乱码,跑不起来。不知道怎么解释。。
。。
回复 支持 反对

使用道具 举报

68

主题

165

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2017-3-2
在线时间
156 小时
发表于 2017-3-4 10:23:03 | 显示全部楼层
一直想实现这个功能,终于有说这个的了,感谢~

另外我想问一下,如果我最终产品就想用这种方式来升级固件,那么那个bin文件和整个升级过程能保证代码不被窃取吗? 就是怎么实现 类似手机和MP3 MP4那种升级方式,直接拷贝文件到内部存储或sd卡中然后升级还能保证代码的保密性?
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2016-9-6
在线时间
7 小时
发表于 2017-3-9 14:06:52 | 显示全部楼层
求助啊,这个bootloader.rar一直无法下载....求一份邮件,alonestrive·sina.com 谢谢
回复 支持 反对

使用道具 举报

11

主题

99

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5266
金钱
5266
注册时间
2015-11-5
在线时间
681 小时
发表于 2017-3-13 18:36:39 | 显示全部楼层
学习了,非常感谢!!!
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2017-4-11
在线时间
3 小时
发表于 2017-4-11 17:39:36 | 显示全部楼层
有F3的嘛,谢谢
回复 支持 反对

使用道具 举报

2

主题

56

帖子

0

精华

高级会员

Rank: 4

积分
509
金钱
509
注册时间
2015-12-22
在线时间
85 小时
 楼主| 发表于 2017-4-20 09:31:46 | 显示全部楼层

没有F3的,不过思路和这个基本相同,可以参照的改下
回复 支持 反对

使用道具 举报

9

主题

91

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
421
金钱
421
注册时间
2017-4-26
在线时间
64 小时
发表于 2017-4-27 10:52:53 | 显示全部楼层
学习,学习
以我资质之驽钝,当平心静气、循序渐进、稳扎稳打,不辜负他人勉励。
回复 支持 反对

使用道具 举报

9

主题

91

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
421
金钱
421
注册时间
2017-4-26
在线时间
64 小时
发表于 2017-4-27 11:04:26 | 显示全部楼层
不错。看看怎么样
回复 支持 反对

使用道具 举报

2

主题

37

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2015-8-7
在线时间
53 小时
发表于 2017-4-27 21:09:23 | 显示全部楼层
kokoromi 发表于 2017-3-4 10:23
一直想实现这个功能,终于有说这个的了,感谢~

另外我想问一下,如果我最终产品就想用这种方式来升级固 ...

bin文件本来就是二进制文件了,还怎么可能知道你源码呢?
回复 支持 反对

使用道具 举报

68

主题

165

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2017-3-2
在线时间
156 小时
发表于 2017-5-5 10:20:02 | 显示全部楼层
walker_he 发表于 2017-4-27 21:09
bin文件本来就是二进制文件了,还怎么可能知道你源码呢?

不加密的话不会被还原为机器码进而反编译成源码吗?
回复 支持 反对

使用道具 举报

10

主题

14

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
237
金钱
237
注册时间
2015-1-14
在线时间
38 小时
发表于 2018-1-10 17:41:04 | 显示全部楼层
最近正在弄这个,谢谢分享!!
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
263
金钱
263
注册时间
2017-1-11
在线时间
64 小时
发表于 2018-4-7 21:17:17 | 显示全部楼层
自己搞了半天搞晕了,正需要这个参考一下,多谢分享!
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2018-3-5
在线时间
3 小时
发表于 2019-3-8 14:48:55 | 显示全部楼层
大神,膜拜
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2019-7-15
在线时间
9 小时
发表于 2019-8-1 20:00:34 | 显示全部楼层
您好  怎么下载不了
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2019-8-6
在线时间
2 小时
发表于 2019-8-6 14:50:07 | 显示全部楼层
可以  下来看看
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2019-5-16
在线时间
1 小时
发表于 2019-8-7 08:33:09 | 显示全部楼层
学习一下。想用U盘的升级。
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2019-5-16
在线时间
1 小时
发表于 2019-8-7 08:34:19 | 显示全部楼层
想用U盘升级,正好要学习。
回复 支持 反对

使用道具 举报

8

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
356
金钱
356
注册时间
2012-4-18
在线时间
76 小时
发表于 2019-8-8 12:00:11 | 显示全部楼层
学习下,感谢楼主
回复 支持 反对

使用道具 举报

4

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2017-12-1
在线时间
16 小时
发表于 2019-8-19 23:01:00 | 显示全部楼层
666666
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2019-9-7
在线时间
1 小时
发表于 2019-9-7 20:04:05 | 显示全部楼层
厉害了,学习学习。
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2019-9-7
在线时间
1 小时
发表于 2019-9-7 20:05:00 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

8

主题

63

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2497
金钱
2497
注册时间
2014-12-2
在线时间
210 小时
发表于 2019-9-16 13:29:15 | 显示全部楼层
好东西 值得分享
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
216
金钱
216
注册时间
2019-8-12
在线时间
23 小时
发表于 2019-9-17 10:05:12 | 显示全部楼层
非常好
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2019-5-18
在线时间
19 小时
发表于 2019-9-28 10:51:07 | 显示全部楼层
多谢楼主
回复 支持 反对

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2019-7-30
在线时间
13 小时
发表于 2019-9-29 22:12:15 | 显示全部楼层
楼主,请教下,怎么实现按下按键,更新完成后,每次上电,直接执行更新得程序
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2019-10-21
在线时间
11 小时
发表于 2019-11-6 20:27:26 | 显示全部楼层
,厉害,多谢分享
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2017-9-7
在线时间
3 小时
发表于 2019-11-14 08:19:52 | 显示全部楼层
正是我所需要的
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2019-8-31
在线时间
2 小时
发表于 2019-11-19 19:41:00 | 显示全部楼层
非常好
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2019-8-18
在线时间
6 小时
发表于 2019-11-30 20:07:37 | 显示全部楼层
MARK  !!!!
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2018-12-6
在线时间
17 小时
发表于 2019-12-9 11:24:19 | 显示全部楼层
11mark
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2019-8-16
在线时间
3 小时
发表于 2019-12-10 16:34:09 | 显示全部楼层
wjian 发表于 2019-8-7 08:34
想用U盘升级,正好要学习。

U盘升级有测试成功的没有
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2020-1-17
在线时间
2 小时
发表于 2020-1-18 13:21:55 | 显示全部楼层
附件无法读取怎么回事
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2019-8-16
在线时间
11 小时
发表于 2020-2-8 03:14:02 | 显示全部楼层
撒发大水发撒的发生
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2019-11-14
在线时间
9 小时
发表于 2020-2-29 18:14:49 | 显示全部楼层
正好要弄这个
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2019-9-27
在线时间
9 小时
发表于 2020-3-6 16:55:05 | 显示全部楼层
附件无法下载呀
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2019-5-24
在线时间
6 小时
发表于 2020-3-25 20:34:48 | 显示全部楼层
不错,厉害,多谢分享
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 09:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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