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

[复制链接]
 楼主| yangwc 发表于 2014-5-9 16:09 | 显示全部楼层 |阅读模式
程序下载完成后验证时报在0x08003400这个地址数据不匹配。仿真时发现Jump_to_Application(0x20000018)=0x00000000; 然后程序就跳转到HardFault_Handler中。
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
mmuuss586 发表于 2014-5-9 20:19 | 显示全部楼层
生成HEX文件,这个地方怎么写的
11.JPG
 楼主| 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
 楼主| yangwc 发表于 2014-5-20 15:49 | 显示全部楼层
本帖最后由 yangwc 于 2014-5-20 15:50 编辑

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

       改正过来后,果然可以不限次数使用DFU更新程序。
error_mapping.png
Flash memory size.png
Flash module organization(medium-density devices).png
medium-density devices.png
right_mapping.png
逍遥派掌门 发表于 2014-5-20 16:21 | 显示全部楼层
不错,留个爪。
 楼主| yangwc 发表于 2014-5-22 10:52 | 显示全部楼层

晕,仍然有不稳定情况发生。有些板子用第二次DFU时验证不通过。有些板子第一次DFU时验证不通过。有些板子第6次DFU时验证不通过,但重试一次就好了,再试多一次就又不行了。
搞不清楚这种不稳定情况是怎么发生的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

32

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部