OpenEdv-开源电子网

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

取之于民用之于民--IAP,SD卡升级,奉献给大家,支持开源

  [复制链接]

11

主题

36

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2012-8-22
在线时间
0 小时
发表于 2012-11-10 11:34:36 | 显示全部楼层 |阅读模式
SD卡实现IAP升级。mini板中完美通过。

iap 功能其实很实用。

工作之前还不知道有iap这个东东,后来工作了。公司用的就是这技术,

每次发给客户的软件都是bin文件让客户升级MCU软件。

过程是这样的,给bin文件客户,放入sd卡中,开机,升级。

免除了拆卸机器,烧录MCU这样繁琐的过程,并且客户没有烧录器,可以挂在网上,然客户自行下载升级。

很方便,可是我公司却将iap功能打包了。看不见源码。

这技术我觊觎很久了。

有幸网络认识原子大哥,投身mini大营,有了一个研究平台,

并且大哥开源高水准的代码,让我获益匪浅。


SD卡读取应用程序,很爽不是。

嘎嘎。 代码是移植原子哥的。




 操作过程: 1、烧录bootloader中的HEX文件,作为引导程序

                2、将程序通过MDK 生成BIN文件(修改成stm32.bin)
                


              
                      fromelf.exe 是MDK自带的HEX->BIN 程序, 查看你们的MDK安装位置,自行改成fromelf.exe的路径
                3、修改程序烧录ROM的位置 
                     



                     0x5000之前装的是boderloader引导升级程序

                   4、修改向量表(跟ROM一致,一定要改)
                        


                    5、编译
                        将生成的STM32.bin 放入SD卡中插在MINI板上,开机就可以升级了。
                  

                    6、升级OK,直接进入应用程序。



程序思想:上电检测SD卡,FAT初始化,检查stm32.bin文件。OK,进入升级。否则进入应用程序。




升级成功,自动进入应用(该应用程序是原子哥的,就该了改ROM位置以及向量表)



            
iap例程中,两个应用都是原子哥的,仅仅改了ROM和向量表。。








bootloader.rar

417.33 KB, 下载次数: 8313

iap例程.rar

213.51 KB, 下载次数: 6997

成功的欲望强烈到一定程度的时候足够征服世界。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

36

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2012-8-22
在线时间
0 小时
 楼主| 发表于 2012-11-10 14:43:12 | 显示全部楼层
大家觉得好,回过头来。顶顶。
成功的欲望强烈到一定程度的时候足够征服世界。
回复 支持 1 反对 0

使用道具 举报

8

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
108
金钱
108
注册时间
2012-7-12
在线时间
0 小时
发表于 2012-11-10 13:51:04 | 显示全部楼层
楼主,真强!顶上去
回复 支持 反对

使用道具 举报

0

主题

23

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2011-3-5
在线时间
0 小时
发表于 2012-11-10 15:12:20 | 显示全部楼层
强!
回复 支持 反对

使用道具 举报

17

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
139
金钱
139
注册时间
2012-10-8
在线时间
8 小时
发表于 2012-11-10 15:50:59 | 显示全部楼层
就是需要这个谢谢了,,,
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2012-11-10 16:17:33 | 显示全部楼层
cool
回复 支持 反对

使用道具 举报

9

主题

95

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
286
金钱
286
注册时间
2012-3-19
在线时间
37 小时
发表于 2012-11-10 18:17:47 | 显示全部楼层
这个真心不错,还没用过,回去测试测试~~~
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2195
金钱
2195
注册时间
2012-2-8
在线时间
34 小时
发表于 2012-11-11 00:35:34 | 显示全部楼层
回复 支持 反对

使用道具 举报

22

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
226
金钱
226
注册时间
2012-3-11
在线时间
31 小时
发表于 2012-11-12 09:48:43 | 显示全部楼层
其实我觉得楼主用定义函数类型参数的方法让新手很难理解,楼主可以用一段汇编,设置好SP地址,PC地址,然后跳转过去,这样新手可能更好理解一点,我看到这个都晕了半天 typedef  void (*iapfun)(void);

个人观点,楼主勿怪

回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2195
金钱
2195
注册时间
2012-2-8
在线时间
34 小时
发表于 2012-11-12 10:38:26 | 显示全部楼层
C语言比汇编易懂多了

上面的定义是基本的函数指针啊
https://github.com/roxma
回复 支持 反对

使用道具 举报

259

主题

806

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1887
金钱
1887
注册时间
2012-10-28
在线时间
353 小时
发表于 2012-11-12 10:43:59 | 显示全部楼层
这个真心不错,还没用过,回去测试测试~~~
回复 支持 反对

使用道具 举报

11

主题

36

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2012-8-22
在线时间
0 小时
 楼主| 发表于 2012-11-12 10:58:55 | 显示全部楼层
回复【9楼】ma_hao123:
---------------------------------
函数指针。比较基础 。 typedef  void(*pVoid) (void) ; 这种写法是常见的,给你demo一个最基础的用法

定义一个函数指针    pVoid  pFunction;

void function(void)
{
    printf("xx");
}
pFunction=fuction; 

(*pFunciton)();







成功的欲望强烈到一定程度的时候足够征服世界。
回复 支持 反对

使用道具 举报

20

主题

111

帖子

2

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2011-10-18
在线时间
9 小时
发表于 2012-11-12 11:40:02 | 显示全部楼层

楼主请教一下,电脑怎么升级,也要存到SD卡吗?用什么样的接口啊,我不太懂多少 。
                                        

这个技术我也研究了很久,因为用ISP和JILING烧程序很不方便,产品做出去要留升级接口。 

?成功只是最后一小步的坚持!
回复 支持 反对

使用道具 举报

11

主题

36

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2012-8-22
在线时间
0 小时
 楼主| 发表于 2012-11-12 11:43:27 | 显示全部楼层
回复【13楼】suqingxiao:
---------------------------------
这是STM32升级。可以理解为直接烧录。但是跟烧录还是有区别的。
成功的欲望强烈到一定程度的时候足够征服世界。
回复 支持 反对

使用道具 举报

20

主题

111

帖子

2

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2011-10-18
在线时间
9 小时
发表于 2012-11-12 11:45:40 | 显示全部楼层
回复【14楼】强子:

回复【13楼】suqingxiao:
---------------------------------
这是STM32升级。可以理解为直接烧录。但是跟烧录还是有区别的。

---------------------------------
这个我有了解,我们以前就有产品是两个文件的,一个BOOTLOADER,一个是BIN,我看都是用ISP烧进去的。我自己也操作过。软件不记得了。
?成功只是最后一小步的坚持!
回复 支持 反对

使用道具 举报

11

主题

36

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2012-8-22
在线时间
0 小时
 楼主| 发表于 2012-11-12 11:53:21 | 显示全部楼层
回复【15楼】suqingxiao:
---------------------------------
bootloader 要用烧录器烧写。bin文件可以用SD卡。或者,通过串口发送。
串口发送是最简单的。说白了,单片机就是取应用CODE,两种方式得到CODE。串口接收、SD卡中读取。
最终将code写入指定地址的FLASH,然后通过指针跳转进入应用,进入应用main中执行,main本身就是一个死循环。向量偏移,堆栈初始化。
成功的欲望强烈到一定程度的时候足够征服世界。
回复 支持 反对

使用道具 举报

20

主题

111

帖子

2

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2011-10-18
在线时间
9 小时
发表于 2012-11-12 11:57:38 | 显示全部楼层

回复【16楼】强子:

回复【15楼】suqingxiao:
---------------------------------
bootloader 要用烧录器烧写。bin文件可以用SD卡。或者,通过串口发送。
串口发送是最简单的。说白了,单片机就是取应用CODE,两种方式得到CODE。串口接收、SD卡中读取。
最终将code写入指定地址的FLASH,然后通过指针跳转进入应用,进入应用main中执行,main本身就是一个死循环。向量偏移,堆栈初始化。

---------------------------------
是不是这样说,bootloader的HEX文件我可以用ISP烧进去,BIN文件通过串口发送给单片机,那BIN文件在电脑上用什么软件。是不是可以用mcuisp 软件
                                        

其实我现在用的ISP就是串口的两个IO口 

?成功只是最后一小步的坚持!
回复 支持 反对

使用道具 举报

11

主题

36

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2012-8-22
在线时间
0 小时
 楼主| 发表于 2012-11-12 12:01:49 | 显示全部楼层
回复【17楼】suqingxiao:
-------------------------------
正确。bin文件通过串口调试工具发送。但是代码得要改改。要加上串口那块。定义一个buffer。
原子哥。例程中是一次性接收,然后写flash。最好是一边收,一边写。波特率调慢点。毕竟没有数据校验。
成功的欲望强烈到一定程度的时候足够征服世界。
回复 支持 反对

使用道具 举报

53

主题

324

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2012-6-18
在线时间
7 小时
发表于 2012-11-12 12:02:47 | 显示全部楼层
学习 
回复 支持 反对

使用道具 举报

11

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2012-10-12
在线时间
3 小时
发表于 2012-11-12 13:45:12 | 显示全部楼层
非常好!赞一个~~~
新人求指导~~~
回复 支持 反对

使用道具 举报

3

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
133
金钱
133
注册时间
2012-10-28
在线时间
18 小时
发表于 2012-11-12 14:52:13 | 显示全部楼层
强哥 帮你顶个
聚集产生财富,见识决定命运。
回复 支持 反对

使用道具 举报

42

主题

568

帖子

0

精华

高级会员

Rank: 4

积分
783
金钱
783
注册时间
2010-12-19
在线时间
5 小时
发表于 2012-11-12 15:03:59 | 显示全部楼层
这个要MARK。

很实用!
一个上蹿下跳的猴子~~~
回复 支持 反对

使用道具 举报

3

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
172
金钱
172
注册时间
2012-10-17
在线时间
24 小时
发表于 2012-11-12 15:49:50 | 显示全部楼层
刚摸索结束开始生产,今天就有人发例程了。郁闷。。。早知道不搞了....
asdasd?
回复 支持 反对

使用道具 举报

19

主题

302

帖子

2

精华

高级会员

Rank: 4

积分
727
金钱
727
注册时间
2011-11-22
在线时间
10 小时
发表于 2012-11-13 11:26:48 | 显示全部楼层
顶,是必须的
世界如此美好,好好珍惜每一天吧!
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2012-10-22
在线时间
6 小时
发表于 2012-11-13 17:44:41 | 显示全部楼层
还没有搞出来  希望有更加详细的说明
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2012-10-22
在线时间
6 小时
发表于 2012-11-13 17:55:55 | 显示全部楼层
我可以下载了  但是怎么在97%的时候停止了  是配置有问题吗?
回复 支持 反对

使用道具 举报

12

主题

216

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2011-4-7
在线时间
3 小时
发表于 2012-11-13 17:58:09 | 显示全部楼层
这个方便收下 谢了
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2012-10-22
在线时间
6 小时
发表于 2012-11-13 18:06:21 | 显示全部楼层
这个下载完了后显示了100%后还需要继续下载吗?  我的会继续下载 并且停在54%处
回复 支持 反对

使用道具 举报

11

主题

36

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2012-8-22
在线时间
0 小时
 楼主| 发表于 2012-11-13 18:58:23 | 显示全部楼层
回复【28楼】陈正杰:
---------------------------------
不会继续下载。3s后直接进入应用程序。
成功的欲望强烈到一定程度的时候足够征服世界。
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
发表于 2012-11-14 15:44:25 | 显示全部楼层
强悍,果断借鉴
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
发表于 2012-11-14 16:03:08 | 显示全部楼层
楼主,上面那个size为神马不是0x1b000?还有8k空间呢?
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
发表于 2012-11-14 16:35:20 | 显示全部楼层
楼主,弱弱再问一下,直接hex文件不行?
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2012-10-27
在线时间
3 小时
发表于 2012-11-14 16:48:07 | 显示全部楼层
mark
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2012-11-14 18:16:40 | 显示全部楼层
回复【32楼】Tardis:
---------------------------------
HEX文件是不行的,除非你自己做解析,不过HEX貌似很好解析,之前了解过一点点,呵呵。你找找研究下,不难。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2195
金钱
2195
注册时间
2012-2-8
在线时间
34 小时
发表于 2012-11-14 18:34:46 | 显示全部楼层
要是能再开发个 USB 上位机更新,会更实在一些
很多设备都是这样更新的
https://github.com/roxma
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
发表于 2012-11-14 20:17:48 | 显示全部楼层
回复【34楼】正点原子:
---------------------------------
哦,原来这样的,bin是解释后的文件对不?
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
发表于 2012-11-14 20:18:15 | 显示全部楼层
回复【35楼】Pony279:
---------------------------------
不错,也用bootloader得啊,直接USB,上位机就用C#写。
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

27

主题

308

帖子

1

精华

高级会员

Rank: 4

积分
774
金钱
774
注册时间
2012-6-19
在线时间
19 小时
发表于 2012-11-15 11:39:56 | 显示全部楼层
楼主强大啊
回复 支持 反对

使用道具 举报

10

主题

66

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2011-1-15
在线时间
5 小时
发表于 2012-11-15 16:39:15 | 显示全部楼层
mark 一会试试 COOL!~
回复 支持 反对

使用道具 举报

25

主题

683

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1350
金钱
1350
注册时间
2012-4-25
在线时间
195 小时
发表于 2012-11-24 10:23:26 | 显示全部楼层
楼主把你代码改过了,就30多行代码 搞定一切,你写的太烦锁了,呵呵
1-1
回复 支持 反对

使用道具 举报

4

主题

13

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2012-10-20
在线时间
0 小时
发表于 2012-11-25 19:06:56 | 显示全部楼层
留名~~~学习~~~支持楼主
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2012-11-28
在线时间
1 小时
发表于 2012-11-28 17:15:29 | 显示全部楼层
谢谢分享。如果能把新Bootload放在原Bootload的位置的话,可能就不容易烧成砖头机了。
回复 支持 反对

使用道具 举报

2

主题

16

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2012-8-28
在线时间
0 小时
发表于 2012-12-26 09:06:39 | 显示全部楼层
哥们,遇到个非常奇怪的问题,一开始我自己写的SD 卡的IAP是可以正常的升级的,后来在BootLoader中使用了systick,mini板就在也不能正常IAP了,仿真结果为每次跳转到APP程序后都不会正常的执行。然后找到你的代码,我烧进去试了,现在情况一样,每次更新到99%就卡死了,在也不会正常工作。仿真发现也是最后一步跳转后不正常,何解?望高人回答?
回复 支持 反对

使用道具 举报

23

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
244
金钱
244
注册时间
2011-12-29
在线时间
1 小时
发表于 2012-12-26 13:11:37 | 显示全部楼层
顶 先收藏 过几天正好用
回复 支持 反对

使用道具 举报

2

主题

16

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2012-8-28
在线时间
0 小时
发表于 2012-12-26 14:27:21 | 显示全部楼层
丫的,终于搞定了,在使用IAP时候。如果用到了中断。在跳转到APP时必须把该中断关掉。否则运行不正常...
回复 支持 反对

使用道具 举报

2

主题

13

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2012-12-22
在线时间
1 小时
发表于 2012-12-26 21:26:18 | 显示全部楼层
今天用楼主的bootloader试了一下,我的程序bootloader跳转之后,没跑起来。试了开发板的例程,发现有的可以,综合例程也是跑不起来。不知道原因是什么?
回复 支持 反对

使用道具 举报

2

主题

13

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2012-12-22
在线时间
1 小时
发表于 2012-12-26 21:27:38 | 显示全部楼层
回复【40楼】mygod:
---------------------------------
能否发代码上来学习一下,支持开源
回复 支持 反对

使用道具 举报

33

主题

253

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
412
金钱
412
注册时间
2012-8-16
在线时间
0 小时
发表于 2013-3-19 16:12:20 | 显示全部楼层
不错,支持一下@@@
开源的世界,你可以做主!!
回复 支持 反对

使用道具 举报

7

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2012-7-11
在线时间
0 小时
发表于 2013-3-20 09:21:21 | 显示全部楼层
 这个我也搞过,只不过是在IAR下开发的,用串口升级应用在实际项目中,顺带说一句,BOOTLOAD跳转到应用程序之前要把所有中断关掉,比如定时器之类的,要不然会出现问题。
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2013-3-20
在线时间
11 小时
发表于 2013-3-20 11:26:10 | 显示全部楼层
标记。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-25 02:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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