AN3156+ s) }+ x4 X! t) G0 h 应用笔记 STM32 自举程序中使用的 USB DFU 协议 前言- b6 X0 G- x8 }. A0 n) B 本应用笔记说明了 STM32 微控制器自举程序中使用的 USB DFU 协议。它详细说明了每个 支持的指令。若需器件自举程序 USB 硬件资源和要求的更多信息,请参考 “STM32 系统存4 t! A3 J2 I9 @ 储器自举模式 ” 应用笔记 (AN2606)。! h! g7 ] W% Q# Q! m" T7 D 7 L8 W$ |4 o8 j& x1 f2 z4 B 目录 1 自举程序代码序列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 f3 w2 P0 t9 q* e9 q% J 2 USB DFU 自举程序请求 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3 DFU 自举程序指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 4 DFU_UPLOAD 请求指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12& c; D) }9 B7 [/ A# M 4.1 Read Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 4.2 Get 指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 ^- P# j5 J* `. I- r8 ?* S 5 DFU_DNLOAD 请求指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 5.1 Write memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 5.2 Set Address Pointer 指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 m5 L/ V5 ?& K0 B4 |. ? 5.3 Erase 指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 q) d' k3 T$ C; c2 `) N7 Y 5.4 Read Unprotect 指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 5.5 Leave DFU mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 6 自举程序协议版本演进 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 7 版本历史 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 _) e$ Y; `4 a1 i+ L4 m . S; b5 t% M, ^2 h; y! M+ v9 { 1 E1 W8 R5 I6 b& e 1、自举程序代码序列 不同版本的自举程序 DFU 在协议 (请求和指令)方面没有区别。要查看具体的区别列表,+ c+ d4 m1 v6 L/ W! H6 | 请参见第 6 节。 进入系统存储器自举模式并且 STM32 器件已配置完毕后 (更多详细信息,请参见5 F# w$ @* k% m& b+ ]) j- t AN2606),自举程序代码会配置 USB 及其中断,并会等待 “ 枚举完成 ” 中断。" ^( Y, X# B2 J 插入 USB 线缆之后,会立即执行 USB 枚举 (如果 USB 线缆已插入,则会立即执行 USB* J: @. a6 F2 K9 }: K 枚举)。如果不希望 STM32 进入 USB DFU 自举程序,必须在复位前先拔出 USB 线缆。 自举程序版本会返回到 bcd 器件字段 MSB 中的器件描述符 (示例:0x2000 = 版本 2.0)。 对于互连型 USB DFU 自举程序,器件会先尝试使用 25 MHz 配置,如果失败,随后会尝试 使用 14.7456 MHz,如果失败,最后会尝试使用 8 MHz 配置。如果仍失败,会使用较大的 超时值重复执行上述操作 (会再次测试三种配置)。如果第二次尝试也失败的话,会生成系 统复位。- g/ m) @" U$ ]1 B U e ' H( O3 F1 O. O' j: f3 n) V0 [ 1. 系统复位后,器件可能会返回到 BL_DFU 循环,也可能执行 Flash 存储器中的代码,具体视连接状态和自* `) ~5 m# G, D' J9 N$ f1 m 举引脚的状态而定。+ R5 Z+ _* N) ` 2. 先发出 0 Data Download 请求,然后再发出 GetStatus 请求和 Device Reset 请求,即可退出 DFU 模式。5 H( o" d/ d; l+ U" r1 h 3. 六次尝试后 (三种时钟配置均测试两次),会生成系统复位。$ i& N8 S$ V; \$ }' r 0 `4 d( C$ O! T- X1 X2 {, h# ` / L0 p- \% }2 K/ r9 U- { • 如果产品使用 HSE 进行 USB 操作 (连接型产品除外):' V" x' j& R. G" F! } – 启动时,会测量 HSE (若存在),如果支持,则会配置 USB。如果未检测到 HSE,自举程序将执行系统复位。如果测得的 HSE 时钟值属于不受支持的值, USB 协议将无法正常执行。 • 如果产品使用 HSI 进行 USB 操作。 – 启动时,会使用 HSI 时钟配置 USB。0 Y B+ N0 p4 i, r 关于产品配置的更多详细信息,请参见 AN2606。 1. 系统复位后,器件可能会返回到 BL_DFU 循环,也可能执行 Flash 存储器中的代码,具体视连接状态和自+ ~% x; R4 @. l. p" P 举引脚的状态而定。 2. 先发出 0 Data Download 请求,然后再发出 GetStatus 请求和 Device Reset 请求,即可退出 DFU 模式。 3. 对于某些产品,不会为 USB 自举程序操作使用外部振荡器 HSE,而只会使用内部振荡器 HSI。请查阅) C+ I; G, B) t8 m$ k& h AN2606 产品的相关章节,了解需要为每种产品使用哪种振荡器。 3 F: y7 Q' [& g4 ?. O( M7 W : F+ i; p" u# D+ B/ |4 x( _* S 2 、USB DFU 自举程序请求. J5 r4 k. X7 N& M USB DFU 自举程序支持 2004 年 8 月 5 日发布的 1.1 版 “ 器件固件升级通用串行总线器件升 级规范 ” 规定的 DFU 协议和请求。关于这类请求的更多详细信息,请参见规范。 表 2 和 表 3 列举了 DFU 类特有的请求及其参数。 表 表 2. DFU .....! f' S" Q6 t7 ]2 N , m7 E2 V% c! e6 T! W 9 |) _5 x' M2 S2 n- A" s 阅读更多内容,请下载文档: 下载地址1>> 下载地址2>>5 N+ l1 w% w h& j Z6 J, J 4 ~4 i6 v$ o: E% T- W " K7 M3 W" V) R |
最全USB HID开发资料,悉心整理一个月,亲自测试
USB Audio设计与实现
【MCU实战经验】+STM32F107的USB使用
圈圈发布USB图书第二版有感,以及分享一些我学习USB过程...
STM32F4-DISC 实现USB主机(U盘)和USB设备(虚拟串口)自动切换
STM32 USB-HID通信移植步骤STM32 USB HID键盘例程
【经验分享】在进行 USB CDC 类开发时,无法发送 64整数倍的数据
如何让CDC类USB设备批量接收64字节以上数据
用STM32F4实现的USB摄像头UVC,配合上位机可识别车牌
STM32 USB CDC 虚拟多串口
摘录了部分,底部有下载链接可下载全文啊..
下载下来还是英文版本的" w. h, K- \0 p1 N( a