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.

[参考译文] TMS320F280049:C28x STL 软件测试应用程序无法返回 PSA 值

Guru**** 2538930 points
Other Parts Discussed in Thread: C2000WARE, LAUNCHXL-F280049C

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1329689/tms320f280049-c28x-stl-software-test-application-fails-to-return-psa-value

器件型号:TMS320F280049
主题中讨论的其他器件:C2000WARELAUNCHXL-F280049C

您好!

我已经尝试运行 C28x_stl 库的测试应用程序、注意到只有 RAM 构建将成功运行测试组并返回"测试通过"结果。

但是、如果我运行闪存、FLASH_RELEASE 和 RAM_RELEASE、则测试将失败、因为 PSA 值与提供的黄金值不匹配。

我注意到以下行为。

RAM 释放

  • 例如,在 C28x_STL_LIB_runTestGroup ()中运行 RAM_RELEASE 编译
    • 对于 TG0、我可以看到黄金值被复制到指定的 RAM 地址;但是、只有 LSB 4位被复制到 dataBusPsaVal 变量、因此测试失败。

FLASH/FLASH_RELEASE

  • 或者、如果我运行闪存或 FLASH_RELEASE 构建、它会将 TG 数据从闪存复制到 RAM、但   dataBusPsaVal 和 addrBusPsaVal   始终返回零。

CCS 版本:10.3.1.00003  

编译器版本:TI v22.6.0.LTS

C2000Ware 版本:C2000Ware_4_02_00_00

硬件: LAUNCHXL-F280049C 评估板

您能解决这个问题吗? 谢谢。

此致、

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

    如果您在运行时没有断点、它们是否通过? 请注意、使用硬件断点可能会干扰 CSA 并导致它们返回错误的值(通常为0)。 对于 flash/flash_release 构建、我怀疑正在发生这样的情况。 如果用户需要一个断点来调试闪存构建、将一个软件断点(ESTOP0;)放置在代码中并重建此断点、然后查看这是否有所不同。

    不过、CCS 会自动对 RAM 中的代码使用软件断点、因此 RAM_RELEASE 可能不是问题。 您能否通过"Disassembly"窗口查看是否有任何缺失/错误?

    惠特尼

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

    如果我不放置断点、所有生成 现在都将返回 PASS result。

    因此我已经尝试将  F28004x_C28x_STL_release.lib 和  F28004x_C28x_STL_debug.lib 这两个预编译库添加到我自己的工程中 、但函数 C28x_STL_LIB_runTestGroup ()将始终返回 C28x_STL_Both_PSA_MISMATCH。  这是我尝试从测试应用程序中进行调试的主要原因。  

    在我自己的项目中、我有用于管理将 TG 数据从闪存复制到 RAM 的链接器文件、我可以看到发生了这种情况。 这是否与链接器文件相关? 我知道 RAMLS0在库中已硬编码以复制数据、并且我已经定义了将数据放入闪存的位置。  

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

    可能是链接器文件。 有几个部分需要放置在正确的位置:

    1.如前所述、所有测试组都需要在 LS0中从0x8000运行。

    2.这些 TEST_RAM_B*块需要占用 RAMLS2的这个部分。

        TEST_RAM_BM0      : origin = 0x009000, length = 0x000100 // Part of RAMLS2
        TEST_RAM_BL0      : origin = 0x009100, length = 0x000100 // Part of RAMLS2
        TEST_RAM_BH0      : origin = 0x009200, length = 0x000100 // Part of RAMLS2
        TEST_RAM_BSS      : origin = 0x009300, length = 0x000100 // Part of RAMLS2
        TEST_RAM_BL1      : origin = 0x009400, length = 0x000100 // Part of RAMLS2
    

    3. C28x_stl_s.asm 中的 C28x_STL_LIB_ASM_*函数需要置于 RAMLS4的起始位置。 由于它们是.TI.ramfunc 的一部分、因此您可能需要修改.cmd 文件以确保它们放置在正确的顺序。

        .TI.ramfunc     :
        {
            F28004x_C28x_STL_*.lib<c28x_stl_s.obj> (.TI.ramfunc) /* needs to be at the start of 0xA000*/
            *(.TI.ramfunc)
        }
                              LOAD = FLASH_BANK0_SEC4,
                              RUN  = RAMLS4,
                              LOAD_START(RamfuncsLoadStart),
                              LOAD_SIZE(RamfuncsLoadSize),
                              LOAD_END(RamfuncsLoadEnd),
                              RUN_START(RamfuncsRunStart),
                              RUN_SIZE(RamfuncsRunSize),
                              RUN_END(RamfuncsRunEnd),
                              PAGE = 0, ALIGN(4)

    基本上、为了保持 CSA 的一致性、启用 CSA 时发生的任何存储器访问(读取、写入、提取)都需要发生在完全相同的位置。

    惠特尼

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

    您好!  

    我已经按照建议为这些函数分配相同的内存位置、但仍然得到不匹配的 PSA 返回值。

    我可以通过电子邮件将我的项目链接器文件发送给您吗、您或许可以发现我错过的一些内容吗?

    非常感谢。

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

    萧如杰

    我已向您发送朋友请求。 当您接受链接后、应该可以向我发送一条私人消息、您可以在其中附加链接器文件。 这对您有用吗? 如果您也可以包含.map 文件、可能会有所帮助。

    惠特尼

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

    惠特尼、您好!

    是的、我收到了请求并收到了消息。 谢谢!

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

    谢谢、获得了文件。 我会看一下、明天再跟您联系。

    惠特尼

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

    我查看了您的文件。 它看起来与我在上面的消息中关于 C28x_STL_LIB_ASM_*函数放置的第3点相关。 在 F28004x 上、这些函数应位于以下地址中。

    0x0000a018 C28x_STL_LIB_ASM_BIST_initGroup0
    0x0000a000 C28x_STL_LIB_ASM_copyTestGroup
    0x0000a00c C28x_STL_LIB_ASM_runTestGroup

    惠特尼

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

    您是说我在链接器文件中缺少以下语句吗?

        {
            F28004x_C28x_STL_*.lib<c28x_stl_s.obj> (.TI.ramfunc) /* needs to be at the start of 0xA000*/
            *(.TI.ramfunc)
        }

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

    是的,这些行应该有助于强制将 C28x_STL_LIB_ASM_*函数放置在内存开头的 ramfunc 函数之前。

    惠特尼

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

    您能否确认我是否需要保留"FLASH_BANK0_SEC5 | FLASH_BANK0_SEC6 | FLASH_BANK0_SEC7"来存储 TG 数据? 由于我们的处理器耗尽闪存、我们无法承受丢失用于存储 TG 数据的3个闪存扇区的后果。

    我已经在链接器文件中包含了语句、但仍然得到 PSA 不匹配值。 还有其他可以尝试的东西吗? 谢谢!

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

    这些 TG 段主要是每个测试向量的 ASM 代码、因此它们必须存储在闪存中的某个位置。  不过、您可以更改正在使用哪些扇区。 它们不必特别位于 BANK0_SEC5-7中、因为它们会在运行前复制到 RAM。 您可以将它们移动到合适的任何位置。

    此外、您不必将整个扇区专用于 TG 代码。 例如、在下面、您可以看到 sec7中有空间可用于您的其他代码。

    在您的.map 文件中、您能确认 C28x_STL_LIB_ASM_*函数位于我提到的地址吗?

    惠特尼

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

    是的、我可以确认它们位于.map 文件中的地址。 TG 代码的使用与您的代码相同。

    0     0000a000  C28x_STL_LIB_ASM_copyTestGroup                                                                                                                                                                                                          
    0     0000a000  RamfuncsRunStart                                                                                                                                                                                                                        
    0     0000a00c  C28x_STL_LIB_ASM_runTestGroup                                                                                                                                                                                                           
    0     0000a018  C28x_STL_LIB_ASM_BIST_initGroup0    

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

    您是否在"Tools"->"Debugger Options"->"Program/Memory Load Options"设置(用于 CIO 或程序退出)中启用了任何断点? 如果是、您可以禁用它们吗? 您可能需要重新启动调试会话、以便设置在更新后生效。

    正如我之前提到的那样、你可以尝试使用库中的一个软件断点来尝试进行一些调试。 有趣的是、看看 PSA 值是0还是它们看起来像实际的 PSA 值、但只是不匹配黄金值。

    惠特尼