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.

[参考译文] TMS320F28P659DH-Q1:C2000微控制器论坛

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

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1468407/tms320f28p659dh-q1-c2000-microcontrollers-forum

器件型号:TMS320F28P659DH-Q1
Thread 中讨论的其他器件:C2000WARE

工具与软件:

你好。

我不熟悉 TI 微控制器、包括我正在使用的 TMS320F28P659。   我希望实现驻留在闪存中的引导加载程序。 我的理解是、在这个 MCU 上、引导加载程序可以从组0中的闪存执行、同时擦除和重新编程不同的闪存组。

我们的应用程序将通过 SCI 端口 A 从固件更新程序接收到一条串行命令、以使 MCU 复位、然后直接在闪存引导模式下调用引导加载程序。 硬件存在一个问题、因为硬件已经过硬接线、所以引导加载程序无法读取默认 SCI 引导引脚来知道它应该采用哪种模式引导、这就是它会直接引导至闪存引导模式的原因。 我们仅使用 CPU1、因此我不必将其纳入引导加载程序。 内部引导加载程序将启动从闪存运行的引导加载程序、它将验证闪存中的应用并从闪存执行该应用、或者接收到的引导加载程序将接收到启动固件更新的命令、此时它将跳转到从闪存组0中的闪存执行的闪存内核。

我们使用的器件上有5个闪存组被分配给 CPU1 (0-4)。 我想使用组0来包含引导加载程序代码。 组1将被分配给该应用程序。 到目前为止、该应用程序只适合一个存储体。

在我们的设置中、正常的引导过程是引导至从组1中的闪存运行的应用程序。 启动固件更新的唯一方法是通过闪存更新程序中的 SCI A 端口发出命令。 必须有一种方法可以确定引导是通过上电复位还是通过命令式重启来进入引导加载程序、以便执行闪存内核来进行固件更新。 此部分已被阻止、因为似乎不存在热启动标志可以存储在其中的寄存器或 NVM、引导加载程序可以读取此标志来指示它需要将闪存内核加载到 RAM 中并跳转到该 RAM。

要从应用程序重新启动 MCU、有多种可能:

1.软件复位-看起来相当于参考手册中的上电复位(通过 SIMRESET 寄存器)。
2.设置看门狗计时器,让其在短时间间隔后过期。
3. NMI 看门狗复位。 如果其他一些模块导致出现此问题、使用此功能不是一个好主意。
=
在上述两种情况下、原因的状态1和2都可以从寄存器中读取、但我需要一种方法来明确告知固件更新已重新启动。

我也不确定内部 bootrom 或其它启动代码是否完全清除了 RAM。 如果不是、我可以调整堆栈指针、使小 RAM 块未清除、以进行重新启动标志。

我目前在查看 C2000软件(C:\ti\c2000\C2000Ware_5_01_00_00\driverlib\f28p65x\examples\c28x_dual\flash_kernel)中的 flash_kernel 示例、但仅从 RAM 运行。 我需要一个在闪存中运行并从闪存执行 flash_kernel 的 bootrom 的有效示例。

到目前为止、我还没有找到针对我所使用的 MCU 的所有内容。

如果有任何帮助、将不胜感激。

此致、

Joel Estes

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

    您好、Joel:

    [报价 userid="628415" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1468407/tms320f28p659dh-q1-c2000-microcontrollers-forum 内部 Bootrom 将启动从闪存运行的引导加载程序、并且它将验证闪存中的应用并从闪存执行它、或者接收到一条启动固件更新的命令、此时它将跳转到从闪存组0中的闪存执行的闪存内核。[/QUOT]

    只是在同一个页面上-您让器件直接引导到闪存组0中的引导加载程序? 然后、它 根据接收到的 SCI 命令决定跳转到 SCI 闪存内核或应用程序。  

    [报价 userid="628415" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1468407/tms320f28p659dh-q1-c2000-microcontrollers-forum 我的理解是、在此 MCU 上、在擦除和重新编程其它闪存组的同时、引导加载程序可以从组0中的闪存执行。

    是的、这是正确的。  闪存 API 需要从未更新的闪存组运行。

    [报价 userid="628415" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1468407/tms320f28p659dh-q1-c2000-microcontrollers-forum ]]我需要一个在闪存中运行并从闪存执行 flash_kernel 的 Bootrom 的有效示例。

    遗憾的是、我们在 C2000Ware 中没有任何可满足 F28P65x 器件这些要求的有效示例。 但是、您可以通过修改闪存内核工程的链接器命令文件、将 SCI 闪存内核移植到从闪存而非 RAM 执行。

    此外、请查看 具有器件复位的 LFU 应用手册。 我知道这适用于 F28004x、具有两个应用程序版本(我会注意到只有一个应用程序版本存在风险)和组选择逻辑、但类似的原则也适用于您的情况。  

    1. 在组1中执行的应用程序接收 DFU SCI RX ISR 命令并分支到组0中的 SCI 闪存内核。  
    2. SCI 闪存内核擦除闪存组1、将十六进制格式的程序(采用相应的 SCI 引导格式)加载到闪存中、并验证程序。
    3. 然后将看门狗配置为进行复位。 最后、启用看门狗以进行复位、从而将器件复位到 闪存组1中重新引导。  

    您可以在 C2000Ware_X_XX_XX\driverlib\f28004x\exaples\flash\flashapi_ex3_live_firmware_update.c 中参考此流程的 F28004x 示例代码  

    如果我误解了您的要求或有任何其他问题、请告知我。

    此致!

    Matt

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

    我 假设这个问题已经解决、并关闭该主题、因为它已经持续了几周、没有 回复。