打印
[STM32]

IAP如何实现,有几个地方想不通...

[复制链接]
2304|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
x11223y|  楼主 | 2013-9-30 11:16 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 x11223y 于 2013-9-30 11:18 编辑

最近在看IAP的东西,也在网上找了些资料,还是有些地方想不通,不知道怎么弄,有知道的请帮帮忙指点下;

方案:芯片用LPC17XX,目前没考虑外置flash的,只是把内存分成四个区,一个区间用作bootloader,一个用作有效程序标志,另外两个用来保存程序的;

Q1: BOOTLOADER里面的程序应该是在main之前就执行的,那么程序中的BOOTLOADER程序该如何写?功能大致应该是判断程序执行在哪个区间,并跳转到相应区间,这个bootloader程序是写在 .s 的启动文件里面吗,是用汇编写的?

Q2: 在程序中怎么把相应的程序写到相应的区间内,比如怎么把bootloader放到区间0  程序从区间2开始存放 ?

Q3: 测试怎么测试,只需要发送bin文件里面的数据?

Q4: 如果是使用外置flash的话,要在bootloader里把flash中的程序拷贝到内存去?

请各位了解的指点下,如果有参考例程提供更是感激不尽!

相关帖子

沙发
tangdengan| | 2013-9-30 11:21 | 只看该作者
本帖最后由 tangdengan 于 2013-9-30 11:24 编辑

IAP:在应用编程

你想要实现的是否是:可以远程或者本地升级

实现自身的一个升级操作。

这个有两个方案:
1.程序分为两个部分:根据标志位跳转到不同位置去执行;
2.两个独立的程序:只是存放的扇区不一样,BOOTLOADER在前,USERAPP在后,在BOOTLOADER执行后再跳转到USERAPP


对于远程升级这一类,一般都会在外部用一个存储器将下载的程序缓存起来,然后再通过BOOTLOADER和USERAPP的互写机制,将程序写入到MCU的内部FLASH中



如果有疑问,可以与我联系。

使用特权

评论回复
板凳
x11223y|  楼主 | 2013-9-30 11:24 | 只看该作者
tangdengan 发表于 2013-9-30 11:21
IAP:在应用编程

你想要实现的是否是:可以远程或者本地升级

是的,现在很多产品都需要这个功能,先学习,可是bootloader这种具体是怎么写的还不了解,也没看到例程不知道该怎么实现跳转那些的

使用特权

评论回复
地板
tangdengan| | 2013-9-30 11:28 | 只看该作者
x11223y 发表于 2013-9-30 11:24
是的,现在很多产品都需要这个功能,先学习,可是bootloader这种具体是怎么写的还不了解,也没看到例程不 ...

现在的架构一般是采用 BOOTLOADER+USERAPP的方式,两个是完全独立的程序
相互升级

BOOTLOADER写USERAPP
USERAPP写BOOTLOADER

外部FLASH用于进行数据存储备份

使用特权

评论回复
5
x11223y|  楼主 | 2013-9-30 11:30 | 只看该作者
tangdengan 发表于 2013-9-30 11:28
现在的架构一般是采用 BOOTLOADER+USERAPP的方式,两个是完全独立的程序
相互升级

可是对于单片机那些来说不会是独立的程序啊,独立的应该是使用系统结构的来说的吧

使用特权

评论回复
6
tangdengan| | 2013-9-30 11:32 | 只看该作者
BOOTLOADER要进行时钟,中断表等初始化
USERAPP同样要进行这些

都是独立的工程,完全可以理解为独立的程序,只是启动地址不一样而已

使用特权

评论回复
7
x11223y|  楼主 | 2013-9-30 12:59 | 只看该作者
tangdengan 发表于 2013-9-30 11:32
BOOTLOADER要进行时钟,中断表等初始化
USERAPP同样要进行这些

对于ARM3来说都是独立的?那这样如果升级的话不是很麻烦?没看到过独立的bootloader程序啊

使用特权

评论回复
8
x11223y|  楼主 | 2013-9-30 17:27 | 只看该作者
自己顶一下

使用特权

评论回复
9
zdhlixiang2006| | 2013-10-1 10:44 | 只看该作者
tangdengan 发表于 2013-9-30 11:32
BOOTLOADER要进行时钟,中断表等初始化
USERAPP同样要进行这些

核心东西是这些,但是怎么可靠稳定的实现 确实是个问题

使用特权

评论回复
10
tangdengan| | 2013-10-1 16:30 | 只看该作者
zdhlixiang2006 发表于 2013-10-1 10:44
核心东西是这些,但是怎么可靠稳定的实现 确实是个问题

是的,任何一个东西,要做好,做精,做产品化,都是需要经验的积累和磨砺才行。

使用特权

评论回复
11
NE5532| | 2013-10-2 18:30 | 只看该作者
对,楼主把IAP想复杂了,其实就是通过一段控制程序,把目标程序(其实就是HEX数据)写入到另一块FLASH去。因为FLASH不能边写边读,所以才有BOOT区的需求,至于怎么把那些NEX数据传递给单片机,就随你的便了。

PS:让原来的系统不停机,升级新系统才是麻烦的。

使用特权

评论回复
12
x11223y|  楼主 | 2013-10-8 09:17 | 只看该作者
NE5532 发表于 2013-10-2 18:30
对,楼主把IAP想复杂了,其实就是通过一段控制程序,把目标程序(其实就是HEX数据)写入到另一块FLASH去。 ...

现在就是不知道如何去写控制程序的,如果要写两个程序,还要规定扇区那些感觉无头绪

使用特权

评论回复
13
NE5532| | 2013-10-8 11:19 | 只看该作者
x11223y 发表于 2013-10-8 09:17
现在就是不知道如何去写控制程序的,如果要写两个程序,还要规定扇区那些感觉无头绪 ...

你就把程序当成一段要写入FLASH的数据就可以了,不用想成“两个程序”,所谓控制程序就是从单片机外部获取这些数据,比如从串口,然后写入到FLASH里。看问题看本质,别想复杂了。

使用特权

评论回复
14
x11223y|  楼主 | 2013-10-8 11:27 | 只看该作者
NE5532 发表于 2013-10-8 11:19
你就把程序当成一段要写入FLASH的数据就可以了,不用想成“两个程序”,所谓控制程序就是从单片机外部获 ...

写flash我看了,感觉是用IAP的接口函数写,这个不难...

我现在想不通的是不知道怎么去实现程序在flash中存放位置的定位问题,比如一个存储在扇区1~ 7,另一个存储在扇区9~ 15,bootloader应该是在main之前就运行的,那我该怎么实现程序的跳转那些...

原来写程序就是直接从main开始写,然后直接down进去就是了,也没有考虑过怎么存放的问题...

使用特权

评论回复
15
NE5532| | 2013-10-8 13:22 | 只看该作者
x11223y 发表于 2013-10-8 11:27
写flash我看了,感觉是用IAP的接口函数写,这个不难...

我现在想不通的是不知道怎么去实现程序在flash中 ...

那是因为C编译器帮你放好了,你偷懒了,所以现在需要补课,搜一下你用的编译器(估计是51的keil)里怎么定义程序存放地址,你就明白了。更自由的方式,可以用汇编来弄,但是难度高些。

使用特权

评论回复
16
x11223y|  楼主 | 2013-10-8 15:17 | 只看该作者
NE5532 发表于 2013-10-8 13:22
那是因为C编译器帮你放好了,你偷懒了,所以现在需要补课,搜一下你用的编译器(估计是51的keil)里怎么 ...

嗯,用的是keil,图中定义的应该是程序的存储位置,可是编译后是怎么体现的我就不知道了

bootloader应该是放在哪个位置?启动文件.S文件?

使用特权

评论回复
17
NE5532| | 2013-10-8 15:35 | 只看该作者
x11223y 发表于 2013-10-8 15:17
嗯,用的是keil,图中定义的应该是程序的存储位置,可是编译后是怎么体现的我就不知道了

bootloader应该 ...

不是这里,是在代码里指定。

使用特权

评论回复
18
x11223y|  楼主 | 2013-10-8 15:58 | 只看该作者
NE5532 发表于 2013-10-8 15:35
不是这里,是在代码里指定。

那我在找找看,一直都没有看到过这个

使用特权

评论回复
19
NE5532| | 2013-10-8 16:36 | 只看该作者
x11223y 发表于 2013-10-8 15:58
那我在找找看,一直都没有看到过这个

是上网搜。

使用特权

评论回复
20
NE5532| | 2013-10-8 16:40 | 只看该作者
闲来无事,已经帮你找到了。

http://haizhao328.blog.163.com/b ... 866200910214520368/

在Baidu里搜“Keil 代码 定位”

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

48

帖子

1

粉丝