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

【实战经验】在STM32L011上通过I2C接口实现IAP

[复制链接]
zero99 发布时间:2016-11-18 16:25
在STM32L011上通过I2C接口实现IAP
: J' |& l+ m. B

, h1 I3 F9 j$ |: @7 ^9 _" l9 a" T" Y前言
2 e9 O. b9 d8 v# Z, Z' O- k客户计划使用STM32L011xx开发一款光模块产品,需要MCU支持I2C接口下载代码。但STM32L011xx内部Bootloader没有支持I2C接口,所以需要我们使用IAP的方式来帮助客户实现该功能。/ p6 ]$ T5 y. g2 U7 b  f
: a1 H& D& m- q
5 y" ~8 m$ p) [4 }
问题分析
3 J& v- S1 U  w- r, p5 q+ l) L# z. O3 g6 w3 ], e! s% M+ r1 V- C& K& E
IAP代码大小
+ u3 `7 }% f7 i0 \STM32L011xx只有8K-16K 字节的Flash容量,所以这个IAP的代码不能过大,否则就会将用户的应用程序空间压缩的过小。经过和客户沟通,最大IAP代码可以占用的空间为2K字节。
  Q( m8 ?- ]. c( [2 D5 ]2 G
4 f$ F+ e' J1 m. S* k( ^/ y
& n) d6 l! A* v9 A3 z, L开发模式选用- E. a. G! ~; u* m% V3 I0 S2 V' J
因为代码空间的限制(最多2K字节),所以我们只能使用直接写寄存器的开发方式。
9 t- z6 l+ M& c6 z: M
1 l& r# b: C; z& I
, b3 i9 K" ^( c3 u: r硬件结构
& |8 U; b  v$ U/ h5 {8 z0 M
11.jpg
; G& D, I: m( q* w7 }8 R/ t6 R4 P1 Y1 j- ~! R
% Z) N) `' J' h3 D/ a
代码结构
1 [9 j! I4 w  x- v. ^; v! [基本流程参考了我们的Bootloader by UART的结构。在上电的时候检查外部使能管脚的状态,如果是有效电平的话就进入到Bootloader模式,开启Bootloader程序的运行。在Bootloader程序中进行Flash内容的改写。最后,进入到烧写好的用户代码中运行。7 ?& L6 ?" b$ }+ I4 z  w
12.jpg
) {2 H; @( q: ~- o. t/ t, i! k+ y: i! U' I& z% E- Q

% q& o6 z9 F; }+ S0 Q/ y注意事项0 @& X9 g0 O8 G, v, E* @# E. z
在使用寄存器开发中,需要注意几个地方。3 Y/ B- r" {- U8 w: B% d  y
1/在地址匹配中断中需要检查DIR的值以判断当前的状态是发送还是接收;* M( y' k2 J6 B  f) }
2/主要的任务是下载Code到Flash中,所以,I2C主要做的就是接收一个完整的数据包,这里以主机发送STOP事件为接收完成标志。: R3 ?2 f" Z8 m8 g2 }9 \! J2 e
3/I2C的接收缓冲开的越大越好,但是由于代码的限制,以最小的数据量为准。
; G; q( e5 J0 F7 H# @! _* a4/STM32L011xx系列的Flash最小单元都是相等的(128Byte),所以在擦写的时候可以直接一个页一个页的写,降低了IAP代码的大小。 总结: 此IAP程序架构可以在整个STM32L011系列产品中直接应用,节省了客户下载应用代码的程序开发时间。占用的代码空间小于2K字节。

3 t* J$ U; l* W$ U+ r4 x1 K6 m' A
0 C8 E# A4 \! C! `" P

. y; D; t+ a; x& \1 m5 p  q6 k% B4 s
: a$ I+ }1 A: ?# X/ y

3 l$ {0 {/ c5 d$ ~: g+ n 在STM32L011上通过I2C接口实现IAP.pdf (208.58 KB, 下载次数: 240)
收藏 3 评论7 发布时间:2016-11-18 16:25

举报

7个回答
samhong 回答时间:2016-12-1 10:33:41
通过I2C接口实现IAP,IAP功能用起来真是方便,谢谢楼主分享。
samhong 回答时间:2016-12-1 10:38:06
以前用51芯片就用IAP功能,用起来真是方便。
5265325 回答时间:2016-12-1 13:24:18
gary_ygl 回答时间:2017-1-10 10:24:02
正好在验证STM32L0XX IAP的可行性,很好的资料,感谢分享!
abcabc001-11100 回答时间:2018-5-13 00:08:45
正好在验证STM32L0XX IAP的可行性,很好的资料,感谢分享!!
wdluo 回答时间:2018-6-23 15:57:04
可以使用USB2XXX USB2IIC适配器来发送数据,写个PC程序就行了
asd7016 回答时间:2018-8-21 19:17:12
正好在做STM32F030的I2C的IAP,借鉴下下
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版