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.

[参考译文] TM4C129XNCZAD:TM4C129的 DFU 枚举故障

Guru**** 2399305 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1108502/tm4c129xnczad-dfu-enumeration-failure-with-tm4c129

器件型号:TM4C129XNCZAD

你好、

我们使用"USB 串行器件固件升级"尝试构建引导加载程序、

/sca-file/__key/communityserver-discussions 组件-files/908/USB_5F00_Serial_5F00_DFU.pdf

除了修改芯片类型以适合我们的电路板(TM4C129)外、所有其他步骤都是根据手册说明完成的、

并遇到无法识别 USB 设备的问题。

我们不知道问题在哪里、请给我建议、谢谢。

 e2e.ti.com/.../bootloaderusb_5F00_10Jun2022.zip

RAY YANG

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

    参考与文档相关的第2部分、构建 TivaWare 引导加载程序。

    RAY YANG

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

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

    您好 Ray、

    该文档引用的驱动程序已过时、可能无法用于 Windows 10。

    请使用我们在 以下位置更新的 USB 驱动程序:https://software-dl.ti.com/tiva-c/SW-TM4C/2.1.4.178/exports/SW-TM4C-2.1.4.178.PATCH-1.0.zip

    或者、如果您的本地计算机上安装了 TivaWare 2.2.0.295、则可以使用位于[Install Path]\TivaWare_C_Series-2.2.0.295\windows_drivers 的驱动程序

    此致。

    Ralph Jacobi

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

    您好、Ralph、

    更新驱动程序、但仍然失败。

    RAY YANG

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

    您好!

    每次将引导加载程序 F/W 下载到 TM4C129后、

    它将从 ResetISR 开始、然后运行"单步执行"到 ProcessorInit、并运行到未知位置、

    且不会移动到263行(如果$defined (BL_HW_INIT_FN_HOOK))。

    RAY YANG

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

    您好 Ray、

    这是预期的、因为 ProcessorInit 正在将代码复制到 SRAM 中、然后在 SRAM 中执行。 因此、IDE 没有用于进一步调试的符号。 可以加载这些文件、但我认为我们还不需要执行该步骤。

    我有时间更详细地查看您的项目、我看到您将 USB_PRODUCT_ID 设置为0xFE。 请尝试将其设置为0xFF。 这可能会影响器件的枚举、因为我们的 USB 驱动程序仅对特定供应商和产品 ID 有效。 您参考的应用手册第22页对此进行了说明。

    此致、

    Ralph Jacobi

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

    您好,Ralph,

    过去、我尝试将 USB_PRODUCT_ID 更改为0xff 或0xFE、但情况没有改善。

    此致、

    RAY YANG

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

    您好 Ray、

    您说过"过去"-是否使用我之前向您提供的最新 USB 驱动程序尝试过0xFF? 因为如果将0xFF 与旧驱动程序一起使用、那么很可能无法正确枚举。

    此致、

    Ralph Jacobi

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

    您好 Ray、

    今天下午、我有时间构建和测试您附加的项目并重新创建问题。 经过简短调查、这是由于 TivaWare 库中为 USB 提供的引导加载程序文件存在设置错误时钟分频值的问题。

    请使用随附的更新的 bl_usbfuncs.c 文件。 使用此更新、我将在 Windows 10中获得正确的枚举:

    e2e.ti.com/.../2046.bl_5F00_usbfuncs.c

    此致、

    Ralph Jacobi

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

    您好、Ralph、

    根据您提供的说明、已经可以成功枚举 USB 设备、

    但无法安装 Windows 驱动程序。

    我们使用此驱动程序"SW-TM4C-2.1.4.178.patch-1.0"。

    操作系统:Windows 10

    RAY YANG

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

    您好、Ralph、

    我发现了需要将 USB 产品 ID 更改为0xff、可以成功安装 Windows 驱动程序的原因、

    感谢您的帮助、非常感谢!

    RAY YANG

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

    您好、Ralph、

    我可以在应用程序端输入以下命令、
    将 TM4C 重置为引导加载程序模式、但随后我再次遇到 USB 枚举故障。 (端口重置失败)

    请提供建议、谢谢!

       //
       //禁用所有处理器中断。  而不是禁用它们
       //一次一个,直接写入 NVIC 即可禁用所有功能
       //外设中断。
       //

       HWREG (NVIC_DIS0)= 0xffffffff;
       HWREG (NVIC_DIS1)= 0xffffffff;
       HWREG (NVIC_DIS2)= 0xffffffff;
       HWREG (NVIC_DIS3)= 0xffffffff;


       //将控制权返回给引导加载程序。  这是对的调用
       //启动加载程序中的 SVC 更新处理程序,永远不会返回。
       //如果确实如此,很可能会发生非常糟糕的事情。

       (*(void (*)(void))(*(uint32_t *) 0x2C))();

    RAY YANG

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

    您好 Ray、

    使用您之前引用的文档构建的引导加载程序是否会发生这种情况?

    与现在相比、获得正确枚举后、您有哪些变化? 您之前使用的是闪存引导加载程序、因此我现在真的不清楚问题是什么。

    此致、

    Ralph Jacobi

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

    您好、Ralph、

    我正在基于此版本的 bootloaderusb_10Jun2022.zip 进行开发、我可以通过 TM4C 进行开发、方法是通过加电检测按钮来确定是否进入引导加载程序模式、这是可能的、USB 枚举成功。

    然后,我使用另一种方法通过在应用程序端发出命令(jumpToBootloader())来重置 TM4C,
    进入引导加载程序模式时、USB 枚举失败。

    代码如下所示。

    空 jumpToBootloader (空)

       //
       //禁用所有处理器中断。  而不是禁用它们
       //一次一个,直接写入 NVIC 即可禁用所有功能
       //外设中断。
       //

       HWREG (NVIC_DIS0)= 0xffffffff;
       HWREG (NVIC_DIS1)= 0xffffffff;
       HWREG (NVIC_DIS2)= 0xffffffff;
       HWREG (NVIC_DIS3)= 0xffffffff;

       //将控制权返回给引导加载程序。  这是对的调用
       //启动加载程序中的 SVC 更新处理程序,永远不会返回。
       //如果确实如此,很可能会发生非常糟糕的事情。

       (*(void (*)(void))(*(uint32_t *) 0x2C))();

    RAY YANG

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

    尊敬的 Ray:

     我建议您通过在 BL_STARTUP_CCS.s 文件上输入断点并执行单步调试来解决问题。 执行 (*(void (*)(void)(*(uint32_t *) 0x2C))()之后、处理器应跳转到0x2C 进行 SVC 调用。  如您所见,它将跳转到 UpdateHandler 处的向量。

        .word   0                               ;; Offset 28: Reserved
        .word   UpdateHandler - 0x20000000      ;; Offset 2C: SVCall handler
        .word   IntDefaultHandler               ;; Offset 30: Debug monitor handler

    查看 UpdateHandler,它最终应该会调用 AppUpdateUSB。  您使用的是 bl_usb.c 中的默认 AppUpdateerUSB 还是具有自定义函数? 您需要通过从 BL_STARTUP_CCS.s 文件开始调试代码、然后查看代码是否跳转到 AppUpdateerUSB 或修改 BL_STARTUP_CCS.s 的自定义函数 如果您自定义 AppUpdateerUSB ,则需要找出它不会再次枚举的原因。  

    UpdateHandler: .asmfunc
        ;;
        ;; Initialize the processor.
        ;;
        bl      ProcessorInit
    
        ;;
        ;; Load the stack pointer from the vector table.
        ;;
        movs    r0, #0x0000
        ldr     sp, [r0]
    
        ;;
        ;; Call the user-supplied low level hardware initialization function
        ;; if provided.
        ;;
     .if $$defined(BL_HW_INIT_FN_HOOK)
        bl      BL_HW_INIT_FN_HOOK
     .endif
    
        ;;
        ;; Call the user-supplied re-initialization function if provided.
        ;;
     .if $$defined(BL_REINIT_FN_HOOK)
        .ref    BL_REINIT_FN_HOOK
        bl      BL_REINIT_FN_HOOK
     .endif
    
        ;;
        ;; Branch to the update handler.
        ;;
     .if $$defined(ENET_ENABLE_UPDATE)
        b       UpdateBOOTP
     .elseif $$defined(CAN_ENABLE_UPDATE)
        .ref    AppUpdaterCAN
        b       AppUpdaterCAN
     .elseif $$defined(USB_ENABLE_UPDATE)
        .ref    AppUpdaterUSB
        b       AppUpdaterUSB
     .else
        b       Updater
     .endif
        .endasmfunc

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

    您好、Charles、

    感谢您的回复、

    AppUpdateerUSB()和 BL_STARTUP_CCS.s 在引导加载程序示例中, 它们是默认值,我没有对其进行修改,

    但我仍会尝试找出原因。

    RAY YANG

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

    此外、我曾尝试过将断点设置为调试、
    似乎没有响应、这是因为代码在 SRAM 中运行吗?

    RAY YANG

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

    尊敬的 Ray:

     加载应用程序固件后、如果要调试引导加载程序、则需要加载引导加载程序的符号。