简介 对于大多数基于 Flash 的系统而言,在最终产品安装之后,能够对固件进行更新,这一点非常重要。这称为在应用中编程 (IAP)。此应用笔记的目的就是为创建 IAP 应用程序提供通用指南。 STM32F10x 微控制器能够运行用户指定的固件,从而执行微控制器内置 Flash 的 IAP。借助这一特性,在重新编程过程中可以使用任意类型的通信协议(如 CAN、USART、USB、SPI 和 I2C 等)。, [: F6 U |* c6 u( o 本应用笔记介绍如何使用 STM32F10x 的 I2C 外设执行在应用中编程。第一步,将 Aardvark工具用作主机,向 STM32F10x 发送 IAP 命令。第二步,将另一 STM32F10x 微控制器用作主机,且该微控制器桥接 PC 与目标器件(USB/I2C 桥接器)。: g/ b4 g* U% O5 B3 t- ^3 B STM32F10x 用作 I2C 存储器,可通过 I2C/接口对其进行编程、擦除和读取。) W" Q" Q; w6 ?1 K/ }" ] 下面列出了开发过程中使用的 Aardvark 主机适配器版本:! q$ a L; G; [- K V! g+ C% D+ K ● 固件:Aardvark I2C/SPI Control Center v3.52 -2009.0130 ● 硬件:Aardvark I2C/SPI v3.0 . v& W$ K$ X1 V0 B $ Z/ @5 E5 Q" ?) O3 t 1 IAP 概述* M! ?$ A D( G$ E* z7 X+ s1 [6 l 1.1 原理 可以使用开发工具通过 JTAG 或 SWD 接口,把 IAP 驱动程序烧写到 Flash 的起始地址。此驱动程序使用 I2C,将文件从主机载入 STM32F10x 内部 Flash,然后执行该文件。% w" f0 c; ?, d2 M5 N 1.2 用户程序应满足的条件3 n% G- V, O ^) k0 b( H 将 IAP 应用程序加载到从 Flash 基址开始到 0x0800 0fff 的一段区域。因此,必须将用户应用程序加载到 0x0800 1000 地址以上的 Flash 高地址区域。& N @" I( {3 C& K x + _* v7 _1 {# {3 I( T 1.3 全局流程图3 V2 |: ^) l+ w9 C% U * z, D# }# C# r # S1 q; S2 p( b8 h) A7 \1 P; L% Z/ Q 5 X3 j4 F% ]) J1 ]& [" A" W5 A o 使用连接到按钮的引脚来选择跳转到用户应用程序还是执行用于重新编程的 IAP: ● 复位时,按下按钮将执行 IAP, ?' O! p0 J& g0 H ● 否则,跳转到用户程序 1.4 IAP 命令6 l0 }/ V' K) a1 D 1.4.1 读命令 读命令用于从 STM32 的 Flash 中读取数据,并且可以从用户存储空间的任意 Flash 地址开始读取。/ X: ]9 q" U0 k$ H8 z0 P0 X+ Z 6 l# q H% ?6 q& w; r- v 操作码的值为 OPC_READ 时,执行读命令。目标器件认为操作码之后由主机主器件发送的前四个字节为要从中读取数据的 Flash 地址。紧跟 Flash 地址之后的两个字节表示要读取的数据的大小(字节)。通过 SDA 线将 Flash 中的内容缓存到 I2C1_buffer_Tx,并按字节发送。! m- _; x7 F1 ^5 m+ F 1.4.2 写命令- N& }, z7 `9 ]1 y2 | 写命令用于向 STM32 Flash 写入数据,并且可以从用户存储空间的任意 Flash 地址开始写入。 5 Y$ ~1 p! F/ M! {0 j3 b 图 4. 写命令流程图 l& r/ x/ ~" h. h$ u3 B 操作码的值为 OPC_WREN 时,执行写命令。目标器件认为操作码之后由主机主器件发送的前四个字节为要写入数据的 Flash 地址。紧跟在 Flash 地址之后的两个字节表示要写入的数据的大小(字节)。将从主机主器件接收的 N 个字节缓存到 I2C1 Buffer Rx。写入数据前,要擦除相应 Flash 页。1 m, p2 \" L) A 0 j! z7 M# x7 x. K6 i/ j 1.4.3 擦除页命令 擦除页命令用于擦除用户存储空间中从任意 Flash 基址开始的页。对于中容量器件,可擦除页的数量在 0x0001 与 0x007B 之间(1 到 124 页);对于大容量器件,可擦除页的数量在0x0001 与 0x00FE 之间(1 到 254 页)。 " p1 e; U6 V4 F y% O5 `1 S' X; ^ $ ^- z# a$ Q* W+ n7 R% x 操作码的值为 OPC_ERPG 时,执行擦除页命令。目标器件认为操作码之后由主机主器件发送的前四个字节为 Flash 地址。紧跟在 Flash 地址之后的两个字节表示要擦除的页数。收到该地址和页数后,目标器件 STM32 将擦除相应的 Flash 页。6 J/ |/ F$ P9 r( o7 H2 C 3 E9 t$ L6 P+ T5 A 1.4.4 擦除用户存储空间命令 擦除用户存储空间命令可擦除用户存储空间中从 Flash 地址 0x0800 1000 开始即以上的所有页。: g3 V/ E$ ]( @+ n+ Y, F 3 e! L# O% Z3 n4 I) t ' ^6 s; x' k% N( A& `, K2 G 操作码的值为 OPC_ERUSM 时,执行擦除用户存储空间命令。顾名思义,此命令将擦除从Flash 基址 0x0800 1000(用户空间起始地址)及以上的所有页的内容。* u `! ?6 }, P- a0 W 2 F' H9 h- ^# @; ^0 A& `! d 1.4.5 转到用户代码命令, _7 {4 \2 \! N/ X 使用转到用户代码命令,可将程序跳转到用户代码。: s( P4 I' D3 e7 g 4 M2 x* z- T4 D$ h0 d4 Z 完整版请查看:附件 & K8 k9 z. l* B& w! N6 d |
STM32™ 在应用中编程通过 I²C 总线.pdf
下载935.43 KB, 下载次数: 1
基于STM32的BootLoader经验分享
基于STM32如何选择 S2-LP 的外部晶体经验分享
基于是STM32的BLE 设备地址经验分享
基于ToF传感器的3D手势识别
NUCLEO-U545RE-Q评测(2)运行环境建立
基于使用 STM32 TT 类型 IO 的注意事项经验分享
基于STM32使用Framebuffer_Analyzer工具调试图像显示
ST安全连接,护航工业物联网一路前行
基于STM32的TouchGFX 4.22解锁新功能经验分享
基于STM32的MPU子区经验分享