This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器/EK-TM4C1294XL:TI-RTOS USB DFU 示例在编译器 ARM CGT v18.12.1.LTS 中失败、可与 v2.5.9配合使用

Guru**** 2615655 points

Other Parts Discussed in Thread: EK-TM4C1294XL

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/778488/compiler-ek-tm4c1294xl-ti-rtos-usb-dfu-example-fails-with-compiler-arm-cgt-v18-12-1-lts-works-with-v2-5-9

器件型号: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){
/*空*/
}
} 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Tom、

    新版本的 XDCtools 和编译器与用于 TivaC 2.16的 TI-RTOS 不兼容。 我会坚持使用那些用来验证版本的版本。 发行说明中记录了这些内容。 此外、还有一个外部发布的 JIRA 讨论它: cqweb.ext.ti.com/.../TIRTOS-1887

    Todd
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Todd、
    好的、感谢您的建议。 我将坚持使用用于验证版本的版本。
    不幸的是、我似乎无法访问 JIRA。