STM32 MDK(Keil5) Contents mismatch错误总结

硬件、软件背景

  • ODrive控制板:ODRIVE V3.6-56V
    • 固件版本:fw-v0.5.1(更新版本的固件不再完全开源,用odriveTool时会报错)
    • 配备耗散电阻:2Ω
  • 编码器:TLE5012B
  • 电机:X2212-13 (安装径向磁铁)
    • KV:980
    • 外转子
    • 槽极数:12N14P
    • 相间内阻:92mΩ
    • 空载电流:0.6A
    • 最大连续功率:385W
    • 最大连续电流:26A/30S
    • 建议使用电流:20~30A
  • 下载器:
  • USB转串口:CH340

问题描述

测试ODrive程序时,在配置好ODrive电路、电机参数、TLE5012磁编码器、控制器配置、梯形加减速。参考ODrive踩坑(二)3508电机和TLE5012B磁编码器参数配置、校准、位置闭环模式转动电机(TLE5012B-E1000)。配置完成后,开始电机和编码器校准,输入电机参数校准后,odrivetool无响应。

# 进行电机参数校准(运行后电机会发出哔~的一声)
odrv0.axis0.requested_state = AXIS_STATE_MOTOR_CALIBRATION

进行如下测试:

  1. ODrive电路板断电重启,odrivetool无响应
  2. 退出odrivetool,ODrive电路板断电重启后,再启动odrivetool:提示连接设备,说明ODrive电路板与odrivetool没有建立起连接,硬件出了问题
    在这里插入图片描述
  3. 退出odrivetool,ODrive电路板断电,拔掉USB头,重新连接USB,ODrive电路板上电,打开odrivetool。仍然无法连接
  4. 查看设备管理器,插拔USB头,设备管理器没有任何反应。说明硬件根本没有启动USB驱动程序。
  5. STM32CubeProgrammer+STLink重新给STM32F405烧录固件,点击烧录,软件会闪退。更换PowerWriter+PWLINK2给STM32F405烧录固件,烧录成功。再插拔USB头测试,设备管理器仍然没有任何反应。(怀疑MCU出了问题)
  6. 再次用PWLink2下载程序,一直无法连接到芯片
  7. 编写最简闪灯程序,用MDK(keil5)+ STLink来测试烧录程序:报错Contents mismatch at: 0800D03AH (Flash=FFH Required=C2H) !Verify Failed!
  8. 同样的程序,用MDK(keil5)+ PWLink2尝试下载烧录,报同样的错误
    在这里插入图片描述

错误分析

Contents mismatch at: 0800D03AH (Flash=FFH Required=C2H) !
Verify Failed!

这个错误说明STLink把程序下载到了STM32芯片中,下载完成后STLink会对STM32芯片内Flash的内容(十六进制)与MDK对应.bin文件中的内容进行验证(Verify)。验证时发现STM32芯片Flash地址0800D03AH处的内容与.bin文件不一致,Flash=FFH(即空,Flash擦除后为FF), 而正确的内容是 Required=C2H。所以会报错。针对这个问题尝试了以下几种方法,目前都无效:

  1. 在MDK中,Options for target–>Debug–>Settings–>
    Flash Download中,去掉Verify,不进行验证。虽然不会报错了,但是用示波器测试,程序任然没有运行。这显然是掩耳盗铃了o(╥﹏╥)o
    在这里插入图片描述

  2. 参考用KL16芯片跑别人的程序出现的BUG_已解决提供的思路:

    • 复位电路硬件出错?下载烧录时,多试几次复位。无效果

    • 擦除整个Flash。测试无效果

    • 用STM32 Cube Programmer读取STM32芯片Flash中内容,用PowerWriter读取.bin/hex文件,对比二者差异。
      在这里插入图片描述

    • keil版本过低?我目前测试的是keil V5.23.0.0+STM32F4x_DFP V2.16.0;keil V5.36.0.0+STM32F4x_DFP V1.0.8,两个版本都无法下载。更换STM32F103芯片后可以正常烧录,应该不是软件的问题、DFP包问题
      在这里插入图片描述
      在这里插入图片描述

  3. 参考Keil : Contents missmatch at:08000E84H Verify Failed!提供的思路:

    • 芯片电源引脚是否加了退耦电容?加了
    • 电文波是否过大,是否稳定?稳定
    • 电路是否虚焊?更换F103RET6,测试能够正常下载使用
    • 下载器线太长(可能导致电压、通信不稳)?引线尽量短,问题依然存在

在这里插入图片描述
5. MDK中Options for target–>Target–>Memory设置问题?整个工程是用STM32CubeMX生成的,使用的默认设置,尝试过两种IRAM地址,但是问题依然存在
在这里插入图片描述

总结

STM32下载烧录出现问题,排查方向:

  1. 烧录器问题:确认烧录器连接,更换烧录器/连接线
  2. STM32芯片电源:测试电源引脚供电、纹波大小、退耦电容
  3. STM32芯片Flash下载设置问题:检查Target选项卡中IROM、RAM地址段,检查Debug选项卡中erase full chip,erase sector,programming algorithm
  4. IDE软件版本问题:MDK(或者其他软件)版本、STM32 PACK包版本
  5. 芯片Flash损坏,更换芯片
    目前能想到的问题都测试过了,只有新买个芯片更换上去再试了。但是具体问题仍然没有找到,始终觉得是个隐患。
  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值