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.

[参考译文] TMS320F28388D:在不更改 GPIO 的情况下从闪存的两个不同扇区引导

Guru**** 2618455 points

Other Parts Discussed in Thread: TMS320F28388D

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1004926/tms320f28388d-boot-from-two-different-sectors-of-flash-without-changing-gpios

器件型号:TMS320F28388D

您好!

要从闪存的不同扇区引导 TMS320F28388D、我知道我应该更改 OTP 和 EMU 寄存器、当然我是这样做的。 我在闪存的两个不同扇区(扇区0和扇区8)中加载了两个不同的应用、并且我可以使用一个分配给 BSMP 的 GPIO 从这两个扇区成功引导 DSP。

这里我的问题是、如果在指定的引导扇区(例如扇区0)上写入了损坏的应用程序、DSP 是否可以在不更改 GPIO 或任何硬件更改的情况下自动将其自己的引导入口点更改为下一个入口点(例如扇区8)的启动入口点?

下面是我要实现的情形:

  1. 我使用扇区0的入口点构建应用程序1。
  2. 我使用扇区8的入口点构建应用程序2。
  3. 我使用闪存 API 复制相应扇区中应用1和2的十六进制版本。
  4. 我对 OTP 寄存器进行编程、以在扇区0和8上包含引导入口点。
  5. 我设置 GPIO、以便 DSP 从扇区0引导。
  6. 如果应用程序1 (在扇区0上)损坏、DSP 是否会(是否有办法)自动切换到从扇区8引导?

最棒的

Alex

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

    尊敬的 Alex:

    [引用 userid="475471" URL="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1004926/tms320f28388d-boot-from-two-different-sectors-of-flash-without-changing-gpios "]
    1. 如果应用程序1 (在扇区0上)损坏、DSP 是否会(是否有办法)自动切换到从扇区8引导?

    最棒的

    [/报价]

    此处的腐败定义是什么? 引导 ROM 代码不会对编程映像进行任何检查以了解代码的有效性、因此您需要在应用1中具有检查代码有效性的内容、如果无效、则跳转到应用2、但在本例中、我们必须执行此操作 假设正在检查代码其余部分有效性的代码未损坏。 我们有安全引导选项、其中引导代码在跳转到代码之前检查代码的有效性、但它没有在发生故障时跳转到另一个应用程序的功能。  

    此致、

    Vivek Singh

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

    您好、Vivek、

    感谢你的答复。 根据您的解释、如果有一个应用程序1可以检查代码的有效性、如果无效、则跳转到应用程序2、这对我很有用、可以解决我的问题。  

    因此、我考虑以下有关您解释的情形:

    1. 我使用扇区0的入口点构建应用程序1。
    2. 我使用扇区8的入口点构建应用程序2。
    3. 我使用闪存 API 复制相应扇区中应用1和2的十六进制版本。
    4. 我对 OTP 寄存器进行编程、以在扇区0和8上包含引导入口点。
    5. 应用程序1检查代码的有效性。 如果无效、请转至步骤6。  
    6. 应用1的一部分(根据您的解释、我假设此特定部分 未损坏)可以从应用2的入口点引导 DSP、而无需更改 GPIO 或任何硬件更改。

    如何实施步骤6? 是否有任何相关示例或文档?

    最棒的

    Alex

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="475471" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1004926/tms320f28388d-boot-from-two-different-sectors-of-flash-without-changing-gpios/3712909 #3712909"]

    如何实施步骤6? 是否有任何相关示例或文档?

    最棒的

    [/报价]

    当我说从应用程序2引导时、这意味着跳转到应用程序2的入口点。 在检查代码有效性时、有多种方法可以对其进行检查。 您可以存储黄金 CRC 并使用黄金 CRC 检查运行时 CRC。 我们还在闪存上具有 ECC、如果损坏是由于某些位翻转引起的、则会生成 ECC 错误。 我们的示例可能与您使用的用例不完全相同、但我们可能有 CRC 示例。 我可以咨询 SW 团队、然后再联系您。

    此致、

    Vivek Singh

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

    感谢 Vivek 的快速回复。  

    [引用 userid="19481" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1004926/tms320f28388d-boot-from-two-different-sectors-of-flash-without-changing-gpios/3712923 #3712923"]当我说从应用程序2启动时,它只是意味着跳转到应用程序2的入口点。

    我 不确定在  应用程序1运行时、我们到底可以如何跳转到应用程序2的入口点。 此外、当我们跳转到应用2的入口点时、这是否意味着 DSP 将从新入口点进行软复位和引导? 这可能会解决我的问题。 请 您进一步解释一下这是如何工作的? 任何其他链接/示例都非常有用。  

    最棒的

    Alex

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

    无软复位、因为软复位将强制引导入口点再次进入应用程序1。 在不更改引导模式引脚的情况下、我们无法跳转到不同的点、因此我建议了解决方法。 让我联系我们的引导 ROM 专家、以提供进一步的帮助。

    此致、

    Vivek Singh

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

    在应用程序1中、当您确定应用程序1已损坏时、您需要跳转到应用程序2入口点。 以下是实现该目的的参考代码、

    void (*f趣味_ptr)(void)=“Application 2 entry_addr”;

    (*FACY_PTR)();

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

    感谢 Vivek 和 Baskaran 的回复。 在我的应用1中、在我将应用2复制到闪存中(在扇区0 = 0x00080000)后、我执行了您提到的代码、以跳转到应用2。 但在执行此操作后、它不会从应用程序2引导、甚至不会运行应用程序2。 它始终停留在地址 0x82f38中、我不知道该地址是什么。

    您能不能指导我什么是问题,以及在应用程序1运行时如何从应用程序2引导? 也许我需要考虑一些问题。

    最棒的

    Alex

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

    请在这个问题上帮助我吗? 这项调查对我来说是紧急的。

    谢谢、
    Alex

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

    Alex、

    您是否能够连接到 CCS 并单步执行此代码以查看何时跳转到 地址 0x82f38? 您是否在应用程序中禁用 WD 以确保它不会超时并发出复位。

    此致、

    Vivek Singh

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

    您好、Vivek、

    感谢你的答复。  

    [引用 userid="19481" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1004926/tms320f28388d-boot-from-two-different-sectors-of-flash-without-changing-gpios/3716204 #3716204"]您是否在应用程序中禁用了 WD 以确保它不会超时并发出重置。

    我在主函数中调用的第一个函数是"sysctl_disableWatchdog()函数,该函数运行以下行:

    HWREGH (WD_BASE + SYSCTL_O_WDCR)|= SYSCTL_WD_CHKBITS | SYSCTL_WDCR_WDDIS;

    对吗?

    [引用 userid="19481" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1004926/tms320f28388d-boot-from-two-different-sectors-of-flash-without-changing-gpios/3716204 #3716204"]您是否能够连接到 CCS 并单步执行此代码以查看何时跳转到 地址 0x82f38?

    我在 main 函数中运行这两行:

    1- boot();

    2-(*Fun _PTR)();

    第一个代码将十六进制应用复制到闪存存储器的扇区0 (0x00080000)、第二个代码是 Baskaran 提到的代码、我必须使用该代码跳转到闪存存储器扇区0的开头(0x00080000)。 当我使用 CCS 调试模式运行此代码时、我可以看到存储器浏览器十六进制应用程序已成功复制到闪存中。 但是,在执行行“(*f趣味_ptr )();”之后,代码将停留在地址0x082F38上。

    最棒的

    Alex

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

    您好、Vivek、  

    请向我提供有关此问题的最新信息吗?

    谢谢、

    Alex

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

    您好!
    有人可以指导我解决这个问题吗? 已经过了2周、我没有收到您的回复。


    我只想确保:


    1-当当前代码正在闪存存储器的另一个入口点运行时、我可以从闪存存储器中所需的入口点"引导"DSP、而无需更改 GPIO 或进行任何硬件更改吗?
    2 -如果问题1的答案是肯定的、我如何才能做到这一点?

    (尽管您提到了我如何跳转到另一个入口点、但正如我之前在文章中提到的、它停留在地址 0x082F38中)。

    我期待收到你的回复。

    最棒的
    Alex

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

    更具体地说,我想补充以下内容:  

    您建议 选择跳转到另一个入口点。 我这么做了、但它卡在地址 0x082F38中。 我的问题:

    1-您能否解释更多内容或发送参考资料、以了解当处理器获得该地址时会发生或应该发生什么?

    2 -如果我们跳转到应用程序2的入口点、这是否意味着在加载应用程序1后、应用程序2将被加载、就好像它是 DSP 中唯一加载的应用程序一样?

    我期待你的答复。

    最棒的
    Alex

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

    您好、Vivek、


    我已经等你很多天了。 您是否希望更详细地了解您在之前的帖子中提到的解决方案?

    谢谢、
    Alex

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

    Alex、

    我已请求 响应您的查询。

    此致、

    Vivek Singh

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

    调用函数指针时、CPU 应开始执行应用程序2的代码。 控制是否达到应用程序2的主要功能?  

    0x082F38 -我不知道该地址在您的应用程序中对应的是什么。 如果您可以连接调试器并检查应用程序2的执行情况、这将很容易。

    2.如果您跳转到应用程序2,则两个应用程序仍将出现在闪存中。 但您的逻辑将发现应用1已损坏、并且将始终跳转到应用2。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="65565" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1004926/tms320f28388d-boot-from-two-different-sectors-of-flash-without-changing-gpios/3734355 #3734355")调用函数指针时,CPU 应开始执行应用程序2的代码。 控制是否到达应用程序2的主要功能?[/quot]

    它只是停留在闪存存储器的那个地址。

    [引用 userid="65565" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1004926/tms320f28388d-boot-from-two-different-sectors-of-flash-without-changing-gpios/3734355 #3734355]0x082F38 -我不知道该地址在您的应用程序中对应的是什么。 如果您可以连接调试器并检查应用程序2的执行情况、这将很容易。

    它是应用程序2复制到的 Flash 存储器中的地址。