保罗·阿尔坎塔拉
RTAC Americas
2012年墨西哥
USB 设备固件更新 (DFU) 引导加载程序提供了一种简单可靠的方法,可以将新的用户应用程序加载到已预加载 USB DFU 引导加载程序的设备中。加载后,新的用户应用程序就可以在MCU中运行。USB DFU 引导加载程序需要在 PC 上运行的应用程序(USB DFU PC 应用程序)。DFU PC 应用程序支持使用 USB DFU 规范类中规定的特定请求将固件加载到设备。
支持以两种方式枚举USB DFU引导加载程序:
-USB复合设备模式:也称为运行时模式。它由一个 DFU 设备加上另一个 USB 设备类组成。对于此实现,人机界面
设备(HID)鼠标设备用于避免增加引导加载程序内存大小。进入此模式之前,MCU 必须处于以下状态:
-DFU 设备模式:当 DFU 准备根据 USB DFU PC 应用程序的请求上传或下载固件映像时使用。在此模式之前,MCU 处于 USB 复合设备模式。
引导加载程序是一个小型应用程序,用于将新的用户应用程序加载到设备中。因此,引导加载程序需要能够在用户应用程序和引导加载程序模式下运行。举个例子:
重置后,设备尝试运行用户应用程序。如果未找到用户应用程序或应用程序已损坏,设备将自动进入引导加载程序模式。如果应用程序有效并且用户想要运行引导加载程序,则需要进行外部干预
例如在重置时按下特定键即可强制设备进入引导加载程序模式。
附有完整的应用说明和软件。
DFU PC Demo 软件的源代码是否可用(或者可以提供)?
感谢您的评论。PLL 通过。代码有效,我将使用自己的代码测试引导加载程序。
网站上应该修改代码。
是
是的,VID 和 PID 在 usb_descriptor.c 中定义文件。
PC inf文件中的VID和PID也需要修改。
将 MCG_C2 的值更改如下:
// MCG_C2 = MCG_C2_RANGE(2) | MCG_C2_HGO_MASK | MCG_C2_EREFS_MASK | MCG_C2_IRCS_MASK;
MCG_C2 = (MCG_C2_LOCRE0_MASK | MCG_C2_RANGE0(1) | MCG_C2_EREFS0_MASK);
我已经在 IAR EW650+ FRDM-KL25Z上尝试过了。它不起作用。当我查看调试器时。这与 TWR 和 FRDM 之间的 GPIO 差异无关。我发现它挂在时钟设置 pll_init() 中。
主运动学.c锁相环初始化(pll_init)
SIM_CLKDIV1 = 0x1003000 // OUTDIV1 = 0x01, OUTDIV4 = 0x03
MCG_C2 = 0x2D // RANGE=2, HGO=1, EREFS=1, LP=0, IRCS=1
MCG_C1 = 0x98 // CLKS=2, FRDIV=3
......
#ifndef EXTERNAL_OSC
/* 等待振荡器初始化 */
while (!(MCG_S & MCG_S_OSCINIT_MASK)) //<=== 永远循环 OSCINIT
{;}
#endif
目前我对KL25Z还不熟悉。您能给出一些建议吗?
这与 MCF51JM 兼容吗?
非常感谢这个非常有用的应用说明。
我想知道是否可以修改 USB VID/PID(因为我的公司拥有一个供应商 ID...)?
顺祝商祺!
AV