Other Parts Discussed in Thread: EK-TM4C1294XL
工具/软件:TI C/C++编译器
CCS v8.3.0.00009
带有 TivaWare_C_Series-2.1.1.71b 的 TI-RTOS 2.16.01.14
XDCTools 3.32.2.25
ARM CGT 5.2.9与18.12.1.LTS
Windows 10版本1809
EK-TM4C1294XL 修订版 D
我使用的是示例 http://processors.wiki.ti.com/index.php/TI-RTOS_USB_DFU 。
使用 ARM CGT v5.2.6或 v5.2.9编译工程时、我可以使用运行时 DFU (dfuprog -m、dfuprog -r -f file.dfu)执行固件更新。 但是、我无法在 LM 闪存编程器(版本1613)中看到该器件。 如果在插入电路板时按下强制更新检查按钮、我可以在 LM 闪存编程器中看到器件。
使用编译器版本高于5.2.9 (我想使用18.12.1.LTS)构建工程时、它会编译并在运行时工作。 发出命令"dfuprog -m"会导致 DFU 器件在设备管理器中正确显示、但在发出命令"dfuprog -r -f usbserialdfu.DFU"后、我会收到消息"Error DFU_ERR_UNKNOWN (-4) reading flash parameters"。 随后、Windows 会显示消息"Unknown USB Device (Device Descriptor Failed)(未知 USB 设备(设备描述符失败))"。
我在运行时模式下使用的驱动程序(VCOM+runtime DFU)是随示例提供的驱动程序(在一台计算机上使用本地测试证书,在第二台计算机上使用 Windows 在测试模式下),分离后用于 DFU 设备的驱动程序来自修补程序 :http://software-dl.ti.com/tiva-c/SW-TM4C/latest/exports/SW-TM4C-2.1.4.178.PATCH-1.0.zip 。
我从 https://e2e.ti.com/support/microcontrollers/other/f/908/t/755577上的帖子中尝试了解决方案 、但它对我不起作用。
这些是示例中的(未被触控)选项:
${COM_TI_RTSC_TIRTTOSTIVAC_INCLUDE_PATH}
${CG_TOOL_ROOT}/包含
${workspace_loc:/${ProjName}}
${COM_TI_RTSC_TIRTTOSTIVAC_INSTALL_DIR}/products/TivaWare_C_Series-2.1.1.71b
请参阅以下示例中与上述论坛帖子中的代码类似的代码。
有人建议我做什么可能出错、我应该改变什么或去哪里看? 谢谢!
//========== dfu.c ===== #include #include #include #include #include #include #include #include #include #include #include #include #include #include "dfu.h" //=== DFU_renumerate ==== void DFU_renumerate (void) { uint32_t ui32SysClock; /*终止 USB 设备控制器并从总线断开*/ USBDCDTerm (0); /*禁用所有中断*/ ROM_IntMasterDisable(); /*禁用 SysTick 及其中断*/ ROM_SysTickIntDisable(); ROM_SysTickDisable(); /*禁用所有处理器中断。 而不是禁用它们 *一次一个、直接写入 NVIC 即可全部禁用 *外设中断。 * HWREG (NVIC_DIS0)= 0xffffffff; HWREG (NVIC_DIS1)= 0xffffffff; HWREG (NVIC_DIS2)= 0xffffffff; HWREG (NVIC_DIS3)= 0xffffffff; HWREG (NVIC_DIS4)= 0xffffffff; /*以120MHz 从 PLL 运行*/ ui32SysClock = MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz | SYSCTL_OSC_main) | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480)、120000000); /*启用并重置 USB 外设*/ ROM_SysCtlPeripheralEnable (SYSCTL_Periph_USB0); ROM_SysCtlPeripheralReset (SYSCTL_Periph_USB0); ROM_USBClockEnable (USB0_BASE、8、USB_CLOCK_INTERNAL); /*等待大约一秒钟*/ ROM_SysCtlDelay (ui32SysClock / 3); /*在 NVIC 级别重新启用中断*/ ROM_IntMasterEnable(); /*调用 USB 引导加载程序*/ ROM_UpdateUSB (0); /*永远不应该来这里*/ while (true){ /*空*/ } }