打印
[STM32F1]

DFU下载程序成功,但验证时报数据不匹配

[复制链接]
1854|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yangwc|  楼主 | 2014-5-9 16:09 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
程序下载完成后验证时报在0x08003400这个地址数据不匹配。仿真时发现Jump_to_Application(0x20000018)=0x00000000; 然后程序就跳转到HardFault_Handler中。

matching not good.jpg (60.17 KB )

matching not good.jpg
沙发
yangwc|  楼主 | 2014-5-9 17:54 | 只看该作者
应该是DfuSe_Demo擦除不彻底的问题。用Keil下载时选择“Erase full chip”,用DfuSe_Demo下载应用程序就不会出现验证数据不匹配的问题。在离开DFU模式后,应用程序也能够正常执行。此前一直出现问题是选择“Erase Sectors”导致的。但是用DfuSe_Demo第二次下载应用程序就仍然会出现数据不匹配的问题。但这是数据不匹配的地址变成了偏移起始地址2K的地方。

0x08003800数据不匹配.jpg (56.43 KB )

0x08003800数据不匹配.jpg

使用特权

评论回复
板凳
mmuuss586| | 2014-5-9 20:19 | 只看该作者
生成HEX文件,这个地方怎么写的

使用特权

评论回复
地板
yangwc|  楼主 | 2014-5-12 10:42 | 只看该作者
mmuuss586 发表于 2014-5-9 20:19
生成HEX文件,这个地方怎么写的

地址的配置应该是没有问题的,不然为什么第一次用DFU能正常工作,后面就不行呢?我看了一下USB-FS Device Lib,没有找到执行擦除后再将Flah读出来做验证。我觉得还是DFU Demo的擦除有问题。我自己添加一段擦除代码进去试试看。


C:\Documents and Settings\Charles Yang\Desktop

Application Start Address.jpg (11.02 KB )

Application Start Address.jpg

使用特权

评论回复
5
yangwc|  楼主 | 2014-5-20 15:49 | 只看该作者
本帖最后由 yangwc 于 2014-5-20 15:50 编辑

原来是由于Flash类型选择错误造成的。
       我用的芯片型号是STM32F103CBT6,但是DFU代码中却将Flash类型描述成了256段,每段2K字节。
       STM32F103CBT6的Flash是128页,每页1K字节。

       改正过来后,果然可以不限次数使用DFU更新程序。

right_mapping.png (42.66 KB )

right_mapping.png

medium-density devices.png (12.6 KB )

medium-density devices.png

Flash module organization(medium-density devices).png (34.64 KB )

Flash module organization(medium-density devices).png

Flash memory size.png (4.36 KB )

Flash memory size.png

error_mapping.png (46.54 KB )

error_mapping.png

使用特权

评论回复
6
逍遥派掌门| | 2014-5-20 16:21 | 只看该作者
不错,留个爪。

使用特权

评论回复
7
yangwc|  楼主 | 2014-5-22 10:52 | 只看该作者

晕,仍然有不稳定情况发生。有些板子用第二次DFU时验证不通过。有些板子第一次DFU时验证不通过。有些板子第6次DFU时验证不通过,但重试一次就好了,再试多一次就又不行了。
搞不清楚这种不稳定情况是怎么发生的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

32

帖子

0

粉丝