硬件、软件背景
- 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
- 下载器:
- STLink/V2
- PWLINK2
- USB转串口:CH340
问题描述
测试ODrive程序时,在配置好ODrive电路、电机参数、TLE5012磁编码器、控制器配置、梯形加减速。参考ODrive踩坑(二)3508电机和TLE5012B磁编码器参数配置、校准、位置闭环模式转动电机(TLE5012B-E1000)。配置完成后,开始电机和编码器校准,输入电机参数校准后,odrivetool无响应。
# 进行电机参数校准(运行后电机会发出哔~的一声)
odrv0.axis0.requested_state = AXIS_STATE_MOTOR_CALIBRATION
进行如下测试:
- ODrive电路板断电重启,odrivetool无响应
- 退出odrivetool,ODrive电路板断电重启后,再启动odrivetool:提示连接设备,说明ODrive电路板与odrivetool没有建立起连接,硬件出了问题
- 退出odrivetool,ODrive电路板断电,拔掉USB头,重新连接USB,ODrive电路板上电,打开odrivetool。仍然无法连接
- 查看设备管理器,插拔USB头,设备管理器没有任何反应。说明硬件根本没有启动USB驱动程序。
- 用STM32CubeProgrammer+STLink重新给STM32F405烧录固件,点击烧录,软件会闪退。更换PowerWriter+PWLINK2给STM32F405烧录固件,烧录成功。再插拔USB头测试,设备管理器仍然没有任何反应。(怀疑MCU出了问题)
- 再次用PWLink2下载程序,一直无法连接到芯片
- 编写最简闪灯程序,用MDK(keil5)+ STLink来测试烧录程序:报错Contents mismatch at: 0800D03AH (Flash=FFH Required=C2H) !Verify Failed!
- 同样的程序,用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。所以会报错。针对这个问题尝试了以下几种方法,目前都无效:
-
在MDK中,Options for target–>Debug–>Settings–>
Flash Download中,去掉Verify,不进行验证。虽然不会报错了,但是用示波器测试,程序任然没有运行。这显然是掩耳盗铃了o(╥﹏╥)o
-
参考用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包问题
-
-
参考Keil : Contents missmatch at:08000E84H Verify Failed!提供的思路:
- 芯片电源引脚是否加了退耦电容?加了
- 电文波是否过大,是否稳定?稳定
- 电路是否虚焊?更换F103RET6,测试能够正常下载使用
- 下载器线太长(可能导致电压、通信不稳)?引线尽量短,问题依然存在
5. MDK中Options for target–>Target–>Memory设置问题?整个工程是用STM32CubeMX生成的,使用的默认设置,尝试过两种IRAM地址,但是问题依然存在
总结
STM32下载烧录出现问题,排查方向:
- 烧录器问题:确认烧录器连接,更换烧录器/连接线
- STM32芯片电源:测试电源引脚供电、纹波大小、退耦电容
- STM32芯片Flash下载设置问题:检查Target选项卡中IROM、RAM地址段,检查Debug选项卡中erase full chip,erase sector,programming algorithm
- IDE软件版本问题:MDK(或者其他软件)版本、STM32 PACK包版本
- 芯片Flash损坏,更换芯片
目前能想到的问题都测试过了,只有新买个芯片更换上去再试了。但是具体问题仍然没有找到,始终觉得是个隐患。