前言
本应用笔记说明了 STM32 微控制器自举程序中使用的 USB DFU 协议。它详细说明了每个
支持的指令。若需器件自举程序 USB 硬件资源和要求的更多信息,请参考 “STM32 系统存
储器自举模式 ” 应用笔记 (AN2606)。
目录
1 自举程序代码序列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2 USB DFU自举程序请求 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 8
3 DFU自举程序指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10
4 DFU_UPLOAD请求指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
4.1 Read Memory . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . 12
4.2 Get 指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
5 DFU_DNLOAD 请求指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14
5.1 Write memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
5.2 Set Address Pointer 指令 . . . . . . . . . . . . . . . . . . . . . . . . . . 18
5.3 Erase 指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
5.4 Read Unprotect 指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20
5.5 Leave DFU mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
6 自举程序协议版本演进 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
7 版本历史 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
表格索引
表 1. 适用产品 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
表 2. DFU 类请求. . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . 8
表 3. DFU 类特有的请求汇总. . . . . . . . . . . . . . . . . . . . . . . . .. . . 8
表 4. DFU 自举程序指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
表 5. 自举程序协议版本 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
表 6. 文档版本历史 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
表 7. 中文文档版本历史 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
图片索引
图 1. STM32 连接型器件的自举程序 . . . . . . . . . . . . . . . . . . . . . . . . 6
图 2. 其它 STM32 器件的自举程序 . . . . . . . . . . . . . . . . . . . . . . .. . 7
图 3. DFU_UPLOAD 请求:器件端 . . .. . . . . . . . . . . . . . . . . . . . . . . 13
图 4. DFU_UPLOAD 请求:主机端 . . . . . . . . . . . . . . . . . . . .. . . . . . 13
图 5. Download 请求:器件端 . . .. . . . . . . . . . . . . . . . . . . . . . . 15
图 6. Download 请求:主机端 . . . . . . . . . . . . . . . . . . .. . . . . . . . 16
图 7. Write memory:器件端 . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
图 8. Set Address Pointer 指令:器件端 . . . . . . . . . . . . . . . . . . . . . 19
图 9. Erase 指令:器件端 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
图 10. Read Unprotect 指令:器件端 . . . . . . . . . . . . . . . . . . . . . . . 21
图 11. Leave DFU 操作:器件端 . . . . . . . . . . . . . . . . . . . . . . . . .. 23
自举程序代码序列
不同版本的自举程序 DFU 在协议 (请求和指令)方面没有区别。要查看具体的区别列表,
请参见第 6 节。
进入系统存储器自举模式并且 STM32 器件已配置完毕后 (更多详细信息,请参见
AN2606),自举程序代码会配置 USB 及其中断,并会等待 “ 枚举完成 ” 中断。
插入 USB 线缆之后,会立即执行 USB 枚举 (如果 USB 线缆已插入,则会立即执行 USB
枚举)。如果不希望 STM32 进入 USB DFU 自举程序,必须在复位前先拔出 USB 线缆。
自举程序版本会返回到 bcd 器件字段 MSB 中的器件描述符 (示例:0x2000 = 版本 2.0)。
对于互连型 USB DFU 自举程序,器件会先尝试使用 25 MHz 配置,如果失败,随后会尝试
使用 14.7456 MHz,如果失败,最后会尝试使用 8 MHz 配置。如果仍失败,会使用较大的
超时值重复执行上述操作 (会再次测试三种配置)。如果第二次尝试也失败的话,会生成系
--------------------------------------