|
AN3156: `2 S8 l$ k3 q3 y5 m6 K 应用笔记9 f% [" }4 E- c& p+ o STM32 自举程序中使用的 USB DFU 协议3 M# M9 X& S( a1 O) k$ z( l 前言 本应用笔记说明了 STM32 微控制器自举程序中使用的 USB DFU 协议。它详细说明了每个 支持的指令。若需器件自举程序 USB 硬件资源和要求的更多信息,请参考 “STM32 系统存# Q" Q% _# `5 K+ w ) o# i6 Z. k" @; y2 m 储器自举模式 ” 应用笔记 (AN2606)。 / B& X; j% n% y: P
2 ^* t5 w' O' l: M % c0 C$ x2 d+ J/ x7 a' `) N 9 |3 A" ]7 x1 x7 f9 `5 f3 c 目录$ D( |1 l- b% e! o+ Y 1 自举程序代码序列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5/ x7 [9 z7 ^+ D2 n8 M; z: V% C" y: Y8 \+ w 2 USB DFU 自举程序请求 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3 DFU 自举程序指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 4 DFU_UPLOAD 请求指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 4.1 Read Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12; A: s9 ^! P" \- l 4.2 Get 指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12% U2 N, f% U. q. Q 5 DFU_DNLOAD 请求指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 O+ L) A$ k. V% ~3 { 5.1 Write memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17. ]1 |" ?, Q& n9 ^0 F4 j 5.2 Set Address Pointer 指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 5.3 Erase 指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19$ p+ L+ n# j+ l3 i6 ^) @% m 5.4 Read Unprotect 指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 5.5 Leave DFU mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 j- x1 _9 a+ S: M) M h 6 自举程序协议版本演进 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24# C8 k$ R2 V, K% d5 q 7 版本历史 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 ' I9 V6 z Z( ]; u) w* D $ ~" z% P! A" ]! T7 ` 1、自举程序代码序列9 @7 P' F3 e' D% _$ z 不同版本的自举程序 DFU 在协议 (请求和指令)方面没有区别。要查看具体的区别列表, 请参见第 6 节。. y9 }, Z; u" h' _, E4 [3 V 进入系统存储器自举模式并且 STM32 器件已配置完毕后 (更多详细信息,请参见; n1 y( P+ I* X+ }9 K8 R AN2606),自举程序代码会配置 USB 及其中断,并会等待 “ 枚举完成 ” 中断。 插入 USB 线缆之后,会立即执行 USB 枚举 (如果 USB 线缆已插入,则会立即执行 USB 枚举)。如果不希望 STM32 进入 USB DFU 自举程序,必须在复位前先拔出 USB 线缆。: @& Y/ M8 {/ H* ~ 自举程序版本会返回到 bcd 器件字段 MSB 中的器件描述符 (示例:0x2000 = 版本 2.0)。( {& Y: a4 }) A, S 对于互连型 USB DFU 自举程序,器件会先尝试使用 25 MHz 配置,如果失败,随后会尝试 使用 14.7456 MHz,如果失败,最后会尝试使用 8 MHz 配置。如果仍失败,会使用较大的 超时值重复执行上述操作 (会再次测试三种配置)。如果第二次尝试也失败的话,会生成系: B9 d" F3 u* Q/ s/ V. ~! F 统复位。 2 ]% L0 H; E+ Z' n9 A( P" @
3 G& `0 V' ~3 K0 p1 p, I' q 1. 系统复位后,器件可能会返回到 BL_DFU 循环,也可能执行 Flash 存储器中的代码,具体视连接状态和自 x& F4 ^' q+ P* q4 ^4 Y 举引脚的状态而定。9 W2 c5 H% `$ o3 h! y8 y 2. 先发出 0 Data Download 请求,然后再发出 GetStatus 请求和 Device Reset 请求,即可退出 DFU 模式。' G) p5 ^; `0 e c7 ^! f 3. 六次尝试后 (三种时钟配置均测试两次),会生成系统复位。 1 w2 m8 r I* R6 C9 ]# I5 X, m* A • 如果产品使用 HSE 进行 USB 操作 (连接型产品除外): – 启动时,会测量 HSE (若存在),如果支持,则会配置 USB。如果未检测到 HSE,自举程序将执行系统复位。如果测得的 HSE 时钟值属于不受支持的值,* w- a8 F7 i' d/ g USB 协议将无法正常执行。 • 如果产品使用 HSI 进行 USB 操作。 – 启动时,会使用 HSI 时钟配置 USB。& H* c& [8 V5 Y7 K! O 关于产品配置的更多详细信息,请参见 AN2606。 0 e) p. M) Z" y) O% F! S
1. 系统复位后,器件可能会返回到 BL_DFU 循环,也可能执行 Flash 存储器中的代码,具体视连接状态和自2 w! n) f' v1 [$ G# w# S 举引脚的状态而定。" W8 M, k% d% g4 ~ 2. 先发出 0 Data Download 请求,然后再发出 GetStatus 请求和 Device Reset 请求,即可退出 DFU 模式。 3. 对于某些产品,不会为 USB 自举程序操作使用外部振荡器 HSE,而只会使用内部振荡器 HSI。请查阅 AN2606 产品的相关章节,了解需要为每种产品使用哪种振荡器。% i- e) a) B* i0 x x - m" L. Y1 ?9 |: E4 s& P . j: k4 y9 b' X o 2 、USB DFU 自举程序请求 USB DFU 自举程序支持 2004 年 8 月 5 日发布的 1.1 版 “ 器件固件升级通用串行总线器件升4 d$ ^9 e2 H8 ?7 V" ^& Z 级规范 ” 规定的 DFU 协议和请求。关于这类请求的更多详细信息,请参见规范。 表 2 和 表 3 列举了 DFU 类特有的请求及其参数。 表 表 2. DFU " d$ e1 o* t/ ^2 Z) i* v$ E .....( D! W! f( k+ F' h ^! H! W7 y 3 X) C! \+ `8 o2 E f% v4 i 阅读更多内容,请下载文档: 下载地址1>> 下载地址2>>- o1 ^/ @" j1 W2 ? / h. D% `, A: l: o/ O, I ; Y3 ]0 D9 x3 `8 v! t0 B |
最全USB HID开发资料,悉心整理一个月,亲自测试
【源码】STLINK-V3MINI 高速USB仿真器,成功改刷【高速CMSIS-DAP】
STM32 USB CDC 虚拟多串口
实战经验 | 选择USBX模块生成USB CDC ACM无PD的项目
STM32 USB HID键盘例程
刘氓兔的杂谈【001】-片上USB 高速PHY
【经验分享】在进行 USB CDC 类开发时,无法发送 64整数倍的数据
在线直播|无需编写任何代码即可在STM32上实现USB-C Power Delivery
圈圈发布USB图书第二版有感,以及分享一些我学习USB过程...
USB Audio设计与实现
微信公众号
手机版
摘录了部分,底部有下载链接可下载全文啊..
下载下来还是英文版本的& y6 a, u: |9 P$ U) i