一、概述
在做STM32G0 系列单片机的usb dfu功能。按照网上的教程,到官网下载了dfuse 。安装后,配置编写stm32 的BootLoader 功能代码,进入DFU模式(插入usb线)。
二、STM32 Download Firmware Update 驱动安装不成功
问题描述
Windows 能检测到usb的接入,但是识别不到当前设备。
点击STM32 DownLoad Firmware Update 查看驱动信息,提示该设备的驱动程序未被安装。
解决问题
找到DfuSe v3.06 的安装路径,根据自己操作系统的版本,选择对应的驱动文件,直接双击安装。我的系统是win10,路径是C:\Program Files (x86)\STMicroelectronics\Software\DfuSe v3.0.6\Bin\Driver\Win10 双击 dpinst_amd64 安装,问题解决。
三、升级后,校验不通过,无法开机
问题描述
通过dfuse 选择要升级的固件,点击upgrade , 程序显示升级成功。但是重新开机后,程序跑飞,没法开机。重试几次,偶尔能捕抓到程序出现hardfault 。
问题分析解决:
直接通过Jlink 烧录,程序能正常从boot 跳转到APP,app 能正常运行。说明跳转地址的处理,向量表重定向都是没问题的。
写数据出错?
通过Jlink分别读取usb升级前的hex文件和usb升级后的hex文件,并进行比对,发现hex文件中的app部分确实出现个别内容不一致,并且没有规律。 也通过升级工具的校验功能,验证了上述问题。通过dfuse 升级后,点击Verify ,提示如下(matching not good... ):
说明程序想写的数据,跟写完读取出来的数据不一致。
flash擦写函数有bugs?
尝试优化flash擦写函数,禁止中断,检查地址边界。问题都没解决。
最终解决
在百思不得其解的时候,将升级用的usb线,从usb hub拔出,插入机箱的usb口,最终问题解决。搞了半天,原来是线材的问题。
|