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

STM32 自举程序中使用的 I2C 协议

[复制链接]
STMCU小助手 发布时间:2022-7-25 17:40
前言
  `$ Z3 l5 R- |* a+ _0 |本应用笔记说明了 STM32 微控制器自举程序中使用的 I2C 协议。它详细说明了每个支持的指令。
- ^: H+ G$ P! i% k9 {若需器件自举程序 I2C 硬件资源和要求的更多信息,请参考应用笔记 AN2606 “STM32 微控制器系统存储器自举模式 ”。
0 d& Z4 U- u( z0 _7 v" m
7 `( Y% i5 T( [& W, C2 B
C}PD{FK~G5N1`CQ7Z6AFM)Q.png
0 f# j3 g5 U  w& j/ n
" r: J% N$ T; r; ~" r! A' y; U
1 I2C 自举程序代码序列
& l$ M& n) M% Z: U9 L! \5 I# Y) l9 B F2TDM`%YHA6H6AD`2GZH3G6.png ! D( n8 W3 P5 c2 a2 G$ u3 Q& j3 R8 j

/ |& v9 W+ d7 S3 m, ~% k: o, {2 自举程序指令集% ~- h- ?( M8 u" ^5 v  \2 i( H
从 V1.1 协议版本开始支持 "No Stretch" 指令,当自举程序完成操作之前主机必须长时间等待时,它可以支持更好的进行指令管理。
  W$ X7 a- L6 l% u& B只要可能,强烈建议使用 "No Stretch" 指令而不使用相应的普通指令。
7 o" B# n% B" v1 t, u4 r支持的指令列于表 2 中。# y  V) S) N9 I% S+ P: \. [

# n. Y) \" S, W. f# i

3 l( i, t! o! w6 w- f# {( T D]N3DVRF3`O38PO73O584C7.png
% M0 j5 O" Q! `. z! F5 g. }4 z* t0 B
3 r7 l) ~+ E7 W1 e6 s3 }2 k
No-Stretch 指令
2 W0 g( Q; Z+ X! C- {当自举程序执行操作时, No-Stretch 指令可执行 Write、 Erase、 Write Protect、 Write Unprotect、 Read Protect、 Read Unprotect 操作而不延长 I2C 线。当自举程序执行的操作需要等待时间时,这些指令允许与总线上的其它器件通信。
- w; V0 z9 m! b0 H! C4 @- ~这些指令与标准指令的不同之处在于指令结束:当主机在指令结束要求 ACK/NACK 时,自举程序不会延长 I2C 线,而是使用第三种状态 ——Busy (0x76)来响应。当主机收到Busy 状态时,它会再对状态轮询,读取一个字节,直到收到 ACK 或 NACK 响应。8 f6 q8 R+ W, [1 A6 L8 T

, I* Y; O/ {* X6 E: m
通信安全
9 {6 L4 N) t9 \) a从编程主机到器件的所有通信都经过校验和验证。接收的数据字节块都经过异或计算。所有字节异或计算后算出一个字节,加到每次通信的末尾 (校验和字节)。对所有收到的字节 — — 数据 + 校验和 —— 做异或计算,最后结果必须为 0x00。
4 M; _- Y+ P8 t" a, g! M) F* i; ?7 z对每个指令,主机会发送一个字节及其补码 (异或 = 0x00)。, o$ z. q% h$ Q3 V& R  M
每个包或接受 (ACK 应答)或丢弃 (NACK 应答):
- r; h0 d* d/ u" D) f$ q5 v• ACK = 0x79
9 a  X, b1 u8 X, M• NACK = 0x1F
& I' {: u" o' W对于 No-Stretch 指令,当操作正在进行时,会发送 Busy 状态而不是 ACK 或 NACK: 3 i8 I; d8 S7 j
• BUSY= 0x76
* X; f) n% a( c- C- q$ h* }& b注: 主机的帧可为下列之一:. p: b0 l9 H5 ~- s: @! [; x. ]" b; a9 b
• 发送指令帧:主机作为主发送端发起通信,向器件发送两字节:命令代码 + XOR。
( G$ I0 a4 `; L8 ~0 d! y5 G• 等待 ACK/NACK 帧:主机作为主接收端发起 I2C 通信,从器件接收一个字节:ACK 或NACK 或 BUSY。
4 i4 {7 m, S1 }) q: o• 接收数据帧:主机作为主接收端发起 I2C 通信,从器件收到响应。收到的字节数取决于指令。
) X: A6 m  W- C) M9 j* }• 发送数据帧:主机作为主发送端发起 I2C 通信,向器件发送需要的字节。发送的字节数取决于指令。5 G; @3 i# j6 P* k, J% W
小心:
( x" @' }. Z0 L+ \- N$ DI2C 通信实现了超时机制,这是自举程序指令正确执行所必需要考虑的。此超时在同一指令的两个 I2C 帧间实现。例如,对于 Write memory 指令,在指令发送帧和地址存储器发送帧之间 有超时机制。 此外也将在同一 I2C 帧中的两个连续数据接收或发送实例之间插入同一超时周期。如果超时周期已过,则生成系统复位以避免自举程序崩溃。有关每种 STM32 产品的 I2C超时值,请参考 AN2606, “I2C 自举程序时序特性 ” 一节。  ^+ N& c5 s3 N) [8 M0 ~
$ y5 Y) O: s7 d/ z  [4 h# l  b
. \) g( }; v) |3 L9 u; p
2.1 Get 指令' |" X; V3 N( H! Z/ ]% [* J
Get 指令可帮您得到自举程序版本及所支持的指令。当自举程序收到 Get 指令时,它将自举程序版本和所支持的指令代码发送给主机,如图 2 中所示。
+ E0 B' b, F. {3 v& G  f/ |; K
, M% c1 H* \  w (@BL5[F6B)1%1X00CPZW~HE.png ! _6 D% h0 t- |, b2 R, M+ L
6 _% [/ P3 n( |! g8 g
STM32 发送的字节如下:
! u5 X- ?6 j  S; o1 P• 对于 I2C 协议 V1.0:
! W9 m$ u$ y8 W6 i% X, J– 字节 1:ACK
: o. s# ^6 n0 T9 I8 M$ n– 字节 2:N = 11 = 后续字节数 - 1,不包括当前字节和 ACK。 % W  q/ J% l. f9 m" d+ h* Z
– 字节 3:自举程序版本 0x10 = 1.0 版本; Q2 z4 E  }4 U- F" D
– 字节 4:0x00 - Get 指令
: D: e$ d9 d" w" r0 _) q– 字节 5:0x01 - Get Version
* r* y6 V( E5 s8 d2 {4 d9 t– 字节 6:0x02 - Get ID9 `+ r$ H9 E. j, w# t- C
– 字节 7:0x11 - Read Memory 指令
7 U$ Z( D/ A4 p– 字节 8:0x21 - Go 指令
5 P3 [$ J5 Z( s' }" t  x/ s( F; I– 字节 9:0x31 - Write Memory 指令
# N7 B, n/ [# b* g  O2 p– 字节 10:0x44 - Erase 指令
) D& s+ d8 z7 ^( t– 字节 11:0x63 - Write Protect 指令; v4 m2 ]5 S0 W/ L% ^- Q. l, l
– 字节 12:0x73 - Write Unprotect 指令0 _+ u: F. E0 U; _9 y3 n9 a
– 字节 13:0x82 - Readout Protect 指令
- ^3 x8 C3 U$ y# o– 字节 14:0x92 - Readout Unprotect 指令$ D# z3 w& a! F! a4 Z
– 字节 15:ACK# x/ \: j  q0 l3 }8 n: d1 ]
• For I2C protocol V1.1:
: x4 y4 {$ t* v, M& E& M3 a– 字节 1:ACK
" }5 V+ N, t5 r: J2 o) I3 W– 字节 2:N = 17 = 后续字节数 - 1,不包括当前字节和 ACK。 7 }3 n1 J$ s6 l
– - T. r; N# k8 [) A3 z% F( B7 J/ _  D
字节 3:自举程序版本 0x11 = 1.1 版本" ~$ v0 n3 J3 }: Z2 t1 h- s
– 字节 4:0x00 - Get 指令
. q9 J: Z% i! X& v- k– 字节 5:0x01 - Get Version
4 W- r3 J1 i5 h# H– 字节 6:0x02 - Get ID
. Y1 P; C) P5 u& m6 M9 x  H– 字节 7:0x11 - Read Memory 指令  |$ |# I( }5 Y& q( Z; R+ i
– 字节 8:0x21 - Go 指令, s$ {2 w: O- {+ t2 ^2 w( y0 E* F4 i
– 字节 9:0x31 - Write Memory 指令
7 ~, E9 `! n' J, q  q% Y9 `1 g– 字节 10:0x44 - Erase 指令; \3 n0 g; L9 r5 z3 r, p
– 字节 11:0x63 - Write Protect 指令! j+ @8 e6 F) ~) I5 y  w7 d
– 字节 12:0x73 - Write Unprotect 指令
5 n+ M  ~6 `) ]3 f' {– 字节 13:0x82 - Readout Protect 指令/ T2 x7 `3 g1 J* _
– 字节 14:0x92 - Readout Unprotect 指令8 j* S% `; G* m8 w4 ?" h! ]
– 字节 15:0x32 - No-Stretch Write Memory 指令
0 h# a% }* a! u2 j# i, G9 }– 字节 16:0x45 - No-Stretch Erase 指令' K+ t" v: E0 y3 ~* I( N9 f5 z
– 字节 17:0x64 - No-Stretch Write Protect 指令' l# k" x9 K( Y2 I* {! ?( j
– 字节 18:0x74 - No-Stretch Write Unprotect 指令! }( l1 m8 K9 ^. v6 W: A" ^
– 字节 19:0x83 - No-Stretch Readout Protect 指令
1 q" x% p. Q0 C– 字节 20:0x93 - No-Stretch Readout Unprotect 指令  H, H' ]8 x4 L; y3 m
– 字节 21:ACK. r0 \( _! ^' ~4 X8 E8 q
3 s+ f8 c4 S' k1 n) ?
7 b  _" k: W8 Y& N
完整版请查看:附件

$ u/ U: E- f( K" `- |  k% ?8 Z4 a# q+ N! d2 K3 o5 G+ ?3 B: J# l: C
2 r6 |7 W! b- I4 U5 e$ x# f

DM00072315_ZHV2.pdf

下载

705.68 KB, 下载次数: 2

赞 收藏 评论0 发布时间:2022-7-25 17:40

举报

0个回答

所属标签

相似技术帖

官网相关资源

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