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.

[参考译文] TM4C1294NCPDT:哪款 TI 微型器件符合 USB DFU 标准?

Guru**** 2553450 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/946218/tm4c1294ncpdt-which-ti-micro-follows-usb-dfu-standard

器件型号:TM4C1294NCPDT

在跟踪 DFU/Debian 兼容性问题时、DFU-util 的作者告诉我、标准 DFU 程序不支持 TM4C1294的原因之一可能是 TM4C1294不严格遵循 DFU 标准、例如 www.ti.com/.../spmu301e.pdf 第29页

为了减小 USB 引导加载程序映像大小、不支持此状态。 USB 引导加载程序不会报告 DNBUSY、而是保持 DNLOAD_SYNC 状态、直到之前的数据被处理、然后在块编程完成后收到第一个 DFU_getStatus 请求时转换为 DNLOAD_IDLE。

我在之前检查了 TI 提供的 USB 引导加载程序示例、实际上 DNLOAD_SYNC 和 DNBUSY 共享同一个处理程序(以节省代码空间)

HandleRequestDnloadSync、// State_DNLOAD_SYNC
HandleRequestDnloadSync、// State_DNBUSY

和 HandleRequestDnloadSync 确实具有以下注释:"请注意、在此实现中、我们不支持 DNLOAD_BUSY 状态"

我想将其更改为符合标准、但是否有任何 TI 产品支持 DFU 标准、以便我可以使用其引导加载程序源作为了解如何实现该标准的起点? 如果没有 Tiva 产品支持它、我将查看其他器件、我只需仔细查看该流程即可节省时间。

感谢您的任何指示!

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

    尊敬的 David:

     我将把您对 DFU "标准"的评论转发给我们的 USB 专家。 就 Tiva 产品的 DFU 支持而言、TivaWare 引导加载程序和 boot_demo_USB 示例基本上就是这样。 如果这不适合您的应用、则可能需要参考其他器件。 我将让我们的专家就你的问题发表意见。

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

    尊敬的 David:

    我对 USB DFU 协议不太熟悉、在四处搜索之后、我发现 有关 DNBUSY 的信息有限、尽管我在 USB 规范中看到了它。 我在这里的直觉是、如果这是问题、那么我们会更快地听到它、但这是任何人第一次在 E2E 上发布有关该状态的消息。

    还发现了另一个 E2E 之前使用 DFU-util 的证据: https://e2e.ti.com/support/microcontrollers/other/f/908/p/637905/2361712#2361712

    这适用于 TM4C123x 器件、但 TM4C129x 也是可以的、因为 USB DFU 与它们没有区别(加上 TM4C129x 运行速度更快、因此不太可能需要 DNBUSY)。

    您使用的是 ROM 还是闪存引导加载程序? 您是否首先测试了引导加载程序是否在 Windows 环境中工作? 我问的原因是、闪存 USB 引导加载程序在 Windows 中存在枚举问题、但在2.2.0更新中未发现这种问题、因此如果您使用这种方法、那么您可能会在 Linux 中运行相同的程序。

    从我的角度来看、我不认为不支持状态是这里的根本原因、如果存在状态将立即解决问题。 也就是说、我对 Linux 并不是很熟悉。 我不知道您的环境是否可能以不同的方式使用 DFU-util、但我的第一个想法可能是使用 USB 分析器来检查问题是否是导致问题的真正原因。

    至于其他 TI MCU 和 DFU 支持、这不是我需要评论的知识。 我不确定其他哪些 MCU 支持 USB DFU。

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

    是的、引导加载程序在 Windows 下的 LMFlash 中工作得非常好、我将把123的引导加载程序与我在正式发布之前从 TI 获得的引导加载程序进行比较

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

    刚刚在 TM1294上尝试了闪烁、按照链接中列出的步骤操作、最后一步失败:

    Debian@BeagleBone:~/test/src ./DFU-util -D blinky.DFU
    DFU-util 0.9

    版权所有2005-2009 Weston Schmidt、Harald Welte 和 OpenMoko Inc.
    版权所有2010-2016 Tormod Volden 和 Stefan Schmidt
    此计划是免费软件、绝对不提供保修
    请向 sourceforge.net/.../报告错误

    匹配文件中的供应商 ID:1cbe
    匹配文件中的产品 ID:00ff
    DFU-util:无法打开 DFU 器件1cbe:00ff
    DFU-util:没有支持 DFU 的 USB 器件可用

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

    尊敬的 David:

    是否有任何方法可以查看您的 USB 端口以查看是否已识别 USB 设备?

    您还可以尝试通过以下方式调整闪存引导加载程序:

    1. 在 BL_usbfuncs.c 中将正确的时钟分频从7更改为3

    2.在 bl_config.h 中将页面大小更改为0x4000

    //
    //
    //闪存中单个可擦除页的大小。 这必须是电源
    //为2。
    //
    //取决于:无
    //不包括:无
    //要求:无
    //
    //*********
    #define FLASH_PAGE_SIZE 0x00004000
    

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

    在 BL_usbfuncs.c 中将正确的时钟分频从7更改为3  

    >>> 之后器件甚至不会显示在器件管理器中

    在 bl_config.h 中将页面大小更改为0x4000

    >>> 单靠这一点无法解决问题

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

    "在跟踪 DFU/Debian 兼容性问题时、DFU-util 的作者告诉我、标准 DFU 程序不支持 TM4C1294的原因之一可能是 TM4C1294不严格遵循 DFU 标准。"

    DFU 标准的真正问题、以及您为什么看不到它被普遍使用、是操作系统应该支持它的驱动程序、但 Windows、macOS 或 Linux 不存在"标准 DFU 驱动程序"。 这意味着对于固件更新的真正问题、有大量的半收集解决方案以及特定于供应商和产品的解决方案。

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

    尊敬的 David:

    嗯、这是一个朝错误方向的步骤。 很有趣 我们已经看到 Windows 10需要该功能。 对于 Linux、DFU 似乎可以在没有调整的情况下正常工作。 我想让查尔斯再仔细研究一下、但他在接下来的几天内无法做到。

    尊敬的 Andy:

    感谢您的观看、如果是这种情况、则可能是兼容性问题、尽管我不确定 TI MCU 会实现所有这些功能、或者向 TM4C 引导加载程序添加该功能有多困难。 表面看起来不是很复杂。

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

    谢谢、问题已解决。

    问题在于 TI CCS 创建的.bin 文件、尽管它可以与 TI 基于 Windows 的 LMFlash 完美配合使用、但它不是 DFU-util 所喜欢的格式

    因此、根据 DFU-util 作者的建议、我添加了后缀和前缀、并确认它具有正确的第一个字节、然后 DFU-util 将起作用、

    CP mytest.bin mytest.DFU
    /DFU-suffix -a ./mytest.DFU -v myvid -p mypid
    /DFU-prefix -s 0x4000 -A mytest.DFU
    OD -t x1 mytest.DFU | HEAD -2
    sudo ./DFU-util --device myvid:mypid --download ./mytest.DFU
    sudo ./DFU-util --download ./reset.DFU

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

    尊敬的 David:

    这至少更有意义。 感谢您的反馈、如果其他人有类似问题、我必须尝试并记住这一点。

    我想知道是否可以针对 bin 文件输出配置 CCS。 如果您可以描述文件的格式、您可能需要询问 CCS 团队哪些选项可用。