文件名称:
AN4221_STM32自举程序中使用的I2C协议.PDF
开发工具:
文件大小: 706kb
下载次数: 0
上传时间: 2019-09-14
详细说明:AN4221_STM32自举程序中使用的I2C协议AN4221
表格索引
表格索引
适用产品
表2.
l2C自举程序指令
6
表3
自举程序协议以版本..
表4
文档修订历史
.,48
DoclD024055 ReV 2
3/49
图片索引
AN422
图片索引
图1
使用12C的STM32自举程序.
5
图2.
Get指令:主机端
8
图3
Get指令:器件端
图4
Get version:主机端
.,10
图5
Get version:器件端
图6
Get|D指令:主机端
12
图7
Get ID指令:器件
图8
Read memory指令:主机端
14
图9
Read memory指令:器件端
图10
Go指令:主机端.
图11.
Go指令:器件端
18
图12
Write memory指令:主机端
20
图13
Write memory指令:器件端
2
图14
Erase memory指令:主机端
图15
Erase memory指令:器件端.
24
图16
Write protect指令:主机端
25
图17.
Write protect指令:器件端
图18
Write unprotect指令:主机端
.27
图19
Write unprotect指令:器件端
28
图20
Readout protect指令:主机端
,,,,,,,,,,.,,29
图2
Readout protect指令:器件端
图22
Readout unprotect指令:主机端
30
图23
Readout unprotect指令:器件端
图24
No-Stretch Write memory指令:主机端.
,,,,,..33
图25
No-Stretch Write memory指令:器件端
34
图26
No-Stretch Erase memory指令:主机端
36
图27
No- Stretch Erase memory指令:器件端
37
图28
No- Stretch Write protect指令:主机端
39
图29
No- Stretch Write protect指令:器件端
40
图30
No- Stretch Write unprotect指令:主机端
4
图31
No- Stretch Write unprotect指令:器件端
42
图32
NoStretch Readout protec指令:主机端
43
图33
No- Stretch Readout protect指令:器件端.
44
图34
No-Stretch Readout unprotect指令:主机端
.45
图35
No- Stretch Readout unprotect指令:器件端
46
4/49
DocID024055 ReV 2
AN4221
2C自举程序代码序列
2c自举程序代码序列
图1.使用2c的STM32自举程序
检测到地址
从器件地址
等待指令
Ge指令
收到指令
Go指令
Get指令
RD指令
指令
G0指令
程序
程序
程序
程序
jP to address
MSV31517V1
在AN2606中规定了每个产品自举程序的12C从地址
进入系统存储器自举模式后,并且此时STM32微控制器已配置好(若需更详细信息,请参
考您的STM32系统存储器自举模式应用笔记),自举程序代码开始扫描2C_SDA线引脚」
等待检测它自身在总线上的地址。检测到之后,12c自举程序固件开始接收主机指令。
DoclD024055 ReV 2
5/49
自举程序指令集
AN422
自举程序指令集
从Ⅵ1.1协议版本开始支持" No Stretch"指令,当自举程序完成操作之前主机必须长时间等
待时,它可以支持更好的进行指令管理
只要可能,强烈建议使用" No stretch"指令而不使用相应的普通指令。
支持的指令列于表2中
表22c自举程序指令
指令(1)
指令代码
指令说明
Get(2)
0x00
获取自举程序当前版本所支持的版本和允许的指令
Get version
0x01
获取自举程序版本
Get id(2)
0x02
获取芯片|D
Read Memory(2)
0x11
从存储器读取最多256字节,由应用指定起始地址
Go③3)
0x21
跳转到内部 Flash中的用户应用代码
Write Memory/(3)
0x31
向存储器写入最多256字节,由应用指定起始地址
No-Stretch Write Memory(3)/(4)
0x32
向存储器写入最多256字节,由应用指定起始地址。当操作
正在进行时返回忙状态
E
rase
0×44
使用双字节寻址模式擦除一个到所有的Fash页面或扇区
No-Stretch Erase(3 )(4)
0x45
使用双字节寻址模式擦除一个到所有的Fash页面或扇区,
当操作正在进行时返回忙状态
Write protect
0x63
对一些扇区使能写保护
No-Stretch Write Protect(4)
对一些扇区使能写保护,当操作正在进行时返回忙状态
Write Unprotect
0x73
对所有Fash扇区禁用写保护
No-Stretch Write Unprotect(4)
0x74
对所有Fash扇区禁用写保护,当操作正在进行时返回忙状
Readout protect
0×82
使能读保护
No-Stretch Readout Protect(4)
0x83
使能读保护,当操作正在进行时返回忙状态
Readout Unprotect(2)
0x92
禁用读保护
No-Stretch Readout Unprotect(2)(4)
0x93
禁用读保护,当操作正在进行时返回忙状态
1.若收到了拒绝指令,或指令执行期间发生了错误,则自举程序会发送NACK字节,然后返回到检查指令状态。
2.读保护-当RDP(读保护)选项激活时,仅能使用此有限子集的指令。所有其它指令都会被NACK,对器件没有作用。取
消RDP之后,其它指令变为激活。
3.若需了解哪些存储器空间可执行这些指令,请参考STM32产品数据手册和AN2606:STM32微控制器系统存储器自举模
仅V1.1的|2C协议才支持No- Stretch指令。
6/49
DocID024055 ReV 2
AN4221
自举程序指令集
No-Stretch指令
当自举程序执行操作时,No- Stretch指令可执行 Write、 Erase、 Write protect、 Write
Unprotect、 Read protect、 Read Unprotect操作而不延长2C线。当自举程序执行的操作
需要等待时间时,这些指令允许与总线上的其它器件通信。
这些指令与标准指令的不同之处在于指令结束:当主机在指令结束要求 ACK/NACK时,自
举程序不会延长2C线,而是使用第三种状态—BUsy(0×76)来响应。当主机收到
Busy状态时,它会再对状态轮询,读取一个字节,直到收到ACK或NACK响应
通信安全
从编程主机到器件的所有通信都经过校验和验证。接收的数据字节块都经过异或计算。所有
字节异或计算后算出一个字节,加到每次通信的末尾(校验和字节)。对所有收到的字节
数据+校验和——一做异或计算,最后结果必须为0×00
对每个指令,主机会发送一个字节及其补码(异或=0×00)
每个包或接受(ACK应答)或丢弃(NACK应答)
ACK= 0x79
NACK OX1F
对于No- Stretch指令,当操作正在进行时,会发送Busy状态而不是ACK或NACK
BUSy= 0X76
主机的恢可为下列之
发送指令帧:主机作为主发送端发起通信,向器件发送两字:命令代码+XOR。
竽待 ACK/NACK做:主机作为主接收端发起12C通信,从器件接收一个字节:ACK或
NACK或BUSY
接收数据帧:主机作为主接收端发起12C通信,从器件收到购应。收到的宇芳数取决F
指令
发送数据帧:主机作为主发送端发起12C通信,向器件发送需要的字节。发送的字艿数
耿决于指令。
2C通信实现了超时机制,这是自举程序指令正确执行所必需要考虑的。此超时在同一指令的
两个|2C帧间实现。例如,对于 Write memory指令,在指令发送帧和地址存储器发送帧之间
有超时机制。此外也将在同一12C帧中的两个连续数据接收或发送实例之间插入同一超时周
期。如果超时周期已过,则生成系统复位以避免自举程序崩溃。有关每种STM32产品的12C
超时值,请参考AN2606,"2C自举程序时序特性”一节。
2.1
Get指令
Get指令可帮您得到自举程序版本及所支持的指令。当自举程序收到Get指令时,它将自举
程序版本和所支持的指令代码发送给主机,如图2中所示。
DoclD024055 ReV 2
7149
自举程序指令集
AN422
图2.Gtt指令:主机端
开始Get
发送指令帧
(0×00+0XFF)
等待ACK
NACK
或NACK帧一
接收数据帧
一字节数
自举程序版本
支持的指令列表
等待ACK
NACK
或NACK帧
ACK
结束Get
Sv31518v1
图3.Ge指令:器件端
开始Get
接收帧
否
OX0O-+OXFF?
发送NACK帧
是
发送ACK帧
发送数据帧:
发送字节数
自举程序版本
支持的指令列表
发送ACK帧
结束Get
MSy31519V1
8/49
DocID024055 ReV 2
AN4221
自举程序指令集
STM32发送的字节如下
对于12C协议V10:
字节1:ACK
字节2:N=11=后续字节数-1,不包括当前字节和ACK。
字节3:自举程序版本0x10=1.0版本
字节4:0×00-Get指令
字节5:0X01- Get Version
字节6:0X02-Get|D
字节7:0×11- Read Memory指令
字节8:0x21-Go指令
字节9:0x31 Write Memory指令
字节10:0×44- Erase指令
字节11:0X63- Write Protect指令
字节12:0×73- Write Unprotect指令
字节13:0x82- Readout protect指令
字节14:0×92- Readout Unprotect指令
字节15:ACK
r 12C protocol V1.1
字节1:AcK
字节2:N=17=后续字节数-1.不包括当前字节和ACK
字节3:自举程序版本0×11=1.1版本
字节4:0×00-Get指令
字节5:0×01- Get Version
字节6:0X02-GetD
字节7:0×11- Read Memory指令
字节8:0×21-G0指令
字节9:0×31- Write Memory指令
字节10:0×44- Erase指令
字节11:0×63- Write protect指令
字节12:0X73- Write Unprotect指令
字节13:0X82- Readout protect指令
字节14:0×92- Readout Unprotect指令
字节15:0×32-No- Stretch Write Memory指令
字节16:0×45-No- Stretch Erase指令
字节17:0X64- No-Stretch Write Protect指令
字节18:0×74- No-Stretch Write Unprotect指令
字节19:0x83-No- Stretch readout protect指令
字节20:0×93-No- Stretch Readout Unprotect指令
字节21:ACK
DoclD024055 ReV 2
9/49
自举程序指令集
AN422
22 Get version指令
Get version指令用于获取2C自举程序版本。当自举程序收到该指令时,它会向主机发送
如下信息(自举程序版本)。
图4. Get version:主机端
开始GV
发送指令帧
(0X01+0XFE)
等待AcK
NACK
或NACK帧
ACK
接收数据帧
自举程序版本
NACK
等待AcK
或NACK帧
ACK
结束GV
Msv31520v1
1. GV=Get Version
STM32发送的字节如下
字艿1:ACK
字芳2:自举程序版本(0≤版本≤255)(例如,0X10=1.0版本)
字芳3:ACK
0/49
DocID024055 ReV 2
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.