介绍:
DFU使用USB作为微控制器和编程工具之间的通信信道,通常是PC。DFU类规格书说明中指出所有的DFU命令、状态和数据交换都需要通过端点0进行。命令集和基本协议都定义好了,但是上层协议(数据格式,错误信息等)是客户相关的。也就是说DFU类没有定义数据传输格式(s19,16进制,纯2进制等)
因为一个设备同时进行DFU操作和正常运行活动是不现实的,所以在DFU操作期间必须停止正常运行活动,这就意味着设备必须改变运行模式:也就是说在进行固件更新时打印机不再是打印机了,它是一个flash存储器编程器。但是支持DFU的设备不能自主改变模式,这需要外部(人或者主机操作系统)的干预
阶段:
完成实现固件升级可以分为4个不同阶段。
1.枚举:设备把自身的一些特性告知主机,嵌入在设备正常运行描述符中的一个DFU类接口描述符和相关的函数符能够完成这个目的,并且能够为通过控制管道的类专用的请求提供目标。
2.DFU枚举:主机和设备同意开始固件升级,主机向设备发出USB复位,设备发出第二个描述符集合,并且为传输阶段做准备,这会是相应设备的运行时驱动无效,并使得DFU驱动不受其他目标为该设备通信妨碍,重编程设备的固件。
3.传输:主机将固件映像传输给设备,功能描述符中的参数用于确保非易失性存储器编程的块大小和时序的正确性。状态请求用于保持主机和设备之间的同步。
4.显示:一旦设备向主机报告重编程完成,主机箱设备发送usb复位,设备重枚举并执行升级后的固件。为保证只有DFU驱动加载,有必要在枚举DFU描述符集合改变id-product字段。