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

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

[复制链接]
STMCU小助手 发布时间:2022-12-5 22:00
前言% }4 e6 N9 W/ ^2 Z
本应用笔记说明了 STM32 微控制器自举程序中使用的 I2C 协议。它详细说明了每个支持的指令。
+ h2 G3 R" e# \# p1 R& v( x若需器件自举程序 I2C 硬件资源和要求的更多信息,请参考应用笔记 AN2606 “STM32 微控制器系统存储器自举模式 ”。: D) [4 D5 F, b- u

& j- \! e( ~* T }WI}[H~1PJMGS7SO4(KZM.png
: o9 w  u5 I( r: r7 H5 O9 Y+ E1 w
8 x  h4 z; n% A1 I2C 自举程序代码序列
. Q- ?2 [: ~! {. q

7 @" X. x& L: H" W7 e B)ZG{T]`SZ%GH$@(SD_AO96.png
5 q# d- G9 ]: o
4 O; r: ?2 s1 X+ j1 V. G6 g2 自举程序指令集
% p) ]* y6 P$ a- `/ l从 V1.1 协议版本开始支持 "No Stretch" 指令,当自举程序完成操作之前主机必须长时间等待时,它可以支持更好的进行指令管理。
! Y6 i" X8 e$ @% O( F只要可能,强烈建议使用 "No Stretch" 指令而不使用相应的普通指令。
% |! K! y6 ]( i支持的指令列于表 2 中。
3 H& M9 R, [. E
# J  E) S5 t+ I; k8 k

" G6 C4 H8 g0 |, a %`(B(N63YL{SE`077J[2(37.png
6 z( X3 P* e7 s! V8 @; D7 c# b8 @4 G- a0 c
1. 若收到了拒绝指令,或指令执行期间发生了错误,则自举程序会发送 NACK 字节,然后返回到检查指令状态。
' T0 w9 `+ t/ a( ?- i% o2 K2. 读保护 - 当 RDP (读保护)选项激活时,仅能使用此有限子集的指令。所有其它指令都会被 NACK,对器件没有作用。取消 RDP 之后,其它指令变为激活。
$ U0 T1 ~- i: R; {3 ]: f3. 若需了解哪些存储器空间可执行这些指令,请参考 STM32 产品数据手册和 AN2606:STM32 微控制器系统存储器自举模式。( {7 y  D6 ?1 v) f
4. 仅 V1.1 的 I2C 协议才支持 No-Stretch 指令。6 @. V/ E+ D8 ?

% B  Y; F/ {9 \/ D9 hNo-Stretch 指令
( C. K) u( f9 A9 `$ e2 J
当自举程序执行操作时, No-Stretch 指令可执行 Write、 Erase、 Write Protect、 Write Unprotect、 Read Protect、 Read Unprotect 操作而不延长 I2C 线。当自举程序执行的操作需要等待时间时,这些指令允许与总线上的其它器件通信。' O" ?; ^$ A4 b  ^0 \
这些指令与标准指令的不同之处在于指令结束:当主机在指令结束要求 ACK/NACK 时,自举程序不会延长 I2C 线,而是使用第三种状态 ——Busy (0x76)来响应。当主机收到Busy 状态时,它会再对状态轮询,读取一个字节,直到收到 ACK 或 NACK 响应。; G0 c. U# }5 o5 v5 ^. a# H/ r1 j7 ?

. T9 Q1 _4 I8 }8 ]5 ]% D& k( A通信安全
7 ~1 G7 k: P6 o, }" f* `4 c3 I6 L$ v从编程主机到器件的所有通信都经过校验和验证。接收的数据字节块都经过异或计算。所有字节异或计算后算出一个字节,加到每次通信的末尾 (校验和字节)。对所有收到的字节 —— 数据 + 校验和 —— 做异或计算,最后结果必须为 0x00。/ G; B* t* |9 U5 f+ c/ k' Q* z
对每个指令,主机会发送一个字节及其补码 (异或 = 0x00)。* {0 a4 C: z  {, `! p! x
每个包或接受 (ACK 应答)或丢弃 (NACK 应答):( D, p7 q3 u) D' @4 Y' l6 U5 u
• ACK = 0x79
& O  |* w2 z5 D1 a• NACK = 0x1F( H! S! u* Z1 Y
对于 No-Stretch 指令,当操作正在进行时,会发送 Busy 状态而不是 ACK 或 NACK:
& T  X! w" Q1 }. u8 `• BUSY= 0x76  p) G, C" O" ]+ y* L* T
注: 主机的帧可为下列之一:. [6 K& b0 v/ M8 O1 T
• 发送指令帧:主机作为主发送端发起通信,向器件发送两字节:命令代码 + XOR。9 ]5 M0 @# z/ U+ x2 N$ u" K
• 等待 ACK/NACK 帧:主机作为主接收端发起 I2C 通信,从器件接收一个字节:ACK 或NACK 或 BUSY。, j5 a# ?& y# Z4 `/ b
• 接收数据帧:主机作为主接收端发起 I2C 通信,从器件收到响应。收到的字节数取决于指令。) q) t7 ~; o9 V& D5 ~4 Q/ I
• 发送数据帧:主机作为主发送端发起 I2C 通信,向器件发送需要的字节。发送的字节数取决于指令。
! [- i1 o  K  J. X( I  `2 |小心: I2C 通信实现了超时机制,这是自举程序指令正确执行所必需要考虑的。此超时在同一指令的两个 I2C 帧间实现。例如,对于 Write memory 指令,在指令发送帧和地址存储器发送帧之间有超时机制。 此外也将在同一 I2C 帧中的两个连续数据接收或发送实例之间插入同一超时周期。如果超时周期已过,则生成系统复位以避免自举程序崩溃。有关每种 STM32 产品的 I2C超时值,请参考 AN2606, “I2C 自举程序时序特性 ” 一节。
# t! K; ^: K% D& A) R" C" E+ J8 @6 l! b$ ?6 p% e
2.1 Get 指令( b! y" _  I. \& r/ m) G$ B
Get 指令可帮您得到自举程序版本及所支持的指令。当自举程序收到 Get 指令时,它将自举程序版本和所支持的指令代码发送给主机,如图 2 中所示。0 z" o! |. ~: b0 p9 l
  l* L, H  ?8 `8 x
6 a9 J6 _  I3 v
F(I)3@}BX]UJ5K$$_0U@IO8.png
4 Y! R: p% m- p" ]4 b6 v+ e
8 c2 `  `5 w; x& v$ t& ^* e2 Y- NSTM32 发送的字节如下:- ~1 |" z3 j* t
• 对于 I2C 协议 V1.0:( \+ A6 Z' W# g7 i
– 字节 1:ACK
8 S$ F4 V$ }3 b– 字节 2:N = 11 = 后续字节数 - 1,不包括当前字节和 ACK。
  e# O& \" k+ d! ]( |6 ^, i– 字节 3:自举程序版本 0x10 = 1.0 版本
3 }8 s4 t! p4 ~9 G1 [– 字节 4:0x00 - Get 指令* c) Y, ~4 |9 c7 N, i' J
– 字节 5:0x01 - Get Version
' ?5 T7 ^4 n2 h! q5 m– 字节 6:0x02 - Get ID8 P- z/ A5 a' f/ e7 Y
– 字节 7:0x11 - Read Memory 指令
) R8 }* Y* A( u/ D: D0 X– 字节 8:0x21 - Go 指令
& z( c2 J+ M: L# {1 P– 字节 9:0x31 - Write Memory 指令
+ R. }; A' H& z  j– 字节 10:0x44 - Erase 指令, e7 W) ]) ]) k' k  |
– 字节 11:0x63 - Write Protect 指令8 `# R& O( G% ]# |) b
– 字节 12:0x73 - Write Unprotect 指令
$ [% h# ^# [: |0 O+ v8 Q! h9 s– 字节 13:0x82 - Readout Protect 指令
" H+ x* p* k( h$ S; I* t# f' s– 字节 14:0x92 - Readout Unprotect 指令2 V) E5 h, h5 w- G2 E
– 字节 15:ACK
7 z" o! d# f$ e• For I2C protocol V1.1:
3 M+ P: U' S$ v1 w9 f, N– 字节 1:ACK
" `) s1 \% n5 K1 G– 字节 2:N = 17 = 后续字节数 - 1,不包括当前字节和 ACK。
, `9 x, D  q- i* v, o– 字节 3:自举程序版本 0x11 = 1.1 版本
# w' k1 H/ B- J; n! M8 j– 字节 4:0x00 - Get 指令! y  D! t  c3 a: n9 \, g1 X$ e
– 字节 5:0x01 - Get Version
5 x" B# `: V0 v% @– 字节 6:0x02 - Get ID; B5 z- x' y# {- J
– 字节 7:0x11 - Read Memory 指令3 E) c. H2 I  b
– 字节 8:0x21 - Go 指令2 l) z/ P- A1 r% k0 ]: m) Z' Q
– 字节 9:0x31 - Write Memory 指令
) X2 T( M9 E2 d6 S– 字节 10:0x44 - Erase 指令
# W, k- h/ D2 X3 [! W; l9 W– 字节 11:0x63 - Write Protect 指令
& N2 q* _/ S" ?- A8 M" p– 字节 12:0x73 - Write Unprotect 指令& m$ X* U4 Q4 }9 ^
– 字节 13:0x82 - Readout Protect 指令) q/ y6 a. p$ C/ J
– 字节 14:0x92 - Readout Unprotect 指令1 X5 O! F, @! f  Y& M
– 字节 15:0x32 - No-Stretch Write Memory 指令
  b- m' T) w$ E/ a' C1 a– 字节 16:0x45 - No-Stretch Erase 指令: s& A: H8 Q- h5 k
– 字节 17:0x64 - No-Stretch Write Protect 指令. p0 E3 n0 z9 ?* q, w8 e1 T
– 字节 18:0x74 - No-Stretch Write Unprotect 指令
8 M( _% m  H; q  I– 字节 19:0x83 - No-Stretch Readout Protect 指令
; N/ ]" @8 K, R! B  g! Z: Y– 字节 20:0x93 - No-Stretch Readout Unprotect 指令
' F2 u; Z/ q1 W9 M  A– 字节 21:ACK
/ V- ^' e8 O6 S, _5 |' ?
: h- S. p7 S) E# H) ]4 u3 _; }5 Z* S7 D2 a
完整版请查看:附件
6 F2 `6 d( ^+ t
* a  }% u& Z8 _8 x4 D5 Q1 @( _
! R/ E& Z+ _8 a) g! Q& @  |) |

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

下载

727.07 KB, 下载次数: 0

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

举报

0个回答

所属标签

相似技术帖

官网相关资源

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