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.

[参考译文] TMS320F28069:引导加载程序:无法返回 DFU 模式。 (F28069)

Guru**** 2524550 points
Other Parts Discussed in Thread: TMS320F28069, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1123477/tms320f28069-bootloader-impossible-to-return-to-dfu-mode-f28069

器件型号:TMS320F28069
主题中讨论的其他器件: C2000WARE

您好!

我 实际上 在使用引导加载程序。

我能够在控制卡 F28069上运行引导加载程序和 BL_APP

我在我们的定制器件(TMS320F28069)中上传引导加载程序、运行 BL_APP。 (一切正常、我能够返回到 DFU 模式)

我在我们的定制器件中上传引导加载程序、加载我们的应用程序(它可以正常工作)、但在我无法返回 DFU 模式后。

对于我们的项目、我导入 C2000Ware 4_00_00库。

我有2个不同的问题。

问题1.

当我在调试模式下使用 Step into 时:  

对于 BL_APP:

对于自定义设备:  

图1,如果我跳转到函数 USBDDFUUpdateBegin,在 BL_APP 中,我们从函数的开头开始。

图2,如果我跳转到函数 USBDDFUUpdateBegin, 则在自定义设备中,我们从另一个函数开始。

为什么会这样附加?

问题2.

真正的问题是我无法返回到 DFU 模式。

您已附加反汇编代码。  

我不明白为什么在 BL_APP (对 USB 使用已弃用的文件)和 C 代码(使用 C2000WARE 4_00) 中、函数 不起作用

要将控制权返回到引导加载程序,我们有以下函数:  

bl_app:                                  ((((void (*.)(void)pBootEntry))();

我们的器件采用 C2000WARE 4_00 :            (*(void (*)(void))(*(uint32_t *) 0x2C))();

在此行代码进入非法中断,中断行 是(*)((((void (*)(void))(*(uint32_t *)0x2C)))))();

如果我更改0x2C 的值、则反汇编中没有任何变化。

(我知道引导加载程序位于地址 0x3D8000处的闪存 H 中)

有什么想法吗?

谢谢  

Alain。

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

    Alain、  

    定制器件的器件型号是多少? 它也是 F28069吗? CC 和定制器件是否具有相同的存储容量?

    Anu

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

    Anu、

    是的、定制器件型号为 F28069。 它们具有相同容量的存储器。 我为定制器件配置闪存存储器、与 BL_APP 相同。

    (不使用闪存 H:为引导加载程序保留)

    BL_APP 内存分配:  

    自定义器件存储器分配

    Alain。

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

    Alain、  

    引导加载程序和应用程序的 codestartbranch 函数位于何处?

    Anu

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

    Anu、

    引导加载程序的代码 START Branch 位于闪存 H 中

    应用程序

    闪存 A 到 G 中的某个位置:  

    e2e.ti.com/.../cmd-files.zip

    zip 文件包含(如果需要)

    • F28069_BL.cmd (引导加载程序 cmd、  原始、未 修改)
    • F28069_BL_app.cmd (TI 应用 cmd、   原始、未修改)
    • custom_device_.cmd

    Alain。

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

    Alain、  

    感谢您提供此信息。 后退一步、您能解释什么是"bootloader""bl_app"和"application"? 这听起来像是 BL_APP 和应用程序正在互换使用、这使得后续操作有点令人困惑。  

    该应用程序位于扇区 A-G 中、引导加载程序位于扇区 H 中、一旦应用程序正在运行并且您希望返回到引导加载程序、您在定制器件上无法执行此操作、但在 controlCARD 中能够执行此操作、对吗? 您能否尝试取消对链接器命令文件中的 codestart 段进行分组并自行分配该段、看看这是否会产生影响?

    Anu  

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

    Anu、

    引导加载程序从: C:\ti\c2000\C2000Ware_3_04_00_00\device_support\f2806x\Mware\boot_loader 导入

    BL_app 是从以下位置导入的: C:\ti\c2000\C2000Ware_3_04_00_00\device_support\f2806x\examples\c28\BL_app

    TI 建议运行引导加载程序: 请参阅 F2806x_USBBL_UG.pdf 手册。

    e2e.ti.com/.../F2806x_5F00_USBBL_5F00_UG.pdf

    (三

    应用程序位于扇区 A-G 中、引导加载程序位于扇区 H 中。是

    控制卡上可以使用 BL_APP (TI 的应用)返回 DFU 模式。

    定制器件上、使用 BL_APP (通过修改某些 PLL 参数/禁用石英...)返回 DFU 模式是可能的。

    --------

    通过处理  定制器件代码中 BL_APP 上的配置无法返回 DFU。 =>转到非法中断。

    --------

    我将应用程序放置在扇区 EFG 中、将引导加载程序放置在 H 中。我将 codestart 展开并将其分配给闪存 A。但没有发生任何变化。

    --------

    定制器件代码使用 C2000Ware 4.00库。

    引导加载程序和 BL_APP 使用 C2000Ware 3.6 库。

    但我相信库之间没有任何差异。 (我尝试将所有文件从4.0手动更改为3.6,但没有更改。)

    ----------------------------------------------------------------------

    在自定义器件上、我看到引导加载程序正在工作、然后他跳转到  正确地址的自定义器件代码 、但从不返回 DFU:

    要将控制权返回到 DFU 的行:             (*(void (*)(void)(*(uint32_t *) 0x2C))(); (我认为这是失败)

    我希望现在更清楚。

    谢谢。

    Alain。

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

    Alain、  

    您的定制代码中的器件和闪存初始化过程是什么? 它是否与 C2000Ware 中的示例一致?

    Anu

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

    Anu、

    我检查器件和闪存配置。

    闪存初始化在 F2806x_SYSCTRL.c 中完成、对于这两个代码(BL_APP 和定制代码)是相同的。

     我将 bp_app 配置复制到自定义代码中、以便具有相同的配置、

    没有变化;始终进入非法中断。

    要返回到引导加载程序、 应用程序调用 USBDDFUUpdateBegin 函数。

    BL_APP 反汇编(工作)

    自定义代码 反汇编( 不起作用)

    也许它会有所帮助。

    ------------------------------

    在汇编模式下使用 STEP  

    Alain。

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

    LCR 语句中 XAR7的内容是什么? 在自定义软件运行过程中、USBUpdate 函数是否会被覆盖? 我还会尝试将已初始化和未初始化的存储器段间距、以确保没有重叠。  

    Anu

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

    Anu、

    感谢您花时间思考我的问题和您的回答。

    --------------------------------------

    1) 1) XAR7内容

    对于 BL_APP:  

    XAR7 = 0x003D8EDE

    在内存浏览器中:  

    对于自定义代码:  

    XAR7 = 0x4EFEFED

    在内存浏览器中:  

    2) USBUpdate

    我认为 USBUpdate 功能不会被覆盖。

    我对引导加载程序进行编程(导出3d800日期页地址)。

    我在不擦除闪存 H 扇区的情况下对定制代码进行编程( 导出日期页地址为3d800)

    数据匹配、因此在执行引导加载程序的闪存 H 中没有变化。

    3) 闪存间隔

    我尝试更改闪存中的间距。

    FLASHA     :origin = 0x3F4000,length = 0x003E80

    FLASHB:origin = 0x3F0000,length = 0x004000

    FLASHC:origin = 0x3EC000,length = 0x004000

    FLASHD     :origin = 0x3E8000、length = 0x004000

    FLASHEFG     :origin = 0x3DC000、length = 0x009C40

    BL_FH     :origin = 0x3D8000,length = 0x002000

    现在有足够的空间来确保没有重叠。 这不会改变任何东西。

    --------------

    此外、对于 BL-APP 代码、通过在函数末尾单步执行汇编以将控制权返回到引导加载程序、我们将采用3d8ede。 我想应用程序将会跳转到启动引导加载程序的3d800。 这也是我不理解的。

    ------------------------

    最后、在 XAR7内容中、应用程序会跳转到一个空值。 这就是问题所在。 但是、他为什么这么做、以及价值是如何变化的?

    LCR 菜单是什么?

    Alain

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

    Alain、  

    请参阅 C28 ISA 以了解 LCR 命令: https://www.ti.com/lit/ug/spru430f/spru430f.pdf?ts=1660167428428&ref_url=https%253A%252F%252Fwww.google.com%252F

    是否可以尝试添加 asm 行以直接跳转到更新函数? 我不知道为什么反汇编程序会将您转至未知位置。  

    此外、对于闪存间距、请确保链接器命令文件的 SECTIONS 区域在映射到已初始化和未初始化段的扇区方面不会重叠。  

    Anu

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

    Anu、

    借助于 LCR 命令、

     

    您能否向我提供有关如何使用 ASM 线路的文档?

    我认为这是我在论坛上看到的:

    asm ("  mov  R12、#0x200000");

        asm ("  blx  R12");

    但我并不真正理解所有这些。

    如果您有一些文档,我将不胜感激。

    ----

    我应该添加 asm 行来替换此行: (*(void (*)(void)(*(uint32_t *) 0x2C));是这样吗?

    --------------

    我认为,我在上一篇文章中说过,没有重叠之处。

    ------------------------------------

    在我的第一篇文章中,我向您询问了有关调试模式和分步模式(问题1)的一些信息。 您是否知道如何解决此问题?

    ----------

    我从今天到8月30日休假。

    我届时将使用引导加载程序。

    感谢您不要结束本主题。

    感谢你的帮助。

    Alain。

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

    Alain、  

    有关内联汇编语言的使用、请参阅 https://www.ti.com/lit/ug/spru514s/spru514s.pdf 的第164页

    [引用 userid="403411" url="~/support/microcontrollers/C2000-microcontrollers-group/CC2000/f/C2000-microcontrollers-forum/1123477/tms320f28069-bootloader-noss-to returned-to-DFU-mode-f28069/4176433#4176433"]我应该添加行(*  void (*(0x2c)*(doid)(/int):(*(()((void*)

    可以、您可以直接分支到 DFU 更新函数。

    对于问题1、我认为内联汇编代码可能有助于解决此问题。  

    Anu