你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32 IAP在线升级的个人经验以及实现方法

[复制链接]
奔跑小蜗牛 发布时间:2015-1-5 15:40
[分享]基于Xmodem协议的嵌入式IAP编程的研究
+ a& y! p8 r, t2 I2 X& M& _# d1 l1 L9 {
[讨论]STM32 IAP GPRS远程升级方案
6 r; V  O) e5 P+ c: J. R" M% ^4 ?- G+ Q' \6 {& G6 b

% n) o2 |* q* b( ?7 T" n; nIAP是In Application Programming的首字母缩写,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。

; L( D7 q/ r& P! \/ `) P0 A: J" [; J$ ~
通常在用户需要实现IAP功能时,即用户程序运行中作自身的更新操作,需要在设计固件程序时编写两个项目代码,第一个项目程序不执行正常的功能操作,而只是通过某种通信管道(如USB、USART)接收程序或数据,执行对第二部分代码的更新;第二个项目代码才是真正的功能代码。这两部分项目代码都同时烧录在User Flash中,当芯片上电后,首先是第一个项目代码开始运行,它作如下操作:
$ e+ m. `6 z& [5 \2 k* u+ h; `) e1)检查是否需要对第二部分代码进行更新+ I6 I; b0 N* s0 K
2)如果不需要更新则转到4)
6 l! k7 a; ~( ^: O3)执行更新操作4 _, e( E8 ^. H. v: \& f( H
4)跳转到第二部分代码执行# Z. b# Q2 D1 `6 D/ S3 G1 i
; u# o5 P2 u( X6 c+ B
第一部分代码必须通过其它手段,如JTAG或ISP烧入;第二部分代码可以使用第一部分代码IAP功能烧入,也可以和第一部分代码一道烧入,以后需要程序更新是再通过第一部分IAP代码更新。
3 w9 Z2 Y+ ~- O5 |/ J) m3 @: t9 @  Q! ?
对于STM32来说,因为它的中断向量表位于程序存储器的最低地址区,为了使第一部分代码能够正确地响应中断,通常会安排第一部分代码处于Flash的开始区域,而第二部分代码紧随其后。# F5 U; j6 n; i, J; x6 D

) i% a3 u3 }0 T  D在第二部分代码开始执行时,首先需要把CPU的中断向量表映像到自己的向量表,然后再执行其他的操作。
3 N+ J  d/ c2 w5 x! @; z/ Y+ n$ ]
3 W0 v/ x+ x  y如果IAP程序被破坏,产品必须返厂才能重新烧写程序,这是很麻烦并且非常耗费时间和金钱的。针对这样的需求,STM32在对Flash区域实行读保护的同时,自动地对用户Flash区的开始4页设置为写保护,这样可以有效地保证IAP程序(第一部分代码)区域不会被意外地破坏。; }" n7 n+ K( f8 p3 W$ o2 S- M2 ^

; j5 W% j# \2 v5 o5 B+ i7 i
赞 收藏 6 评论8 发布时间:2015-1-5 15:40

举报

8个回答
JackieLaura 回答时间:2015-5-29 16:41:55
IAP在项目中应用不错。
stary666 回答时间:2015-6-2 09:53:41
我们也用了这个功能,都是指针
jacobfeng 回答时间:2015-6-3 12:54:02
楼主共享一下代码最好了
黑溱郎 回答时间:2015-6-3 17:58:38
结合例程代码讲解更好。
飞翔-396652 回答时间:2015-7-22 21:01:05
例程代码在哪里?
伸手碰阳光 回答时间:2015-7-28 20:17:18
很好啊。
xiaoyustm32 回答时间:2016-7-9 15:08:36
挺好的。
dearfar 回答时间:2017-2-8 14:08:00
还有下文吗?最好能断点续传

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版