请解惑:为何Upgrade没成功

flyingzero   2007-12-27 21:34 楼主
正在学习USB的几个实验,其中的DFU遇到了困难。

将DFU程序烧写到开发板,然后使用DFUSe Demonstration将STM32F10xUSBLibUSBLibdemosDevice_Firmware_Upgradeimages 中的
joystickmouse.dfu去upgrade CPU,重启运行,正常。

但问题:

原先运行正常的LCD1620,用DFU File Manager 生成DFU文件,upgrade到
CPU中去却不运行。经查,0x8003000处为fffff,说明程序没写进去。
什么原因呢?
原先的地址设定是0x8000000,是不是要改为0x8003000,我试着改了,但一改
连原先运行正常的程序都不运行了!
怎么设置才对呢?
请高手指点!

回复评论 (7)

DFU ≠ ISP

DFU = Device Firmware Upgrade,意思是“设备固件升级”,关键是升级;升级的意思是在现有应用程序的基础上,改进一些部分,增加一些部分,修改一些错误

应用程序要满足DFU的要求,设计时通常分为两个部分。第一个部分包含DFU程序,即接收升级程序并执行对的Flash擦除、编程等操作,第一个部分还包括应用程序中不需要升级的部分,如标准的库函数等;第二个部分包含那些预留以后需要升级的部分。

从上面的概念上看,楼主的要求不属于DFU的范畴,属于ISP的范畴;原本的应用程序是joystickmouse,可你却要用另外一个完全不相关的LCD应用程序去套,后果可想而知了。

请楼主仔细地阅读一下那个joystickmouse的例子,你将更加深入地了解如何书写满足DFU要求的Firmware,谢谢。
点赞  2007-12-28 08:45

问题已解决

晚上好好睡了一觉,早晨恍然大悟。

现在只需要用JTAG将DFU程序固化到CPU中,就可以将任一应用程序通过USB直接DOWNLOAD到CPU中(不再需要JTAG),当然可以是整个程序,或部分程序。

我认为香水城的说法有些教条,升级也可以是全面更新(操作简单),也可以是部分更新(保密性好),甚至只更新某个常数表。

通过JTAG将程序烧写到FLASH中是ISP(如固化DFU),之后通过DFU将应用程序烧写到FLASH中就是IAP了,不论每次烧写的应用程序有多大差别。(其实那已经是一个编译好的HEX文件了)。

多谢香水城的答复
点赞  2007-12-28 09:50

楼上能分享一下成功经验吗?

                                 楼上能分享一下成功经验吗?
点赞  2007-12-28 11:05

哈哈,我说的是基本原则,确实比较教条

老实说,那个DFUSe Demonstration我还没来得及看,没想到他们已经写成了类似USB ISP的东西,变成一个通用的DFU,这样真是方便很多。

谢谢楼主的尝试和分享,下次等我有时间再来向您请教。
点赞  2007-12-28 11:09

这个好玩,改天我也来自己做一个USB接口的BOOT~~~

                                  
点赞  2007-12-28 11:14

关于DFU的文档

再DFU的用户手册UM0424中有这样一句话
“请参阅文档“DfuSe File Format Specification”(UM0391). 以获得更详细的信息。”
但是这个
UM0391我怎么都没找到。。。楼主你有吗?
点赞  2007-12-28 19:44

回7楼,你好像看的是旧版本吧

我刚下载了UM0424,没有看到你说的那句话,在哪一页?第几行?

请下载最新版本看看。
点赞  2007-12-28 21:48
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复