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

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

[复制链接]
STMCU小助手 发布时间:2022-7-25 17:40
前言
本应用笔记说明了 STM32 微控制器自举程序中使用的 I2C 协议。它详细说明了每个支持的指令。
若需器件自举程序 I2C 硬件资源和要求的更多信息,请参考应用笔记 AN2606 “STM32 微控制器系统存储器自举模式 ”。

C}PD{FK~G5N1`CQ7Z6AFM)Q.png

1 I2C 自举程序代码序列
F2TDM`%YHA6H6AD`2GZH3G6.png

2 自举程序指令集
从 V1.1 协议版本开始支持 "No Stretch" 指令,当自举程序完成操作之前主机必须长时间等待时,它可以支持更好的进行指令管理。
只要可能,强烈建议使用 "No Stretch" 指令而不使用相应的普通指令。
支持的指令列于2 中。


D]N3DVRF3`O38PO73O584C7.png


No-Stretch 指令
当自举程序执行操作时, No-Stretch 指令可执行 Write、 Erase、 Write Protect、 Write Unprotect、 Read Protect、 Read Unprotect 操作而不延长 I2C 线。当自举程序执行的操作需要等待时间时,这些指令允许与总线上的其它器件通信。
这些指令与标准指令的不同之处在于指令结束:当主机在指令结束要求 ACK/NACK 时,自举程序不会延长 I2C 线,而是使用第三种状态 ——Busy (0x76)来响应。当主机收到Busy 状态时,它会再对状态轮询,读取一个字节,直到收到 ACK 或 NACK 响应。

通信安全
从编程主机到器件的所有通信都经过校验和验证。接收的数据字节块都经过异或计算。所有字节异或计算后算出一个字节,加到每次通信的末尾 (校验和字节)。对所有收到的字节 — — 数据 + 校验和 —— 做异或计算,最后结果必须为 0x00。
对每个指令,主机会发送一个字节及其补码 (异或 = 0x00)。
每个包或接受 (ACK 应答)或丢弃 (NACK 应答):
ACK = 0x79
NACK = 0x1F
对于 No-Stretch 指令,当操作正在进行时,会发送 Busy 状态而不是 ACK 或 NACK:
BUSY= 0x76
注: 主机的帧可为下列之一:
发送指令帧:主机作为主发送端发起通信,向器件发送两字节:命令代码 + XOR
等待 ACK/NACK 帧:主机作为主接收端发起 I2C 通信,从器件接收一个字节:ACK NACK BUSY
接收数据帧:主机作为主接收端发起 I2C 通信,从器件收到响应。收到的字节数取决于指令。
发送数据帧:主机作为主发送端发起 I2C 通信,向器件发送需要的字节。发送的字节数取决于指令。
小心:
I2C 通信实现了超时机制,这是自举程序指令正确执行所必需要考虑的。此超时在同一指令的两个 I2C 帧间实现。例如,对于 Write memory 指令,在指令发送帧和地址存储器发送帧之间 有超时机制。 此外也将在同一 I2C 帧中的两个连续数据接收或发送实例之间插入同一超时周期。如果超时周期已过,则生成系统复位以避免自举程序崩溃。有关每种 STM32 产品的 I2C超时值,请参考 AN2606, “I2C 自举程序时序特性 ” 一节。


2.1 Get 指令
Get 指令可帮您得到自举程序版本及所支持的指令。当自举程序收到 Get 指令时,它将自举程序版本和所支持的指令代码发送给主机,如2 中所示。

(@BL5[F6B)1%1X00CPZW~HE.png

STM32 发送的字节如下:
对于 I2C 协议 V1.0
字节 1:ACK
字节 2:N = 11 = 后续字节数 - 1,不包括当前字节和 ACK。
字节 3:自举程序版本 0x10 = 1.0 版本
字节 4:0x00 - Get 指令
字节 5:0x01 - Get Version
字节 6:0x02 - Get ID
字节 7:0x11 - Read Memory 指令
字节 8:0x21 - Go 指令
字节 9:0x31 - Write Memory 指令
字节 10:0x44 - Erase 指令
字节 11:0x63 - Write Protect 指令
字节 12:0x73 - Write Unprotect 指令
字节 13:0x82 - Readout Protect 指令
字节 14:0x92 - Readout Unprotect 指令
字节 15:ACK
For I2C protocol V1.1:
字节 1:ACK
字节 2:N = 17 = 后续字节数 - 1,不包括当前字节和 ACK。

字节 3:自举程序版本 0x11 = 1.1 版本
字节 4:0x00 - Get 指令
字节 5:0x01 - Get Version
字节 6:0x02 - Get ID
字节 7:0x11 - Read Memory 指令
字节 8:0x21 - Go 指令
字节 9:0x31 - Write Memory 指令
字节 10:0x44 - Erase 指令
字节 11:0x63 - Write Protect 指令
字节 12:0x73 - Write Unprotect 指令
字节 13:0x82 - Readout Protect 指令
字节 14:0x92 - Readout Unprotect 指令
字节 15:0x32 - No-Stretch Write Memory 指令
字节 16:0x45 - No-Stretch Erase 指令
字节 17:0x64 - No-Stretch Write Protect 指令
字节 18:0x74 - No-Stretch Write Unprotect 指令
字节 19:0x83 - No-Stretch Readout Protect 指令
字节 20:0x93 - No-Stretch Readout Unprotect 指令
字节 21:ACK


完整版请查看:附件



DM00072315_ZHV2.pdf

下载

705.68 KB, 下载次数: 2

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

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版