0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于DfuSe工具从APP跳转到DFU模式

STM32单片机 来源:工程师曾玲 2019-02-02 17:41 次阅读

1

前言

‍‍我们之前经常有讲到过如何通过USB的DFU方式来对固件进行升级,在示例中我们通常是通过一个按键来触发APP跳转到BOOT从而进入到DFU升级模式。但是也有一种情况,客户的环境是没有任何按键或者其它触发条件,只有一个USB口连接运行Windows操作系统上位机。这不,前不久就碰到这么个客户,下位机MCU端仅仅只有一个USB口连接上位机,且MCU端与上位机之间的USB是常连的,并不能通过USB的拔插操作来触发APP的跳转,在此情况下,我们又该如何来实现客户的需求?

2

分析

基于DfuSe工具从APP跳转到DFU模式

‍Figure1 BOOT与APP在内部FLASH中的关系

‍如上图所示,在MCU内部FLASH中,BOOT与APP同时存在,BOOT为DFU模式,负责对固件进行升级,而APP(Run-time模式)为客户的应用程序。当APP运行时,通过某个事件触发(DFU_DETACH)程序从APP跳转到BOOT中从而进入到DFU模式中。

基于DfuSe工具从APP跳转到DFU模式

Figure 2 reconfiguration phase

‍‍这个DFU_DETACH的操作在这里我们可以通过PC端软件DfuSe Demo来触发。

基于DfuSe工具从APP跳转到DFU模式

Figure 3 DfuSe Demo

‍‍在进入到DFU模式时,DfuSe Demo软件的运行界面如上所示,上图界面中有一个“Leave DFU Mode”的按键,通过它可以使运行在MCU的程序从DFU模式切换到APP中。同时我们也发现,在按键“Leave DFU Mode”的左边有一个灰色按键“Enter DFU Mode/HID Detach”,从字面就可以知道,它应该是进入到DFU模式的按键,在APP模式下此按键应该是激活的,但是,在进入到APP模式后,此界面就检测不到DFU设备了,此软件将不再可用。那么我们又将如何来激活这个“Enter DFU Mode/HID Detach”按键呢?

从帮助文档可知,在APP模式时,当DfuSe Demo这个软件识别到一个特定的HID设备时,“Enter DFU Mode/HID Detach”按键将激活,通过进一步了解,我们知道此时DfuSe Demo这个软件是需要使能此项功能才可以,所幸地是,我们已经有了此软件,在与此文对应的附件中,可以找到一个名为DfuSeDemo_A.exe的可执行程序,将它拷贝到DfuSeDemo的安装目录下,如下图所示:

基于DfuSe工具从APP跳转到DFU模式

Figure 4 DfuSeDemo_A

当运行在APP模式下时如下所示:

基于DfuSe工具从APP跳转到DFU模式

‍Figure5 APP模式

如上图所示,在APP模式下时,当程序检测到有效的HID设备时,DfuSe Demo的”Available DFU Device”下拉框中会显示这个HID设备,并且“Enter DFU Mode/HID Detach”按键激活。当按下此键时,MCU会重启并进入到DFU模式。当然此APP是需要实现一个符合某种要求的HID设备才行。下面我们通过制作这样一个APP来讲解。

3

制作APP

我们基于之前DFU培训时使用的STM32F072-Discovery板来实现此APP。

打开STM32CubeMX软件新建一个基于STM32F072RB的工程,使能USB和RTC外设,RTC我们主要用它的备份域寄存器,用来保存跳进入到DFU模式的标志。

Pinout如下所示:

Figure 6 pinout

使用HSI48作为系统时钟源,同时给USB提供48M时候,这样可以省一个外部晶振,RTC就使用LSI时钟源,我们不要求它的时间精确度,只求备份域寄存器可用。

基于DfuSe工具从APP跳转到DFU模式

Figure 7 clock configuration

然后我们将USB类选择“Custom Human Interface Device(HID)”,USB中断等级设置为1,堆为0x500,栈大小设置为0x2000,然后生成工程。

打开usbd_custom_hid_if.c文件,找到CUSTOM_HID_ReportDesc_FS,修改报告描述符为:

基于DfuSe工具从APP跳转到DFU模式

然后找到CUSTOM_HID_OutEvent_FS函数,修改为:

基于DfuSe工具从APP跳转到DFU模式

如上代码所示,只有当PC端软件DfuSeDemo检测到具有这个报告描述符的HID设备后才会认可其为满足要求的HID设备,并将其显示在设备列表中,按键“Enter DFU Mode/HID Detach”激活。当用户按下此按键后,DfuSeDemo会向HID设备发送一条SetFeature指令。

当MCU收到SetFeature指令后,往备份域寄存器写入0x32F2作为进入DFU模式的标志,然后重启切换到BOOT,接下来在BOOT内如果程序检测到备份域寄存器的标志时则进入到DFU模式。整个过程如图2所示。

当然,APP还需要修改FLASH中的偏移位置,通过工具烧录到0x0800 7000的位置,这个在之前DFU培训时已经讲述过如何操作了,这里就不具体再重复了,有兴趣的同学可以查看此文档附件内的APP源码。

接下来我们再来看看BOOT程序中检测跳转标志的过程:

基于DfuSe工具从APP跳转到DFU模式

如上代码所示,只有当

jump2App ==JUMP_FLAG_APP时程序才会跳转到APP中运行,否则进入到DFU模式。

4

总结

使用此方法毕竟在APP中实现了一套HID,如果不是必要的话,建议还是使用按键的方式来触发从APP跳转到DFU模式,除非遇到像本文中客户的情况,或者APP本身就需要实现某个USB类的功能,此时可以做成USB复合设备,其中一个HID设备就是本文中的HID设备,这样PC端的软件DfuSe Demo也可以识别。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • usb
    usb
    +关注

    关注

    59

    文章

    7422

    浏览量

    258032
  • 上位机
    +关注

    关注

    26

    文章

    860

    浏览量

    54039

原文标题:教您如何通过DfuSe工具控制程序跳进DFU模式

文章出处:【微信号:STM32_STM8_MCU,微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    psoc6在M0中设置好XIP模式后再跳转到M4中,M4可以直接运行于XIP模式吗?

    SMIF的中断应该配置在M0还是M4? 第二:基于DFU情况下,APP0运行于内部FLASH,APP1全部运行于外部FLASH,那我在APP0 设置XIP
    发表于 02-19 08:01

    TC387无法bootloader跳转到APP运行怎么解决?

    最近在开发TC387的bootloader软件,在使用__asm("ja (0xA0030000)")指令跳转到APP程序的入口地址时,程序会进入debug,此处
    发表于 03-06 06:38

    基于DfuSe工具APP跳转到DFU工具附件()无法下载的原因?

    我们在使用STM32F103VET6开发一款产品中遇到了问题。使用DFU通过USB升级固件,但是产品中并没有按键可以用来切换进入DFU模式,刚好看到ST官网中资料有可以通过DFU
    发表于 03-08 07:21

    STM32H743APP跳转到bootloader不成功怎么解决?

    各位大神好,遇到一个奇怪的问题,我APP跳转到bootloader不成功,但是bootloader升级没有问题,重新上电也可以运行,但是就是无法跳转成功,源代码如下,希望有人能解答下
    发表于 04-01 08:12

    【CANNON试用体验】STM32 DFU下载与 DFU生成工具

    STM32支持DFU模式,可以通过USB下载固件,一切搞定。DFU是通过STM32的USB下载的,所以STM32的USB接口得引出。1. 下载安装ST的DFU下载
    发表于 04-23 22:19

    TM4C129程序跳转:请问如何boot跳转到App

    dear TI staff,现在在用TM4C129做升级功能,采用Boot/App架构,boot放置在flash0x0~0x10000,则App起始地址为0x10000,现在想请问下如何boot
    发表于 08-17 07:06

    DFU模式下的STM设备无法被DfuSe演示应用程序识别

    大家好, 我使用iNemo应用程序以DFU模式进入设备(STM32F103RE),但是当我打开应用程序DfuSe演示时,它未列在可用设备列表中。 在设备管理器中,我可以看到它有一个条目:STM32
    发表于 09-17 12:53

    切换到DFU模式有问题

    捕获一些数据。4.尝试iNEMO Suit选项进入DFU模式。 - 它显示设备已切换到DFU模式的消息,但程序''STDFU Tester
    发表于 09-17 11:47

    F28377d的bootloader无法跳转到APP

    指令,初始化flash api,然后接收bin文件写入flash。写入完成后flash读出进行一个简单的校验,若校验通过则跳转到APP 3、若5秒钟没有收到can升级指令,直接跳转
    发表于 09-18 09:32

    stm32如何进入dfu模式

    DFU类协议进行产品固件的加载或更新。关于STM32产品的DFU程序下载和升级,ST官方有相关的资料文档。搜索DFUse下载相关资料。有个用户手册UM0412详细介绍了如何利用ST官方软件工具
    发表于 08-09 08:09

    STM32 IAP - Boot跳转到APP的方法

    APP,则直接跳转到APP并运行。本文仅介绍如何Bootloader跳转到APP,以下为
    发表于 01-27 06:16

    使用的是Windows 10 Pro 64位,DFUse应用程序找不到设备怎么解决?

    我正在使用基于 STM32L476 的 STLKT01V1 SensorTile。由于 STLKT01V1 无法选择硬件的 DFU 更新,在我的固件中,我实现了一个跳转到嵌入式引导加载程序的功能,如
    发表于 01-16 08:11

    如何BOOT跳转到APP代码?

    你好恩智浦团队,我正在 S32K344 平台上开发引导加载程序。当我试图引导加载程序跳转到 APP 时遇到了一个棘手的问题, 这是我的示例代码:typedef void (*AppAddr
    发表于 03-17 07:57

    STM32 IAP - Boot跳转到APP

    简单IAP设计思路:单片机上电首先运行BootLoader程序; Bootloader如果检测到需要更新APP,则首先进行更新,更新完成后跳转到APP并运行; Bootloader如果检测到不需要
    发表于 12-03 14:21 7次下载
    STM32 IAP - Boot<b class='flag-5'>跳转到</b><b class='flag-5'>APP</b>

    APM32F003X6_TMR_从Bootloader跳转到APP,TMR4

    APM32F003X6_TMR_从Bootloader跳转到APP,TMR4
    发表于 11-09 21:03 0次下载
    APM32F003X6_TMR_从Bootloader<b class='flag-5'>跳转到</b><b class='flag-5'>APP</b>,TMR4