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

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

[复制链接]
STMCU小助手 发布时间:2022-12-6 15:02
前言8 \* r( {$ L4 r3 H8 d
本应用笔记说明了 STM32 微控制器自举程序中使用的 USB DFU 协议。它详细说明了每个支持的指令。若需器件自举程序 USB 硬件资源和要求的更多信息,请参考 “STM32 系统存储器自举模式 ” 应用笔记 (AN2606)。' }; T3 X: L1 G# _$ M5 k

0 L0 \1 H5 l9 J. W" v5 C
JEDLLB85}7T]H}O6WV$G0.png   y- L( M2 H& ~* O8 [6 ]% r

, ?8 R3 B( D" s  X+ p1 自举程序代码序列; X% w! w! y* s- s! P" h
不同版本的自举程序 DFU 在协议 (请求和指令)方面没有区别。要查看具体的区别列表,请参见第 6 节。/ ?  U; x1 o; @3 U4 Q* b
进入系统存储器自举模式并且 STM32 器件已配置完毕后 (更多详细信息,请参见AN2606),自举程序代码会配置 USB 及其中断,并会等待 “ 枚举完成 ” 中断。3 Q8 n) E1 ?9 d+ F: k6 ?, `
插入 USB 线缆之后,会立即执行 USB 枚举 (如果 USB 线缆已插入,则会立即执行 USB枚举)。如果不希望 STM32 进入 USB DFU 自举程序,必须在复位前先拔出 USB 线缆。$ G0 L# O0 h/ r
自举程序版本会返回到 bcd 器件字段 MSB 中的器件描述符 (示例:0x2000 = 版本 2.0)。对于互连型 USB DFU 自举程序,器件会先尝试使用 25 MHz 配置,如果失败,随后会尝试使用 14.7456 MHz,如果失败,最后会尝试使用 8 MHz 配置。如果仍失败,会使用较大的超时值重复执行上述操作 (会再次测试三种配置)。如果第二次尝试也失败的话,会生成系统复位。' D5 K5 _( I3 `6 f* b

# u, I+ r" Y: M, i, x- A& R  ~
* q$ E; Z3 k3 D8 ]% \$ U
A~EXS7(XEK}5I[25]~FJI(F.png
$ k5 |( c* u  h. e" O  m4 ]: ?* [' R, D# u5 s9 z# r0 Q' f
3 c4 [0 ^5 V' v, L# d
• 如果产品使用 HSE 进行 USB 操作 (连接型产品除外):
. Z: y1 \% y/ Y9 v6 n, p– 启动时,会测量 HSE (若存在),如果支持,则会配置 USB。如果未检测到HSE,自举程序将执行系统复位。如果测得的 HSE 时钟值属于不受支持的值,USB 协议将无法正常执行。
8 ~- ]1 \/ T1 Q) \• 如果产品使用 HSI 进行 USB 操作。- d* \3 k1 x- ]4 B; g$ W- o
– 启动时,会使用 HSI 时钟配置 USB。3 J$ g; Z2 E: n( p, ~
关于产品配置的更多详细信息,请参见 AN2606。2 Z7 c9 k8 r8 \# [/ i8 y' S6 s
& n$ [) _: ]9 ^+ l+ r; Y, u
* K7 E; e) U  V9 `/ |. k$ j
Y_FL4{{ZWS6I[M9V$VL39RO.png
2 h; s, Z4 F! ^4 R; [1 G$ u, y
. \4 ~# Z7 d: @注: 自举程序启动时,内部振荡器 (HSI) 会用作 USB 接口的时钟源。检测到 USB 事件后,外部
& a1 [" A' K9 V0 T; a2 Y7 F  D振荡器会配置为 USB 时钟源。4 W  R2 Q  n: x6 O/ f

7 i" t9 E- m9 D7 T2 USB DFU 自举程序请求
! A3 D# y; \- S' B: l  e, ZUSB DFU 自举程序支持 2004 年 8 月 5 日发布的 1.1 版 “ 器件固件升级通用串行总线器件升级规范 ” 规定的 DFU 协议和请求。关于这类请求的更多详细信息,请参见规范。
2 V! c5 e( E5 b' Y- `表 2 和表 3 列举了 DFU 类特有的请求及其参数。  H9 E% I1 G9 h0 M/ c5 \
% T0 Z- l) V/ b6 t* \

- X$ h/ P6 l0 [+ e9 K# [. M D5$NXY@T{]`0F3W%BT12%N8.png
* B, D8 ]& O8 `
1 v, B# H' _$ }5 V通信安全
' j  z+ _% d( s4 N9 B$ R主机与器件之间的通信安全是通过嵌入的 USB 保护机制 (CRC 校验、确认等)来保障的。3 {. [7 m7 N0 `" L6 P( u0 W
不会对已传输的数据或自举程序特有的指令 / 数据进行进一步保护。- g1 i/ a' i1 t4 ^! `5 p

8 J( h: d/ I7 ~! m* `7 ~1 t/ s3 DFU 自举程序指令5 b+ w) L  C. a
DFU_DNLOAD 和 DFU_UPLOAD 请求主要用于执行简单的存储器读写操作。这两个请求也用于发出集成自举程序指令 (write、 read unprotect、 erase、 set address 等)。* G2 \8 [( U& o6 p
DFU_GETSTATUS 指令会触发这些指令被真正执行。
+ ^- p0 Z! _; i/ d; @9 K在 DFU 下载请求中,指令是通过 USB 请求结构中的 wValue 参数选择的。如果 wValue =0,主机在发送请求之后发出的数据就是自举程序指令代码。第一个字节是指令代码,其它字节 (如果存在)是与该指令相关的数据。
+ D% y1 b- w( V在 DFU 上传请求中,指令是通过 USB 请求结构中的 wValue 参数选择的。如果 wValue =0,则会选择 Get 指令并执行。4 r. P) }- y+ v& G5 o! W7 n, a
: E. Q# Q/ P5 g, p- F# X. H: e! [
+ W3 b, |  V# W4 Y0 Y- E- b! `3 y, G

9 ^6 N" }, V4 W5 O9 p2 s$ G7 q- C( G0 }
如果执行 Read Unprotect 操作,同时存储器未受保护,那么整个 RAM 存储器会被自举程序固件清空,而 Flash 存储器不会被擦除 (由于 Flash 存储器之前未受读保护)。0 {  R) |1 a+ W& W; w
没有针对 Write Protect、 Write Unprotect 和 Read Protect 操作的指令。这些操作应通过用于选项字节区域的 Write Memory 和 Read Memory 指令来执行。
) c9 G( y* ]" G2 i9 D  D4 t# F; ^5 g  W
) k. m  H, I; y
完整版请查看:附件: q+ R% ]% Q& `' C
$ i0 ?& X4 l& C
: f& T: Q; M8 |& {0 H

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

下载

488.71 KB, 下载次数: 49

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

举报

0个回答

所属标签

相似技术帖

官网相关资源

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