正在学习USB的几个实验,其中的DFU遇到了困难。
将DFU程序烧写到开发板,然后使用DFUSe Demonstration将STM32F10xUSBLibUSBLibdemosDevice_Firmware_Upgradeimages 中的
joystickmouse.dfu去upgrade CPU,重启运行,正常。
但问题:
原先运行正常的LCD1620,用DFU File Manager 生成DFU文件,upgrade到
CPU中去却不运行。经查,0x8003000处为fffff,说明程序没写进去。
什么原因呢?
原先的地址设定是0x8000000,是不是要改为0x8003000,我试着改了,但一改
连原先运行正常的程序都不运行了!
怎么设置才对呢?
请高手指点!
DFU ≠ ISP
DFU = Device Firmware Upgrade,意思是“设备固件升级”,关键是升级;升级的意思是在现有应用程序的基础上,改进一些部分,增加一些部分,修改一些错误。
应用程序要满足DFU的要求,设计时通常分为两个部分。第一个部分包含DFU程序,即接收升级程序并执行对的Flash擦除、编程等操作,第一个部分还包括应用程序中不需要升级的部分,如标准的库函数等;第二个部分包含那些预留以后需要升级的部分。
从上面的概念上看,楼主的要求不属于DFU的范畴,属于ISP的范畴;原本的应用程序是joystickmouse,可你却要用另外一个完全不相关的LCD应用程序去套,后果可想而知了。
请楼主仔细地阅读一下那个joystickmouse的例子,你将更加深入地了解如何书写满足DFU要求的Firmware,谢谢。
问题已解决
晚上好好睡了一觉,早晨恍然大悟。
现在只需要用JTAG将DFU程序固化到CPU中,就可以将任一应用程序通过USB直接DOWNLOAD到CPU中(不再需要JTAG),当然可以是整个程序,或部分程序。
我认为香水城的说法有些教条,升级也可以是全面更新(操作简单),也可以是部分更新(保密性好),甚至只更新某个常数表。
通过JTAG将程序烧写到FLASH中是ISP(如固化DFU),之后通过DFU将应用程序烧写到FLASH中就是IAP了,不论每次烧写的应用程序有多大差别。(其实那已经是一个编译好的HEX文件了)。
多谢香水城的答复
楼上能分享一下成功经验吗?
楼上能分享一下成功经验吗?
哈哈,我说的是基本原则,确实比较教条
老实说,那个DFUSe Demonstration我还没来得及看,没想到他们已经写成了类似USB ISP的东西,变成一个通用的DFU,这样真是方便很多。
谢谢楼主的尝试和分享,下次等我有时间再来向您请教。
这个好玩,改天我也来自己做一个USB接口的BOOT~~~
关于DFU的文档
再DFU的用户手册UM0424中有这样一句话
“请参阅文档“DfuSe File Format Specification”(UM0391). 以获得更详细的信息。”
但是这个
UM0391我怎么都没找到。。。楼主你有吗?
回7楼,你好像看的是旧版本吧
我刚下载了UM0424,没有看到你说的那句话,在哪一页?第几行?
请下载最新版本看看。