请选择 进入手机版 | 继续访问电脑版

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

STM32™ 在应用中编程通过 I²C 总线

[复制链接]
STMCU小助手 发布时间:2022-12-5 23:00
简介
9 X  e: u% q; D0 `: `对于大多数基于 Flash 的系统而言,在最终产品安装之后,能够对固件进行更新,这一点非常重要。这称为在应用中编程 (IAP)。此应用笔记的目的就是为创建 IAP 应用程序提供通用指南。
" D+ |4 ?! h4 z, M7 ]" ?9 ESTM32F10x 微控制器能够运行用户指定的固件,从而执行微控制器内置 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/ }" ]

8 \$ J1 Y4 b7 j$ B下面列出了开发过程中使用的 Aardvark 主机适配器版本:! q$ a  L; G; [- K  V! g+ C% D+ K
● 固件:Aardvark I2C/SPI Control Center v3.52 -2009.0130
/ n* r) B, N4 a  _2 S● 硬件:Aardvark I2C/SPI v3.0
5 T' ~; o. ~+ r. 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 原理
; A" G$ k% {& q) P8 d( l/ e可以使用开发工具通过 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

2 ~  K6 o: O8 Z# ^4 r
+ _* v7 _1 {# {3 I( T
62T`MP2(J3B07`6QHOJN1FR.png
0 M! l0 q( F6 c( T! O3 Y0 @# n
) n( D, N9 \+ [0 d  p2 Z1.3 全局流程图3 V2 |: ^) l+ w9 C% U
* z, D# }# C# r

% }# _# L! f: H* E7 f! R 7%`W@]}VHR{ONISGM~OQZPG.png
! M* W# L3 l, A3 T1 r- N$ U# S1 q; S2 p( b8 h) A7 \1 P; L% Z/ Q
5 X3 j4 F% ]) J1 ]& [" A" W5 A  o
使用连接到按钮的引脚来选择跳转到用户应用程序还是执行用于重新编程的 IAP:
; U- T% K3 ~7 ^● 复位时,按下按钮将执行 IAP, ?' O! p0 J& g0 H
● 否则,跳转到用户程序
# v8 e% c9 s0 d. `8 J
7 G- t. j0 x) R; R# X  H+ {/ Z7 m
1.4 IAP 命令6 l0 }/ V' K) a1 D
1.4.1 读命令
, u& Y9 ?; h7 s/ e读命令用于从 STM32 的 Flash 中读取数据,并且可以从用户存储空间的任意 Flash 地址开始读取。/ X: ]9 q" U0 k$ H8 z0 P0 X+ Z

" y( D; C1 u! ~  ^
6 l# q  H% ?6 q& w; r- v
DM8_H``7I5B6GP9T1OB`PMF.png % e$ b( X1 k# \2 l

1 X% D8 J: b& I. ^+ b' ?4 F8 ?操作码的值为 OPC_READ 时,执行读命令。目标器件认为操作码之后由主机主器件发送的前四个字节为要从中读取数据的 Flash 地址。紧跟 Flash 地址之后的两个字节表示要读取的数据的大小(字节)。通过 SDA 线将 Flash 中的内容缓存到 I2C1_buffer_Tx,并按字节发送。! m- _; x7 F1 ^5 m+ F

6 h2 n% d, J  |, U
1.4.2 写命令- N& }, z7 `9 ]1 y2 |
写命令用于向 STM32 Flash 写入数据,并且可以从用户存储空间的任意 Flash 地址开始写入。
& u$ I( Q' K7 P2 b; J* v$ u8 \
2 ?* l7 u" s4 u! e# ^9 k

6 R/ Y, J7 @' D$ H1 p+ v J5K42W[GY)R@]8DU()4}7R0.png   z- o9 b. ^+ ~3 E+ }: o$ S. K
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 擦除页命令
% X- Q& L. b$ f+ x擦除页命令用于擦除用户存储空间中从任意 Flash 基址开始的页。对于中容量器件,可擦除页的数量在 0x0001 与 0x007B 之间(1 到 124 页);对于大容量器件,可擦除页的数量在0x0001 与 0x00FE 之间(1 到 254 页)。
9 T" e3 u- M1 z" U9 J" p1 e; U6 V4 F  y% O5 `1 S' X; ^

: q$ i8 r; k4 _) g# Q+ ^ 8Z3XQ)XHLLH397U9YGJR{FN.png % L$ e0 q$ g1 {/ a  @, T

# f: T* m  w- A$ h3 |
$ ^- 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 擦除用户存储空间命令
$ `7 l/ p, g3 F: [6 R+ n( ~擦除用户存储空间命令可擦除用户存储空间中从 Flash 地址 0x0800 1000 开始即以上的所有页。: g3 V/ E$ ]( @+ n+ Y, F
3 e! L# O% Z3 n4 I) t

8 j+ ]0 h; R: u; R 252@8%HG__@QUH9K}NAQO(X.png . s, V; T: M& d+ Q  y! z
' ^6 s; x' k% N( A& `, K2 G

% o! e6 b6 j7 I: O1 ^操作码的值为 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

+ z: i8 O0 P% `, t: ]! k. X COWO[$)%BH@EJOZ%QC}6N{O.png + }8 Z1 A& A( F% v6 I  w( g( H

& t5 f. u. P8 a完整版请查看:附件
$ |+ ?3 A8 P6 m8 }& R& K8 k9 z. l* B& w! N6 d

9 o$ H4 m- |& F* T+ J

STM32™ 在应用中编程通过 I²C 总线.pdf

下载

935.43 KB, 下载次数: 1

收藏 评论0 发布时间:2022-12-5 23:00

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版