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

STM32 自举程序中使用的 USB DFU 协议

[复制链接]
STMCU小助手 发布时间:2022-12-6 15:02
前言
) W$ S, h  W2 D! l4 T本应用笔记说明了 STM32 微控制器自举程序中使用的 USB DFU 协议。它详细说明了每个支持的指令。若需器件自举程序 USB 硬件资源和要求的更多信息,请参考 “STM32 系统存储器自举模式 ” 应用笔记 (AN2606)。
! Q7 t, d0 P5 y! J& \+ V2 V/ N7 a; }2 ~8 i' m& \
JEDLLB85}7T]H}O6WV$G0.png
$ V9 h& y0 Y5 j9 U/ B8 B

! q5 O8 e3 `2 t- ]1 自举程序代码序列0 ~+ ]' h8 Y) q- l* i7 M! o
不同版本的自举程序 DFU 在协议 (请求和指令)方面没有区别。要查看具体的区别列表,请参见第 6 节。" @8 X; V/ p( t* z) X) a2 {
进入系统存储器自举模式并且 STM32 器件已配置完毕后 (更多详细信息,请参见AN2606),自举程序代码会配置 USB 及其中断,并会等待 “ 枚举完成 ” 中断。
+ u! v" Y, e, m* e+ S插入 USB 线缆之后,会立即执行 USB 枚举 (如果 USB 线缆已插入,则会立即执行 USB枚举)。如果不希望 STM32 进入 USB DFU 自举程序,必须在复位前先拔出 USB 线缆。% `$ p! ?' @. H* p! R/ v
自举程序版本会返回到 bcd 器件字段 MSB 中的器件描述符 (示例:0x2000 = 版本 2.0)。对于互连型 USB DFU 自举程序,器件会先尝试使用 25 MHz 配置,如果失败,随后会尝试使用 14.7456 MHz,如果失败,最后会尝试使用 8 MHz 配置。如果仍失败,会使用较大的超时值重复执行上述操作 (会再次测试三种配置)。如果第二次尝试也失败的话,会生成系统复位。, U4 A7 @, n5 t' X, K

% Y4 v! p& }( a# L
; y, J  }2 i; n8 c) u
A~EXS7(XEK}5I[25]~FJI(F.png 1 `7 Y" s) }/ s1 v# |( I
# ]4 S$ k$ n$ E' W
" t! q/ m7 G4 F2 h
• 如果产品使用 HSE 进行 USB 操作 (连接型产品除外):
! U1 O9 ^7 H0 \. U7 o7 e– 启动时,会测量 HSE (若存在),如果支持,则会配置 USB。如果未检测到HSE,自举程序将执行系统复位。如果测得的 HSE 时钟值属于不受支持的值,USB 协议将无法正常执行。
# _; `$ d7 d( n% W• 如果产品使用 HSI 进行 USB 操作。
$ z# ~0 W' i4 N' G( R3 Z% d– 启动时,会使用 HSI 时钟配置 USB。
* {% N5 I9 s3 K+ V, f+ }关于产品配置的更多详细信息,请参见 AN2606。* C6 v' C3 D& d! p
8 ^. s. f+ R* Y1 p; q. c7 |

( r6 y" Z4 G7 T6 N$ ]; X Y_FL4{{ZWS6I[M9V$VL39RO.png
, H: h4 v- k" m6 S+ h/ I: R* r
* |6 H9 i& O! ]; y注: 自举程序启动时,内部振荡器 (HSI) 会用作 USB 接口的时钟源。检测到 USB 事件后,外部
% E0 G- \- }5 O( T" Q$ L振荡器会配置为 USB 时钟源。1 K: L& H# n, O( ]4 y6 G" u
4 k; X6 v0 z% _: B2 B
2 USB DFU 自举程序请求0 u8 z" P) i- K$ a- c
USB DFU 自举程序支持 2004 年 8 月 5 日发布的 1.1 版 “ 器件固件升级通用串行总线器件升级规范 ” 规定的 DFU 协议和请求。关于这类请求的更多详细信息,请参见规范。
& P1 X0 W. T* Z- s表 2 和表 3 列举了 DFU 类特有的请求及其参数。( ]; O/ h& q- u7 M3 e0 j4 r
8 K# }) w4 m7 L3 ?' D: u9 N

3 f3 H( `0 Y8 D" j2 W D5$NXY@T{]`0F3W%BT12%N8.png : o: E  L* u* M- z+ ?: s. p0 L
- M7 [5 m$ b# {' B! f7 X
通信安全
- \, ]  V9 Y  S6 L( H: a. I* p9 v主机与器件之间的通信安全是通过嵌入的 USB 保护机制 (CRC 校验、确认等)来保障的。
( l& [& n& @- g- |+ z! m# d$ T5 j0 C不会对已传输的数据或自举程序特有的指令 / 数据进行进一步保护。
2 m/ Y8 p( S- ]
0 e+ q7 V: W; i3 y7 u% p3 DFU 自举程序指令
7 J$ U. \6 \3 x8 D5 n% g; EDFU_DNLOAD 和 DFU_UPLOAD 请求主要用于执行简单的存储器读写操作。这两个请求也用于发出集成自举程序指令 (write、 read unprotect、 erase、 set address 等)。6 |& A# N/ ~  J9 d9 [' q6 g
DFU_GETSTATUS 指令会触发这些指令被真正执行。: l& |5 K) [  t9 o4 _# {9 B( b& G
在 DFU 下载请求中,指令是通过 USB 请求结构中的 wValue 参数选择的。如果 wValue =0,主机在发送请求之后发出的数据就是自举程序指令代码。第一个字节是指令代码,其它字节 (如果存在)是与该指令相关的数据。
3 h9 R+ n% ~0 n6 z在 DFU 上传请求中,指令是通过 USB 请求结构中的 wValue 参数选择的。如果 wValue =0,则会选择 Get 指令并执行。
" y' h/ c6 J# t. O+ N/ l5 j; U$ Z
5 \0 Y. ^( {) N' _
  j$ V; T) r# m9 `6 }2 }
$ r, T6 ?' H( `8 ?4 t9 E! @) ?2 _
9 N3 V' o' |2 I7 g8 m0 Q" o9 k
如果执行 Read Unprotect 操作,同时存储器未受保护,那么整个 RAM 存储器会被自举程序固件清空,而 Flash 存储器不会被擦除 (由于 Flash 存储器之前未受读保护)。1 H& z  g, L; S
没有针对 Write Protect、 Write Unprotect 和 Read Protect 操作的指令。这些操作应通过用于选项字节区域的 Write Memory 和 Read Memory 指令来执行。
7 H9 z! \6 D, I) O( k4 W, a4 H, |  N5 I6 i
) H" x0 p& }# S: Y" R7 P6 w# \
完整版请查看:附件
& w! h  C8 ]" ]/ r$ n
/ L; W5 U- i  i5 u; q9 y# o
# c+ ^/ u; g" T; O( |

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

下载

488.71 KB, 下载次数: 38

收藏 评论0 发布时间:2022-12-6 15:02

举报

0个回答

所属标签

相似分享

官网相关资源

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