在STM32L011上通过I2C接口实现IAP 1 J# _- @" X8 F1 T前言, m1 Y* x5 Z/ `. d- N 客户计划使用STM32L011xx开发一款光模块产品,需要MCU支持I2C接口下载代码。但STM32L011xx内部Bootloader没有支持I2C接口,所以需要我们使用IAP的方式来帮助客户实现该功能。/ i! ~5 o Q0 Y; C2 h# k4 B& U ( I0 _. n3 l' K: x& M 问题分析9 \; g6 ^/ u! |6 A8 V 3 K2 c% p3 r5 ~1 ^1 W% v+ J6 @ IAP代码大小 STM32L011xx只有8K-16K 字节的Flash容量,所以这个IAP的代码不能过大,否则就会将用户的应用程序空间压缩的过小。经过和客户沟通,最大IAP代码可以占用的空间为2K字节。 # y# a" ^8 y% R# o/ S8 m 开发模式选用 E5 Z# q+ m, x9 b 因为代码空间的限制(最多2K字节),所以我们只能使用直接写寄存器的开发方式。; r! z8 z6 o! M" d6 Q. \% e/ s3 }# f T6 \/ K( G. a" K& A 硬件结构 : J8 \# c) ^' Y' y3 x' K 8 {$ `- b5 I) \" s& @0 D5 z 代码结构 基本流程参考了我们的Bootloader by UART的结构。在上电的时候检查外部使能管脚的状态,如果是有效电平的话就进入到Bootloader模式,开启Bootloader程序的运行。在Bootloader程序中进行Flash内容的改写。最后,进入到烧写好的用户代码中运行。 注意事项- ^$ T! i* W" f5 x3 b4 p" q1 | 在使用寄存器开发中,需要注意几个地方。 1/在地址匹配中断中需要检查DIR的值以判断当前的状态是发送还是接收;0 G0 |5 @' \5 R: d4 _) E0 M 2/主要的任务是下载Code到Flash中,所以,I2C主要做的就是接收一个完整的数据包,这里以主机发送STOP事件为接收完成标志。 3/I2C的接收缓冲开的越大越好,但是由于代码的限制,以最小的数据量为准。4 d7 e+ t4 V. [$ U% V( T) C 4/STM32L011xx系列的Flash最小单元都是相等的(128Byte),所以在擦写的时候可以直接一个页一个页的写,降低了IAP代码的大小。 总结: 此IAP程序架构可以在整个STM32L011系列产品中直接应用,节省了客户下载应用代码的程序开发时间。占用的代码空间小于2K字节。 ; o6 T% W/ T; d 3 U% f) c7 g+ j# o/ q4 J2 N; N |
通过I2C接口实现IAP,IAP功能用起来真是方便,谢谢楼主分享。 |
以前用51芯片就用IAP功能,用起来真是方便。 |
正好在验证STM32L0XX IAP的可行性,很好的资料,感谢分享! |
正好在验证STM32L0XX IAP的可行性,很好的资料,感谢分享!! |
可以使用USB2XXX USB2IIC适配器来发送数据,写个PC程序就行了 |
正好在做STM32F030的I2C的IAP,借鉴下下 |
基于STM32L051使用CubeMX生成工程文件ST系列芯片通用经验分享
基于STM32L051开始添加需要的代码经验分享
STM32L051测试I2C协议设备的添加经验分享
基于STM32L051测试Flash和EEPROM的读写
基于STM32L051串口测试与Enocean模块通讯问题
基于STM32L0的EEPROM读写经验分享
基于STM32L0 ADC使用HAL库关于校准问题经验分享
【工程师笔记】汇总处
【经验之谈】基于STM32L053芯片使用STM32CUBE软件开发低功耗设备的经验分享
在 STM32L0 和 STM32L4 系列微控制器中使用 LPUART 使功耗最小