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.

[参考译文] TMS320F2.8075万:USB启动模式

Guru**** 2589245 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/660045/tms320f28075-usb-boot-mode

部件号:TMS320F2.8075万
主题中讨论的其他部件:C2000WARE

你好,

我正在寻找一种使最终用户能够更新固件的方法。 与大多数人一样,最好通过USB连接

准备好USB电缆。 据我所见,2.8075万具有内置的USB引导加载程序,其工作方式与SCI类似

我已成功使用了引导加载程序,这是一个好消息,直到我看到启用USB引导模式时,需要写入

至OTP的BOOTCTRL寄存器。 据我所了解,这意味着一旦选择USB启动模式,就不可能

再次引导至闪存。 这会使USB启动模式完全无用。 当然,您希望能够更改引导模式

通过写入非易失性寄存器(例如闪存),将设备重置为USB引导模式。 固件

更新已完成您要改写该寄存器,以便在再次重置设备之前将引导模式更改为闪存。

我想不出有任何充分的理由使BOOTCTRL的注册成为OTP。

除了编写存储在闪存中的我自己的引导加载程序应用程序之外,是否还有其他解决方案可以解决此问题?

此致,

斯坦利

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

    您无需更改BOOTCTRL引导模式设置即可返回到闪存引导。 使用USB bootloader (以及其他两个可能的默认选项Parallel和SCI bootloader),如果收到的消息的第一个数据字不包含正确的密钥,它将退出bootloader并引导至闪存。
    如果要查看代码,引导装载程序源位于C2000Ware中。

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

    感谢Chris的快速响应。

    也许我错过了一些东西,但肯定要通过USB接收数据字,一定有一些东西

    已通过USB连接到设备。 因此,在没有连接任何设备且BOOTCTRL已设置的情况下

    因此,Get Boot Mode (获取引导模式)为USB,设备将进入USB引导模式,而不执行任何操作。

    是否有一个我不知道的超时,在超时后,它会启动到闪存?

    此致,

    斯坦利

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

    正确,它将等待USB接收缓冲区填满,因此需要连接。 如果您不想连接任何内容并引导至闪存,则最好选择在闪存中实施引导加载程序。

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

    感谢您确认我的怀疑Chris。

    如果BOOTCTRL不是OTP,那么所有的Get Boot模式选项似乎都更有用。 否则,您将拥有所有这些内置的引导加载程序,这些加载程序非常有用,但在许多情况下都是无用的。

    是否可以从用户应用程序跳至引导ROM而无需重置? 如果是这样,我可以在通过USB连接PC时跳转到ROM中的USB引导加载程序的启动位置,我想启动固件更新。

    此致,

    斯坦利

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

    很遗憾,这对您当前的情况没有帮助,但这些因素导致了我们最新设备上的引导自定义改进。 如果您感兴趣: http://www.ti.com/lit/spraca2

    是的,您可以在应用程序中从ROM调用USB引导加载程序。 将C2000Ware中提供的ROM符号库包含到项目中,然后可以使用“USB_Boot()”函数。 有关参数和流量,请参阅源代码。

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

    谢谢Chris,

    我将尝试按照您的建议加载ROM符号。 我已经通过使用EMO_BOOTCTRL寄存器验证了USB引导加载程序的工作情况,而我现在连接了仿真器,希望我只需要将我的程序跳到正确的ROM位置。

    此致,

    斯坦利

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的,我想我会在这里记录这件事,以防其他人感兴趣。 我将ROM符号库F2837xRevB_c1bootROM_BootROMSymbols_fpu32.lib包含在我的项目中。
    我还必须包括c1_bootrom.h
    出现了一些问题,因为C2000Ware中提供的代码似乎是从2837x复制的,
    因此,在我将它们更改为引用正确的2807x标头之前,这些包含不起作用。
    一旦所有的引用都被整理好并进行编译,我添加了以下内容:
    USB_Boot(0x0C5A);-据我从源代码中得知,参数未使用,可能是任何值

    运行此代码时,检测到USB设备,我可以启动引导加载过程,但只要快闪API即可
    加载完成后,设备将断开连接,过程将中断。 我发现这是真的
    加载闪存API后,继续我的项目中的下一行代码,而不是跳到开头
    RAM中的闪存API。 我刚刚在地址0x00的RAM开头添加了一个跳转,解决了这个问题。

    因此我的代码如下所示:
    USB_Boot(0x0C5A);
    ASM (" lb 0x00");