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.

[参考译文] TMS320F28P650DH:flash_kernel_c28x_dual_ex1_c28x1

Guru**** 2459080 points
Other Parts Discussed in Thread: SYSCONFIG, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1503166/tms320f28p650dh-flash_kernel_c28x_dual_ex1_c28x1

器件型号:TMS320F28P650DH
Thread 中讨论的其他器件:SysConfigC2000WARE

工具/软件:

您好、专家。 我需要远程升级程序。 共有三个工程、分别是 boot、CPU1和 CPU2。 我当前的目标是编写引导项目。 目前、28P65项目分配如下:

引导工程-flash BANK0;

CPU2-FLASH BANK3+FLASH BANK4;

CPU1-FLASH BANK1;

对于启动项目:我用闪存替换了图1中的 CMD 文件,并修改了图2和图3中的汇编文件,但进行此类更改后程序无法运行。 有什么问题吗?

或者找到如图4所示的模板并使其在闪存中运行。 修改 CMD 文件、如图5所示、但图5中没有 CMD 文件或.asm 文件。

操作步骤:如果自己单独添加新的 CMD 文件和.asm 文件、是否像使用 CMD 文件开始:origin = 0x080000、length = 0x000002、并将其余数据段存储在闪存组0中? 无需修改 asm 文件。 添加 FLASH_API 函数、在 MAIN 函数中升级、 最后升级、跳转到 CPU1的地址。 不知道如何正确构建工程?

图1.

图2.

图3.

图4.

图5.

2.由于当前项目首先运行 CPU1、然后在 main 函数中调用此句子、如果引导项目结束并直接跳转到 CPU1的程序入口函数、我是否需要正确理解这一点

图6.

我不太了解3flash_kernel_c28x_dual_ex1_c28x1的过程。 它将主机的升级代码作为从设备接收、如图7所示。 此文件是 main 函数。 我可以直接引用此 sciGetFunction 吗? 我看到其中有许多命令。 我正在计划 SCI 接受升级程序并存储闪存?

图7.

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

    您好:

    对于启动项目:我用闪存替换了图1中的 CMD 文件,并修改了图2和图3中的汇编文件,但进行此类更改后程序无法运行。 有什么问题吗?

    -您不应修改 codestartbranch.asm 文件。 为什么不会分支到 main?

    如果 我 自己单独添加新的 CMD 文件和.asm 文件、是否像使用 CMD 文件开始:origin = 0x080000、length = 0x000002、并将其余数据段存储在闪存组0中?

    -你能澄清这个问题吗?

    由于当前工程首先运行 CPU1、然后在 main 函数中调用此句子、因此如果引导工程结束并直接跳转到 CPU1的程序入口函数、我是否需要正确理解这一点

    - CPU1应用程序负责引导 CPU2

    我可以直接引用此 sciGetFunction 吗?

    - 是的,这可以完成。

    此致、

    Alex

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

    您好、 专家

    1.flash_kernel_c28x_dual_ex1_c28x1用作引导工程。 此过程需要在 RAM 中运行、因此我想在闪存中运行。 但是、此过程没有运行闪存的选项、需要自行构建。 然后、我只需将 cmd 替换为28p65x_generic_flash_lnk_cpu1.cmd、并在图中选择它。 如图1所示、它可以存储在闪存中、对吗?是否需要任何其他配置?

    2.目标:使用 QT 软件自行编写上层计算机程序。 当 CPU2从上部计算机接收到升级命令时、它会重置看门狗并跳转到引导程序以执行远程程序下载。 在引导程序的 main.c 函数中、它直接接收上层计算机的十六进制数据流、最终跳转到 CPU1的入口地址。 CPU1启动 CPU2BOOT。 问题:如何在重置看门狗后直接进入引导项目? 在这种情况下、我不需要修改 CMD 文件或 codestartbranch。 执行 asm 文件直接输入引导项目的 main 函数

    图1.  

    由于引导工程、CPU1工程和 CPU2工程分别属于不同的闪存、如果 CPU1工程和 CPU2工程所属的闪存内容被修改、应如何重写? 我的理解:只需更改 CPU1-begin:origin =0X0A0000、CPU2-begin:origin =0X0E0000、如图2所示;该部分相应闪存块区域的修改如图2所示;对吗?

    图2.  

    图3.  

    4由于这个文件没有 SysConfig 文件、我将从该过程中复制一个文件、如图4所示。 是否需要任何其他配置?

    图4.  

    5.

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

    您好:

    1.您应该使用 28p65x_flash_api_lnk_cpu1.cmd、这包括从 RAM 运行闪存 API 函数的链接器指令。

    2.如果将器件设置为闪存引导并且正确配置了入口点,则引导项目将在重置后运行。

    3.是的,您只需更改开始位置,这样引导项目的入口点就不会被覆盖/擦除。

    4.此工程不需要 SysConfig 文件。

    此致、

    Alex  

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

    非常感谢您的答复。 有一些我不明白的部分

    1.您应该使用 28p65x_flash_api_lnk_cpu1.cmd、这包括从 RAM 运行闪存 API 函数的链接器指令。

    >> 28P65x_flash_api_lnk_cpu1.cmd 这是一个文件吗? 我找不到它。 我?问哪里可以找到它以及如何使用它

    2.如果将器件设置为闪存引导并且正确配置了入口点,则引导项目将在重置后运行。

    >>如何为此设备设置闪存引导?

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

    您好:

    1.此文件位于 C2000Ware SDK 中、路径= "C2000WARE_ROOT/device_support/f28p65x/common/cmd/28p65x_flash_api_lnk_cpu1.cmd"。 请注意、您可能必须修改闪存区域、以便分配给引导项目的闪存不会与 CPU1或 CPU2项目重叠。

    2.使用引导模式选择引脚设置闪存引导、并且可以通过修改 BOOTDEF 值来更改入口点(默认值0x80000)。   更多有关如何执行此操作的信息、请参阅 TMS320F28P65x 实时微控制器技术参考手册(修订版 B)第4章(ROM 代码和外设引导)。

    此致、

    Alex

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

    非常感谢您的答复。 最终实现:完成闪存刻录、包括擦除闪存和下载。 发布文档
    关于您提到的第一点、如图1所示、我创建 CPU1_FLASH 并添加 CMD 文件。
    2.由于引导项目存储 BANK0、因此更改点如图2所示;
    3.如图4所示、擦除闪存、因为引导项目存储 BANK0。 CPU1+CPU2存储 BANK1-BANK4;
    4.如图5所示,主函数增加了一个函数
    我可以问我写代码是否正确?

    程序编译错误显示在图2中?

    图1.

    图2.  

    图3.  

    图4.  

    图5.  

    2.使用引导模式选择引脚设置闪存引导、并且可以通过修改 BOOTDEF 值来更改入口点(默认值0x80000)。   更多有关如何执行此操作的信息、请参阅 TMS320F28P65x 实时微控制器技术参考手册(修订版 B)第4章(ROM 代码和外设引导)。

    >>关于您提到的第二点、在引导项目中、在 main.c 中设置 GPIO78=1和 GPIO84=1

    大家好、专家的 SCI 引导模式和 FLASHboot I 设置之间是否有任何差异? flash_kernel_c28x_dual_ex1_c28x1处于 SCI 引导模式、然后将代码复制到 RAM 中、然后写入闪存。 我不知道如何使用流程程序、也不知道在哪里进行分析

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

    您好:

    若要解决构建错误、请将库目录添加到链接器搜索路径、如下所示:

    引导引脚 GPIO 在外部设置、而不是在 main.c 中设置 如果内核位于闪存中、则您的流程可能如下所示:

    1.上电时、器件读取引导模式选择引脚(设置为闪存引导)、然后启动至闪存(引导项目)

    2.引导项目配置 SCI 并等待自动波特率锁定

    3.主机编程器将应用程序发送到引导工程、然后该工程将其更新、然后跳转到 CPU1工程

    此致、

    Alex

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

    非常感谢您的答复

    引导引脚 GPIO 在外部设置、而不是在 main.c 中设置 如果内核位于闪存中、则您的流程可能如下所示:

    1.上电时、器件读取引导模式选择引脚(设置为闪存引导)、然后启动至闪存(引导项目)

    >>引导程序转至闪存并进入入口点、即 code_start-begin-:origin = 0x080000;在此地址、无需跳转到另一个函数地址(接收上层计算机的数据流)。 直接在 Main.c 中接收上层计算机的数据流

    2.引导项目配置 SCI 并等待自动波特率锁定

    >>我配置了 SCIFFO 接收中断、FIFO 接收级别为1。 我没有配置自锁定、从上层计算机软件接收(由我自己写入)数据流、然后写入 FLASHAPI 函数。 我没有根据流程写下它-这是我正确的

    3.主机编程器将应用程序发送到引导工程、然后该工程将其更新、然后跳转到 CPU1工程

    此致、

    4.当前编译错误?

    5.flash_kernel_c28x_dual_ex1_c28x1

    我看了一下 sciGetFunction。 此功能与上层计算机之间的通信协议是否有任何文档? 如果我自己编写上部计算机软件、则需要此通信协议。 如果我自己编写通信协议、可以直接调用这些命令吗? CPU1_UNLOCK_Z1、ERASE_CPU1、ERASE_CPU1等 sciaAutobaudLock 用于通信的用途是什么?

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

    您好:

    2.我配置了 SCIFFO 接收中断、FIFO 接收级别为1。 我没有配置自锁定、从上层计算机软件接收(由我自己写入)数据流、然后写入 FLASHAPI 函数。 我没有根据流程写下它-这是我正确的

    -如果您知道您将提前使用什么波特率,您可以跳过自动波特率功能并直接配置 SCI 模块。 如果这样做、向内核在加载后准备好输入的主机发送某种确认/握手可能会很有用。

    -"写 FLASHAPI 函数"是什么意思?

    4、当前编译错误?

    -看看你的项目,我看到你已经添加了一些额外的文件。 您可能需要为这些段分配更多 RAM。

    5.该功能与上层计算机之间是否有通信协议的文档?  sciaAutobaudLock 用于通信的用途是什么?

    -请参阅 C2000微控制器的串行闪存编程(修订版 H) 、了解有关命令数据包和内核一般工作原理的更多信息。 如果您自己编写主机编程器/上层计算机软件、则只要数据包形成相同、就可以重复使用这些命令。

    - sciaAutobaudLock 将自动确定主机运行的波特率,然后配置 SCI 模块以匹配它。

    此致、

    Alex

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

    非常感谢您的答复。 我有一个问题、我无法弄清楚。 该工程中有三个工程、一个引导工程、一个 CPU1和一个 CPU2。  调试引导程序的过程: 将 CPU1和 CPU2工程下载到28P65芯片。 它们不运行后、退出。 然后、将启动项目下载到28P65芯片并运行它。     

           
    2.当前启动过程;引导跳转到 CPU1BEGIN 位置、然后 CPU1启动 CPU2、随后 CPU1和 CPU2在双核模式下运行


    如果调试 CPU1+CPU2代码并且程序不运行引导项目、则会直接进入 CPU1MAIN 函数并正常运行。

    如果 CPU1看门狗复位/CPU2看门狗复位、则 BEGIN 位置等于程序入口点:器件读取引导模式选择引脚(设置为闪存引导)、然后引导至闪存(引导项目);

    <<我必须正确理解

    <<I为什么 程序复位会进入引导项目的入口点而不是 CPU1项目的入口点?

    -"写 FLASHAPI 函数"是什么意思?

    <<用于擦除、写入和验证芯片的闪存区域

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

    您好:

    只是为了确保我的理解正确:您想知道为什么器件在复位后进入引导工程?

    使用引导模式选择引脚设置闪存引导、并且可以通过修改 BOOTDEF 值来更改入口点(默认值0x80000)。   更多有关如何执行此操作的信息、请参阅 TMS320F28P65x 实时微控制器技术参考手册(修订版 B)第4章(ROM 代码和外设引导)。

    此致、

    Alex